0

I'm trying to pre-load load SDRAM memory to L2 cache. I have initialised the MMU and made 1 translation table. I also enabled the cache and I see the software is using the cache as well...

To load some SDRAM to my L2 cache i tried to work with the Preload Engine (PLE).

I have read the documentation about the PLE but i don't get it to work. This is what i have tried: __asm("MCRR p15,0, %0, %1, c11" : :"r" (0x20000004),"r"(0x20000000)); //program PLE new channel 0x20000004 is the register that contains the start_register value (0x10000000 in my case) 0x20000000 is the register that containts the settings: 0xFFFC007C in my case. This means : Length =16k, stride = 0 and number of blocks is 32 (32 * 16k = 512k which is the amount of L2 cache available)

When I execute this command, the PLE does nothing with the registers PLEIDR, PLEASR, PLEFSR, PLEUAR and PLEPCR. The PLEIDR says that the Fifo_size = 16 and the PLE is available. The PLEASR is always zero which mean the channel is never active The PLEFSR = 16 which means that there are 16 available entries in the FIFO The other settings are user defiened...

What do i have to do to get the PLE channel running?

artless noise
  • 21,212
  • 6
  • 68
  • 105
  • This is not a generic ARM feature. The ARM Cortex-A9 should support the `PLD` and `PLI` instructions. Do they not work for you? This is an easier, more portable way (working across more ARM cpu types) to do pre-loading. – artless noise May 01 '14 at 18:18
  • "0x20000004 is the register that contains the start_register value" - um, what? Hint: [try disassembling that code](http://goo.gl/LCLbUV) to see what an asm register constraint with an immediate operand actually does. – Notlikethat May 01 '14 at 21:16

0 Answers0