Hi all: We have plugged an ATI Radeon video card into a PCI slot on our powerpc 8272ads evaluation board. The linux kernel (v2.6.15) comes up, detects the card on the bus, rolls in the ATI Radeon framebuffer driver as it should. All register/PCI config space access is fine.
The trouble starts when I try to access the 128MByte video memory on the card. As you can see below, there are three regions for this card - one pre-fetchable, one non-prefetchable and one io. The 128MByte region is flagged prefetchable. I can: - mmap (in userland) or ioremap (in kernel space) the non-prefetchable region and do what I want to with it (read/write). User space I use either /proc or /sys handles and in the kernel my driver does the remapping I cannot: - mmap or remap the prefetchable region though the calls to ioremap and mmap return success. - Kernel ioremap returns success but the powerpc crashes as soon as I read or write to space that has just been remapped. - mmap using either /proc or /sys based pci resource access from user space fails the same way. mmap call returns success but access cases a bus error. something that looks suspicious: cat /proc/iomem below shows that the ATI cards prefetchable memory does not land up in the prefetchable region of the PCI map. It lands in the PCI memory (non-prefetchable region). what I have tried: - forcing PREFETCH flags to be NONPREFETCH by hacking the kernel - this hack didnt work though /proc/pci reports all pre-fetchables as non-prefetchables meaning that flags were set properly. - changing the PCI map to make all memory fall under PCI prefetchable. Hence /proc/iomem now shows all memory under the prefetch region. Even then accesses fail. I have tried vice-versa i.e. make all memory fall under non-prefetchable and that didnt make a difference as well - enable prefetch flag in POCMR1 to make the cpu think it is prefetchable. this doesn't make a difference. any help/pointers from you guys will be great, thanks a ton, a Platform details: - powerpc 8272ads board, 64MByte eval board with kernel 2.6.15 - ATI Radeon 7000 PCI based card with 128MByte mem ================== log ============================== ~ # cat /proc/pci PCI devices found: Bus 0, device 0, function 0: Class 0600: PCI device 1057:18c1 (rev 16). Master Capable. Latency=248. Non-prefetchable 32 bit memory at 0x0 [0x1ffff]. Prefetchable 32 bit memory at 0x0 [0xfffffff]. Bus 0, device 24, function 0: Class 0300: PCI device 1002:5159 (rev 0). IRQ 66. Master Capable. Latency=128. Min Gnt=8. Prefetchable 32 bit memory at 0xa8000000 [0xafffffff]. I/O at 0x1ffff00 [0x1ffffff]. Non-prefetchable 32 bit memory at 0xa7ff0000 [0xa7ffffff]. ~ # ls -l /sys/devices/pci0000\:00/0000\:00\:18.0/ lrwxrwxrwx 1 root root 0 Jan 1 00:03 bus -> ../../../bus/pci -r--r--r-- 1 root root 4096 Jan 1 00:03 class -rw-r--r-- 1 root root 256 Jan 1 00:03 config -r--r--r-- 1 root root 4096 Jan 1 00:03 device -r--r--r-- 1 root root 4096 Jan 1 00:03 irq -r--r--r-- 1 root root 4096 Jan 1 00:03 local_cpus -r--r--r-- 1 root root 4096 Jan 1 00:03 modalias -r--r--r-- 1 root root 4096 Jan 1 00:03 resource -rw------- 1 root root 134217728 Jan 1 00:03 resource0 -rw------- 1 root root 256 Jan 1 00:03 resource1 -rw------- 1 root root 65536 Jan 1 00:03 resource2 -r-------- 1 root root 131072 Jan 1 00:03 rom -r--r--r-- 1 root root 4096 Jan 1 00:03 subsystem_device -r--r--r-- 1 root root 4096 Jan 1 00:03 subsystem_vendor --w------- 1 root root 4096 Jan 1 00:03 uevent -r--r--r-- 1 root root 4096 Jan 1 00:03 vendor ~ # cat /proc/iomem 80000000-9fffffff : PCI prefetchable memory a0000000-afffffff : PCI memory a7ff0000-a7ffffff : 0000:00:18.0 a8000000-afffffff : 0000:00:18.0 ~ # cat /proc/ioports 00000000-01ffffff : PCI I/O 01ffff00-01ffffff : 0000:00:18.0 __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com