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.
This commit is contained in:
Tom Rini 2024-07-22 13:48:24 -06:00
commit cfaa58b8b7
7 changed files with 97 additions and 61 deletions

View File

@ -1,4 +1,5 @@
#include <env/ti/k3_dfu.env> #include <env/ti/k3_dfu.env>
#include <env/phytec/k3_mmc.env>
fdtaddr=0x88000000 fdtaddr=0x88000000
loadaddr=0x82000000 loadaddr=0x82000000
@ -14,13 +15,3 @@ mmcroot=2
mmcpart=1 mmcpart=1
console=ttyS2,115200n8 console=ttyS2,115200n8
earlycon=ns16550a,mmio32,0x02800000 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}

View File

@ -1,3 +1,5 @@
#include <env/phytec/k3_mmc.env>
fdtaddr=0x88000000 fdtaddr=0x88000000
loadaddr=0x82000000 loadaddr=0x82000000
scriptaddr=0x80000000 scriptaddr=0x80000000
@ -12,13 +14,3 @@ mmcroot=2
mmcpart=1 mmcpart=1
console=ttyS2,115200n8 console=ttyS2,115200n8
earlycon=ns16550a,mmio32,0x02800000 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}

View File

@ -1,4 +1,5 @@
#include <env/phytec/rauc.env> #include <env/phytec/rauc.env>
#include <env/phytec/overlays.env>
bootcmd= bootcmd=
if test ${dofastboot} = 1; then if test ${dofastboot} = 1; then
@ -16,15 +17,17 @@ bootcmd=
fi; fi;
fi; fi;
console=ttymxc0,115200 console=ttymxc0,115200
bootenv_addr_r=0x49100000
fdtoverlay_addr_r=0x49000000
dofastboot=0 dofastboot=0
emmc_dev=2 emmc_dev=2
fastboot_raw_partition_all=0 4194304 fastboot_raw_partition_all=0 4194304
fastboot_raw_partition_bootloader=64 8128 fastboot_raw_partition_bootloader=64 8128
fdt_addr=0x48000000 fdt_addr_r=0x48000000
fdt_file=CONFIG_DEFAULT_FDT_FILE fdtfile=CONFIG_DEFAULT_FDT_FILE
image=Image image=Image
ip_dyn=yes 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} loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
mmcargs= mmcargs=
setenv bootargs console=${console} setenv bootargs console=${console}
@ -32,9 +35,15 @@ mmcargs=
mmcautodetect=yes mmcautodetect=yes
mmcboot= mmcboot=
echo Booting from mmc ...; 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; run mmcargs;
if run loadfdt; then if run loadfdt; then
booti ${loadaddr} - ${fdt_addr}; run mmc_apply_overlays;
booti ${loadaddr} - ${fdt_addr_r};
else else
echo WARN: Cannot load the DT; echo WARN: Cannot load the DT;
fi; fi;
@ -51,10 +60,16 @@ netboot=
else else
setenv get_cmd tftp; setenv get_cmd tftp;
fi; 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}; ${get_cmd} ${loadaddr} ${image};
run netargs; run netargs;
if ${get_cmd} ${fdt_addr} ${fdt_file}; then if ${get_cmd} ${fdt_addr_r} ${fdtfile}; then
booti ${loadaddr} - ${fdt_addr}; run net_apply_overlays;
booti ${loadaddr} - ${fdt_addr_r};
else else
echo WARN: Cannot load the DT; echo WARN: Cannot load the DT;
fi; fi;

View File

