diff --git a/conf/machine/gateway-dk.conf b/conf/machine/gateway-dk.conf index b46cc0d..acc99fd 100644 --- a/conf/machine/gateway-dk.conf +++ b/conf/machine/gateway-dk.conf @@ -46,4 +46,6 @@ FIRMWARE_VERSION ?= "2026.08.1" # Firmware locations RCWQSPI ?= "NN_FFSSPSNP_1133_5A06/rcw_2100_qspiboot.bin" RCWEMMC ?= "NN_FFSSPSNP_1133_5A06/rcw_2100_emmcboot.bin" +RCWQSPI1G ?= "NN_FSSSPSNP_1333_5A06/rcw_2100_qspiboot.bin" +RCWEMMC1G ?= "NN_FSSSPSNP_1333_5A06/rcw_2100_emmcboot.bin" FMAN_UCODE ?= "fsl_fman_ucode_ls1046_r1.0_108_4_9.bin" diff --git a/recipes-bsp/atf/atf_git.bb b/recipes-bsp/atf/atf_git.bb index 50ac28d..b9e9250 100755 --- a/recipes-bsp/atf/atf_git.bb +++ b/recipes-bsp/atf/atf_git.bb @@ -21,7 +21,7 @@ SRCREV = "${NXP_LF_SRCREV_ATF}" # Local variables PLATFORM = "gateway_dk" UBOOT_BINARY = "u-boot.bin" -BOOTTYPE ?= "qspi emmc" +BOOTTYPE ?= "qspi emmc qspi1g emmc1g" # requires CROSS_COMPILE set by hand as there is no configure script export CROSS_COMPILE = "${TARGET_PREFIX}" @@ -52,16 +52,26 @@ do_compile() { for d in ${BOOTTYPE}; do case $d in qspi) + bootmode="qspi" rcwimg="${RCWQSPI}" ;; emmc) + bootmode="emmc" rcwimg="${RCWEMMC}" ;; + qspi1g) + bootmode="qspi" + rcwimg="${RCWQSPI1G}" + ;; + emmc1g) + bootmode="emmc" + rcwimg="${RCWEMMC1G}" + ;; esac make V=1 realclean - oe_runmake pbl fip PLAT=${PLATFORM} BOOT_MODE=${d} DEBUG=0 LOG_LEVEL=20 RCW=${DEPLOY_DIR_IMAGE}/rcw/gateway_dk/${rcwimg} BL33=${DEPLOY_DIR_IMAGE}/${UBOOT_BINARY} - cp ${S}/build/${PLATFORM}/release/bl2_${d}.pbl . + oe_runmake pbl fip PLAT=${PLATFORM} BOOT_MODE=${bootmode} DEBUG=0 LOG_LEVEL=20 RCW=${DEPLOY_DIR_IMAGE}/rcw/gateway_dk/${rcwimg} BL33=${DEPLOY_DIR_IMAGE}/${UBOOT_BINARY} + cp ${S}/build/${PLATFORM}/release/bl2_${bootmode}.pbl ./bl2_${d}.pbl cp ${S}/build/${PLATFORM}/release/fip.bin . done } diff --git a/recipes-bsp/rcw/files/0002-gateway-dk-add-SFP-Base-X-RCW-profiles.patch b/recipes-bsp/rcw/files/0002-gateway-dk-add-SFP-Base-X-RCW-profiles.patch new file mode 100644 index 0000000..4b89bdb --- /dev/null +++ b/recipes-bsp/rcw/files/0002-gateway-dk-add-SFP-Base-X-RCW-profiles.patch @@ -0,0 +1,95 @@ +From 524b648d7785a5a63445f34d44466d30bd135d4a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=B4she=20van=20der=20Sterre?= +Date: Fri, 7 Aug 2026 15:55:35 +0200 +Subject: [PATCH] board: gateway_dk: derive SFP modes from SerDes RCW + +Upstream-Status: Inappropriate [product-specific] + +Signed-off-by: Môshe van der Sterre +--- + gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_emmcboot.rcw | 5 +++-- + gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_qspiboot.rcw | 5 +++-- + gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_emmcboot.rcw | 9 +++++++++ + gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_qspiboot.rcw | 9 +++++++++ + .../{NN_FFSSPSNP_1133_5A06 => }/gateway_dk_common.rcwi | 1 - + 5 files changed, 24 insertions(+), 5 deletions(-) + create mode 100644 gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_emmcboot.rcw + create mode 100644 gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_qspiboot.rcw + rename gateway_dk/{NN_FFSSPSNP_1133_5A06 => }/gateway_dk_common.rcwi (97%) + +diff --git a/gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_emmcboot.rcw b/gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_emmcboot.rcw +index 6c321b7..bb99549 100755 +--- a/gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_emmcboot.rcw ++++ b/gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_emmcboot.rcw +@@ -3,6 +3,7 @@ + * To build, just enter "make" in the top level directory. + */ + +-PBI_SRC=6 /* eMMC (b0110) */ ++#include "../gateway_dk_common.rcwi" + +-#include "gateway_dk_common.rcwi" ++SRDS_PRTCL_S1=4403 /* 0x1133: 0=XFI.9, 1=XFI.10, 2=SGMII.5, 3=SGMII.6 */ ++PBI_SRC=6 /* eMMC (b0110) */ +diff --git a/gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_qspiboot.rcw b/gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_qspiboot.rcw +index 2e49fce..fe2936c 100755 +--- a/gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_qspiboot.rcw ++++ b/gateway_dk/NN_FFSSPSNP_1133_5A06/rcw_2100_qspiboot.rcw +@@ -3,6 +3,7 @@ + * To build, just enter "make" in the top level directory. + */ + +-PBI_SRC=4 /* QSPI (b0100) */ ++#include "../gateway_dk_common.rcwi" + +-#include "gateway_dk_common.rcwi" ++SRDS_PRTCL_S1=4403 /* 0x1133: 0=XFI.9, 1=XFI.10, 2=SGMII.5, 3=SGMII.6 */ ++PBI_SRC=4 /* QSPI (b0100) */ +diff --git a/gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_emmcboot.rcw b/gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_emmcboot.rcw +new file mode 100644 +index 0000000..675b9c4 +--- /dev/null ++++ b/gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_emmcboot.rcw +@@ -0,0 +1,9 @@ ++/* ++ * Gateway Development Kit - eMMC boot ++ * To build, just enter "make" in the top level directory. ++ */ ++ ++#include "../gateway_dk_common.rcwi" ++ ++SRDS_PRTCL_S1=4915 /* 0x1333: 0=XFI.9, 1=SGMII.10, 2=SGMII.5, 3=SGMII.6 */ ++PBI_SRC=6 /* eMMC (b0110) */ +diff --git a/gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_qspiboot.rcw b/gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_qspiboot.rcw +new file mode 100644 +index 0000000..00b2546 +--- /dev/null ++++ b/gateway_dk/NN_FSSSPSNP_1333_5A06/rcw_2100_qspiboot.rcw +@@ -0,0 +1,9 @@ ++/* ++ * Gateway Development Kit - QSPI boot ++ * To build, just enter "make" in the top level directory. ++ */ ++ ++#include "../gateway_dk_common.rcwi" ++ ++SRDS_PRTCL_S1=4915 /* 0x1333: 0=XFI.9, 1=SGMII.10, 2=SGMII.5, 3=SGMII.6 */ ++PBI_SRC=4 /* QSPI (b0100) */ +diff --git a/gateway_dk/NN_FFSSPSNP_1133_5A06/gateway_dk_common.rcwi b/gateway_dk/gateway_dk_common.rcwi +similarity index 97% +rename from gateway_dk/NN_FFSSPSNP_1133_5A06/gateway_dk_common.rcwi +rename to gateway_dk/gateway_dk_common.rcwi +index cac1ea8..ba2579d 100644 +--- a/gateway_dk/NN_FFSSPSNP_1133_5A06/gateway_dk_common.rcwi ++++ b/gateway_dk/gateway_dk_common.rcwi +@@ -19,7 +19,6 @@ HWA_CGA_M2_CLK_SEL=1 /* QSPI clock selector */ + HWA_CGA_M1_CLK_SEL=6 /* b110 Group A PLL2 /2 is clock, for FMAN */ + + /* SerDes settings */ +-SRDS_PRTCL_S1=4403 /* 0x1133: 0=XFI.9, 1=XFI.10, 2=SGMII.5, 3=SGMII.6 */ + SRDS_PRTCL_S2=23046 /* 0x5a06: 0=PCIe 1.0x1, 1=SGMII.2, 2=OFF, 3=PCIe 3.0x1 */ + SRDS_PLL_REF_CLK_SEL_S1=1 /* 100/156.25 Mhz Clock for SerDes 1 */ + SRDS_PLL_REF_CLK_SEL_S2=0 /* 100/100 Mhz Clock for Serdes 2 */ +-- +2.52.0 + diff --git a/recipes-bsp/rcw/rcw_git.bb b/recipes-bsp/rcw/rcw_git.bb index b768e65..dee15c6 100755 --- a/recipes-bsp/rcw/rcw_git.bb +++ b/recipes-bsp/rcw/rcw_git.bb @@ -12,6 +12,7 @@ DEPENDS = "tcl-native" require conf/include/nxp-base.inc SRC_URI = "git://github.com/nxp-qoriq/rcw;protocol=https;nobranch=1 \ file://0001-gateway-dk-add-board-support.patch \ + file://0002-gateway-dk-add-SFP-Base-X-RCW-profiles.patch \ " SRCREV = "${NXP_LF_SRCREV_RCW}" diff --git a/recipes-bsp/u-boot/files/0008-gateway-dk-derive-SFP-modes-from-SerDes-RCW.patch b/recipes-bsp/u-boot/files/0008-gateway-dk-derive-SFP-modes-from-SerDes-RCW.patch new file mode 100644 index 0000000..4d66b5e --- /dev/null +++ b/recipes-bsp/u-boot/files/0008-gateway-dk-derive-SFP-modes-from-SerDes-RCW.patch @@ -0,0 +1,252 @@ +From 70baa83ef1aa138de8612053da7d5630795bc8f3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=B4she=20van=20der=20Sterre?= +Date: Fri, 7 Aug 2026 15:34:46 +0200 +Subject: [PATCH] board: gateway_dk: derive SFP modes from SerDes RCW + +Upstream-Status: Inappropriate [product-specific] + +Signed-off-by: Môshe van der Sterre +--- + board/freescale/gateway_dk/gateway_dk.c | 195 +++++++++++++++++++++++- + 1 file changed, 194 insertions(+), 1 deletion(-) + +diff --git a/board/freescale/gateway_dk/gateway_dk.c b/board/freescale/gateway_dk/gateway_dk.c +index 53beeee70e2..1583b761d2e 100644 +--- a/board/freescale/gateway_dk/gateway_dk.c ++++ b/board/freescale/gateway_dk/gateway_dk.c +@@ -27,9 +27,11 @@ + #include + #include + #include ++#include + + #include "../common/i2c_mux.h" + #include "setup/hw_test.h" ++#include "setup/i2c_helpers.h" + + DECLARE_GLOBAL_DATA_PTR; + +@@ -61,6 +63,32 @@ void lp5810a_set_status(int any_test_failed); + #define DCFG_PORSR1_OFFSET 0x000 + #define ERRATUM_A010539_TRIGGER_OFFSET 0x1A8 + ++#define MONO_SRDS1_SFP0_10G_SFP1_10G 0x1133 ++#define MONO_SRDS1_SFP0_10G_SFP1_1G 0x1333 ++#define MONO_SRDS1_SFP0_1G_SFP1_1G 0x3333 ++ ++#define MONO_SFP0_ETH_PATH "/soc/fman@1a00000/ethernet@f0000" ++#define MONO_SFP1_ETH_PATH "/soc/fman@1a00000/ethernet@f2000" ++ ++#define MONO_RETIMER_I2C_BUS 0 ++#define MONO_RETIMER_I2C_MUX_ADDR 0x70 ++#define MONO_RETIMER_I2C_MUX_CHANNEL 0x01 ++#define MONO_RETIMER_ADDR 0x18 ++#define MONO_RETIMER_DEVICE_ID_REG 0x01 ++#define MONO_RETIMER_EXPECTED_ID 0xd0 ++#define MONO_RETIMER_CHANNEL_REG 0xff ++#define MONO_RETIMER_CHANNEL_PAGE_BASE 0x04 ++#define MONO_RETIMER_PFD_OVERRIDE_REG 0x09 ++#define MONO_RETIMER_PFD_CDR_BYPASS BIT(5) ++#define MONO_RETIMER_DATA_MUX_REG 0x1e ++#define MONO_RETIMER_DATA_MUX_MASK (BIT(7) | BIT(6) | BIT(5)) ++ ++enum mono_sfp_mode { ++ MONO_SFP_MODE_10G, ++ MONO_SFP_MODE_1000BASEX, ++ MONO_SFP_MODE_UNKNOWN, ++}; ++ + static void erratum_a010539(void) + { + u32 porsr1_val; +@@ -71,6 +99,169 @@ static void erratum_a010539(void) + out_be32((void *)(CFG_SYS_FSL_SCFG_ADDR + ERRATUM_A010539_TRIGGER_OFFSET), 0xFFFFFFFF); + } + ++static u32 mono_get_serdes1_protocol(void) ++{ ++ struct ccsr_gur __iomem *gur = (void *)(CFG_SYS_FSL_GUTS_ADDR); ++ u32 protocol = gur_in32(&gur->rcwsr[4]); ++ ++ protocol &= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK; ++ protocol >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT; ++ ++ return protocol; ++} ++ ++static enum mono_sfp_mode mono_sfp_mode_from_serdes1(u32 protocol, int port) ++{ ++ switch (protocol) { ++ case MONO_SRDS1_SFP0_10G_SFP1_10G: ++ return MONO_SFP_MODE_10G; ++ case MONO_SRDS1_SFP0_10G_SFP1_1G: ++ return port == 0 ? MONO_SFP_MODE_10G : MONO_SFP_MODE_1000BASEX; ++ case MONO_SRDS1_SFP0_1G_SFP1_1G: ++ return MONO_SFP_MODE_1000BASEX; ++ default: ++ return MONO_SFP_MODE_UNKNOWN; ++ } ++} ++ ++static int mono_retimer_update_bits(struct udevice *dev, uint reg, u8 mask, u8 set) ++{ ++ int ret = dm_i2c_reg_read(dev, reg); ++ u8 val; ++ ++ if (ret < 0) ++ return ret; ++ ++ val = (ret & ~mask) | (set & mask); ++ return dm_i2c_reg_write(dev, reg, val); ++} ++ ++static int mono_configure_retimer_channel(struct udevice *retimer_dev, ++ int channel, ++ enum mono_sfp_mode mode) ++{ ++ u8 page = MONO_RETIMER_CHANNEL_PAGE_BASE | channel; ++ u8 bypass = mode == MONO_SFP_MODE_1000BASEX ? ++ MONO_RETIMER_PFD_CDR_BYPASS : 0; ++ int ret; ++ ++ ret = dm_i2c_reg_write(retimer_dev, MONO_RETIMER_CHANNEL_REG, page); ++ if (ret) ++ return ret; ++ ++ ret = mono_retimer_update_bits(retimer_dev, MONO_RETIMER_PFD_OVERRIDE_REG, ++ MONO_RETIMER_PFD_CDR_BYPASS, bypass); ++ if (ret) ++ return ret; ++ ++ ret = mono_retimer_update_bits(retimer_dev, MONO_RETIMER_DATA_MUX_REG, ++ MONO_RETIMER_DATA_MUX_MASK, 0); ++ if (ret) ++ return ret; ++ ++ return dm_i2c_reg_write(retimer_dev, MONO_RETIMER_CHANNEL_REG, 0); ++} ++ ++static void mono_configure_sfp_retimer(void) ++{ ++ enum mono_sfp_mode sfp0_mode, sfp1_mode; ++ struct udevice *retimer_dev; ++ u32 serdes1 = mono_get_serdes1_protocol(); ++ int ret; ++ ++ sfp0_mode = mono_sfp_mode_from_serdes1(serdes1, 0); ++ sfp1_mode = mono_sfp_mode_from_serdes1(serdes1, 1); ++ if (sfp0_mode == MONO_SFP_MODE_UNKNOWN || ++ sfp1_mode == MONO_SFP_MODE_UNKNOWN) { ++ printf("SFP retimer: unsupported SerDes1 protocol 0x%x\n", serdes1); ++ return; ++ } ++ ++ ret = setup_i2c_muxed_device(MONO_RETIMER_I2C_BUS, ++ MONO_RETIMER_I2C_MUX_ADDR, ++ MONO_RETIMER_I2C_MUX_CHANNEL, ++ MONO_RETIMER_ADDR, &retimer_dev); ++ if (ret) { ++ printf("SFP retimer: setup failed (%d)\n", ret); ++ return; ++ } ++ ++ ret = dm_i2c_reg_read(retimer_dev, MONO_RETIMER_DEVICE_ID_REG); ++ if (ret < 0) { ++ printf("SFP retimer: device ID read failed (%d)\n", ret); ++ return; ++ } ++ if ((u8)ret != MONO_RETIMER_EXPECTED_ID) { ++ printf("SFP retimer: unexpected device ID 0x%02x\n", ret & 0xff); ++ return; ++ } ++ ++ ret = mono_configure_retimer_channel(retimer_dev, 0, sfp0_mode); ++ if (ret) { ++ printf("SFP0 retimer: configuration failed (%d)\n", ret); ++ return; ++ } ++ ++ ret = mono_configure_retimer_channel(retimer_dev, 1, sfp1_mode); ++ if (ret) { ++ printf("SFP1 retimer: configuration failed (%d)\n", ret); ++ return; ++ } ++} ++ ++static int mono_fixup_sfp_port(void *blob, const char *path, ++ enum mono_sfp_mode mode) ++{ ++ int node; ++ int ret; ++ ++ fdt32_t fixed_link[5]; ++ ++ if (mode != MONO_SFP_MODE_1000BASEX) ++ return 0; ++ ++ node = fdt_path_offset(blob, path); ++ if (node < 0) { ++ printf("SFP DT fixup: missing %s (%d)\n", path, node); ++ return node; ++ } ++ ++ ret = fdt_setprop_string(blob, node, "phy-connection-type", ++ "1000base-x"); ++ if (ret) ++ return ret; ++ ++ fixed_link[0] = cpu_to_fdt32(0); ++ fixed_link[1] = cpu_to_fdt32(1); ++ fixed_link[2] = cpu_to_fdt32(1000); ++ fixed_link[3] = cpu_to_fdt32(0); ++ fixed_link[4] = cpu_to_fdt32(0); ++ ++ ret = fdt_setprop(blob, node, "fixed-link", ++ fixed_link, sizeof(fixed_link)); ++ ++ if (ret) ++ return ret; ++ ++ return 0; ++} ++ ++static void mono_fixup_sfp_ports(void *blob) ++{ ++ u32 serdes1 = mono_get_serdes1_protocol(); ++ enum mono_sfp_mode sfp0_mode = mono_sfp_mode_from_serdes1(serdes1, 0); ++ enum mono_sfp_mode sfp1_mode = mono_sfp_mode_from_serdes1(serdes1, 1); ++ int ret; ++ ++ ret = mono_fixup_sfp_port(blob, MONO_SFP0_ETH_PATH, sfp0_mode); ++ if (ret) ++ printf("SFP0 DT fixup failed (%d)\n", ret); ++ ++ ret = mono_fixup_sfp_port(blob, MONO_SFP1_ETH_PATH, sfp1_mode); ++ if (ret) ++ printf("SFP1 DT fixup failed (%d)\n", ret); ++} ++ + int board_early_init_f(void) + { + erratum_a010539(); +@@ -112,6 +303,7 @@ int misc_init_r(void) + + hw_tests_print_banner("Boot Self-Test"); + r = hw_tests_run(hw_tests, ARRAY_SIZE(hw_tests)); ++ mono_configure_sfp_retimer(); + + /* Surface the aggregate result on the front-panel LED and propagate + * it to the kernel via bootargs. +@@ -170,6 +362,7 @@ int ft_board_setup(void *blob, struct bd_info *bd) + #endif + #endif + ++ mono_fixup_sfp_ports(blob); + fdt_fixup_icid(blob); + return 0; +-} +\ No newline at end of file ++} +-- +2.52.0 + diff --git a/recipes-bsp/u-boot/u-boot_git.bb b/recipes-bsp/u-boot/u-boot_git.bb index 1c0f642..06a350c 100755 --- a/recipes-bsp/u-boot/u-boot_git.bb +++ b/recipes-bsp/u-boot/u-boot_git.bb @@ -18,6 +18,7 @@ SRC_URI = "git://github.com/nxp-qoriq/u-boot;protocol=https;nobranch=1 \ file://0005-gateway-dk-add-defconfig-and-board-header.patch \ file://0006-gateway-dk-add-dts.patch \ file://0007-gateway-dk-wire-into-upstream-tree.patch \ + file://0008-gateway-dk-derive-SFP-modes-from-SerDes-RCW.patch \ file://environment.txt \ file://environment-qspi.txt \ file://environment-emmc.txt \ diff --git a/recipes-core/images/firmware-image.bb b/recipes-core/images/firmware-image.bb index a931053..6b02a4c 100755 --- a/recipes-core/images/firmware-image.bb +++ b/recipes-core/images/firmware-image.bb @@ -19,7 +19,7 @@ SRC_URI = "" S = "${UNPACKDIR}/src" # BOOTTYPE can be overridden on command line -BOOTTYPE ?= "qspi emmc" +BOOTTYPE ?= "qspi emmc qspi1g emmc1g" # Firmware signing key (ECDSA P-256). Set these to enable image signing. # If FIRMWARE_SIGNING_KEY is not set or the file doesn't exist, the build @@ -64,10 +64,12 @@ do_compile() { truncate -s 32M ${WORKDIR}/firmware-${d}.bin # On eMMC the CPU boots from a 4KB offset to avoid the partition table region - if [ "$d" = "emmc" ]; then + if [ "$d" = "emmc" ] || [ "$d" = "emmc1g" ]; then BL2_SEEK=4 + uboot_env="emmc" else BL2_SEEK=0 + uboot_env="qspi" fi # Windows match the partition layout in the kernel device tree (and @@ -75,13 +77,13 @@ do_compile() { # ending at the 32MB image size. check_size ${DEPLOY_DIR_IMAGE}/atf/bl2_${d}.pbl $(expr 1024 - $BL2_SEEK) check_size ${DEPLOY_DIR_IMAGE}/atf/fip.bin 2048 - check_size ${DEPLOY_DIR_IMAGE}/u-boot-${d}.env 1024 + check_size ${DEPLOY_DIR_IMAGE}/u-boot-${uboot_env}.env 1024 check_size ${DEPLOY_DIR_IMAGE}/${FMAN_UCODE} 1024 check_size ${DEPLOY_DIR_IMAGE}/fitImage 24576 dd if=${DEPLOY_DIR_IMAGE}/atf/bl2_${d}.pbl of=${WORKDIR}/firmware-${d}.bin bs=1K seek=${BL2_SEEK} conv=notrunc dd if=${DEPLOY_DIR_IMAGE}/atf/fip.bin of=${WORKDIR}/firmware-${d}.bin bs=1K seek=1024 conv=notrunc - dd if=${DEPLOY_DIR_IMAGE}/u-boot-${d}.env of=${WORKDIR}/firmware-${d}.bin bs=1K seek=3072 conv=notrunc + dd if=${DEPLOY_DIR_IMAGE}/u-boot-${uboot_env}.env of=${WORKDIR}/firmware-${d}.bin bs=1K seek=3072 conv=notrunc dd if=${DEPLOY_DIR_IMAGE}/${FMAN_UCODE} of=${WORKDIR}/firmware-${d}.bin bs=1K seek=4096 conv=notrunc dd if=${DEPLOY_DIR_IMAGE}/fitImage of=${WORKDIR}/firmware-${d}.bin bs=1K seek=8192 conv=notrunc done