diff options
author | Russell King <rmk@arm.linux.org.uk> | 2005-11-18 12:57:55 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-11-18 13:10:30 -0500 |
commit | e52542443aa9be15439e9879baf6d41b290e94db (patch) | |
tree | 840fb2eb41713e75b9b8ba82e3961f71530447e1 /drivers/net/smc91x.c | |
parent | 5d0571d915f3e281f151df9a18a6a0be5a57c4b0 (diff) |
[PATCH] smc91x: fix bank mismatch
The smc91x driver relies upon register bank 2 being selected whenever
the interrupt handler is called. This isn't always so, especially if
we have a link change event during PHY configuration.
This results in register bank 0 being selected when the interrupt
handler is called, causing the wrong registers to be read for the
IRQ mask and status. In turn, this causes us to spin with a
permanently asserted IRQ.
The patch ensures that smc_phy_configure always exits with register
bank 2 selected.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers/net/smc91x.c')
-rw-r--r-- | drivers/net/smc91x.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c index 1021108e9a25..28bf2e69eb5e 100644 --- a/drivers/net/smc91x.c +++ b/drivers/net/smc91x.c | |||
@@ -1212,6 +1212,7 @@ static void smc_phy_configure(void *data) | |||
1212 | smc_phy_check_media(dev, 1); | 1212 | smc_phy_check_media(dev, 1); |
1213 | 1213 | ||
1214 | smc_phy_configure_exit: | 1214 | smc_phy_configure_exit: |
1215 | SMC_SELECT_BANK(2); | ||
1215 | spin_unlock_irq(&lp->lock); | 1216 | spin_unlock_irq(&lp->lock); |
1216 | lp->work_pending = 0; | 1217 | lp->work_pending = 0; |
1217 | } | 1218 | } |