diff mbox series

[3/3] boards: siemens: iot2050: Unify PG1 and PG2/M.2 configurations again

Message ID 0afdaac650566eb5e781b9926673c9f11cfba2c8.1685975993.git.jan.kiszka@siemens.com
State Changes Requested
Delegated to: Simon Glass
Headers show
Series iot2050: Re-unify its configs and build processes | expand

Commit Message

Jan Kiszka June 5, 2023, 2:39 p.m. UTC
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

Comments

Simon Glass June 12, 2023, 9:17 p.m. UTC | #1
Hi Jan,

On Mon, 5 Jun 2023 at 15:40, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>
> 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

We need to find another way to do this... the macros are horrible.

Could you put the common code in another .dtsi file and include it twice?

Then in the 'main' .dtsi file refer to some anchors to set the properties:

&u_boot {
   fit,fdt-list = "...";
};

Or do we need a new binman feature to handle this?

BTW using #ifdef on a particular target is something we should avoid.
Isn't there another Kconfig (for the feature itself) that you can use?

Regards,
Simon
Jan Kiszka June 15, 2023, 11:22 a.m. UTC | #2
On 12.06.23 23:17, Simon Glass wrote:
> Hi Jan,
> 
> On Mon, 5 Jun 2023 at 15:40, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>>
>> 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
> 
> We need to find another way to do this... the macros are horrible.
> 
> Could you put the common code in another .dtsi file and include it twice?
> 
> Then in the 'main' .dtsi file refer to some anchors to set the properties:
> 
> &u_boot {
>    fit,fdt-list = "...";
> };

I can use some preprocessor defines in that template code which need to
be re-defined before the inclusions. Prototype is working already.

> 
> Or do we need a new binman feature to handle this?
> 
> BTW using #ifdef on a particular target is something we should avoid.
> Isn't there another Kconfig (for the feature itself) that you can use?

What are you referring to?

Jan
diff mbox series

Patch

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