Hi,
   What puts data into /proc/bus/pci? 

   We're looking at a little issue this morning with my PVR devices in
a Gentoo machine. In this machine we see that the PCI config space is
correctly setup following a cold boot, but is set up incorrectly after
a warm boot. Note that these devices are behind a PCI bridge (on bus
1, not bus 0) which requires a bit different access to config space as
per the PCI bridge spec. (Type 2 vs. Type 1) Due to these problems
these cards only function correctly after a cold boot.

   Could this be kernel related? Driver related? I'm running
2.6.11-gentoo-r11 on this machine.

   Here's what we see for a warm boot vs. a cold boot. Note that
location 2F is different between the working cold boot and the failing
warm boot:

--- COLD BOOT ---
cat /proc/bus/pci/01/01.0 | od -Ax -t x1
000000 44 44 16 00 06 00 10 02 01 00 00 04 08 40 00 00
000010 08 00 00 f0 00 00 00 00 00 00 00 00 00 00 00 00
000020 00 00 00 00 00 00 00 00 00 00 00 00 70 00 03 80
000030 00 00 00 00 44 00 00 00 00 00 00 00 05 01 80 08
cat /proc/bus/pci/01/02.0 | od -Ax -t x1
000000 44 44 16 00 06 00 10 02 01 00 00 04 08 40 00 00
000010 08 00 00 f4 00 00 00 00 00 00 00 00 00 00 00 00
000020 00 00 00 00 00 00 00 00 00 00 00 00 70 00 09 40
000030 00 00 00 00 44 00 00 00 00 00 00 00 03 01 80 08

--- WARM BOOT ---
cat /proc/bus/pci/01/01.0 | od -Ax -t x1
000000 44 44 16 00 06 00 10 02 01 00 00 04 08 40 00 00
000010 08 00 00 f0 00 00 00 00 00 00 00 00 00 00 00 00
000020 00 00 00 00 00 00 00 00 00 00 00 00 70 00 03 00
000030 00 00 00 00 44 00 00 00 00 00 00 00 05 01 80 08
cat /proc/bus/pci/01/02.0 | od -Ax -t x1
000000 44 44 16 00 06 00 10 02 01 00 00 04 08 40 00 00
000010 08 00 00 f4 00 00 00 00 00 00 00 00 00 00 00 00
000020 00 00 00 00 00 00 00 00 00 00 00 00 70 00 09 00
000030 00 00 00 00 44 00 00 00 00 00 00 00 03 01 80 08

   Since I don't know what puts this data into /proc I have no idea
where to look for a solution. Does a part of the kernel do this, first
reading the data from the chips and placing a copy in /proc? Or does
the driver for the device do this?

   The address 2C is the subsystem Vendor ID which might be written by
the driver. It appears that only the last byte of the Subsysem Vendor
ID is wrong.

   Thanks in advance for any ideas.

Cheers,
Mark

-- 
[email protected] mailing list

Reply via email to