Holders Barcelona produced a second-half blitz to come from behind and beat Athletic Bilbao 3-1 to book a place in the King's Cup semi-finals after Atletico Madrid crashed out in a shock 3-2 defeat by Celta Vigo.
Inaki Williams put Bilbao ahead after 12 minutes against a lacklustre Barca who held a 2-1 lead from the first leg.
The Catalan side woke up in the second half with in-form Luis Suarez knocking in the equaliser. A Gerard Pique header after 81 minutes put Barca ahead and Neymar cracked in a drive in stoppage time.
"We went out with a good advantage but then conceding made it complicated for us," Suarez told reporters.
"It was a poor first half from us but then we went out (for the second half) with a different attitude and that made the difference."
Barcelona were missing Arda Turan while Sergio Busquets and Andres Iniesta were also only fit enough for the bench, so coach Luis Enrique started with Javier Mascherano and Sergio Roberto in midfield.
The home side were unsettled by Bilbao’s pressing and Williams latched on to a defence-splitting pass from Aritz Aduriz to put them ahead with a clinical finish.
Barca were far from their best but they clicked into gear after the break with Suarez getting his 30th goal of the season from close range having been found by Lionel Messi.
Barca went close to scoring again through Neymar and Pique before the latter headed home a Dani Alves cross and a minute into stoppage time Neymar found the top corner with a left-foot strike from the edge of the area.
Pablo Hernandez scored twice for Celta to stun Atletico who lie second in La Liga.
The first leg had finished 0-0 but the return was a feast of attacking football in which Celta showed the greater cutting edge.
Hernandez nodded home after 22 minutes and although Antoine Griezmann pounced on a rebound to equalise, John Guidetti struck to restore the visitors' advantage after 56 minutes.
Celta extended their lead through another Hernandez header and Atletico could only pull one goal back through substitute Angel Correa nine minutes from time.
Atletico coach Diego Simeone again left striker Jackson Martinez on the bench with Luciano Vietto partnering Griezmann in attack.
Both sides went into the game struggling for goals with Atletico’s 0-0 draw against Sevilla on Sunday costing them the lead in La Liga.
Atletico's Koke struck an early shot just wide before Celta took a surprise lead with Hernandez given space to head in a Fabian Orellana cross.
Griezmann slotted home after a Yannick Carrasco shot was parried into his path by Blanco but Celta took charge in the second half.
Guidetti powered home a 25-metre drive and Correa struck the crossbar at the other end before Hernandez got his second with a header from Hugo Mallo's cross.
Correa finished clinically after a fine run but Celta held out to reach the semi-final of the cup for the first time in 15 years.
La Liga: Barca back on top after Messi stunner
La Liga: After Sevilla draw, Atletico cede top spot to Barca
Real Madrid will not boost squad ahead of ban
Barca ease into King's Cup quarters with derby win
'Real Madrid will have to fight for the league until the end'