]> git.sur5r.net Git - u-boot/blobdiff - drivers/ddr/altera/sdram.c
ARM: socfpga: Repair A10 EMAC reset handling
[u-boot] / drivers / ddr / altera / sdram.c
index da7f27f056b7fd72b11101f7fc451071859fff7e..821060459cf143af860ef749666f71af9f90772c 100644 (file)
@@ -1,7 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright Altera Corporation (C) 2014-2015
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 #include <common.h>
 #include <errno.h>
 #include <asm/arch/system_manager.h>
 #include <asm/io.h>
 
-DECLARE_GLOBAL_DATA_PTR;
-
 struct sdram_prot_rule {
-       u64     sdram_start;    /* SDRAM start address */
-       u64     sdram_end;      /* SDRAM end address */
+       u32     sdram_start;    /* SDRAM start address */
+       u32     sdram_end;      /* SDRAM end address */
        u32     rule;           /* SDRAM protection rule number: 0-19 */
        int     valid;          /* Rule valid or not? 1 - valid, 0 not*/
 
@@ -109,8 +106,8 @@ static int get_errata_rows(const struct socfpga_sdram_config *cfg)
 /* SDRAM protection rules vary from 0-19, a total of 20 rules. */
 static void sdram_set_rule(struct sdram_prot_rule *prule)
 {
-       uint32_t lo_addr_bits;
-       uint32_t hi_addr_bits;
+       u32 lo_addr_bits;
+       u32 hi_addr_bits;
        int ruleno = prule->rule;
 
        /* Select the rule */
@@ -120,9 +117,9 @@ static void sdram_set_rule(struct sdram_prot_rule *prule)
        lo_addr_bits = prule->sdram_start >> 20ULL;
        hi_addr_bits = (prule->sdram_end - 1) >> 20ULL;
 
-       debug("sdram set rule start %x, %lld\n", lo_addr_bits,
+       debug("sdram set rule start %x, %d\n", lo_addr_bits,
              prule->sdram_start);
-       debug("sdram set rule end   %x, %lld\n", hi_addr_bits,
+       debug("sdram set rule end   %x, %d\n", hi_addr_bits,
              prule->sdram_end);
 
        /* Set rule addresses */
@@ -146,14 +143,14 @@ static void sdram_set_rule(struct sdram_prot_rule *prule)
 
 static void sdram_get_rule(struct sdram_prot_rule *prule)
 {
-       uint32_t addr;
-       uint32_t id;
-       uint32_t data;
+       u32 addr;
+       u32 id;
+       u32 data;
        int ruleno = prule->rule;
 
        /* Read the rule */
        writel(ruleno, &sdr_ctrl->prot_rule_rdwr);
-       writel(ruleno | (1L << 6), &sdr_ctrl->prot_rule_rdwr);
+       writel(ruleno | (1 << 6), &sdr_ctrl->prot_rule_rdwr);
 
        /* Get the addresses */
        addr = readl(&sdr_ctrl->prot_rule_addr);
@@ -174,7 +171,8 @@ static void sdram_get_rule(struct sdram_prot_rule *prule)
        prule->result = (data >> 13) & 0x1;
 }
 
-static void sdram_set_protection_config(uint64_t sdram_start, uint64_t sdram_end)
+static void
+sdram_set_protection_config(const u32 sdram_start, const u32 sdram_end)
 {
        struct sdram_prot_rule rule;
        int rules;
@@ -217,10 +215,11 @@ static void sdram_dump_protection_config(void)
              readl(&sdr_ctrl->protport_default));
 
        for (rules = 0; rules < 20; rules++) {
+               rule.rule = rules;
                sdram_get_rule(&rule);
                debug("Rule %d, rules ...\n", rules);
-               debug("    sdram start %llx\n", rule.sdram_start);
-               debug("    sdram end   %llx\n", rule.sdram_end);
+               debug("    sdram start %x\n", rule.sdram_start);
+               debug("    sdram end   %x\n", rule.sdram_end);
                debug("    low prot id %d, hi prot id %d\n",
                      rule.lo_prot_id,
                      rule.hi_prot_id);
@@ -416,6 +415,9 @@ static void sdr_load_regs(const struct socfpga_sdram_config *cfg)
 
        debug("Configuring DRAMODT\n");
        writel(cfg->dram_odt, &sdr_ctrl->dram_odt);
+
+       debug("Configuring EXTRATIME1\n");
+       writel(cfg->extratime1, &sdr_ctrl->extratime1);
 }
 
 /**
@@ -457,7 +459,7 @@ int sdram_mmr_init_full(unsigned int sdr_phy_reg)
                        SDR_CTRLGRP_STATICCFG_APPLYCFG_MASK,
                        1 << SDR_CTRLGRP_STATICCFG_APPLYCFG_LSB);
 
-       sdram_set_protection_config(0, sdram_calculate_size());
+       sdram_set_protection_config(0, sdram_calculate_size() - 1);
 
        sdram_dump_protection_config();