b43legacy: fix bcm4303 crash
PATCH 1/1 b43legacy: fix bcm4303 crash
This should fix an hard crash which happened upon driver loading on bcm4303 rev. 2 devices. The bug was originally reported here:
https://bugzilla.redhat.com/show_bug.cgi?id=384981.
Please test.
This won't make bcm4303 rev. 2 devices working anyway, there still are some issues with initial values which I'm trying to fix.
Signature · 2 lines
Ciao Stefano
Quoted 7 lines · On Saturday 15 March 2008 19:01:21 Stefano Brivio wrote:
This should fix an hard crash which happened upon driver loading on bcm4303 rev. 2 devices. The bug was originally reported here:
https://bugzilla.redhat.com/show_bug.cgi?id=384981.
Please test.This won't make bcm4303 rev. 2 devices working anyway, there still are some issues with initial values which I'm trying to fix.
-ENOPATCH? :)
Signature · 1 line
Greetings Michael.
Quoted 4 lines · On Sat, 15 Mar 2008 19:01:21 +0100 Stefano Brivio <[email protected]>…
This should fix an hard crash which happened upon driver loading on bcm4303 rev. 2 devices. The bug was originally reported here:
https://bugzilla.redhat.com/show_bug.cgi?id=384981.
Please test.
Ehr, sure. :/ Here it comes:
---
drivers/net/wireless/b43legacy/main.c +3 -10
@@ -3047,7 +3047,6 @@ static void b43legacy_wireless_core_exit }ssb_device_disable (dev->dev,0 ); -ssb_bus_may_powerdown (dev->dev->bus); }static void prepare_phy_data_for_init (struct b43legacy_wldev *dev)
@@ -3214,7 +3213,6 @@ err_kfree_tssitbl: err_kfree_lo_control:kfree (phy->lo_control); phy->lo_control =NULL ; -ssb_bus_may_powerdown (bus);B43legacy_WARN_ON (b43legacy_status (dev) != B43legacy_STAT_UNINIT);return err; }
@@ -3534,7 +3532,7 @@ static int b43legacy_wireless_core_attac err =b43legacy_phy_versioning (dev);if (err) - goto err_powerdown; + goto out;/* Check if this device supports multiband. */ if (!pdev || (pdev->device != 0x4312 &&
@@ -3560,10 +3558,10 @@ static int b43legacy_wireless_core_attac err =b43legacy_validate_chipaccess (dev);if (err) - goto err_powerdown; + goto out; err =b43legacy_setup_modes (dev, have_bphy, have_gphy);if (err) - goto err_powerdown; + goto out;/* Now set some default "current_dev" */ if (!wl->current_dev)
@@ -3573,14 +3571,9 @@ static int b43legacy_wireless_core_attacb43legacy_radio_turn_off (dev,1 );b43legacy_switch_analog (dev,0 );ssb_device_disable (dev->dev,0 ); -ssb_bus_may_powerdown (bus); out:return err; - -err_powerdown: -ssb_bus_may_powerdown (bus); -return err; }static void b43legacy_one_core_detach (struct ssb_device *dev)
drivers/ssb/main.c +4 -0
@@ -1082,6 +1082,10 @@ int ssb_bus_may_powerdown(struct ssb_bus goto out; cc = &bus->chipco; + +if (cc->dev->id.revision <5 ) + goto out; +ssb_chipco_set_clockmode (cc,SSB_CLKMODE_SLOW ); err =ssb_pci_xtal (bus,SSB_GPIO_XTAL |SSB_GPIO_PLL ,0 );if (err)
Signature · 2 lines
Ciao Stefano
Quoted 75 lines · On Saturday 15 March 2008 19:08:36 Stefano Brivio wrote:
Quoted 4 lines · On Sat, 15 Mar 2008 19:01:21 +0100 Stefano Brivio <[email protected]>…
This should fix an hard crash which happened upon driver loading on bcm4303 rev. 2 devices. The bug was originally reported here:
https://bugzilla.redhat.com/show_bug.cgi?id=384981.
Please test.Ehr, sure. :/ Here it comes:
Signed-off-by Stefano Brivio <[email protected]>---
Index:wireless-testing/drivers/net/wireless/b43legacy/main.c
===================================================================drivers/net/wireless/b43legacy/main.c +3
-10@@ -3047,7 +3047,6 @@ static void b43legacy_wireless_core_exit }ssb_device_disable (dev->dev,0 ); -ssb_bus_may_powerdown (dev->dev->bus); }static void prepare_phy_data_for_init (struct b43legacy_wldev *dev)@@ -3214,7 +3213,6 @@ err_kfree_tssitbl: err_kfree_lo_control:kfree (phy->lo_control); phy->lo_control =NULL ; -ssb_bus_may_powerdown (bus);B43legacy_WARN_ON (b43legacy_status (dev) != B43legacy_STAT_UNINIT);return err; }@@ -3534,7 +3532,7 @@ static int b43legacy_wireless_core_attac err =b43legacy_phy_versioning (dev);if (err) - goto err_powerdown; + goto out;/* Check if this device supports multiband. */ if (!pdev || (pdev->device != 0x4312 &&@@ -3560,10 +3558,10 @@ static int b43legacy_wireless_core_attac err =b43legacy_validate_chipaccess (dev);if (err) - goto err_powerdown; + goto out; err =b43legacy_setup_modes (dev, have_bphy, have_gphy);if (err) - goto err_powerdown; + goto out;/* Now set some default "current_dev" */ if (!wl->current_dev)@@ -3573,14 +3571,9 @@ static int b43legacy_wireless_core_attacb43legacy_radio_turn_off (dev,1 );b43legacy_switch_analog (dev,0 );ssb_device_disable (dev->dev,0 ); -ssb_bus_may_powerdown (bus); out:return err; - -err_powerdown: -ssb_bus_may_powerdown (bus); -return err; }static void b43legacy_one_core_detach (struct ssb_device *dev)Index:
wireless-testing/drivers/ssb/main.c
===================================================================
drivers/ssb/main.c int ssb_bus_may_powerdown(struct ssb_bus · line 1091
Quoted 10 lines
drivers/ssb/main.c +4
-0@@ -1082,6 +1082,10 @@ int ssb_bus_may_powerdown(struct ssb_bus goto out; cc = &bus->chipco; + +if (cc->dev->id.revision <5 ) + goto out; +ssb_chipco_set_clockmode (cc,SSB_CLKMODE_SLOW ); err =ssb_pci_xtal (bus,SSB_GPIO_XTAL |SSB_GPIO_PLL ,0 );if (err)
Note that this is not the final patch, yet. So please just test, but not apply it to the tree.
Signature · 1 line
Greetings Michael.
PATCH v2 1/1 b43legacy: fix bcm4303 crash
This should fix an hard crash which happened upon driver loading on bcm4303 rev. 2 devices. The bug was originally reported here:
https://bugzilla.redhat.com/show_bug.cgi?id=384981.
Please test.
---
Sorry, I forgot to run 'quilt refresh'.
drivers/ssb/main.c +6 -0
@@ -1082,6 +1082,12 @@ int ssb_bus_may_powerdown(struct ssb_bus goto out; cc = &bus->chipco; + +if (!cc->dev) + goto out; +if (cc->dev->id.revision <5 ) + goto out; +ssb_chipco_set_clockmode (cc,SSB_CLKMODE_SLOW ); err =ssb_pci_xtal (bus,SSB_GPIO_XTAL |SSB_GPIO_PLL ,0 );if (err)
Signature · 2 lines
Ciao Stefano