mem: Fix address interleaving bug in DRAM controller
authorAndreas Hansson <andreas.hansson@arm.com>
Tue, 26 Aug 2014 14:12:45 +0000 (10:12 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Tue, 26 Aug 2014 14:12:45 +0000 (10:12 -0400)
commit56b7796e0d46f6296633b18e0eede042ab7cebc6
tree37e902186f419fa6b6c3c5c2e1846a99d26ff579
parent04d1f61ae8f2a40cfe61aaf0c0271b212da0c314
mem: Fix address interleaving bug in DRAM controller

This patch fixes a bug in the DRAM controller address decoding. In
cases where the DRAM burst size (e.g. 32 bytes in a rank with a single
LPDDR3 x32) was smaller than the channel interleaving size
(e.g. systems with a 64-byte cache line) one address bit effectively
got used as a channel bit when it should have been a low-order column
bit.

This patch adds a notion of "columns per stripe", and more clearly
deals with the low-order column bits and high-order column bits. The
patch also relaxes the granularity check such that it is possible to
use interleaving granularities other than the cache line size.

The patch also adds a missing M5_CLASS_VAR_USED to the tCK member as
it is only used in the debug build for now.
src/mem/dram_ctrl.cc
src/mem/dram_ctrl.hh