Hi,
I need some help with the MPAX capability to map a virtual address to multiple physical locations in DDR3.
By default the section 1 of MPAX is already programmed to map 0x8000,0000 -0xFFFF,FFFF to the EMIF ddr3 0x8:0000:0000 to 0x8:7FFF:FFFF. my DDR3 is actually only 512M in length i.e. 0x2000,0000
My memory map is such that I have some stuff placed in DDR3 at 0x8000,0000 in the virtual corepac space and am reserving 32M for that to be used by all cores. I also want to have private data placed at 0x8200,0000 in virtual space and I want that to map to my EMIF (DDR3) physical location at 0x8:0400:0000 in 36 bit physical space for core 0. For other cores, I can then place it at 0x8:0600:0000 and so on. In other words, I am trying to have 32M say of private data available per core.
When I do the following instructions, and then proceed to the spot where the appropriate memory is initialized, I am finding that those variables are not being set. The variables are in the memory map at 0x8200,0000. What am I doing wrong?
/* Phy address base: 0x8400 0000
* Size: 32MB (0x18 according to encoding)
* Virtual address: 0x8200 0000
* Permission: 0xFF
* MAR used: (0x8200 0000 >> 24) = 129
*/
/* map using MPAX segment 2 registers */
xmpaxPtr = (uint32_t *)(XMPAXH2);
*xmpaxPtr = ((MAPPED_VIRTUAL_ADDRESS >> 12) << 12) | (0x18);
xmpaxPtr = (uint32_t *)(XMPAXL2);
*xmpaxPtr = ((0x84000000 >> 12) << 8) | (0xFF);
I have also tried the above but replacing 0x84000000 with 0x80400000
Thanks,
Aamir