This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Why the address width of MMU-500 is different with Cortex-A53/57?

I find the description below from MMU-500 TRM.

Address width

The incoming address width is fixed at 49 bits, where A[48] specifies VA sub-ranges. You must tie all unused bits to zero. The output address width is 48 bits and the width of the AC address

bus is 48 bits.

But I know that the AXI address width of Cortex-A53/57 is 44 bits.

So If Cortex-A53/57 and MMU500 are connected with the same CCI-400 interconnect, will CCI-400 ensure the matching of  address width, or will MMU500 only connect 44 bits output address with CCI-400?

And I find that the address width of Cortex-A7/15 and MMU-400 is 40 bits, I am confused about MMU-500.

Would you please kindly explain this? Thanks.

  • It's to support stage 1 translation.

    The virtual address space in AArch64 is 48 bits (0x0 to 0x0000,FFFF,FFFF,FFFF).  For EL1/0 there is another 48-bit range at the top of the 64-bit range (0xFFFF,0000,0000,0000 to 0xFFFF,FFFF,FFFF,FFFF).

    The figure you quoted (44 bits) is the size of the supported physical address width. 

    When configured to perform stage 1 translation, the SMMU needs to support these address ranges as inputs.

  • Thanks.

    According to your description I am clear about why MMU-500 has 48-bits address. But the physical address width of Cortex-A53/A57 and CCI-400 is 44 bits,  and the physical address width of MMU-500 is 48 bits. So when MMU-500 is connected with CCI-400, does MMU-500 only use 44 bits?

  • Something I should have added to my earlier post...  ARM8-A allows for up to 48 bits of physical address.  While the Cortex-A57/A53 don't support that many, other implementations might.

    Looking the CCI-400 TRM, it supports up to 40-bits of physical address:

    ARM CoreLink CCI-400 Cache Coherent Interconnect Technical Reference Manual: 3.4. Address map

    This doesn't change the fact that the MMU-500 would need to support 49-bit addresses as inputs, if you wanted to be able to do stage 1 translations.  But it would give a practical limit on the size of physical address you could translate to.

  • Thanks a lot. I also find that the address width of MMU500 is configurable from the description below.

    SMMU_IDR2:

    UBS, bits[11:8] Upstream Bus Size. The encoding of this field is:

    0b0000        32-bit upstream bus size.

    0b0001        36-bit upstream bus size.

    0b0010        40-bit upstream bus size.

    0b0011        42-bit upstream bus size.

    0b0100        44-bit upstream bus size.

    0b0101        49-bit upstream bus size.

    OAS, bits[7:4] Output Address Size. This specifies the maximum number of PA bits that an SMMU implementation supports:

    0b0000        32-bit.

    0b0001        36-bit.

    0b0010        40-bit.

    0b0011        42-bit.

    0b0100        44-bit.

    0b0101        48-bit.

    IAS, bits[3:0]  IPA Address Size. This specifies the maximum number of IPA bits that an SMMU implementation supports:

    0b0000        32-bit.

    0b0001        36-bit.

    0b0010        40-bit.

    0b0011        42-bit.

    0b0100        44-bit.

    0b0101        48-bit.