Accessing the Host Memory (x86) by the Agent (MPC 8540)
aishwarya bhas
aish_bhaskaran at yahoo.co.in
Thu Apr 5 03:20:57 EST 2007
Hi....
We are using linux kernel 2.6.9. x86 acts as the host and MPC8540 is placed in the PCI slot of the host.MPC8540 is configured in agent mode and it runs on u-boot.The uboot version that we are using is u-boot-1.1.2.
The steps that we followed to accomplish the above task is as follows:-
1.)Allocated memory in the host (x86), using kmalloc and returned the ptrdata....
//Allocating 20 K of memory in the Host RAM
ptrdata = (unsigned volatile long *) kmalloc( 20 * 1024 , GFP_KERNEL);
2.)We write to pci outbound registers, so that the MPC8540 could access the
host memory......
(a)pci translation register (b)pci base register (c) pci attribute register.
We converted this virtual address to PCI Bus address... using virt_to_bus() function..
ulTemp = ( unsigned volatile long ) virt_to_bus ( void * ) ptrdata);
// To Mask the lower 12 bits for translation address
ulTemp = swap(ulTemp >> 12) ;
//Outbound Translation Register
writel(ulTemp, (unsigned long)ioaddr+ 0x8C20);
//ioaddr is address that we got after remapping ioaddr = ioremap_nocache((pio_start), pio_len);
//Outbound Base Address Register
writel((swap(0xE0000000 >> 12)) , (unsigned long)ioaddr+ 0x8C28);
//Outbound Attribute Register
writel(swap(0x8004401A), (unsigned long)ioaddr+ 0x8C30);
We also tried with the Attribute Register value 0x8005501C...
We also used the function wmb() after writing to the outbound registers, since it guarantees ordering in write operations..
After this we wrote some value in the ptrdata(i.e in the virtual address),for testing .
3.)We used the minicom to check whether we are able to access the host memory from the agent by doing md 0xE000_0000
i.e to find whether we were able to get the value which we wrote in the ptrdata(ie. in the virtual address got from kmalloc) ....( Also not sure if this is the way we have to do.....) . But we are getting all values as zeroes.
4.) We checked in Bus Command Register, whether the Bus master and Memory is
enabled....
This is the Configuration Register value :
Algs: bus master, 66Mhz, fast devsel, latency 64
Memory at dee00000 (32-bit, non-prefetchable) [size=1M]
[virtual] Memory at dedf0000 (32-bit, non-prefetchable) [size=64K]
Capabilities: [60] #00 [0000]
00: 57 10 08 00 46 01 b0 20 20 01 20 0b 00 40 00 00
10: 00 00 e0 de 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 60 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 09 00 00 80 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
We aren't sure of whether, we have to write to the physical address or to the
Virtual address ofthe host RAM i.e x86 by configuring these outbound
Registers......
Cud anybody solve our problem. tell us if we are missing anything,any step.Please respond to our request.It is urgent.
Thanks
Aishwariya
---------------------------------
Heres a new way to find what you're looking for - Yahoo! Answers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://ozlabs.org/pipermail/linuxppc-embedded/attachments/20070404/c5978a7c/attachment.htm
More information about the Linuxppc-embedded
mailing list