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 | |
| 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>
| -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); |
