Southampton secured promotion to the Barclays Premier League with a 4-0 win over Coventry City in front of a jubilant sell-out crowd at St Mary’s.
After enduring a nervy start in which Coventry created chances, Southampton took control of their fate with two goals in three minutes.
Billy Sharp stuck out a toe to turn Adam Lallana’s volleyed shot past Joe Murphy in the 16th minute, and moments later Jose Fonte’s stooping header found the net to make it 2-0.
When Jos Hooiveld lashed in a third just before the hour mark and Lallana notched a fourth moments later, the party got under way.
That meant West Ham had to settle for third place even as a Carlton Cole brace sank Hull 2-1 at Upton Park.
Cole headed in Matt Taylor’s cross late in the first half, and then turned in Henri Lansbury’s pass early in the second.
Corry Evans scored a header for Hull with nine minutes to go and Richard Garcia thought he had a late equaliser, but it was ruled out for offside
Cardiff wrapped up the final play-off spot, but made their fans sweat first before beating Crystal Palace 2-1.
They fell behind at Selhurst Park when Wilfried Zaha linked up with Darren Ambrose to score a fine goal on the break after 13 minutes.
Cardiff struggled to impose themselves but Peter Whittingham scored a free-kick from a tight angle with his trusty left foot eight minutes into the second half and Don Cowie then volleyed in a second after the hour mark to turn it around.
Middlesbrough had needed Cardiff to drop points and to beat Watford, but got neither as they went down 2-1 at Vicarage Road, where Troy Deeney snatched an 88th-minute winner moments after Marvin Emnes had cancelled out Chris Iwelumo’s close-range finish.
Champions Reading fell to a 2-0 defeat at Birmingham, substitute Adam Rooney firing in the opener after 24 minutes and Wade Elliott making sure with a 75th minute penalty after a handball by Jay Tabb.
The result meant only three points separated the Royals from third-placed West Ham at the season’s finish.
The win lifts Birmingham into fourth above Blackpool, who were held 2-2 at Millwall.
Andy Keogh put the hosts in front after 12 minutes, but Ian Evatt headed Blackpool level quarter of an hour later, and Nouha Dicko grabbed the winner 20 minutes from time.
However, Harry Kane’s 83rd-minute strike denied Blackpool fourth place.
Leicester’s season has not gone to plan, but they at least signed off with a win, beating Leeds 2-1 at Elland Road.
Martin Waghorn put them ahead late in the first half, and although Danny Webber’s 82nd minute strike looked to have earned the hosts a draw, Harry Panayiotou won it with almost the last kick of the game.
Rock-bottom Doncaster ended their spell in the Championship with a 3-1 defeat at home to Ipswich.
Tommy Smith headed the visitors in front after 10 minutes and Ryan Stevenson scored from range after half an hour, his shot striking the bar and bouncing back but only after crossing the line.
Fabien Robert pulled one back for Rovers but it was not enough to prevent a 26th defeat of the season as a Jason Scotland penalty 11 minutes from time gave Ipswich the breathing room they would need before Habib Beye’s last-minute strike sent Rovers fans home with some consolation.
Portsmouth, who will join Doncaster in League One next season, lost 2-0 to Nottingham Forest who got a late brace from Dexter Blackstock, while there was a stalemate between Barnsley and Brighton at Oakwell.
Danny Ings’ 76th-minute strike looked like giving Burnley a 1-0 win over Bristol City but Ryan Taylor levelled five minutes later to earn a point.
Derby and Peterborough shared the spoils in a 1-1 draw, with David Ball’s 82nd-minute goal cancelling out Theo Robinson’s early opener.