This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

GPMC disabled after MMU initialization.

Other Parts Discussed in Thread: SEGGER

Using Segger embOS on the BeagleBone board with IAR.

When running out of DDR as soon as the MMU is enabled by the OS the GPMC register area is unavailable. The CM-PER_GPMC_CLKCTRL is still showing 0x02 for module mode and the status is idle. All is OK until the MMU is enabled.

I am using the GPMC for an FPGA memory mapped interface and just need one chip select and 1 MByte of address space.

Is there any way to have the MMU working with the GPMC for my desired purpose?

Below is the Segger MMU TLB initialization code, during the OS_ARM_MMU_Enable routine the GMPC becomes disabled, I do not have the source for the OS. Any suggestions are appreciated.

OS_ARM_MMU_InitTT(_TranslationTable);
  //                                         Mode                      VAddr  PAddr  Size[MB]
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_ILLEGAL, 0x000, 0x000, 0x402);    // Unmapped area
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_C_B,     0x402, 0x402, 0x001);    // internal SRAM (48kByte), 1 MB (program area)
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_C_B,     0x403, 0x403, 0x001);    // internal SRAM (64kByte), 1 MB (program area)
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_ILLEGAL, 0x404, 0x404, 0x03C);    // Unmapped area
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_NC_NB,   0x440, 0x440, 0x0C0);    // SFRs, non cacheable, non bufferable
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_ILLEGAL, 0x500, 0x500, 0x180);    // Unmapped area
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_NC_NB,   0x680, 0x680, 0x080);    // L3 Interconnect (128 MByte)
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_ILLEGAL, 0x700, 0x700, 0x100);    // Unmapped area
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_C_B,     0x800, 0x800, 0x100);    // external SDRAM (256 MByte), 1 MB (program area)
  OS_ARM_MMU_AddTTEntries(_TranslationTable, OS_ARM_CACHEMODE_ILLEGAL, 0x900, 0x900, 0x700);    // Unmapped area

  OS_ARM_MMU_Enable      (_TranslationTable);
  OS_ARM_ICACHE_Enable();
  OS_ARM_DCACHE_Enable();

  • Looking through your mappings I don't see any of them explicitly mapping the GPMC or its registers.  I didn't know what was meant by "SFR" so unless it was that one, I didn't see it... That said, once you enable the MMU all memory accesses are done by virtual addresses.  You would need to have a mapping in place to tie some virtual address to the physical address corresponding to GPMC and its registers.  It looks like the table is implementing a straight pass-through where the virtual address is equivalent to the physical address.  However, any addresses that don't show up in the table won't be accessible with the MMU enabled.

  • Ah Yes, ALL memory accesses.

    I didn't think the GPMC was used with the MMU mapping. 

    I will map it up.

    Thank you.