Hi,
I've got a couple of iMX6 Quad modules here from a large manufacturer in a 1 GB and 2 GB version. On both of these I have to disable MMDC arbitration to get the DDR Stress Test to succeed. With MMDC arbitration enabled (MAARCR left as reset default, bit 26 ARCR_ARB_REO_DIS cleared), the DDR Stress Test almost always fails in the first iteration (and if not; in the 2nd iteration):
DDR Stress Test Iteration 1
Current Temperature: 47
============================================
DDR Freq: 528 MHz
t0.1: data is addr test
t0: memcpy10 SSN x64 test
t1: memcpy8 SSN x64 test
t2: byte-wise SSN x64 test
t3: memcpy11 random pattern test
test1 Address: 0x21b80080
Data initally read was: 0x55555555
Data re-read is: 0x55555555
But pattern was: 0x804f2578
Bit location: 0xd51a702d
Error: failed to run stress test!!!
If I add the following (after setting the CS end and before writing to MDCTL) in the script:
setmem /32 0x021b0040 = 0x00000047 // CS0_END
//setmem /32 0x021b0400 = 0x514201F0 // MAARCR reset default - This causes random pattern test failures in the NXP DDR Stress Test Tool
setmem /32 0x021b0400 = 0x554201F0 // MAARCR Disable MMDC arbitration - This allows the NXP DDR Stress Test to run forever without errors
setmem /32 0x021b0000 = 0x841A0000 // MMDC0_MDCTL
...then the Stress test continues without errors indefinitely.
I have worked on a lot of different iMX6 designs (>70) and I have NEVER seen any board or module require MMDC arbitration to be disabled.
What could be the reason for this?
Ok, turns out these modules are actually DQPlus modules.
The DQP Script aid sets MAARCR to 0x14420000 (reset default is 0x514201F0).
Weird things are being set and cleared. I would love to hear from NXP why:
As you can see, the value of DYN_JMP is actually in violation of the requirement that "ARCR_DYN_JMP must be smaller than ARCR_DYN_MAX". Currently they are equal (both 0)...
I would love to hear why MAARCR is setup like this in the D/Q Plus DDR script aid.
I've also tested with an MAARCR value of 0x54420010 (this leaves ARCR_SEC_ERR_EN set as per reset default, and it now follows the requirement of ARCR_DYN_JMP to be smaller than ARCR_DYN_MAX). This also works.
As a final step, I set MAARCR to the reset default, apart from bit 26 which disables MMDC arbitration, and this bit is indeed the key. When bit 26 of MAARCR is set (meaning MMDC arbitration is disabled) the DDR scripts works. With it left cleared (as reset default, meaning MMDC arbitration enabled), the DDR scripts fail to complete the DDR Stress Tests.
NXP engineers, could you please reply to my questions?