The IPU boot location is controlled via two Control Module registers:
- CTRL_CORE_CORTEX_M4_MMUADDRTRANSLTR[19:0] CORTEX_M4_MMUADDRTRANSLTR: Used to set
the physical translated address for IPU AMMU
- CTRL_CORE_CORTEX_M4_MMUADDRLOGICTR[19:0] CORTEX_M4_MMUADDRLOGICTR: Used to set
the logical source address for IPU AMMU
By default, two AMMU pages are enabled:
- Small page-0: Translates the 16KB address range from CORTEX_M4_MMUADDRLOGICTR to (CORTEX_M4_MMUADDRLOGICTR + 0x3FFF). If CORTEX_M4_MMUADDRLOGICTR is set to 0x00000, page-0 will control the boot location. If the boot location needs to be mapped to the L2 RAM (0x5502_0000), then CORTEX_M4_MMUADDRTRANSLTR needs to be set to 0x55020. This page is set as non-cacheable at reset.
- Small page-1: Loaded with the physical address of the IPU AMMU configuration registers (0x5508_0000 - 0x5508_0FFF), which is mapped to the virtual address range from 0x4000_0000 to 0x4000_0FFF. This page is also set as non-cacheable at reset.
Note: Small page-1 is by default 4KB. Software has to modify it to 16KB to cover L2MMU/WUGEN masks.
For IPU to boot from any location in L3:
- Provide boot address through CORTEX_M4_MMUADDRTRANSLTR to AMMU page-0 (CORTEX_M4_MMUADDRLOGICTR set to 0x00000). Keep L2 MMU disabled (or enable L2 MMU but keep the same translation for 0x0; otherwise there will be L2-MMU page-walks / page-faults).
- Set CORTEX_M4_MMUADDRTRANSLTR to 0x00000 (or any value). Host CPU re-programs AMMU page to map 0x0 virtual address to a physical L2 RAM / L3 location. Only after the programming is complete, Cortex-M4 reset is released. L2 MMU as described above.
- Set CORTEX_M4_MMUADDRTRANSLTR to 0x00000 (no translation). Host CPU programs L2 MMU to do the address translation for 0x0.
For IPU to boot from L2 RAM:
- This must be done through AMMU page-0. Use either (1) or (2) as described above.