diff options
author | Larry Finger <Larry.Finger@lwfinger.net> | 2007-01-12 13:08:50 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2007-01-18 04:29:23 -0500 |
commit | 10764889c6355cbb335cf0578ce12427475d1a65 (patch) | |
tree | a6f0dcfd1e14a7fabf32991bc3b6cc58d376f205 /drivers/net | |
parent | a8b3485287731978899ced11f24628c927890e78 (diff) |
[PATCH] bcm43xx: Fix failure to deliver PCI-E interrupts
The PCI-E modifications to bcm43xx do not set up the interrupt vector
correctly. Tested with BCM4311 (PCI-E) on x86_64 and BCM4306 (PCI) on i386.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_main.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c index 2ec2e5afce67..91b752e3d07e 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c | |||
@@ -2701,8 +2701,8 @@ static int bcm43xx_probe_cores(struct bcm43xx_private *bcm) | |||
2701 | sb_id_hi = bcm43xx_read32(bcm, BCM43xx_CIR_SB_ID_HI); | 2701 | sb_id_hi = bcm43xx_read32(bcm, BCM43xx_CIR_SB_ID_HI); |
2702 | 2702 | ||
2703 | /* extract core_id, core_rev, core_vendor */ | 2703 | /* extract core_id, core_rev, core_vendor */ |
2704 | core_id = (sb_id_hi & 0xFFF0) >> 4; | 2704 | core_id = (sb_id_hi & 0x8FF0) >> 4; |
2705 | core_rev = (sb_id_hi & 0xF); | 2705 | core_rev = ((sb_id_hi & 0xF) | ((sb_id_hi & 0x7000) >> 8)); |
2706 | core_vendor = (sb_id_hi & 0xFFFF0000) >> 16; | 2706 | core_vendor = (sb_id_hi & 0xFFFF0000) >> 16; |
2707 | 2707 | ||
2708 | dprintk(KERN_INFO PFX "Core %d: ID 0x%x, rev 0x%x, vendor 0x%x\n", | 2708 | dprintk(KERN_INFO PFX "Core %d: ID 0x%x, rev 0x%x, vendor 0x%x\n", |
@@ -2873,7 +2873,10 @@ static int bcm43xx_wireless_core_init(struct bcm43xx_private *bcm, | |||
2873 | sbimconfiglow = bcm43xx_read32(bcm, BCM43xx_CIR_SBIMCONFIGLOW); | 2873 | sbimconfiglow = bcm43xx_read32(bcm, BCM43xx_CIR_SBIMCONFIGLOW); |
2874 | sbimconfiglow &= ~ BCM43xx_SBIMCONFIGLOW_REQUEST_TOUT_MASK; | 2874 | sbimconfiglow &= ~ BCM43xx_SBIMCONFIGLOW_REQUEST_TOUT_MASK; |
2875 | sbimconfiglow &= ~ BCM43xx_SBIMCONFIGLOW_SERVICE_TOUT_MASK; | 2875 | sbimconfiglow &= ~ BCM43xx_SBIMCONFIGLOW_SERVICE_TOUT_MASK; |
2876 | sbimconfiglow |= 0x32; | 2876 | if (bcm->bustype == BCM43xx_BUSTYPE_PCI) |
2877 | sbimconfiglow |= 0x32; | ||
2878 | else | ||
2879 | sbimconfiglow |= 0x53; | ||
2877 | bcm43xx_write32(bcm, BCM43xx_CIR_SBIMCONFIGLOW, sbimconfiglow); | 2880 | bcm43xx_write32(bcm, BCM43xx_CIR_SBIMCONFIGLOW, sbimconfiglow); |
2878 | } | 2881 | } |
2879 | 2882 | ||
@@ -3077,7 +3080,7 @@ static int bcm43xx_setup_backplane_pci_connection(struct bcm43xx_private *bcm, | |||
3077 | if (err) | 3080 | if (err) |
3078 | goto out; | 3081 | goto out; |
3079 | 3082 | ||
3080 | if (bcm->current_core->rev < 6 || | 3083 | if (bcm->current_core->rev < 6 && |
3081 | bcm->current_core->id == BCM43xx_COREID_PCI) { | 3084 | bcm->current_core->id == BCM43xx_COREID_PCI) { |
3082 | value = bcm43xx_read32(bcm, BCM43xx_CIR_SBINTVEC); | 3085 | value = bcm43xx_read32(bcm, BCM43xx_CIR_SBINTVEC); |
3083 | value |= (1 << backplane_flag_nr); | 3086 | value |= (1 << backplane_flag_nr); |