SPRZ536B September 2022 – July 2024 AM69 , AM69A , TDA4AH-Q1 , TDA4AP-Q1 , TDA4VH-Q1 , TDA4VP-Q1
DDR: Controller postpones more than allowed refreshes after frequency change
When dynamically switching from a higher to lower clock frequency, the rolling window counters that control the postponing of refresh commands are not loaded correctly to scale to the lower clock frequency. This will result in controller postponing more refresh commands than allowed by the DRAM specification, thus violating refresh requirement for the DRAM.
Workaround 1:Disable dynamic frequency change by programing DFS_ENABLE = 0
Workaround 2:If switching frequency, program the register field values based on the pseudo code listed below.Note that the controller requires AREF_*_THRESHOLD values to be programmed before triggering initialization. Their values cannot be changed during mission mode after initialization . Therefore, the value of these parameters must be the lowest of all values needed for every frequency change transition planned to be used.
if (old_freq/new_freq >= 7){
if (PBR_EN==1) { // Per-bank refresh is enabled
AREF_HIGH_THRESHOLD = 19
AREF_NORM_THRESHOLD = 18
AREF_PBR_CONT_EN_THRESHOLD = 17
AREF_CMD_MAX_PER_TREF = 8
}
else { // Per-bank refresh is disabled
AREF_HIGH_THRESHOLD = 18
AREF_NORM_THRESHOLD = 17
// AREF_PBR_CONT_EN_THRESHOLD <=== don’t care, PBR not enabled
AREF_CMD_MAX_PER_TREF = 8
}
}
else {
AREF_HIGH_THRESHOLD = 21
AREF_NORM_THRESHOLD //<=== keep AREF_NORM_THRESHOLD < AREF_HIGH_THRESHOLD
AREF_CMD_MAX_PER_TREF = 8
if (PBR_EN==1) { // Per-bank refresh is enabled
//keep AREF_PBR_CONT_EN_THRESHOLD<AREF_NORM_THRESHOLD<AREF_HIGH_THRESHOLD
AREF_PBR_CONT_EN_THRESHOLD
}
}