We have this issue on few of the built boards. Most of the boards are working fine.
Hardware details:
Imx6q.
The EHCI host controller is connected to USB hub – SMSC 2514. In which, an USB to serial controller is connected (EXAR XR21V1414IM48).
Linux kernel version: 4.9.88
U-Boot version: 2014.04 v7
We have done the DDR calibration and those values are put into the U-Boot. We used the U-Boot method, as mentioned in the link https://community.nxp.com/docs/DOC-105652 for DDR calibration.
We have ran the DDR calibration on different boards, the results are shown below.
MMDC_MPWLDECTRL0 (ch0) | 0x00150013 | 0x0025001F | 0x00150017 | 0x00180018 | 0x002E0030 | 0x0022001F | 0x00190021 | 0x001C001B | 0x00190017 | 0x0019001B | 0x00170017 |
MMDC_MPWLDECTRL1 (ch0) | 0x001D0018 | 0x002A0023 | 0x0021001A | 0x0022001D | 0x00300030 | 0x002B0028 | 0x00230019 | 0x0028001C | 0x0023001E | 0x0021001B | 0x0026001F |
MMDC_MPWLDECTRL0 (ch1) | 0x00070019 | 0x0013001F | 0x000E001C | 0x00120021 | 0x000A001A | 0x0015002A | 0x00180027 | 0x000E0018 | 0x000C001D | 0x00170027 | 0x000D001D |
MMDC_MPWLDECTRL1 (ch1) | 0x000A0019 | 0x00110026 | 0x0007001A | 0x0007001C | 0x00050012 | 0x001D001F | 0x00110025 | 0x00040015 | 0x00000018 | 0x00140024 | 0x00000015 |
MPDGCTRL0 PHY0 | 0x431C0334 | 0x43200338 | 0x43240330 | 0x4324033C | 0x43440358 | 0x457C060C | 0x432C0344 | 0x43280334 | 0x43280338 | 0x432C033C | 0x43300344 |
MPDGCTRL1 PHY0 | 0x031C0310 | 0x03200318 | 0x031C0310 | 0x031C0314 | 0x033C0334 | 0x06140618 | 0x032C031C | 0x0328031C | 0x03240318 | 0x03240318 | 0x03280318 |
MPDGCTRL0 PHY1 | 0x43280334 | 0x43200334 | 0x43200334 | 0x43200330 | 0x43340344 | 0x46380644 | 0x43280338 | 0x43200334 | 0x43200330 | 0x43280344 | 0x432C0338 |
MPDGCTRL1 PHY1 | 0x03280270 | 0x0328026C | 0x031C0260 | 0x031C0264 | 0x03300270 | 0x057C054C | 0x0328026C | 0x0320026C | 0x031C0268 | 0x03300270 | 0x03200264 |
MPRDDLCTL PHY0 | 0x463C3C3E | 0x463A3E3E | 0x483A3C3E | 0x4E3E4042 | 0x4A404246 | 0x463E3A3A | 0x4E3A3E42 | 0x4E3C3E40 | 0x4A3A3E3E | 0x4A3A3C42 | 0x4A3A3E42 |
MPRDDLCTL PHY1 | 0x46463C4A | 0x46463C4E | 0x403E3A4C | 0x403A384A | 0x423E3C48 | 0x443A3C48 | 0x443E3648 | 0x42423A46 | 0x42443E4A | 0x48443E4E | 0x3E3E3A48 |
MPWRDLCTL PHY0 | 0x363A3C3A | 0x363C3E3E | 0x383C4040 | 0x363A3E3A | 0x343E3E3C | 0x3A3A403E | 0x383E443E | 0x343E423A | 0x323C403C | 0x363E3E3C | 0x3A3E403C |
MPWRDLCTL PHY1 | 0x48344A3A | 0x46344A3E | 0x4438483E | 0x44324838 | 0x44364638 | 0x463C5042 | 0x4432443C | 0x4234463C | 0x463A4A40 | 0x42344A3E | 0x4436483A |
Test application being ran:
A test application is being run, this will write some data (12 bytes) continuously onto the USB to serial port.
The issue is on few boards, the system just hung (no output in the console). On few boards, there is some kernel panic/crash messages. These messages are not consistent, we get randomly.
Also, the issue reproducing time on a particular board varies from 5 mins to 3 hours.
We have tried disabling the DDR self-refresh, MMDCx_MDMISC Bit 16 (WALAT) is SET to 1, as posted in other threads and changing the kernel configuration to CONFIG_PREEMPT_VOLUNTARY, we see improvements. But, these stuffs doesn’t fix the issue.
Our question:
- Is there any known issues similar to this?
- Any patches are available that can be tried?
- Based on the provided table, what is the best DDR configuration to be used, to eliminate DDR issues?