ddr: socfpga: Enable ARM64 Non-Secure SDRAM ECC Access
authorThor Thayer <thor.thayer@linux.intel.com>
Fri, 6 Dec 2019 19:47:32 +0000 (13:47 -0600)
committerMarek Vasut <marex@denx.de>
Tue, 7 Jan 2020 13:38:34 +0000 (14:38 +0100)
The ECC registers in the SDRAM HMC Adapter should always
be accessible (both when ECC is enabled and disabled).
Currently, the registers are accessible only when ECC is enabled.

The ECC Enabled bit is used to determine the status of
ECC by later OSes so always allow access.

Signed-off-by: Thor Thayer <thor.thayer@linux.intel.com>
Reviewed-by: Ley Foon Tan <ley.foon.tan@intel.com>
drivers/ddr/altera/sdram_agilex.c
drivers/ddr/altera/sdram_s10.c

index cc7679a6e4c14acd6dbfbf1973340a2a5761e14b..0cbcd14056070de04efd57978f2a398526b11f97 100644 (file)
@@ -143,9 +143,6 @@ int sdram_mmr_init_full(struct udevice *dev)
                setbits_le32(plat->hmc + ERRINTEN,
                             DDR_HMC_ERRINTEN_DERRINTEN_EN_SET_MSK);
 
-               /* Enable non-secure writes to HMC Adapter for SDRAM ECC */
-               writel(FW_HMC_ADAPTOR_MPU_MASK, FW_HMC_ADAPTOR_REG_ADDR);
-
                if (!cpu_has_been_warmreset())
                        sdram_init_ecc_bits(&bd);
        } else {
@@ -158,6 +155,9 @@ int sdram_mmr_init_full(struct udevice *dev)
                              DDR_HMC_ECCCTL2_AWB_EN_SET_MSK));
        }
 
+       /* Enable non-secure reads/writes to HMC Adapter for SDRAM ECC */
+       writel(FW_HMC_ADAPTOR_MPU_MASK, FW_HMC_ADAPTOR_REG_ADDR);
+
        sdram_size_check(&bd);
 
        priv->info.base = bd.bi_dram[0].start;
index cf586ac860dc61ce25dc0f4322013b1983280d39..93c15dd18b3a7ef61edd3b91f351ad8460a87f9b 100644 (file)
@@ -307,9 +307,6 @@ int sdram_mmr_init_full(struct udevice *dev)
                              DDR_HMC_ECCCTL2_AWB_EN_SET_MSK));
                hmc_ecc_writel(plat, DDR_HMC_ERRINTEN_INTMASK, ERRINTENS);
 
-               /* Enable non-secure writes to HMC Adapter for SDRAM ECC */
-               writel(FW_HMC_ADAPTOR_MPU_MASK, FW_HMC_ADAPTOR_REG_ADDR);
-
                /* Initialize memory content if not from warm reset */
                if (!cpu_has_been_warmreset())
                        sdram_init_ecc_bits(&bd);
@@ -323,6 +320,9 @@ int sdram_mmr_init_full(struct udevice *dev)
                              DDR_HMC_ECCCTL2_AWB_EN_SET_MSK));
        }
 
+       /* Enable non-secure reads/writes to HMC Adapter for SDRAM ECC */
+       writel(FW_HMC_ADAPTOR_MPU_MASK, FW_HMC_ADAPTOR_REG_ADDR);
+
        sdram_size_check(&bd);
 
        priv->info.base = bd.bi_dram[0].start;