AM5726: AM572x Cortex-A15 r2p2 errats

Part Number: AM5726

Hello,

We are debugging an intermittent full A15 hang on an AM572x-based custom board.

System:
- SoC: AM572x / AM5728 custom board
- Cortex-A15 dual core
- Linux on A15_0
- A15_1 used by RTOS
- DSP remains accessible after the failure
- Linux version: TI kernel 4.19.94 RT based SDK
- Failure rate: after hours/days of runtime

Failure description:
After some runtime both A15_0 and A15_1 become inaccessible.
Linux console/network stop responding.
JTAG/CCS shows the A15 cores as running, but they cannot be halted.
Typical CCS error:
"Device failed to enter debug/halt mode because pipeline is stalled"
The DSP is still accessible through JTAG.

We checked the Cortex-A15 identification/errata registers using both CCS CP15 view and a small Linux kernel module reading CP15 registers.

Observed on Linux CPU0:

MIDR   = 0x412fc0f2
REVIDR = 0x00000000
ACTLR  = 0x00000041

MIDR decode:
- Implementer: 0x41 ARM
- Part: 0xC0F Cortex-A15
- Variant: 0x2 -> r2
- Revision: 0x2 -> p2

REVIDR decode:
- REVIDR[0] 794724 = 0
- REVIDR[1] 799271 = 0
- REVIDR[2] 798870 = 0
- REVIDR[3] 801819 = 0
- REVIDR[4] 798181 = 0

ACTLR decode:
- ACTLR[6] SMP bit = 1
- ACTLR[23] force in-order same set/way = 0
- ACTLR[28:25] write-streaming control = 0x0
- ACTLR[31] snoop-delayed exclusive handling = 0

From the ARM Cortex-A15 r2 errata document, REVIDR bits indicate implementation fixes:
- REVIDR[1] -> erratum 799271: Non-cacheable/streaming writes + DSB + snoop can deadlock
- REVIDR[2] -> erratum 798870: memory read can stall indefinitely in L2 cache
- REVIDR[3] -> erratum 801819: L1 eviction can stall in L2 write buffer preventing snoop completion

Since our REVIDR is 0x00000000, these implementation fixes do not appear to be present in this silicon.

Questions:
1. The register values below were observed in CCS/JTAG under the Cortex-A15 CP15 register view, and were also reproduced from Linux using a small kernel module that reads CP15 directly.

   MIDR   = 0x412fc0f2
   REVIDR = 0x00000000
   ACTLR  = 0x00000041

   Can TI confirm whether these reads are valid and reliable for AM572x Cortex-A15 r2p2?

2. What values should we expect on AM572x for the Cortex-A15 revision/errata-related registers, especially REVIDR, ACTLR, L2ACTLR, and ACTLR2?

3. Are there additional TI-recommended ways to validate the Cortex-A15 revision, REVIDR value, and active errata workaround configuration?

4. If any required workaround bits are missing, what is the correct TI-recommended place and method to configure them: SPL/MLO, U-Boot, Linux kernel, Jailhouse, or the RTOS running on A15_1?


We would appreciate TI guidance on this.
This is also realted to : https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1657355/am5726-a15-domain-lockup-after-several-days/6409497
I have also attached the A15 errate core version 20
 
 
 
 
 
  • Hi,

    Any crash logs or logs prior to this hang? What's the use case that's running when this? Is it just linux that's running?

    Best regards,

    Keerthy 

  • Hey,

    Thank you for the reply,

    You can see in the other thread that we are working to figure out the root cause of the crash.

    The system is running:

    Linux on A15_0 RTOS on A15_1 and DSP_0

    There are no signs or logs or any indication before the system hangs; after a few hours/days on only specific systems (from the same line) the cpu hangs.

    Jtag can't connect to any A core but can to DSP.

    We noticed that in A cores erratas have a simliar problem.

    That can't be changed on the software level - we were wondering why those changes aren't applied? 

    Is there a way to verify what should be there? In case the read is incorrect from jtag

    Thanks in advance,