b44-ssb: Fix IRQ routing bits on the backplane
Subsystems (3)
PATCH 1/1 b44-ssb: Fix IRQ routing bits on the backplane
The backplane on the b44 chip seems to have a silicon bug in the IRQ routing. The ethernet core IRQ routing does not work with the routing bit returned from the backplaneflag register. This patch adds a workaround for the b44 chip to use a hardcoded constant. This constant was also used in the old b44 driver.
drivers/ssb/driver_pcicore.c +9 -3
@@ -496,9 +496,15 @@ int ssb_pcicore_dev_irqvecs_enable(strucu32 intvec; intvec =ssb_read32 (pdev,SSB_INTVEC ); - tmp =ssb_read32 (dev,SSB_TPSFLAG ); - tmp &=SSB_TPSFLAG_BPFLAG ; - intvec |= tmp; +if ((bus->chip_id &0xFF00 ) ==0x4400 ) { +/* Workaround: On the BCM44XX the BPFLAG routing +* bit is wrong. Use a hardcoded constant. */ + intvec |=0x00000002 ; + }else { + tmp =ssb_read32 (dev,SSB_TPSFLAG ); + tmp &=SSB_TPSFLAG_BPFLAG ; + intvec |= tmp; + }ssb_write32 (pdev,SSB_INTVEC , intvec); }
Please apply this to wireless-dev.
This is also most likely the bug Uwe Bugla was
bullshitting about^W^Wreporting.
Signature · 1 line
Greetings Michael.
Quoted 9 lines · Michael Buesch
The backplane on the b44 chip seems to have a silicon bug in the IRQ routing. The ethernet core IRQ routing does not work with the routing bit returned from the backplaneflag register. This patch adds a workaround for the b44 chip to use a hardcoded constant. This constant was also used in the old b44 driver.
Signed-off-by Michael Buesch <[email protected]>Cc Maximilian Engelhardt <[email protected]>Cc Gary Zambrano <[email protected]>
Quoted 27 lines
Index:
bu3sch-wireless-dev/drivers/ssb/driver_pcicore.c
===================================================================
---bu3sch-wireless-dev.orig/drivers/ssb/driver_pcicore.c2007-06-17
13:35:45.000000000 +0200 +++bu3sch-wireless-dev/drivers/ssb/driver_pcicore.c2007-06-17
14:19:05.000000000 +0200 @@ -496,9 +496,15 @@ int ssb_pcicore_dev_irqvecs_enable(strucdrivers/ssb/driver_pcicore.c +9
-3u32 intvec; intvec =ssb_read32 (pdev,SSB_INTVEC ); - tmp =ssb_read32 (dev,SSB_TPSFLAG ); - tmp &=SSB_TPSFLAG_BPFLAG ; - intvec |= tmp; +if ((bus->chip_id &0xFF00 ) ==0x4400 ) { +/* Workaround: On the BCM44XX the BPFLAG routing +* bit is wrong. Use a hardcoded constant. */ + intvec |=0x00000002 ; + }else { + tmp =ssb_read32 (dev,SSB_TPSFLAG ); + tmp &=SSB_TPSFLAG_BPFLAG ; + intvec |= tmp; + }ssb_write32 (pdev,SSB_INTVEC , intvec); }
Quoted 3 lines
Please apply this to wireless-dev.
This is also most likely the bug Uwe Bugla was
bullshitting about^W^Wreporting.
Maxi