MLK-19546 imx8qm/qxp: Fix issue in get_effective_memsize
authorYe Li <ye.li@nxp.com>
Tue, 11 Sep 2018 08:14:41 +0000 (01:14 -0700)
committerYe Li <ye.li@nxp.com>
Fri, 24 May 2019 08:48:14 +0000 (01:48 -0700)
When Trusty OS allocates the mem region from 0xfe0000000-0xffffffff, the get_effective_memsize
does not return correct memory size. There is a check in get_effective_memsize to find the memreg
where the u-boot is running, and return the size of that memreg as the result of get_effective_memsize.
When using aligned start, the value is 0x80200000 since it is 2MB aligned. Thus the finding of memreg
will fail and return the PHYS_SDRAM_1_SIZE because u-boot text base is 0x80020000.
This cause u-boot relocating to the high memory where has been occupied by Trusty OS.

Signed-off-by: Ye Li <ye.li@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
(cherry picked from commit 13fccde4c694453a3a038c4fb5fdb38cb7327747)

arch/arm/mach-imx/imx8/cpu.c

index 7361dbc..88341b6 100644 (file)
@@ -501,7 +501,7 @@ static int get_owned_memreg(sc_rm_mr_t mr, sc_faddr_t *addr_start,
 phys_size_t get_effective_memsize(void)
 {
        sc_rm_mr_t mr;
-       sc_faddr_t start, end, end1;
+       sc_faddr_t start, end, end1, start_aligned;
        int err;
 
        end1 = (sc_faddr_t)PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE;
@@ -509,9 +509,9 @@ phys_size_t get_effective_memsize(void)
        for (mr = 0; mr < 64; mr++) {
                err = get_owned_memreg(mr, &start, &end);
                if (!err) {
-                       start = roundup(start, MEMSTART_ALIGNMENT);
+                       start_aligned = roundup(start, MEMSTART_ALIGNMENT);
                        /* Too small memory region, not use it */
-                       if (start > end)
+                       if (start_aligned > end)
                                continue;
 
                        /* Find the memory region runs the U-Boot */