diff options
author | Tom Rini <trini@konsulko.com> | 2024-07-22 13:48:24 -0600 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-07-22 13:48:24 -0600 |
commit | cfaa58b8b7839617a74a44a8f08b94b011f8edbc (patch) | |
tree | c95a63857d6c0cb43505def8826bbe8035bdb277 | |
parent | f1aa32d65d31c8f8a43617e724495d0aad011620 (diff) | |
parent | f1296bfff71b0cbac2241c0d6f1a88468c5af16d (diff) |
Merge patch series "Generalize PHYTEC Overlay Handling"
Daniel Schultz <d.schultz@phytec.de> says:
The overlays are specified in the bootenv.txt file that is loaded into
the environment. Then these overlays get loaded and applied via a script.
These scripts for loading and applying devicetree overlays are identical
for many phytec boards.
Create a common overlays.env that can be included.
Add support for devicetree overlays to phycore-imx8mp and include the
overlays.env for phycore-imx93.
Rename existing environment variables according to bootstd doc.
Move MMC boot logic into a common k3_mmc.env file and include the new
overlays.env file as well.
-rw-r--r-- | board/phytec/phycore_am62x/phycore_am62x.env | 11 | ||||
-rw-r--r-- | board/phytec/phycore_am64x/phycore_am64x.env | 12 | ||||
-rw-r--r-- | board/phytec/phycore_imx8mp/phycore_imx8mp.env | 27 | ||||
-rw-r--r-- | board/phytec/phycore_imx93/phycore_imx93.env | 45 | ||||
-rw-r--r-- | configs/phycore-imx8mp_defconfig | 4 | ||||
-rw-r--r-- | include/env/phytec/k3_mmc.env | 21 | ||||
-rw-r--r-- | include/env/phytec/overlays.env | 38 |
7 files changed, 97 insertions, 61 deletions
diff --git a/board/phytec/phycore_am62x/phycore_am62x.env b/board/phytec/phycore_am62x/phycore_am62x.env index 2d6475d408f..046bbd22f25 100644 --- a/board/phytec/phycore_am62x/phycore_am62x.env +++ b/board/phytec/phycore_am62x/phycore_am62x.env @@ -1,4 +1,5 @@ #include <env/ti/k3_dfu.env> +#include <env/phytec/k3_mmc.env> fdtaddr=0x88000000 loadaddr=0x82000000 @@ -14,13 +15,3 @@ mmcroot=2 mmcpart=1 console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000 -mmcargs=setenv bootargs console=${console} earlycon=${earlycon} - root=/dev/mmcblk${mmcdev}p${mmcroot} rootwait rw -loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} Image -loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} ${fdtfile} -mmcboot=run mmcargs; - mmc dev ${mmcdev}; - mmc rescan; - run loadimage; - run loadfdt; - booti ${loadaddr} - ${fdtaddr} diff --git a/board/phytec/phycore_am64x/phycore_am64x.env b/board/phytec/phycore_am64x/phycore_am64x.env index e24a958f51d..18f0fa5b4c3 100644 --- a/board/phytec/phycore_am64x/phycore_am64x.env +++ b/board/phytec/phycore_am64x/phycore_am64x.env @@ -1,3 +1,5 @@ +#include <env/phytec/k3_mmc.env> + fdtaddr=0x88000000 loadaddr=0x82000000 scriptaddr=0x80000000 @@ -12,13 +14,3 @@ mmcroot=2 mmcpart=1 console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000 -mmcargs=setenv bootargs console=${console} earlycon=${earlycon} - root=/dev/mmcblk${mmcdev}p${mmcroot} rootwait rw -loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} Image -loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} ${fdtfile} -mmcboot=run mmcargs; - mmc dev ${mmcdev}; - mmc rescan; - run loadimage; - run loadfdt; - booti ${loadaddr} - ${fdtaddr} diff --git a/board/phytec/phycore_imx8mp/phycore_imx8mp.env b/board/phytec/phycore_imx8mp/phycore_imx8mp.env index 7f6c5fd2c76..f8f878e8f3a 100644 --- a/board/phytec/phycore_imx8mp/phycore_imx8mp.env +++ b/board/phytec/phycore_imx8mp/phycore_imx8mp.env @@ -1,4 +1,5 @@ #include <env/phytec/rauc.env> +#include <env/phytec/overlays.env> bootcmd= if test ${dofastboot} = 1; then @@ -16,15 +17,17 @@ bootcmd= fi; fi; console=ttymxc0,115200 +bootenv_addr_r=0x49100000 +fdtoverlay_addr_r=0x49000000 dofastboot=0 emmc_dev=2 fastboot_raw_partition_all=0 4194304 fastboot_raw_partition_bootloader=64 8128 -fdt_addr=0x48000000 -fdt_file=CONFIG_DEFAULT_FDT_FILE +fdt_addr_r=0x48000000 +fdtfile=CONFIG_DEFAULT_FDT_FILE image=Image ip_dyn=yes -loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file} +loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr_r} ${fdtfile} loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image} mmcargs= setenv bootargs console=${console} @@ -32,9 +35,15 @@ mmcargs= mmcautodetect=yes mmcboot= echo Booting from mmc ...; + if test ${no_bootenv} = 0; then + if run mmc_load_bootenv; then + env import -t ${bootenv_addr_r} ${filesize}; + fi; + fi; run mmcargs; if run loadfdt; then - booti ${loadaddr} - ${fdt_addr}; + run mmc_apply_overlays; + booti ${loadaddr} - ${fdt_addr_r}; else echo WARN: Cannot load the DT; fi; @@ -51,10 +60,16 @@ netboot= else setenv get_cmd tftp; fi; + if test ${no_bootenv} = 0; then + if run net_load_bootenv; then + env import -t ${bootenv_addr_r} ${filesize}; + fi; + fi; ${get_cmd} ${loadaddr} ${image}; run netargs; - if ${get_cmd} ${fdt_addr} ${fdt_file}; then - booti ${loadaddr} - ${fdt_addr}; + if ${get_cmd} ${fdt_addr_r} ${fdtfile}; then + run net_apply_overlays; + booti ${loadaddr} - ${fdt_addr_r}; else echo WARN: Cannot load the DT; fi; diff --git a/board/phytec/phycore_imx93/phycore_imx93.env b/board/phytec/phycore_imx93/phycore_imx93.env index 27bfadfa140..ab65cfce5fd 100644 --- a/board/phytec/phycore_imx93/phycore_imx93.env +++ b/board/phytec/phycore_imx93/phycore_imx93.env @@ -1,14 +1,14 @@ /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ +#include <env/phytec/overlays.env> + image=Image console=ttyLP0 -fdt_addr=0x83000000 -fdto_addr=0x830c0000 -bootenv_addr=0x83500000 -fdt_file=CONFIG_DEFAULT_FDT_FILE +fdt_addr_r=0x83000000 +fdtoverlay_addr_r=0x830c0000 +bootenv_addr_r=0x83500000 +fdtfile=CONFIG_DEFAULT_FDT_FILE ip_dyn=yes -bootenv=bootenv.txt -mmc_load_bootenv=fatload mmc ${mmcdev}:${mmcpart} ${bootenv_addr} ${bootenv} mmcdev=CONFIG_SYS_MMC_ENV_DEV mmcpart=1 mmcroot=2 @@ -16,43 +16,22 @@ mmcautodetect=yes mmcargs=setenv bootargs console=${console},${baudrate} earlycon root=/dev/mmcblk${mmcdev}p${mmcroot} ${raucargs} rootwait rw loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image} -loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file} -mmc_load_overlay=fatload mmc ${mmcdev}:${mmcpart} ${fdto_addr} ${overlay} -mmc_apply_overlays= - fdt address ${fdt_addr}; - for overlay in ${overlays}; - do; - if run mmc_load_overlay; then - fdt resize ${filesize}; - fdt apply ${fdto_addr}; - fi; - done; +loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr_r} ${fdtfile} mmcboot= echo Booting from mmc ...; if run mmc_load_bootenv; then - env import -t ${bootenv_addr} ${filesize}; + env import -t ${bootenv_addr_r} ${filesize}; fi; run mmcargs; if run loadfdt; then run mmc_apply_overlays; - booti ${loadaddr} - ${fdt_addr}; + booti ${loadaddr} - ${fdt_addr_r}; else echo WARN: Cannot load the DT; fi; nfsroot=/nfs netargs=setenv bootargs console=${console},${baudrate} earlycon root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp -net_load_bootenv=${get_cmd} ${bootenv_addr} ${bootenv} -net_load_overlay=${get_cmd} ${fdto_addr} ${overlay} -net_apply_overlays= - fdt address ${fdt_addr}; - for overlay in ${overlays}; - do; - if run net_load_overlay; then - fdt resize ${filesize}; - fdt apply ${fdto_addr}; - fi; - done; netboot= echo Booting from net ...; run netargs; @@ -62,12 +41,12 @@ netboot= setenv get_cmd tftp; fi; if run net_load_bootenv; then - env import -t ${bootenv_addr} ${filesize}; + env import -t ${bootenv_addr_r} ${filesize}; fi; ${get_cmd} ${loadaddr} ${image}; - if ${get_cmd} ${fdt_addr} ${fdt_file}; then + if ${get_cmd} ${fdt_addr_r} ${fdtfile}; then run net_apply_overlays; - booti ${loadaddr} - ${fdt_addr}; + booti ${loadaddr} - ${fdt_addr_r}; else echo WARN: Cannot load the DT; fi; diff --git a/configs/phycore-imx8mp_defconfig b/configs/phycore-imx8mp_defconfig index 8dd4963bdc0..da7fe612ca0 100644 --- a/configs/phycore-imx8mp_defconfig +++ b/configs/phycore-imx8mp_defconfig @@ -13,6 +13,7 @@ CONFIG_DM_GPIO=y CONFIG_DEFAULT_DEVICE_TREE="freescale/imx8mp-phyboard-pollux-rdk" CONFIG_SPL_TEXT_BASE=0x920000 CONFIG_TARGET_PHYCORE_IMX8MP=y +CONFIG_OF_LIBFDT_OVERLAY=y CONFIG_SYS_MONITOR_LEN=524288 CONFIG_SPL_MMC=y CONFIG_SPL_SERIAL=y @@ -51,8 +52,6 @@ CONFIG_SPL_POWER=y CONFIG_SPL_WATCHDOG=y CONFIG_HUSH_PARSER=y CONFIG_SYS_PROMPT="u-boot=> " -# CONFIG_CMD_EXPORTENV is not set -# CONFIG_CMD_IMPORTENV is not set # CONFIG_CMD_CRC32 is not set CONFIG_CMD_EEPROM=y CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2 @@ -76,6 +75,7 @@ CONFIG_CMD_EXT2=y CONFIG_CMD_EXT4=y CONFIG_CMD_EXT4_WRITE=y CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y CONFIG_OF_CONTROL=y CONFIG_SPL_OF_CONTROL=y CONFIG_ENV_OVERWRITE=y diff --git a/include/env/phytec/k3_mmc.env b/include/env/phytec/k3_mmc.env new file mode 100644 index 00000000000..3d3595ceb7e --- /dev/null +++ b/include/env/phytec/k3_mmc.env @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2024 PHYTEC Messtechnik GmbH + * Author: Daniel Schultz <d.schultz@phytec.de> + */ + +/* Logic for TI K3 based SoCs to boot from a MMC device. */ + +#include <env/phytec/overlays.env> + +mmcargs=setenv bootargs console=${console} earlycon=${earlycon} + root=/dev/mmcblk${mmcdev}p${mmcroot} rootwait rw +loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} Image +loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr_r} ${fdtfile} +mmcboot=run mmcargs; + mmc dev ${mmcdev}; + mmc rescan; + run loadimage; + run loadfdt; + run mmc_apply_overlays; + booti ${loadaddr} - ${fdt_addr_r} diff --git a/include/env/phytec/overlays.env b/include/env/phytec/overlays.env new file mode 100644 index 00000000000..78721cde654 --- /dev/null +++ b/include/env/phytec/overlays.env @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2024 PHYTEC Messtechnik GmbH + * Author: Benjamin Hahn <b.hahn@phytec.de> + */ + +/* Logic to load and apply overlays. Load overlays from bootenv.txt into + * environment and apply those overlays. + * The variables bootenv_addr_r and fdtoverlay_addr_r are board specific. + * get_cmd can be either tftp or dhcp. */ + +bootenv=bootenv.txt +mmc_load_bootenv=load mmc ${mmcdev}:${mmcpart} ${bootenv_addr_r} ${bootenv} +mmc_load_overlay=load mmc ${mmcdev}:${mmcpart} ${fdtoverlay_addr_r} ${overlay} +mmc_apply_overlays= + fdt address ${fdt_addr_r}; + if test ${no_overlays} = 0; then + for overlay in ${overlays}; + do; + if run mmc_load_overlay; then + fdt resize ${filesize}; + fdt apply ${fdtoverlay_addr_r}; + fi; + done; + fi; +net_load_bootenv=${get_cmd} ${bootenv_addr_r} ${bootenv} +net_load_overlay=${get_cmd} ${fdtoverlay_addr_r} ${overlay} +net_apply_overlays= + fdt address ${fdt_addr_r}; + if test ${no_overlays} = 0; then + for overlay in ${overlays}; + do; + if run net_load_overlay; then + fdt resize ${filesize}; + fdt apply ${fdtoverlay_addr_r}; + fi; + done; + fi; |