Skip to content

Commit

Permalink
Fix LPDDR5 open row incorrect detection
Browse files Browse the repository at this point in the history
LPDDR5 execution hangs indefinitely (or triggers refresh watchdog)
because it does not check for the correct row state, generating
an infinite sequence of precharge commands. This commit fixes this
behavior by using the correct row index.

Fixes issue CMU-SAFARI#58.
  • Loading branch information
tommarin committed Oct 11, 2024
1 parent e62c84a commit 40422ee
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/dram/impl/LPDDR5.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ class LPDDR5 : public IDRAM, public Implementation {
case m_states["Closed"]: return m_commands["ACT-1"];
case m_states["Pre-Opened"]: return m_commands["ACT-2"];
case m_states["Opened"]: {
if (node->m_row_state.find(0) != node->m_row_state.end()) {
if (node->m_row_state.find(addr_vec[m_levels["row"]]) != node->m_row_state.end()) {
Node* rank = node->m_parent_node->m_parent_node;
if (rank->m_final_synced_cycle < clk) {
return m_commands["CASRD"];
Expand All @@ -482,7 +482,7 @@ class LPDDR5 : public IDRAM, public Implementation {
case m_states["Closed"]: return m_commands["ACT-1"];
case m_states["Pre-Opened"]: return m_commands["ACT-2"];
case m_states["Opened"]: {
if (node->m_row_state.find(0) != node->m_row_state.end()) {
if (node->m_row_state.find(addr_vec[m_levels["row"]]) != node->m_row_state.end()) {
Node* rank = node->m_parent_node->m_parent_node;
if (rank->m_final_synced_cycle < clk) {
return m_commands["CASWR"];
Expand Down

0 comments on commit 40422ee

Please sign in to comment.