]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
b43legacy: avoid PPC fault during resume
authorLarry Finger <Larry.Finger@lwfinger.net>
Tue, 24 Nov 2009 00:42:36 +0000 (18:42 -0600)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 18 Dec 2009 22:05:16 +0000 (14:05 -0800)
commit 316a4d966cae3c2dec83ebb1ee1a3515f97b30ff upstream.

For PPC architecture with PHY Revision < 3, a read of the register
B43_MMIO_HWENABLED_LO will cause a CPU fault unless b43legacy_status()
returns a value of 2 (B43legacy_STAT_STARTED); however, one finds that
the driver is unable to associate after resuming from hibernation unless
this routine returns 1. To satisfy both conditions, the routine is rewritten
to return TRUE whenever b43legacy_status() returns a value < 2.

This patch fixes the second problem listed in the postings for Red Hat
Bugzilla #538523.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/net/wireless/b43legacy/rfkill.c

index 8783022db11e43e24ae12a641bd040a5aea38b07..d579df72b783566b557f60d66c87ed167bc46c82 100644 (file)
@@ -34,6 +34,13 @@ bool b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev)
                      & B43legacy_MMIO_RADIO_HWENABLED_HI_MASK))
                        return 1;
        } else {
+               /* To prevent CPU fault on PPC, do not read a register
+                * unless the interface is started; however, on resume
+                * for hibernation, this routine is entered early. When
+                * that happens, unconditionally return TRUE.
+                */
+               if (b43legacy_status(dev) < B43legacy_STAT_STARTED)
+                       return 1;
                if (b43legacy_read16(dev, B43legacy_MMIO_RADIO_HWENABLED_LO)
                    & B43legacy_MMIO_RADIO_HWENABLED_LO_MASK)
                        return 1;