Hi,
I have some questions about the AMMU. I using for an working system the following configuration of the AMMU. I am not sure why I need some of the configurations, it would be nice if someone could help me!
- For accessing the hardware I need to configure a large page witth mapping address 0x40000000 to 0x40000000? Is this correct? What happen if I want to access the IPU_BITBAND_REGION2 which is at address 0x40000000?
- At reset, the MMU is loaded with page 0, which forces the L2 RAM to be address 0x0. Does this means that IPU_BOOT_SPACE does not exist any more and instead of IPU_BOOT_SPACE I have the IPU_RAM with the length of 64KB?
- WUGEN_IPU registers have the virtual address 0x40000000. For that I need to configure a small page 0x55080000 to 0x40000000, right? Does the small page configuration collide or interact with the large page configuration (0x40000000 to 0x40000000)?
ammuPageConfig_t pageConfig = {0U}; // LARGE ------------------------------------------------------- // Mapping L4_CFG pageConfig.ammuPageType = AMMU_PAGE_TYPE_LARGE; pageConfig.ammuPageNum = 0U; pageConfig.policyRegVal = 0x00000003; // (512MB | ENABLE) pageConfig.physicalAddress = 0x40000000; pageConfig.logicalAddress = 0x40000000; AMMUConfigPage(SOC_IPU1_UNICACHE_MMU_BASE, &pageConfig); // Mapping Firmware pageConfig.ammuPageType = AMMU_PAGE_TYPE_LARGE; pageConfig.ammuPageNum = 1U; pageConfig.policyRegVal = 0x000B0003; // (WRITE_BACK | POSTED | L1_CACHABLE | 512MB | ENABLE) pageConfig.physicalAddress = 0x9E000000; pageConfig.logicalAddress = 0x9E000000; AMMUConfigPage(SOC_IPU1_UNICACHE_MMU_BASE, &pageConfig); // MEDIUM ------------------------------------------------------ // Mapping 1st EDMA pageConfig.ammuPageType = AMMU_PAGE_TYPE_MEDIUM; pageConfig.ammuPageNum = 0U; pageConfig.policyRegVal = 0x00000003; pageConfig.physicalAddress = 0x43300000U; pageConfig.logicalAddress = 0x63300000U; AMMUConfigPage(SOC_IPU1_UNICACHE_MMU_BASE, &pageConfig); // Mapping 2nd EDMA pageConfig.ammuPageType = AMMU_PAGE_TYPE_MEDIUM; pageConfig.ammuPageNum = 1U; pageConfig.policyRegVal = 0x00000003; pageConfig.physicalAddress = 0x43400000U; pageConfig.logicalAddress = 0x63400000U; AMMUConfigPage(SOC_IPU1_UNICACHE_MMU_BASE, &pageConfig); // SMALL -------------------------------------------------------- // Mapping IPU_RAM: 1st 16KB pageConfig.ammuPageType = AMMU_PAGE_TYPE_SMALL; pageConfig.ammuPageNum = 0U; pageConfig.policyRegVal = 0x0001000B; // (L1_CACHABLE | VOLATILE | 16KB | ENABLE) pageConfig.physicalAddress = 0x55020000; pageConfig.logicalAddress = 0x00000000; AMMUConfigPage(SOC_IPU1_UNICACHE_MMU_BASE, &pageConfig); // IPU_UNICACHE_MMU, IPU_WUGEN and IPU_MMU are placed by remoteproc at the virtual address 0x40000000 // P.A. 0x55080000U V.A. 0x40000000U pageConfig.ammuPageType = AMMU_PAGE_TYPE_SMALL; pageConfig.ammuPageNum = 1U; pageConfig.policyRegVal = 0x0000000B; // (VOLATILE | 16KB | ENABLE) pageConfig.physicalAddress = 0x55080000; pageConfig.logicalAddress = 0x40000000; AMMUConfigPage(SOC_IPU1_UNICACHE_MMU_BASE, &pageConfig); // Mapping IPU_RAM: 2nd 16KB pageConfig.ammuPageType = AMMU_PAGE_TYPE_SMALL; pageConfig.ammuPageNum = 2U; pageConfig.policyRegVal = 0x0001000B; // (L1_CACHABLE | VOLATILE | 16KB | ENABLE) pageConfig.physicalAddress = 0x55024000; pageConfig.logicalAddress = 0x00004000; AMMUConfigPage(SOC_IPU1_UNICACHE_MMU_BASE, &pageConfig); // Mapping IPU_RAM: 3nd 16KB pageConfig.ammuPageType = AMMU_PAGE_TYPE_SMALL; pageConfig.ammuPageNum = 3U; pageConfig.policyRegVal = 0x0001000B; // (L1_CACHABLE | VOLATILE | 16KB | ENABLE) pageConfig.physicalAddress = 0x55028000; pageConfig.logicalAddress = 0x00008000; AMMUConfigPage(SOC_IPU1_UNICACHE_MMU_BASE, &pageConfig);
Thanks