Message ID | 4f41b6650930e51fa0ad0649835cf3670a2cada5.1594380012.git.michal.simek@xilinx.com |
---|---|
State | Accepted |
Commit | c8da6513c054c150640e8ad12185bd53ae1852fc |
Headers | show |
Series | xilinx: Setup bootm variables | expand |
pá 10. 7. 2020 v 13:20 odesílatel Michal Simek <michal.simek@xilinx.com> napsal: > > On system with PL DDR which is placed before PS DDR in DT > env_get_bootm_size() and env_get_bootm_low() without specifying bootm_low > and bootm_size variables are taking by default gd->bd->bi_dram[0].start and > gd->bd->bi_dram[0].size. As you see 0 means bank 0 which doesn't need to be > PS ddr and even can be memory above 39bit VA which is what U-Boot supports > now. > That's why setup bootm variables based on ram_base/ram_size setting to make > sure that boot images are placed to the same location as U-Boot is placed. > This location should be by default location where OS can boot from. > > Signed-off-by: Michal Simek <michal.simek@xilinx.com> > --- > > board/xilinx/common/board.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c > index 0469e2e7ac9b..3bca3a25a97b 100644 > --- a/board/xilinx/common/board.c > +++ b/board/xilinx/common/board.c > @@ -86,5 +86,8 @@ int board_late_init_xilinx(void) > initrd_hi = round_down(initrd_hi, SZ_16M); > env_set_addr("initrd_high", (void *)initrd_hi); > > + env_set_addr("bootm_low", (void *)gd->ram_base); > + env_set_addr("bootm_size", (void *)gd->ram_size); > + > return 0; > } > -- > 2.27.0 > Applied. M -- Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91 w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel - Xilinx Microblaze Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal SoCs
diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c index 0469e2e7ac9b..3bca3a25a97b 100644 --- a/board/xilinx/common/board.c +++ b/board/xilinx/common/board.c @@ -86,5 +86,8 @@ int board_late_init_xilinx(void) initrd_hi = round_down(initrd_hi, SZ_16M); env_set_addr("initrd_high", (void *)initrd_hi); + env_set_addr("bootm_low", (void *)gd->ram_base); + env_set_addr("bootm_size", (void *)gd->ram_size); + return 0; }
On system with PL DDR which is placed before PS DDR in DT env_get_bootm_size() and env_get_bootm_low() without specifying bootm_low and bootm_size variables are taking by default gd->bd->bi_dram[0].start and gd->bd->bi_dram[0].size. As you see 0 means bank 0 which doesn't need to be PS ddr and even can be memory above 39bit VA which is what U-Boot supports now. That's why setup bootm variables based on ram_base/ram_size setting to make sure that boot images are placed to the same location as U-Boot is placed. This location should be by default location where OS can boot from. Signed-off-by: Michal Simek <michal.simek at xilinx.com> --- board/xilinx/common/board.c | 3 +++ 1 file changed, 3 insertions(+)