2.4.21-rc6-ac1 PCMCIA: Cardbus bridge behind transparent P2P bridge

From: Shashi Rao (shashi.rao@terpalum.umd.edu)
Date: Wed Jun 04 2003 - 01:42:22 EST


Hi

Both in-kernel and standalone PCMCIA stopped working on my laptop with 2.4.20
and above. I have a fix for it, but dont quite understand why/how it works.

My report focuses on the in-kernel PCMCIA support, yenta.c etc, compiled as
modules.

Hardware: Sony Vaio PCG-R505DS, an ACPI-only laptop with a builtin Orinoco
PC-card behind a TI PCI1410 cardbus bridge, and another unpopulated external
socket behind a Ricoh RL5c475 bridge. Both these cardbus bridges live behind
a "hub-to-pci" 82801BAM.

lspci -vt yields:

-[00]-+-00.0 Intel Corp. 82830 830 Chipset Host Bridge
      +-02.0 Intel Corp. 82830 CGC [Chipset Graphics Controller]
      +-02.1 Intel Corp. 82830 CGC [Chipset Graphics Controller]
      +-1d.0 Intel Corp. 82801CA/CAM USB (Hub #1)
      +-1d.1 Intel Corp. 82801CA/CAM USB (Hub #2)
      +-1d.2 Intel Corp. 82801CA/CAM USB (Hub #3)
      +-1e.0-[02]--+-02.0 Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
      | +-05.0 Ricoh Co Ltd RL5c475
      | +-08.0 Intel Corp. 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
      | \-0b.0 Texas Instruments PCI1410 PC card Cardbus Controller
      +-1f.0 Intel Corp. 82801CAM ISA Bridge (LPC)
      +-1f.1 Intel Corp. 82801CAM IDE U100
      +-1f.3 Intel Corp. 82801CA/CAM SMBus
      +-1f.5 Intel Corp. 82801CA/CAM AC'97 Audio
      \-1f.6 Intel Corp. 82801CA/CAM AC'97 Modem

Data from a "clean" 2.4.21-rc6-ac1 boot:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/proc/iomem

00000000-0009dfff : System RAM
0009e000-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000d8000-000dffff : reserved
000e0000-000e0fff : card services
000f0000-000fffff : System ROM
00100000-27ceffff : System RAM
  00100000-0022aebe : Kernel code
  0022aebf-002a985f : Kernel data
27cf0000-27cfbfff : ACPI Tables
27cfc000-27cfffff : ACPI Non-volatile Storage
27d00000-27e7ffff : System RAM
27f00000-27f00fff : Ricoh Co Ltd RL5c475
27f01000-27f01fff : Texas Instruments PCI1410 PC card Cardbus Controller
28000000-283fffff : PCI CardBus #03
28400000-287fffff : PCI CardBus #03
28800000-28bfffff : PCI CardBus #07
28c00000-28ffffff : PCI CardBus #07
e0000000-e007ffff : Intel Corp. 82830 CGC [Chipset Graphics Controller]
  e0000000-e007ffff : intelfb
e0080000-e00fffff : Intel Corp. 82830 CGC [Chipset Graphics Controller] (#2)
e0100000-e01003ff : Intel Corp. 82801CAM IDE U100
e0200000-e0203fff : Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
e0204000-e0204fff : Intel Corp. 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
  e0204000-e0204fff : eepro100
e0205000-e02057ff : Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
  e0205000-e02057ff : ohci1394
e8000000-efffffff : Intel Corp. 82830 CGC [Chipset Graphics Controller]
  e8000000-efffffff : intelfb
f0000000-f7ffffff : Intel Corp. 82830 CGC [Chipset Graphics Controller] (#2)

lspci -vvxxx -s 2:b.0

02:0b.0 CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller (rev 01)
        Subsystem: Lucent Technologies: Unknown device ab01
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 168, cache line size 08
        Interrupt: pin A routed to IRQ 9
        Region 0: Memory at 27f01000 (32-bit, non-prefetchable) [size=4K]
        Bus: primary=02, secondary=07, subordinate=0a, sec-latency=176
        Memory window 0: 28800000-28bff000 (prefetchable)
        Memory window 1: 28c00000-28fff000
        I/O window 0: 00004800-000048ff
        I/O window 1: 00004c00-00004cff
        BridgeCtl: Parity- SERR- ISA- VGA- MAbort- >Reset+ 16bInt+ PostWrite+
        16-bit legacy interface ports at 0001
00: 4c 10 50 ac 07 00 10 02 01 00 07 06 08 a8 02 00
10: 00 10 f0 27 a0 00 00 02 02 07 0a b0 00 00 80 28
20: 00 f0 bf 28 00 00 c0 28 00 f0 ff 28 00 48 00 00
30: fc 48 00 00 00 4c 00 00 fc 4c 00 00 ff 01 c0 05
40: a3 12 01 ab 01 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 60 90 44 00 00 00 00 00 00 00 00 00 22 00 00 01
90: c0 00 60 61 00 00 00 00 00 00 00 00 00 00 00 00
a0: 01 00 11 fe 00 00 c0 00 0e 08 00 00 1b 00 00 00
b0: 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Here is a patch that refuses to view the 82801BAM as a subtractive decoding
agent (Before 2.4.20, this bridge was treated as a non-transparent positive
decoding bridge). This restores PCMCIA functionality on both the cardbus
bridges.

diff -u --new-file --recursive linux.21rc6-ac1-clean/arch/i386/kernel/pci-pc.c linux.21rc6-ac1-patched/arch/i386/kernel/pci-pc.c
--- linux.21rc6-ac1-clean/arch/i386/kernel/pci-pc.c Tue Jun 3 22:26:40 2003
+++ linux.21rc6-ac1-patched/arch/i386/kernel/pci-pc.c Tue Jun 3 22:29:12 2003
@@ -1341,7 +1341,7 @@
         { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8361, pci_fixup_via_northbridge_bug },
         { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8367_0, pci_fixup_via_northbridge_bug },
         { PCI_FIXUP_HEADER, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810 },
- { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_fixup_transparent_bridge },
+/* { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_fixup_transparent_bridge }, */
         { 0 }
 };

Here are the data from the corresponding [successful] boot:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/proc/iomem

00000000-0009e7ff : System RAM
0009e800-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000dc000-000dffff : Extension ROM
000f0000-000fffff : System ROM
00100000-27ceffff : System RAM
  00100000-0022aebe : Kernel code
  0022aebf-002a985f : Kernel data
27cf0000-27cfbfff : ACPI Tables
27cfc000-27cfffff : ACPI Non-volatile Storage
27d00000-27e7ffff : System RAM
e0000000-e007ffff : Intel Corp. 82830 CGC [Chipset Graphics Controller]
  e0000000-e007ffff : intelfb
e0080000-e00fffff : Intel Corp. 82830 CGC [Chipset Graphics Controller] (#2)
e0100000-e01003ff : Intel Corp. 82801CAM IDE U100
e0200000-e02fffff : PCI Bus #02
  e0200000-e0203fff : Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
  e0204000-e0204fff : Intel Corp. 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
    e0204000-e0204fff : eepro100
  e0205000-e02057ff : Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
    e0205000-e02057ff : ohci1394
  e0206000-e0206fff : Ricoh Co Ltd RL5c475
  e0207000-e0207fff : Texas Instruments PCI1410 PC card Cardbus Controller
  e0220000-e023ffff : PCI CardBus #03
  e0240000-e025ffff : PCI CardBus #03
  e0260000-e027ffff : PCI CardBus #07
  e0280000-e029ffff : PCI CardBus #07
e8000000-efffffff : Intel Corp. 82830 CGC [Chipset Graphics Controller]
  e8000000-efffffff : intelfb
f0000000-f7ffffff : Intel Corp. 82830 CGC [Chipset Graphics Controller] (#2)
fabfd000-fabfdfff : card services

lspci -vvxxx -s 2:b.0

02:0b.0 CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller (rev 01)
        Subsystem: Lucent Technologies: Unknown device ab01
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 168, cache line size 08
        Interrupt: pin A routed to IRQ 9
        Region 0: Memory at e0207000 (32-bit, non-prefetchable) [size=4K]
        Bus: primary=02, secondary=07, subordinate=0a, sec-latency=176
        Memory window 0: e0260000-e027f000 (prefetchable)
        Memory window 1: e0280000-e029f000
        I/O window 0: 00000000-00000003
        I/O window 1: 00000000-00000003
        BridgeCtl: Parity- SERR- ISA- VGA- MAbort- >Reset+ 16bInt- PostWrite+
        16-bit legacy interface ports at 0001
00: 4c 10 50 ac 07 00 10 02 01 00 07 06 08 a8 02 00
10: 00 70 20 e0 a0 00 00 02 02 07 0a b0 00 00 26 e0
20: 00 f0 27 e0 00 00 28 e0 00 f0 29 e0 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 ff 01 40 05
40: a3 12 01 ab 01 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 60 b0 44 00 00 00 00 00 00 00 00 00 22 00 00 01
90: c0 00 60 61 00 00 00 00 00 00 00 00 00 00 00 00
a0: 01 00 11 fe 00 00 c0 00 0e 08 00 00 1b 00 00 00
b0: 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Some differences/points of note for the TI bridge:
a) Manfred Spraul's adaptive resource allocation is in effect
b) The CB_BRIDGE_CONTROL register's INTR bit changes value [offset 0x3e, bit 7]
c) I/O windows didnt get assigned after the patch

Also, my firewire DVD/CDRW drive, which lives behind the 82801 as well, works
fine both before and after the patch. I'd be happy to provide more
information.

Hmm.

Cheers,
Shashi

--
Shashi Rao, skrao@users.sourceforge.net
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Jun 07 2003 - 22:00:22 EST