
From: Jan Kiszka jan.kiszka@siemens.com
This avoids having to maintain to defconfigs that are 99% equivalent. The approach is to use binman to generate two flash images, flash-pg1.bin and flash-pg2.bin. With the help of some macros, we can avoid duplicating the common binman image definitions.
Suggested-by: Andrew Davis afd@ti.com Signed-off-by: Jan Kiszka jan.kiszka@siemens.com --- arch/arm/dts/k3-am65-iot2050-boot-image.dtsi | 299 ++++++++++-------- board/siemens/iot2050/Kconfig | 30 +- board/siemens/iot2050/board.c | 14 +- board/siemens/iot2050/config.mk | 6 +- ...ot2050_pg1_defconfig => iot2050_defconfig} | 3 +- configs/iot2050_pg2_defconfig | 150 --------- doc/board/siemens/iot2050.rst | 29 +- tools/iot2050-sign-fw.sh | 9 +- 8 files changed, 202 insertions(+), 338 deletions(-) rename configs/{iot2050_pg1_defconfig => iot2050_defconfig} (97%) delete mode 100644 configs/iot2050_pg2_defconfig
diff --git a/arch/arm/dts/k3-am65-iot2050-boot-image.dtsi b/arch/arm/dts/k3-am65-iot2050-boot-image.dtsi index 03ccc543293..1ea3fa85120 100644 --- a/arch/arm/dts/k3-am65-iot2050-boot-image.dtsi +++ b/arch/arm/dts/k3-am65-iot2050-boot-image.dtsi @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * Copyright (c) Siemens AG, 2020-2022 + * Copyright (c) Siemens AG, 2020-2023 * * Authors: * Jan Kiszka jan.kiszka@siemens.com @@ -8,158 +8,177 @@ */
#include <config.h> +#include <linux/stringify.h>
-/ { - binman { - filename = "flash.bin"; - pad-byte = <0xff>; - size = <0x8c0000>; - allow-repack; - - blob-ext@0x000000 { - offset = <0x000000>; -#ifdef CONFIG_TARGET_IOT2050_A53_PG1 - filename = "seboot_pg1.bin"; +#ifdef CONFIG_WDT_K3_RTI_FW_FILE +#define IOT2050_WDT_FIRMWARE_LOADABLE "k3-rti-wdt-firmware" +#define IOT2050_WDT_FIRMWARE \ + k3-rti-wdt-firmware { \ + type = "firmware"; \ + load = <0x82000000>; \ + arch = "arm"; \ + compression = "none"; \ + blob-ext { \ + filename = CONFIG_WDT_K3_RTI_FW_FILE; \ + missing-msg = IOT2050_WDT_FIRMWARE_LOADABLE; \ + }; \ + hash { \ + algo = "sha256"; \ + }; \ + }; #else - filename = "seboot_pg2.bin"; +#define IOT2050_WDT_FIRMWARE_LOADABLE +#define IOT2050_WDT_FIRMWARE #endif - missing-msg = "iot2050-seboot"; - }; - - blob@0x180000 { - offset = <0x180000>; - filename = "tispl.bin"; - }; - - fit@0x380000 { - description = "U-Boot for IOT2050"; - fit,fdt-list = "of-list"; - offset = <0x380000>; - images { - u-boot { - description = "U-Boot"; - type = "standalone"; - arch = "arm64"; - os = "u-boot"; - compression = "none"; - load = <0x80800000>; - entry = <0x80800000>; - u-boot-nodtb { - }; - hash { - algo = "sha256"; - }; - };
- @fdt-SEQ { - description = "fdt-NAME"; - type = "flat_dt"; - arch = "arm64"; - compression = "none"; - hash { - algo = "sha256"; - }; - }; - -#ifdef CONFIG_TARGET_IOT2050_A53_PG2 - bkey-usb3-overlay { - description = "M.2-bkey-usb3-overlay"; - type = "blob"; - load = <0x82100000>; - arch = "arm64"; - compression = "none"; - blob-ext { - filename = "k3-am6548-iot2050-advanced-m2-bkey-usb3-overlay.dtbo"; - }; - hash { - algo = "sha256"; - }; - }; - - bkey-ekey-pcie-overlay { - description = "M.2-bkey-ekey-pcie-overlay"; - type = "blob"; - load = <0x82110000>; - arch = "arm64"; - compression = "none"; - blob-ext { - filename = "k3-am6548-iot2050-advanced-m2-bkey-ekey-pcie-overlay.dtbo"; - }; - hash { - algo = "sha256"; - }; - }; +#if CONFIG_IOT2050_EMBED_OTPCMD +#define IOT2050_OTPCMD_BLOCK \ + blob-ext@0x6c0000 { \ + offset = <0x6c0000>; \ + \ + size = <0x010000>; \ + filename = "otpcmd.bin"; \ + missing-msg = "iot2050-otpcmd"; \ + }; +#else +#define IOT2050_OTPCMD_BLOCK \ + fill@0x6c0000 { \ + offset = <0x6c0000>; \ + size = <0x010000>; \ + fill-byte = [ff]; \ + }; #endif
-#ifdef CONFIG_WDT_K3_RTI_FW_FILE - k3-rti-wdt-firmware { - type = "firmware"; - load = <0x82000000>; - arch = "arm"; - compression = "none"; - blob-ext { - filename = CONFIG_WDT_K3_RTI_FW_FILE; - missing-msg = "k3-rti-wdt-firmware"; - }; - hash { - algo = "sha256"; - }; - }; -#endif - }; +#define IOT2050_FLASH_COMMON(variant, default_dt, extra_loadables...) \ + filename = __stringify(flash-##variant##.bin); \ + pad-byte = <0xff>; \ + size = <0x8c0000>; \ + allow-repack; \ + \ + blob-ext@0x000000 { \ + offset = <0x000000>; \ + filename = __stringify(seboot_##variant##.bin); \ + missing-msg = "iot2050-seboot"; \ + }; \ + \ + blob@0x180000 { \ + offset = <0x180000>; \ + filename = "tispl.bin"; \ + }; \ + \ + fit@0x380000 { \ + description = "U-Boot for IOT2050"; \ + fit,fdt-list = __stringify(of-list-##variant); \ + offset = <0x380000>; \ + u_boot_images_##variant: images { \ + u-boot { \ + description = "U-Boot"; \ + type = "standalone"; \ + arch = "arm64"; \ + os = "u-boot"; \ + compression = "none"; \ + load = <0x80800000>; \ + entry = <0x80800000>; \ + u-boot-nodtb { \ + }; \ + hash { \ + algo = "sha256"; \ + }; \ + }; \ + \ + @fdt-SEQ { \ + description = "fdt-NAME"; \ + type = "flat_dt"; \ + arch = "arm64"; \ + compression = "none"; \ + hash { \ + algo = "sha256"; \ + }; \ + }; \ + \ + IOT2050_WDT_FIRMWARE \ + }; \ + \ + configurations { \ + default = default_dt; \ + @config-SEQ { \ + description = "NAME"; \ + firmware = "u-boot"; \ + fdt = "fdt-SEQ"; \ + loadables = \ + IOT2050_WDT_FIRMWARE_LOADABLE, \ + ## extra_loadables, \ + <>; \ + signature { \ + sign-images = "firmware", "fdt", "loadables"; \ + }; \ + }; \ + }; \ + }; \ + \ + fdtmap { \ + }; \ + \ + /* primary env */ \ + fill@0x680000 { \ + offset = <0x680000>; \ + size = <0x020000>; \ + fill-byte = [00]; \ + }; \ + /* secondary env */ \ + fill@0x6a0000 { \ + offset = <0x6a0000>; \ + size = <0x020000>; \ + fill-byte = [00]; \ + }; \ + \ + /* OTP update command block */ \ + IOT2050_OTPCMD_BLOCK
- configurations { - default = "@config-DEFAULT-SEQ"; - @config-SEQ { - description = "NAME"; - firmware = "u-boot"; - fdt = "fdt-SEQ"; - loadables = -#ifdef CONFIG_TARGET_IOT2050_A53_PG2 - "bkey-usb3-overlay", - "bkey-ekey-pcie-overlay", -#endif -#ifdef CONFIG_WDT_K3_RTI_FW_FILE - "k3-rti-wdt-firmware", -#endif - <>; - signature { - sign-images = "firmware", "fdt", "loadables"; - }; - }; - }; - }; +/ { + binman: binman { + multiple-images; + }; +};
- fdtmap { - }; +&binman { + flash-pg1 { + IOT2050_FLASH_COMMON(pg1, "k3-am6528-iot2050-basic") + }; + + flash-pg2 { + IOT2050_FLASH_COMMON(pg2, "k3-am6528-iot2050-basic-pg2", + "bkey-usb3-overlay", + "bkey-ekey-pcie-overlay") + }; +};
- /* primary env */ - fill@0x680000 { - offset = <0x680000>; - size = <0x020000>; - fill-byte = [00]; +&u_boot_images_pg2 { + bkey-usb3-overlay { + description = "M.2-bkey-usb3-overlay"; + type = "blob"; + load = <0x82100000>; + arch = "arm64"; + compression = "none"; + blob-ext { + filename = "k3-am6548-iot2050-advanced-m2-bkey-usb3-overlay.dtbo"; }; - /* secondary env */ - fill@0x6a0000 { - offset = <0x6a0000>; - size = <0x020000>; - fill-byte = [00]; + hash { + algo = "sha256"; }; + };
- /* OTP update command block */ -#if CONFIG_IOT2050_EMBED_OTPCMD - blob-ext@0x6c0000 { - offset = <0x6c0000>; - size = <0x010000>; - filename = "otpcmd.bin"; - missing-msg = "iot2050-otpcmd"; + bkey-ekey-pcie-overlay { + description = "M.2-bkey-ekey-pcie-overlay"; + type = "blob"; + load = <0x82110000>; + arch = "arm64"; + compression = "none"; + blob-ext { + filename = "k3-am6548-iot2050-advanced-m2-bkey-ekey-pcie-overlay.dtbo"; }; -#else - fill@0x6c0000 { - offset = <0x6c0000>; - size = <0x010000>; - fill-byte = [ff]; + hash { + algo = "sha256"; }; -#endif }; }; diff --git a/board/siemens/iot2050/Kconfig b/board/siemens/iot2050/Kconfig index e66b2427d95..a6170aae807 100644 --- a/board/siemens/iot2050/Kconfig +++ b/board/siemens/iot2050/Kconfig @@ -1,40 +1,22 @@ # SPDX-License-Identifier: GPL-2.0+ # -# Copyright (c) Siemens AG, 2018-2022 +# Copyright (c) Siemens AG, 2018-2023 # # Authors: # Le Jin le.jin@siemens.com # Jan Kiszka jan.kiszka@siemens.com
-choice - prompt "Siemens SIMATIC IOT2050 boards" - optional - -config TARGET_IOT2050_A53_PG1 - bool "IOT2050 PG1 running on A53" - select IOT2050_A53_COMMON - help - This builds U-Boot for the Product Generation 1 (PG1) of the IOT2050 - devices. - -config TARGET_IOT2050_A53_PG2 - bool "IOT2050 PG2 running on A53" - select IOT2050_A53_COMMON - help - This builds U-Boot for the Product Generation 2 (PG2) of the IOT2050 - devices. - -endchoice - -config IOT2050_A53_COMMON - bool +config TARGET_IOT2050_A53 + bool "IOT2050 running on A53" select ARM64 select SOC_K3_AM654 select BOARD_LATE_INIT select SYS_DISABLE_DCACHE_OPS select BINMAN + help + This builds U-Boot for the IOT2050 devices.
-if IOT2050_A53_COMMON +if TARGET_IOT2050_A53
config SYS_BOARD default "iot2050" diff --git a/board/siemens/iot2050/board.c b/board/siemens/iot2050/board.c index 2653e107450..cab23494030 100644 --- a/board/siemens/iot2050/board.c +++ b/board/siemens/iot2050/board.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0+ /* * Board specific initialization for IOT2050 - * Copyright (c) Siemens AG, 2018-2022 + * Copyright (c) Siemens AG, 2018-2023 * * Authors: * Le Jin le.jin@siemens.com @@ -164,6 +164,14 @@ static bool board_is_advanced(void) strstr((char *)info->name, "IOT2050-ADVANCED") != NULL; }
+static bool board_is_sr1(void) +{ + struct iot2050_info *info = IOT2050_INFO_DATA; + + return info->magic == IOT2050_INFO_MAGIC && + !strstr((char *)info->name, "-PG2"); +} + static void remove_mmc1_target(void) { char *boot_targets = strdup(env_get("boot_targets")); @@ -210,14 +218,14 @@ void set_board_info_env(void) }
if (board_is_advanced()) { - if (IS_ENABLED(CONFIG_TARGET_IOT2050_A53_PG1)) + if (board_is_sr1()) fdtfile = "ti/k3-am6548-iot2050-advanced.dtb"; else if(board_is_m2()) fdtfile = "ti/k3-am6548-iot2050-advanced-m2.dtb"; else fdtfile = "ti/k3-am6548-iot2050-advanced-pg2.dtb"; } else { - if (IS_ENABLED(CONFIG_TARGET_IOT2050_A53_PG1)) + if (board_is_sr1()) fdtfile = "ti/k3-am6528-iot2050-basic.dtb"; else fdtfile = "ti/k3-am6528-iot2050-basic-pg2.dtb"; diff --git a/board/siemens/iot2050/config.mk b/board/siemens/iot2050/config.mk index 267ec76c4ef..05111d5ebab 100644 --- a/board/siemens/iot2050/config.mk +++ b/board/siemens/iot2050/config.mk @@ -1,8 +1,12 @@ # SPDX-License-Identifier: GPL-2.0+ # -# Copyright (c) Siemens AG, 2020-2021 +# Copyright (c) Siemens AG, 2020-2023 # # Authors: # Jan Kiszka jan.kiszka@siemens.com
+BINMAN_EXTRA_ARGS = \ + -a of-list-pg1="k3-am6528-iot2050-basic k3-am6548-iot2050-advanced" \ + -a of-list-pg2="k3-am6528-iot2050-basic-pg2 k3-am6548-iot2050-advanced-pg2 k3-am6548-iot2050-advanced-m2" + flash.bin: all diff --git a/configs/iot2050_pg1_defconfig b/configs/iot2050_defconfig similarity index 97% rename from configs/iot2050_pg1_defconfig rename to configs/iot2050_defconfig index cc1b9673d79..bbbc040af40 100644 --- a/configs/iot2050_pg1_defconfig +++ b/configs/iot2050_defconfig @@ -8,7 +8,7 @@ CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_NR_DRAM_BANKS=2 CONFIG_SOC_K3_AM654=y -CONFIG_TARGET_IOT2050_A53_PG1=y +CONFIG_TARGET_IOT2050_A53=y CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80100000 CONFIG_ENV_SIZE=0x20000 @@ -73,7 +73,6 @@ CONFIG_CMD_TIME=y # CONFIG_ISO_PARTITION is not set CONFIG_OF_CONTROL=y CONFIG_SPL_OF_CONTROL=y -CONFIG_OF_LIST="k3-am6528-iot2050-basic k3-am6548-iot2050-advanced" CONFIG_SPL_MULTI_DTB_FIT=y CONFIG_SPL_OF_LIST="k3-am65-iot2050-spl" CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y diff --git a/configs/iot2050_pg2_defconfig b/configs/iot2050_pg2_defconfig deleted file mode 100644 index c5741a4dae4..00000000000 --- a/configs/iot2050_pg2_defconfig +++ /dev/null @@ -1,150 +0,0 @@ -CONFIG_ARM=y -CONFIG_SKIP_LOWLEVEL_INIT=y -CONFIG_ARCH_K3=y -CONFIG_SYS_MALLOC_LEN=0x2000000 -CONFIG_SYS_MALLOC_F_LEN=0x8000 -CONFIG_SPL_GPIO=y -CONFIG_SPL_LIBCOMMON_SUPPORT=y -CONFIG_SPL_LIBGENERIC_SUPPORT=y -CONFIG_NR_DRAM_BANKS=2 -CONFIG_SOC_K3_AM654=y -CONFIG_TARGET_IOT2050_A53_PG2=y -CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y -CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80100000 -CONFIG_ENV_SIZE=0x20000 -CONFIG_ENV_OFFSET=0x680000 -CONFIG_ENV_SECT_SIZE=0x20000 -CONFIG_DM_GPIO=y -CONFIG_SPL_DM_SPI=y -CONFIG_DEFAULT_DEVICE_TREE="k3-am6528-iot2050-basic-pg2" -CONFIG_SPL_TEXT_BASE=0x80080000 -CONFIG_SYS_PROMPT="IOT2050> " -CONFIG_OF_LIBFDT_OVERLAY=y -CONFIG_DM_RESET=y -CONFIG_SPL_SERIAL=y -CONFIG_SPL_STACK_R_ADDR=0x82000000 -CONFIG_ENV_OFFSET_REDUND=0x6a0000 -CONFIG_SPL_SPI_FLASH_SUPPORT=y -CONFIG_SPL_SPI=y -CONFIG_PCI=y -# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set -CONFIG_SPL_LOAD_FIT=y -CONFIG_OF_BOARD_SETUP=y -CONFIG_OF_SYSTEM_SETUP=y -CONFIG_DISTRO_DEFAULTS=y -CONFIG_BOOTSTAGE=y -CONFIG_SHOW_BOOT_PROGRESS=y -CONFIG_SPL_SHOW_BOOT_PROGRESS=y -CONFIG_BOOTCOMMAND="run start_watchdog; run distro_bootcmd" -CONFIG_CONSOLE_MUX=y -# CONFIG_DISPLAY_CPUINFO is not set -CONFIG_SPL_MAX_SIZE=0x58000 -CONFIG_SPL_HAS_BSS_LINKER_SECTION=y -CONFIG_SPL_BSS_START_ADDR=0x80a00000 -CONFIG_SPL_BSS_MAX_SIZE=0x80000 -CONFIG_SPL_BOARD_INIT=y -CONFIG_SPL_SYS_MALLOC_SIMPLE=y -CONFIG_SPL_STACK_R=y -CONFIG_SYS_SPL_MALLOC=y -CONFIG_SYS_SPL_MALLOC_SIZE=0x800000 -CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y -CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1400 -CONFIG_SPL_DM_MAILBOX=y -CONFIG_SPL_DM_SPI_FLASH=y -CONFIG_SPL_DM_RESET=y -CONFIG_SPL_POWER_DOMAIN=y -# CONFIG_SPL_SPI_FLASH_TINY is not set -CONFIG_SPL_SPI_FLASH_SFDP_SUPPORT=y -CONFIG_SPL_SPI_LOAD=y -CONFIG_SYS_SPI_U_BOOT_OFFS=0x380000 -CONFIG_SYS_MAXARGS=64 -CONFIG_SYS_PBSIZE=1050 -CONFIG_CMD_ASKENV=y -CONFIG_CMD_DFU=y -CONFIG_CMD_GPT=y -CONFIG_CMD_I2C=y -CONFIG_CMD_MMC=y -CONFIG_CMD_PCI=y -CONFIG_CMD_REMOTEPROC=y -CONFIG_CMD_USB=y -CONFIG_CMD_WDT=y -# CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_TIME=y -# CONFIG_ISO_PARTITION is not set -CONFIG_OF_CONTROL=y -CONFIG_SPL_OF_CONTROL=y -CONFIG_OF_LIST="k3-am6528-iot2050-basic-pg2 k3-am6548-iot2050-advanced-pg2 k3-am6548-iot2050-advanced-m2" -CONFIG_SPL_MULTI_DTB_FIT=y -CONFIG_SPL_OF_LIST="k3-am65-iot2050-spl" -CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y -CONFIG_ENV_IS_IN_SPI_FLASH=y -CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -CONFIG_SPL_DM=y -CONFIG_SPL_DM_SEQ_ALIAS=y -CONFIG_SPL_REGMAP=y -CONFIG_SPL_OF_TRANSLATE=y -CONFIG_CLK=y -CONFIG_SPL_CLK=y -CONFIG_CLK_TI_SCI=y -CONFIG_DFU_MMC=y -CONFIG_DFU_RAM=y -CONFIG_DFU_SF=y -CONFIG_DMA_CHANNELS=y -CONFIG_TI_K3_NAVSS_UDMA=y -CONFIG_TI_SCI_PROTOCOL=y -CONFIG_DA8XX_GPIO=y -CONFIG_DM_PCA953X=y -CONFIG_DM_I2C=y -CONFIG_I2C_SET_DEFAULT_BUS_NUM=y -CONFIG_SYS_I2C_OMAP24XX=y -CONFIG_LED=y -CONFIG_SPL_LED=y -CONFIG_LED_GPIO=y -CONFIG_SPL_LED_GPIO=y -CONFIG_DM_MAILBOX=y -CONFIG_K3_SEC_PROXY=y -CONFIG_MMC_HS200_SUPPORT=y -CONFIG_MMC_SDHCI=y -CONFIG_MMC_SDHCI_ADMA=y -CONFIG_MMC_SDHCI_AM654=y -CONFIG_DM_SPI_FLASH=y -CONFIG_SPI_FLASH_SFDP_SUPPORT=y -CONFIG_SPI_FLASH_STMICRO=y -CONFIG_SPI_FLASH_WINBOND=y -# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -CONFIG_PCI_KEYSTONE=y -CONFIG_PHY=y -CONFIG_AM654_PHY=y -CONFIG_OMAP_USB2_PHY=y -CONFIG_PINCTRL=y -# CONFIG_PINCTRL_GENERIC is not set -CONFIG_SPL_PINCTRL=y -# CONFIG_SPL_PINCTRL_GENERIC is not set -CONFIG_PINCTRL_SINGLE=y -CONFIG_POWER_DOMAIN=y -CONFIG_TI_SCI_POWER_DOMAIN=y -CONFIG_REMOTEPROC_TI_K3_R5F=y -CONFIG_RESET_TI_SCI=y -CONFIG_DM_SERIAL=y -CONFIG_SOC_DEVICE=y -CONFIG_SOC_DEVICE_TI_K3=y -CONFIG_SOC_TI=y -CONFIG_SPI=y -CONFIG_DM_SPI=y -CONFIG_CADENCE_QSPI=y -CONFIG_SYSRESET=y -CONFIG_SPL_SYSRESET=y -CONFIG_SYSRESET_TI_SCI=y -CONFIG_USB=y -CONFIG_USB_XHCI_HCD=y -CONFIG_USB_XHCI_DWC3=y -CONFIG_USB_DWC3=y -CONFIG_USB_DWC3_GENERIC=y -CONFIG_USB_KEYBOARD=y -# CONFIG_WATCHDOG is not set -# CONFIG_WATCHDOG_AUTOSTART is not set -CONFIG_WATCHDOG_TIMEOUT_MSECS=0 -CONFIG_WDT=y -CONFIG_WDT_K3_RTI=y -CONFIG_WDT_K3_RTI_LOAD_FW=y -CONFIG_EFI_SCROLL_ON_CLEAR_SCREEN=y diff --git a/doc/board/siemens/iot2050.rst b/doc/board/siemens/iot2050.rst index 074d6aa15af..9c7b5bac6ea 100644 --- a/doc/board/siemens/iot2050.rst +++ b/doc/board/siemens/iot2050.rst @@ -66,17 +66,16 @@ U-Boot:
.. code-block:: text
- $ export ATF=/path/to/bl31.bin + $ export BL31=/path/to/bl31.bin $ export TEE=/path/to/tee-pager_v2.bin - - # configure for PG1 - $ make iot2050_pg1_defconfig - - # or configure for PG2 or the M.2 variant - $ make iot2050_pg2_defconfig + $ make iot2050_defconfig
$ make
+This will generate two different flash images: flash-p1.bin that targets the +first generation of IOT2050 devices and flash-pg2.bin that runs on PG2 +including M.2 devices. + Flashing --------
@@ -85,20 +84,20 @@ Via U-Boot: .. code-block:: text
IOT2050> sf probe - IOT2050> load mmc 0:1 $loadaddr /path/to/flash.bin + IOT2050> load mmc 0:1 $loadaddr /path/to/flash-pgX.bin IOT2050> sf update $loadaddr 0x0 $filesize
Via external programmer Dediprog SF100 or SF600:
.. code-block:: text
- $ dpcmd --vcc 2 -v -u flash.bin + $ dpcmd --vcc 2 -v -u flash-pgX.bin
Signing (optional) ------------------
To enable verified boot for the firmware artifacts after the Siemens-managed -first-stage loader (seboot_pg*.bin), the following steps need to be taken +first-stage loader (seboot_pgX.bin), the following steps need to be taken before and after the build:
Generate dtsi holding the public key @@ -131,8 +130,8 @@ Build U-Boot
See related section above.
-Sign flash.bin -^^^^^^^^^^^^^^ +Sign flash-pgX.bin +^^^^^^^^^^^^^^^^^^
In the build folder still containing artifacts from step 3, invoke:
@@ -140,10 +139,10 @@ In the build folder still containing artifacts from step 3, invoke:
tools/iot2050-sign-fw.sh /path/to/key.pem
-Flash signed flash.bin -^^^^^^^^^^^^^^^^^^^^^^ +Flash signed flash-pgX.bin +^^^^^^^^^^^^^^^^^^^^^^^^^^
-The signing has happen in-place in flash.bin, thus the flashing procedure +The signing has happen in-place in flash-pgX.bin, thus the flashing procedure described above.
M.2 slot configuration diff --git a/tools/iot2050-sign-fw.sh b/tools/iot2050-sign-fw.sh index da425c94a5d..74084f0980e 100755 --- a/tools/iot2050-sign-fw.sh +++ b/tools/iot2050-sign-fw.sh @@ -39,9 +39,12 @@ CERT_X509=$(mktemp XXXXXXXX.crt)
openssl req -new -x509 -key $1 -nodes -outform DER -out $CERT_X509 -config $TEMP_X509 -sha512 cat $CERT_X509 tispl.bin > tispl.bin_signed -source/tools/binman/binman replace -i flash.bin -f tispl.bin_signed blob@0x180000 +source/tools/binman/binman replace -i flash-pg1.bin -f tispl.bin_signed blob@0x180000 +source/tools/binman/binman replace -i flash-pg2.bin -f tispl.bin_signed blob@0x180000
rm $TEMP_X509 $CERT_X509
-tools/mkimage -G $1 -r -o sha256,rsa4096 -F fit@0x380000.fit -source/tools/binman/binman replace -i flash.bin -f fit@0x380000.fit fit@0x380000 +tools/mkimage -G $1 -r -o sha256,rsa4096 -F flash-pg1.fit@0x380000.fit +tools/mkimage -G $1 -r -o sha256,rsa4096 -F flash-pg2.fit@0x380000.fit +source/tools/binman/binman replace -i flash-pg1.bin -f flash-pg1.fit@0x380000.fit fit@0x380000 +source/tools/binman/binman replace -i flash-pg2.bin -f flash-pg2.fit@0x380000.fit fit@0x380000