Subject: Re: PCI changes 2.6.26 => 2.6.28

From: Gary Thomas <[email-masked]>
Date: Tue, 21 Apr 2009 14:30:16 -0600

Gary Thomas wrote:
> I had a stable port of 2.6.26 for my 834x hardware, with a
> frame buffer on a PCI device.  After I upgraded to 2.6.28,
> this isn't working any more.  The frame buffer code is happily
> writing to a mapped [memory] space on the PCI card, but nothing
> is happening.
> 
> Did something [subtle] change in how the PCI is handled in
> this timeframe?  Perhaps with how PCI devices are mapped or
> enabled?  I've looked at the changes between the two versions,
> but nothing leaps out at me.
> 
> n.b. I have other devices on the PCI bus, such as a SATA
> controller, which work the same in both versions.
> 
> Thanks for any ideas
> 

The difference seems to be in how the PCI bus gets mapped.

In the working, 2.6.26 based kernel, 'lspci -v' shows this:

00:00.0 Bridge: Unknown device 1957:0084 (rev 11)
        Flags: bus master, 66MHz, fast devsel, latency 0
        Memory at cc000000 (32-bit, non-prefetchable) [size=1M]
        Memory at c0000000 (64-bit, prefetchable) [size=128M]
        Memory at cc143100 (64-bit, non-prefetchable) [size=1]
        Capabilities: [48] #06 [0000]

00:0a.0 Network controller: Unknown device 001c:0001 (rev 02)
        Subsystem: Unknown device 001c:0004
        Flags: medium devsel, IRQ 22
        Memory at cc120000 (32-bit, non-prefetchable) [size=64K]
        Memory at cc130000 (32-bit, non-prefetchable) [size=64K]

00:0b.0 Mass storage controller: Promise Technology, Inc. PDC40775 (SATA 300 TX2plus) (rev 02)
        Subsystem: Promise Technology, Inc. Unknown device 3573
        Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 23
        I/O ports at 1000 [size=128]
        I/O ports at 1100 [size=256]
        Memory at cc140000 (32-bit, non-prefetchable) [size=4K]
        Memory at cc100000 (32-bit, non-prefetchable) [size=128K]
        Capabilities: [60] Power Management version 2

00:0c.0 Display controller: Fujitsu Limited. Unknown device 2019 (rev 01)
        Flags: bus master, medium devsel, latency 0, IRQ 24
        Memory at c8000000 (32-bit, non-prefetchable) [size=64M]

00:0d.0 USB Controller: Philips Semiconductors USB 1.1 Host Controller (rev 11) (prog-if 10 [OHCI])
        Subsystem: Philips Semiconductors USB 1.1 Host Controller
        Flags: bus master, medium devsel, latency 0, IRQ 25
        Memory at cc141000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [dc] Power Management version 2

00:0d.1 USB Controller: Philips Semiconductors USB 1.1 Host Controller (rev 11) (prog-if 10 [OHCI])
        Subsystem: Philips Semiconductors USB 1.1 Host Controller
        Flags: bus master, medium devsel, latency 0, IRQ 25
        Memory at cc142000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [dc] Power Management version 2

00:0d.2 USB Controller: Philips Semiconductors USB 2.0 Host Controller (rev 11) (prog-if 20 [EHCI])
        Subsystem: Philips Semiconductors USB 2.0 Host Controller
        Flags: bus master, medium devsel, latency 0, IRQ 25
        Memory at cc143000 (32-bit, non-prefetchable) [size=256]
        Capabilities: [dc] Power Management version 2

This is what 2.6.28 shows:

00:00.0 Bridge: Unknown device 1957:0084 (rev 11)
        Flags: bus master, 66MHz, fast devsel, latency 0
        Memory at <unassigned> (64-bit, prefetchable)
        Memory at <unassigned> (64-bit, non-prefetchable)
        Capabilities: [48] #06 [0000]

00:0a.0 Network controller: Unknown device 001c:0001 (rev 02)
        Subsystem: Unknown device 001c:0004
        Flags: medium devsel, IRQ 16
        Memory at c4020000 (32-bit, non-prefetchable) [size=64K]
        Memory at c4030000 (32-bit, non-prefetchable) [size=64K]

00:0b.0 Mass storage controller: Promise Technology, Inc. PDC40775 (SATA 300 TX2plus) (rev 02)
        Subsystem: Promise Technology, Inc. Unknown device 3573
        Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 21
        I/O ports at 1000 [size=128]
        I/O ports at 1100 [size=256]
        Memory at c4040000 (32-bit, non-prefetchable) [size=4K]
        Memory at c4000000 (32-bit, non-prefetchable) [size=128K]
        Capabilities: [60] Power Management version 2

00:0c.0 Display controller: Fujitsu Limited. Unknown device 2019 (rev 01)
        Flags: bus master, medium devsel, latency 0, IRQ 22
        [virtual] Memory at c0000000 (32-bit, non-prefetchable) [size=64M]

00:0d.0 USB Controller: Philips Semiconductors USB 1.1 Host Controller (rev 11) (prog-if 10 [OHCI])
        Subsystem: Philips Semiconductors USB 1.1 Host Controller
        Flags: bus master, medium devsel, latency 0, IRQ 23
        Memory at c4041000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [dc] Power Management version 2

00:0d.1 USB Controller: Philips Semiconductors USB 1.1 Host Controller (rev 11) (prog-if 10 [OHCI])
        Subsystem: Philips Semiconductors USB 1.1 Host Controller
        Flags: bus master, medium devsel, latency 0, IRQ 23
        Memory at c4042000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [dc] Power Management version 2

00:0d.2 USB Controller: Philips Semiconductors USB 2.0 Host Controller (rev 11) (prog-if 20 [EHCI])
        Subsystem: Philips Semiconductors USB 2.0 Host Controller
        Flags: bus master, medium devsel, latency 0, IRQ 23
        Memory at c4043000 (32-bit, non-prefetchable) [size=256]
        Capabilities: [dc] Power Management version 2

The [two] big differences I see are that the video card (00:0d.0)
is being assigned 0xC0000000, which lspci marks as "virtual".
I think I've had trouble in the past with memory regions which
started at 0 relative to the PCI space.  Also "virtual" concerns me.

Does this spark any ideas from anyone?

-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------