Hi all,
I am programming a device driver on PLX9060 chipset, and want to config DMA controller by IO memory,
but I find that can't access them in regular way,below are my codes.
>cat /proc/pci
Bus 0, device 16, function 0:
Bridge: PLX Unknown device (rev 3).
Vendor id=10b5. Device id=9060.
Medium devsel. Fast back-to-back capable. IRQ 12. Master Capable. Latency=64. Min Gnt=8.Max Lat=8.
Non-prefetchable 32 bit memory at 0xe7100000 [0xe7100000].
I/O at 0xe400 [0xe401].
Non-prefetchable 32 bit memory at 0xe7000000 [0xe7000000].
I want to access the virtual address of 0xe7000000 by ioremap()
struct dev {
u32 mem;
u32 io;
u32 space0;
...
};
mem = 0xe7100000;
io = 0xe400;
space0 = 0xe7000000;
ulong * remap = (ulong *)ioremap_nocache(space0, 0x200);
remap =remap + (0x100>>2);
/* check the return value of ioremap by printk()
* remap = 0xc2059100;
*/
/*
* Now test to see if I can access the DMA registers
* If I write -1 and get back 1FFF, then we accessed the
* DMA register, isn't it?
* there are two methods: remap[0x00] =x, writel(x, remap + 0x00), but I don't know their difference.
*/
remap[0x00] = 0xFFFFFFFF;
/* check the return value of remap by printk()
* remap[0x00] = 0xffffffff;
* remap[0x01] = 0xffffffff;
* remap[0x02] = 0xffffffff;
* remap[0x03] = 0xffffffff;
* remap[0x04] = 0xffffffff;
* remap[0x05] = 0xffffffff;
*/
then rerun the module
writel(0x03, remap + 0x00);
/* check the return value of remap by readl()
* remap + 0x00 = 0x00000003;
* remap + 0x01 = 0x00000003;
* remap + 0x02 = 0x00000003;
* remap + 0x03 = 0x00000003;
* remap + 0x04 = 0x00000003;
* remap + 0x05 = 0x00000003;
* remap + 0x06 = 0x00000003;
*/
so, I think probably access error,
I don't know how to update my code to access DMA registers.
any helps are appreciated.
thanks in advance.
-Jim
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Sep 30 2000 - 21:00:24 EST