Hi Tom,
We previously reserved the CTLUPD_AREF based on the PHY IP which stated that the PHY did not responde to the signal from the controller. When we did that, we also reserved two fields associated with the CTLUPD signal: One that would return an error if the PHY did not acknowledge after the specified number of clock cycles, and one that would specify the minimum length of the CTLUPD signal.
Obviously the field that returns an error if it does not receive a response from the PHY is no good since the PHY IP already states that if will not send back any acknowledgement of the signal.
The other field is named TDFI_CTRLUPD_MIN. It carries the value of the minimum allowed pulse width of the CTRLUPD signal sent to the PHY for the update. This is CR127 bits [11:8]. Unfortunately, this field is Read Only. So it will not do any good.
With that, I am out of DDR controller ideas on what could be wrong.
What we know:
- It is a Write issue.
- It does not depend on the position within the four Byte burst (x2).
- It appears to be fixed to memory addresses
Because of this, it doesn't look like any timing issue, or FIFO issue, etc.
Can you please provide me a readout of the following registers when configured for 400 MHz and when configured for 200 MHz?
PHY11
PHY12
PHY27
PHY28
Field [15:8] of PHY11 and PHY27 is the DLL lock value.
Field [23:16] of PHY12 and PHY28 is the calculated number of delay elements for the Write DQS delay
Field [7:0] of PHY12 and PHY28 is the calculated number of delay elements for the Read DQS delay
The numbers for the 200 MHz values should be roughly double the numbers for the 400 MHz values.
Not that this would explain the above "what we know", but this would just verify that the DLLs are not having a problem with 200 MHz.
I am wondering if the issue lies outside the DDR controller registers. If the problem could lie:
- Within the ARM cache structure.
- At some interface timing in the NIC and associated interconnect bus.
- With the gdb server. (only because I am unfamiliar with it)
You are loading u-boot on your device to initialize the DDR controller.
Question: Is your cache enabled or disabled?
Do you get different results if you switch the condition of cache (enabled <> disabled)?
As far as I know, you are not running our Processor Expert ddrv tool. Would you be receptive to sending me one of your boards and let me try some experiments using my tools? I have both the J-Link debugger using a gdb server and the ddrv tool, and an ARM DSTREAM which has some bare metal code that works on Vybrid.
Maybe I can see something different at my desk.
Cheers,
Mark