@ -1,14 +1,14 @@
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
#include <env/phytec/overlays.env>
image=Image image=Image
console=ttyLP0 console=ttyLP0
fdt_addr=0x83000000 fdt_addr_r=0x83000000
fdto_addr=0x830c0000 fdtoverlay_addr_r=0x830c0000
bootenv_addr=0x83500000 bootenv_addr_r=0x83500000
fdt_file=CONFIG_DEFAULT_FDT_FILE fdtfile=CONFIG_DEFAULT_FDT_FILE
ip_dyn=yes ip_dyn=yes
bootenv=bootenv.txt
mmc_load_bootenv=fatload mmc ${mmcdev}:${mmcpart} ${bootenv_addr} ${bootenv}
mmcdev=CONFIG_SYS_MMC_ENV_DEV mmcdev=CONFIG_SYS_MMC_ENV_DEV
mmcpart=1 mmcpart=1
mmcroot=2 mmcroot=2
@ -16,43 +16,22 @@ mmcautodetect=yes
mmcargs=setenv bootargs console=${console},${baudrate} earlycon mmcargs=setenv bootargs console=${console},${baudrate} earlycon
root=/dev/mmcblk${mmcdev}p${mmcroot} ${raucargs} rootwait rw root=/dev/mmcblk${mmcdev}p${mmcroot} ${raucargs} rootwait rw
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image} loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file} loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr_r} ${fdtfile}
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;
mmcboot= mmcboot=
echo Booting from mmc ...; echo Booting from mmc ...;
if run mmc_load_bootenv; then if run mmc_load_bootenv; then
env import -t ${bootenv_addr} ${filesize}; env import -t ${bootenv_addr_r} ${filesize};
fi; fi;
run mmcargs; run mmcargs;
if run loadfdt; then if run loadfdt; then
run mmc_apply_overlays; run mmc_apply_overlays;
booti ${loadaddr} - ${fdt_addr}; booti ${loadaddr} - ${fdt_addr_r};
else else
echo WARN: Cannot load the DT; echo WARN: Cannot load the DT;
fi; fi;
nfsroot=/nfs nfsroot=/nfs
netargs=setenv bootargs console=${console},${baudrate} earlycon netargs=setenv bootargs console=${console},${baudrate} earlycon
root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp 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= netboot=
echo Booting from net ...; echo Booting from net ...;
run netargs; run netargs;
@ -62,12 +41,12 @@ netboot=
setenv get_cmd tftp; setenv get_cmd tftp;
fi; fi;
if run net_load_bootenv; then if run net_load_bootenv; then
env import -t ${bootenv_addr} ${filesize}; env import -t ${bootenv_addr_r} ${filesize};
fi; fi;
${get_cmd} ${loadaddr} ${image}; ${get_cmd} ${loadaddr} ${image};
if ${get_cmd} ${fdt_addr} ${fdt_file}; then if ${get_cmd} ${fdt_addr_r} ${fdtfile}; then
run net_apply_overlays; run net_apply_overlays;
booti ${loadaddr} - ${fdt_addr}; booti ${loadaddr} - ${fdt_addr_r};
else else
echo WARN: Cannot load the DT; echo WARN: Cannot load the DT;
fi; fi;

View File

@ -13,6 +13,7 @@ CONFIG_DM_GPIO=y
CONFIG_DEFAULT_DEVICE_TREE="freescale/imx8mp-phyboard-pollux-rdk" CONFIG_DEFAULT_DEVICE_TREE="freescale/imx8mp-phyboard-pollux-rdk"
CONFIG_SPL_TEXT_BASE=0x920000 CONFIG_SPL_TEXT_BASE=0x920000
CONFIG_TARGET_PHYCORE_IMX8MP=y CONFIG_TARGET_PHYCORE_IMX8MP=y
CONFIG_OF_LIBFDT_OVERLAY=y
CONFIG_SYS_MONITOR_LEN=524288 CONFIG_SYS_MONITOR_LEN=524288
CONFIG_SPL_MMC=y CONFIG_SPL_MMC=y
CONFIG_SPL_SERIAL=y CONFIG_SPL_SERIAL=y
@ -51,8 +52,6 @@ CONFIG_SPL_POWER=y
CONFIG_SPL_WATCHDOG=y CONFIG_SPL_WATCHDOG=y
CONFIG_HUSH_PARSER=y CONFIG_HUSH_PARSER=y
CONFIG_SYS_PROMPT="u-boot=> " 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_CRC32 is not set
CONFIG_CMD_EEPROM=y CONFIG_CMD_EEPROM=y
CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2 CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2
@ -76,6 +75,7 @@ CONFIG_CMD_EXT2=y
CONFIG_CMD_EXT4=y CONFIG_CMD_EXT4=y
CONFIG_CMD_EXT4_WRITE=y CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_FAT=y CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_OF_CONTROL=y CONFIG_OF_CONTROL=y
CONFIG_SPL_OF_CONTROL=y CONFIG_SPL_OF_CONTROL=y
CONFIG_ENV_OVERWRITE=y CONFIG_ENV_OVERWRITE=y

21
include/env/phytec/k3_mmc.env vendored Normal file
View File

@ -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}

38
include/env/phytec/overlays.env vendored Normal file
View File

@ -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;