LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Hardware (https://www.linuxquestions.org/questions/linux-hardware-18/)
-   -   32 bit Linux Kernel not recognising PCI I/O port unlike 64 bit counter part (https://www.linuxquestions.org/questions/linux-hardware-18/32-bit-linux-kernel-not-recognising-pci-i-o-port-unlike-64-bit-counter-part-4175445174/)

jdamon 01-11-2013 01:04 PM

32 bit Linux Kernel not recognising PCI I/O port unlike 64 bit counter part
 
Hi,

I just completed a port of the standard Linux PCI (wdt_pci) watchdog driver to support ACCES I/O's PCI watchdog, but I have found something strange, specifically in terms of how 32bit Linux kernels are allocating memory and I/O ports for the PCI Watchdog board.

Here's an example of the correct output , using a 2.6.32.60 64 bit kernel ( built from kernel.org ), that includes the correct memory and I/O ports based off of Bars 0-2 on the PCI device. In this case , the I/O ports that are required to be correct start at addres 0xd080.


lspci -vv -xx -s 04:06.0
04:06.0 Class ff00: ACCES I/O Products, Inc. PCI-WDG-CSM (rev 02)
Subsystem: ACCES I/O Products, Inc. PCI-WDG-CSM
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 11
Region 0: Memory at ff700000 (32-bit, non-prefetchable) [size=128]
Region 1: I/O ports at d000 [size=128]
Region 2: I/O ports at d080 [size=16]
Kernel modules: aio_wdt
00: 4f 49 c0 22 03 00 80 02 02 00 00 ff 10 00 00 00
10: 00 00 70 ff 01 d0 00 00 81 d0 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 4f 49 c0 22
30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 01 00 00


However, when this is performed under a 32bit version of the exact same kernel release , I see the following:

04:06.0 Class ff00: ACCES I/O Products, Inc. PCI-WDG-CSM (rev 02)
Subsystem: ACCES I/O Products, Inc. PCI-WDG-CSM
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 11
Region 0: Memory at ff700000 (32-bit, non-prefetchable) [size=128]
Region 1: I/O ports at d000 [size=128]
Region 2: [virtual] Memory at 0000d080 (32-bit, non-prefetchable) [size=16]
00: 4f 49 c0 22 03 00 80 02 02 00 00 ff 10 00 00 00
10: 00 00 70 ff 01 d0 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 4f 49 c0 22
30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 01 00 00


Does anyone have any ideas of ways to correct this. The problem is that once the Kernel has allocated the I/O ports at region d080 incorrectly, I am unable to correctly write to this memory address and actually talk to the hardware. It is believe that this used to work with older Kernels ( 2.4 days ) but I have yet been able to verify this. I am including this last statement in case it jogs someone's memory.


Thanks for any suggestions.

ukiuki 01-12-2013 11:35 PM

Did you tried with 3.x.x kernels?

Regards


All times are GMT -5. The time now is 10:25 AM.