diff options
Diffstat (limited to 'drivers/ddr')
-rw-r--r-- | drivers/ddr/altera/sdram.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/ddr/altera/sdram.c b/drivers/ddr/altera/sdram.c index 5267ddc1b4..b540c788ed 100644 --- a/drivers/ddr/altera/sdram.c +++ b/drivers/ddr/altera/sdram.c @@ -12,12 +12,6 @@ #include <asm/arch/system_manager.h> #include <asm/io.h> -/* - * FIXME: This path is temporary until the SDRAM driver gets - * a proper thorough cleanup. - */ -#include "../../../board/altera/socfpga/qts/sdram_config.h" - DECLARE_GLOBAL_DATA_PTR; struct sdram_prot_rule { @@ -470,6 +464,13 @@ unsigned long sdram_calculate_size(void) { unsigned long temp; unsigned long row, bank, col, cs, width; + const struct socfpga_sdram_config *cfg = socfpga_get_sdram_config(); + const unsigned int csbits = + ((cfg->dram_addrw & SDR_CTRLGRP_DRAMADDRW_CSBITS_MASK) >> + SDR_CTRLGRP_DRAMADDRW_CSBITS_LSB) + 1; + const unsigned int rowbits = + (cfg->dram_addrw & SDR_CTRLGRP_DRAMADDRW_ROWBITS_MASK) >> + SDR_CTRLGRP_DRAMADDRW_ROWBITS_LSB; temp = readl(&sdr_ctrl->dram_addrw); col = (temp & SDR_CTRLGRP_DRAMADDRW_COLBITS_MASK) >> @@ -490,7 +491,7 @@ unsigned long sdram_calculate_size(void) */ row = readl(&sysmgr_regs->iswgrp_handoff[4]); if (row == 0) - row = CONFIG_HPS_SDR_CTRLCFG_DRAMADDRW_ROWBITS; + row = rowbits; /* If the stored handoff value for rows is greater than * the field width in the sdr.dramaddrw register then * something is very wrong. Revert to using the the #define @@ -498,7 +499,7 @@ unsigned long sdram_calculate_size(void) * using a broken value. */ if (row > 31) - row = CONFIG_HPS_SDR_CTRLCFG_DRAMADDRW_ROWBITS; + row = rowbits; bank = (temp & SDR_CTRLGRP_DRAMADDRW_BANKBITS_MASK) >> SDR_CTRLGRP_DRAMADDRW_BANKBITS_LSB; @@ -512,7 +513,7 @@ unsigned long sdram_calculate_size(void) SDR_CTRLGRP_DRAMADDRW_CSBITS_LSB; cs += 1; - cs = CONFIG_HPS_SDR_CTRLCFG_DRAMADDRW_CSBITS; + cs = csbits; width = readl(&sdr_ctrl->dram_if_width); /* ECC would not be calculated as its not addressible */ |