summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/dram_ctrl.cc7
-rw-r--r--src/mem/dram_ctrl.hh6
2 files changed, 8 insertions, 5 deletions
diff --git a/src/mem/dram_ctrl.cc b/src/mem/dram_ctrl.cc
index dc47818e3..e4248b337 100644
--- a/src/mem/dram_ctrl.cc
+++ b/src/mem/dram_ctrl.cc
@@ -215,7 +215,9 @@ DRAMCtrl::decodeAddr(PacketPtr pkt, Addr dramPktAddr, unsigned size,
// channel, respectively
uint8_t rank;
uint8_t bank;
- uint16_t row;
+ // use a 64-bit unsigned during the computations as the row is
+ // always the top bits, and check before creating the DRAMPacket
+ uint64_t row;
// truncate the address to the access granularity
Addr addr = dramPktAddr / burstSize;
@@ -294,6 +296,7 @@ DRAMCtrl::decodeAddr(PacketPtr pkt, Addr dramPktAddr, unsigned size,
assert(rank < ranksPerChannel);
assert(bank < banksPerRank);
assert(row < rowsPerBank);
+ assert(row < Bank::NO_ROW);
DPRINTF(DRAM, "Address: %lld Rank %d Bank %d Row %d\n",
dramPktAddr, rank, bank, row);
@@ -750,7 +753,7 @@ DRAMCtrl::accessAndRespond(PacketPtr pkt, Tick static_latency)
void
DRAMCtrl::activateBank(Tick act_tick, uint8_t rank, uint8_t bank,
- uint16_t row, Bank& bank_ref)
+ uint32_t row, Bank& bank_ref)
{
assert(0 <= rank && rank < ranksPerChannel);
assert(actTicks[rank].size() == activationLimit);
diff --git a/src/mem/dram_ctrl.hh b/src/mem/dram_ctrl.hh
index 0dbff7eaf..c8104a49d 100644
--- a/src/mem/dram_ctrl.hh
+++ b/src/mem/dram_ctrl.hh
@@ -211,7 +211,7 @@ class DRAMCtrl : public AbstractMemory
/** Will be populated by address decoder */
const uint8_t rank;
const uint8_t bank;
- const uint16_t row;
+ const uint32_t row;
/**
* Bank id is calculated considering banks in all the ranks
@@ -242,7 +242,7 @@ class DRAMCtrl : public AbstractMemory
Bank& bankRef;
DRAMPacket(PacketPtr _pkt, bool is_read, uint8_t _rank, uint8_t _bank,
- uint16_t _row, uint16_t bank_id, Addr _addr,
+ uint32_t _row, uint16_t bank_id, Addr _addr,
unsigned int _size, Bank& bank_ref)
: entryTime(curTick()), readyTime(curTick()),
pkt(_pkt), isRead(is_read), rank(_rank), bank(_bank), row(_row),
@@ -394,7 +394,7 @@ class DRAMCtrl : public AbstractMemory
* @param bank_ref Reference to the bank
*/
void activateBank(Tick act_tick, uint8_t rank, uint8_t bank,
- uint16_t row, Bank& bank_ref);
+ uint32_t row, Bank& bank_ref);
/**
* Precharge a given bank and also update when the precharge is