imx: imx8qm/qxp: Fix issue in get_effective_memsize
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 is relocated to the high memory where has been occupied by Trusty OS. Reviewed-by: Peng Fan <peng.fan@nxp.com> Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
parent
f44afd546f
commit
7c351ff5e0
1 changed files with 3 additions and 3 deletions
|
@ -223,7 +223,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;
|
||||
|
@ -231,9 +231,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 */
|
||||
|
|
Loading…
Reference in a new issue