cmd: ti: ddr3: Fix ecc address calculation
authorLokesh Vutla <lokeshvutla@ti.com>
Mon, 16 Sep 2019 08:17:16 +0000 (13:47 +0530)
committerTom Rini <trini@konsulko.com>
Fri, 11 Oct 2019 17:31:17 +0000 (13:31 -0400)
ecc_address_range registers contains the start address and end address
of the DDR address space. But the ddr cmd driver is assuming the register
contains the start address and size of the DDR address space. Because
of this some valid ecc addresses are errored out as invalid address.
Fix this calculation.

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
cmd/ti/ddr3.c

index b82cbe152dc93361f5ea2ceace7db4c36aa1ac6e..34f870ab43a9acdd0b6774a13afccbe70f53ba65 100644 (file)
@@ -242,8 +242,8 @@ static int is_addr_valid(u32 addr)
        if (ecc_ctrl & EMIF_ECC_REG_ECC_ADDR_RGN_1_EN_MASK) {
                start_addr = ((range & EMIF_ECC_REG_ECC_START_ADDR_MASK) << 16)
                                + CONFIG_SYS_SDRAM_BASE;
-               end_addr = start_addr + (range & EMIF_ECC_REG_ECC_END_ADDR_MASK)
-                               + 0xFFFF;
+               end_addr = (range & EMIF_ECC_REG_ECC_END_ADDR_MASK) + 0xFFFF +
+                               CONFIG_SYS_SDRAM_BASE;
                if ((addr >= start_addr) && (addr <= end_addr))
                        /* addr within ecc address range 1 */
                        return 1;
@@ -254,8 +254,8 @@ static int is_addr_valid(u32 addr)
                range = readl(&emif->emif_ecc_address_range_2);
                start_addr = ((range & EMIF_ECC_REG_ECC_START_ADDR_MASK) << 16)
                                + CONFIG_SYS_SDRAM_BASE;
-               end_addr = start_addr + (range & EMIF_ECC_REG_ECC_END_ADDR_MASK)
-                               + 0xFFFF;
+               end_addr = (range & EMIF_ECC_REG_ECC_END_ADDR_MASK) + 0xFFFF +
+                               CONFIG_SYS_SDRAM_BASE;
                if ((addr >= start_addr) && (addr <= end_addr))
                        /* addr within ecc address range 2 */
                        return 1;