Arria® V SX and ST SoC Errata

ID 683370
Date 7/14/2015
Public
Document Table of Contents

1.2.1.8. 754322: Faulty MMU Translations Following ASID Switch

Description

A μTLB entry might be corrupted following an ASID switch, possibly corrupting subsequent MMU translations.

This erratum requires execution of an explicit memory access that might be speculative. This type of memory access misses in the TLB and causes a translation walk. This erratum occurs when the translation table walk starts before the ASID switch code sequence, but completes after the ASID switch code sequence.

In this case, a new entry is allocated in the μTLB for the TLB entry of this translation table walk, but corresponds to the old ASID. Because the μTLB does not record the ASID value, the new MMU translation that should happen with the new ASID following the ASID switch, might hit this stale μTLB entry and become corrupted.

There is no security risk because the security state of the access is held in the μTLB and cannot be corrupted.

Impact

This erratum might cause MMU translation corruption.

Workaround

The workaround for this erratum is to add a DSB in the ASID switch code sequence. The Arm* architecture only mandates an ISB before and after the ASID switch. Adding a DSB before the ASID switch ensures that the translation table walk completes before the ASID change, so that no stale entry can be allocated in the μTLB.

Modify the examples in the Arm* Architecture Reference Manual for synchronizing the change in the ASID and TTBR as follows:

  1. The sequence:
    Change ASID to 0
    ISB
    Change Translation Table Base Register
    ISB
    Change ASID to new value
    Becomes:
    DSB
    Change ASID to 0
    ISB
    Change Translation Table Base Register
    ISB
    DSB
    Change ASID to new value
  2. This sequence:
    Change Translation Table Base Register to the global-only mappings
    ISB
    Change ASID to new value
    ISB
    Change Translation Table Base Register to new value
    Becomes:
    Change Translation Table Base Register to the global-only mappings
    ISB
    DSB
    Change ASID to new value
    ISB
    Change Translation Table Base Register to new value
  3. This sequence:
    Set TTBCR.PD0 = 1
    ISB
    Change ASID to new value
    Change Translation Table Base Register to new value
    ISB
    Set TTBCR.PD0 = 0
    Becomes:
    Set TTBCR.PD0 = 1
    ISB
    DSB
    Change ASID to new value
    Change Translation Table Base Register to new value
    ISB
    Set TTBCR.PD0 = 0

Category

Category 3