qoriq: add factory images for NXP T4240RDB board master
authorPawel Dembicki <[email protected]>
Wed, 19 Nov 2025 22:07:18 +0000 (23:07 +0100)
committerStijn Tintel <[email protected]>
Fri, 5 Dec 2025 21:57:41 +0000 (23:57 +0200)
This commit adds the factory images for T4240RDB board in both variants:
  - nor: for booting and read whole system from NOR memory
  - sdboot: for booting and read whole system from SD card

SD Card images install:

  - Burn image to sdcard. E.g:
    gunzip -c openwrt-qoriq-generic-fsl_t4240rdb-sdboot-squashfs-sdcard.img.gz | \
    sudo dd of=/dev/mmcblk0 conv=fsync,notrunc status=progress bs=4M && sync
  - Download lastest Cortina PHY firmware from NXP github [1], if you accept their
    EULA [2].
  - Install Cortina PHY on image, E.g:
    dd if=cs4315-cs4340-PHY-ucode.txt of=/dev/mmcblk0 bs=1 seek=2M
  - Insert SD-Card to SD slot
  - Switch SW3.4 to OFF
  - Configre mac addresses from sticker in u-boot. E.g:
    setenv ethaddr 00:10:f3:3a:a8:66
    setenv eth1addr 00:10:f3:3a:a8:67
    setenv eth2addr 00:10:f3:3a:a8:68
    setenv eth3addr 00:10:f3:3a:a8:69
    setenv eth4addr 00:10:f3:3a:a8:6a
    setenv eth5addr 00:10:f3:3a:a8:6b
    setenv eth6addr 00:10:f3:3a:a8:6c
    setenv eth7addr 00:10:f3:3a:a8:6d
    setenv eth8addr 00:10:f3:3a:a8:6e
    setenv eth9addr 00:10:f3:3a:a8:6f
    setenv eth10addr 00:10:f3:3a:a8:70
    setenv eth11addr 00:10:f3:3a:a8:71
    saveenv
  - reset and boot

NOR images install (from SD Card image):

  - boot device from OpenWrt SD Card image
  - download nor factory image and put it into /tmp/
  - Run install:
    gunzip -c /tmp/openwrt-qoriq-generic-fsl_t4240rdb-nor-squashfs-factory.bin.gz | mtd write - /dev/mtd0
  - Switch SW3.4 to ON
  - Switch SW3.1-3 to OFF
  - reboot
  - Do postprocessing (see bellow)

NOR images install (from u-boot):

  - download and extract initfamfs image on tftp server root
  - boot device and stop in u-boot
  - configure server and ip address. E.g:
    setenv ipaddr 192.168.1.2
    setenv serverip 192.168.1.1
  - Download image and run flashing:
    tftpboot $loadaddr openwrt-qoriq-generic-fsl_t4240rdb-sdcard-initramfs-kernel.bin
    setenv bootargs console=ttyS0,115200
    bootm $loadaddr
  - download nor factory image and put it into /tmp/
  - Run install:
    gunzip -c /tmp/openwrt-qoriq-generic-fsl_t4240rdb-nor-squashfs-factory.bin.gz | mtd write - /dev/mtd0
  - Switch SW3.4 to ON
  - Switch SW3.1-3 to OFF
  - reboot
  - Do postprocessing (see bellow)

NOR images post processing:

  - Configre mac addresses from sticker in u-boot. E.g:
    setenv ethaddr 00:10:f3:3a:a8:66
    setenv eth1addr 00:10:f3:3a:a8:67
    setenv eth2addr 00:10:f3:3a:a8:68
    setenv eth3addr 00:10:f3:3a:a8:69
    setenv eth4addr 00:10:f3:3a:a8:6a
    setenv eth5addr 00:10:f3:3a:a8:6b
    setenv eth6addr 00:10:f3:3a:a8:6c
    setenv eth7addr 00:10:f3:3a:a8:6d
    setenv eth8addr 00:10:f3:3a:a8:6e
    setenv eth9addr 00:10:f3:3a:a8:6f
    setenv eth10addr 00:10:f3:3a:a8:70
    setenv eth11addr 00:10:f3:3a:a8:71
    saveenv
  - boot
  - Download and refresh RCW stored in eeprom:
    tr '\0' '\377' < /dev/zero | dd bs=256 of=/sys/bus/i2c/devices/0-0050/eeprom
    cat /tmp/openwrt-qoriq-generic-fsl_t4240rdb-nor-squashfs-rcw.bin > /sys/bus/i2c/devices/0-0050/eeprom
  - Download lastest Cortina PHY firmware from NXP github [1], if you accept their
    EULA [2].
  - Install Cortina PHY on image, E.g:
    mtd write cs4315-cs4340-PHY-ucode.txt /dev/mtd4
  - reset and boot

[1] https://raw.githubusercontent.com/nxp-qoriq/qoriq-firmware-cortina/refs/tags/lf-6.12.34-2.1.0/cs4315-cs4340-PHY-ucode.txt
[2] https://github.com/nxp-qoriq/qoriq-firmware-cortina/blob/lf-6.12.34-2.1.0/EULA.txt

Signed-off-by: Pawel Dembicki <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/10941
Signed-off-by: Stijn Tintel <[email protected]>
package/firmware/layerscape/fman-ucode/Makefile
package/firmware/layerscape/ls-rcw/Makefile
package/firmware/layerscape/ls-rcw/patches/0003-fix_rcw_for_t4240rdb.patch [new file with mode: 0644]
target/linux/qoriq/image/Makefile
target/linux/qoriq/image/gen_sdcard_head_img.sh [new file with mode: 0755]
target/linux/qoriq/image/generic.mk

index 825983b2d1ab2c572c4898c4bca11d1a29ad7a00..315f31a6e6e6fe6135d4f7c82f58bc60ec8d8164 100644 (file)
@@ -24,8 +24,8 @@ define Package/layerscape-fman
   SECTION:=firmware
   CATEGORY:=Firmware
   TITLE:=NXP FMan ucode
-  DEPENDS:=@TARGET_layerscape
-  DEFAULT:=y if TARGET_layerscape_armv8_64b
+  DEPENDS:=@TARGET_layerscape||TARGET_qoriq
+  DEFAULT:=y if TARGET_layerscape_armv8_64b||TARGET_qoriq
   HIDDEN:=1
 endef
 
@@ -38,6 +38,8 @@ define Build/InstallDev
                $(STAGING_DIR_IMAGE)/fsl_ls1043a-rdb-fman.bin
        $(CP) $(PKG_BUILD_DIR)/fsl_fman_ucode_ls1046_r1.0_106_4_18.bin \
                $(STAGING_DIR_IMAGE)/fsl_ls1046a-rdb-fman.bin
+       $(CP) $(PKG_BUILD_DIR)/fsl_fman_ucode_t4240_r2.0_106_4_18.bin \
+               $(STAGING_DIR_IMAGE)/fsl_t4240-rdb-fman.bin
 endef
 
 $(eval $(call BuildPackage,layerscape-fman))
index e50011e7bc724fb3b6aa50b6c231d5f5fad63bec..d8f345d7938091f4876b6ca64d9fb10ce227e9b7 100644 (file)
@@ -24,8 +24,8 @@ define Package/layerscape-rcw
   SECTION:=firmware
   CATEGORY:=Firmware
   TITLE:=NXP Layerscape RCW binaries
-  DEPENDS:=@TARGET_layerscape
-  DEFAULT:=y if TARGET_layerscape_armv7
+  DEPENDS:=@TARGET_layerscape||TARGET_qoriq
+  DEFAULT:=y if TARGET_layerscape_armv7||TARGET_qoriq
   HIDDEN:=1
 endef
 
@@ -46,7 +46,8 @@ BOARDS := \
   ls2088a-rdb \
   lx2160a-rdb \
   lx2160a-rdb-sdboot \
-  ls1021a-twr
+  ls1021a-twr \
+  t4240rdb-nor \
 
 RCW_ls1012a-rdb         :=ls1012ardb/R_SPNH_3508/rcw_1000_default.bin
 RCW_ls1012a-frdm        :=ls1012afrdm/N_SSNP_3305/rcw_800.bin
@@ -65,6 +66,7 @@ RCW_ls2088a-rdb         :=ls2088ardb/FFFFFFFF_PP_HH_0x2a_0x41/rcw_1800.bin
 RCW_lx2160a-rdb         :=lx2160ardb_rev2/XGGFF_PP_HHHH_RR_19_5_2/rcw_2000_700_2900_19_5_2.bin
 RCW_lx2160a-rdb-sdboot  :=lx2160ardb_rev2/XGGFF_PP_HHHH_RR_19_5_2/rcw_2000_700_2900_19_5_2.bin
 RCW_ls1021a-twr         :=ls1021atwr/SSR_PNS_30/rcw_1200.bin
+RCW_t4240rdb-nor        :=t4240rdb/SSFFPPH_27_55_1_9/rcw_27_55_1_9_1666MHz.bin
 
 define Build/InstallDev
        $(INSTALL_DIR) $(STAGING_DIR_IMAGE)
diff --git a/package/firmware/layerscape/ls-rcw/patches/0003-fix_rcw_for_t4240rdb.patch b/package/firmware/layerscape/ls-rcw/patches/0003-fix_rcw_for_t4240rdb.patch
new file mode 100644 (file)
index 0000000..2725a52
--- /dev/null
@@ -0,0 +1,42 @@
+--- /dev/null
++++ b/t4240rdb/a008098.rcw
+@@ -0,0 +1,31 @@
++/*
++ * Work-around for erratum A-008098
++ *
++ * Description:
++ * The PCI Express controller may fail to discard a bad packet when there
++ * are excessive, correctable errors resulting in corrupted memory.
++ *
++ * Impact:
++ * While running in an environment with many correctable errors the PCI
++ * Express controller can corrupt memory.
++ *
++ * T4240RDB have only 0x100 bytes for PBI in eeprom. Unused pcie must be deleted.
++ */
++
++.pbi
++write 0x240000, 0x87000048
++write 0x240004, 0x80802040
++write 0x240000, 0x8700004c
++write 0x240004, 0x02c02000
++write 0x240000, 0x87000050
++write 0x240004, 0x00002000
++
++write 0x260000, 0x87000048
++write 0x260004, 0x80802040
++write 0x260000, 0x8700004c
++write 0x260004, 0x02c02000
++write 0x260000, 0x87000050
++write 0x260004, 0x00002000
++
++flush
++.end
+--- a/t4240rdb/SSFFPPH_27_55_1_9/rcw_27_55_1_9_1666MHz.rcw
++++ b/t4240rdb/SSFFPPH_27_55_1_9/rcw_27_55_1_9_1666MHz.rcw
+@@ -60,4 +60,4 @@ write 0x124010, 0x00000101
+ write 0x124130, 0x0000000c
+ .end
+-#include <../t4240qds/a008098.rcw>
++#include <a008098.rcw>
index 69fea238b5e21d0787edb9b53852e085460488d2..df0c2f6d8ff9d8bc58463e53c9905857c77e635d 100644 (file)
@@ -4,6 +4,11 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/image.mk
 
 SQUASHFSCOMP := xz $(LZMA_XZ_OPTIONS)
+LS_SD_KERNELPART_SIZE = 24
+LS_SD_KERNELPART_OFFSET = 3
+LS_SD_ROOTFSPART_OFFSET = 32
+LS_SD_IMAGE_SIZE = $(shell echo $$((($(LS_SD_ROOTFSPART_OFFSET) + \
+       $(CONFIG_TARGET_ROOTFS_PARTSIZE)))))
 
 define Build/sdcard-img
         rm -fR [email protected]
@@ -22,6 +27,36 @@ define Build/sdcard-img
         $(if $(UBOOT),dd if=$(STAGING_DIR_IMAGE)/$(UBOOT).img of=$@ bs=512 skip=1 seek=1 conv=notrunc)
 endef
 
+define Build/ls-clean
+       rm -f $@
+endef
+
+define Build/ls-append
+       dd if=$(STAGING_DIR_IMAGE)/$(1) >> $@
+endef
+
+define Build/ls-append-dtb
+       dd if=$(DTS_DIR)/$(1).dtb >> $@
+endef
+
+define Build/ls-append-kernel
+       mkdir -p [email protected] && \
+       cp $(IMAGE_KERNEL) [email protected]/fitImage && \
+       make_ext4fs -J -L kernel -l "$(LS_SD_KERNELPART_SIZE)M" \
+               $(if $(SOURCE_DATE_EPOCH),-T $(SOURCE_DATE_EPOCH)) \
+               "[email protected]" "[email protected]" && \
+       dd [email protected] >> $@ && \
+       rm -rf [email protected] && \
+       rm -f [email protected]
+endef
+
+define Build/ls-append-sdhead
+       ./gen_sdcard_head_img.sh $(STAGING_DIR_IMAGE)/$(1)-sdcard-head.img \
+               $(LS_SD_KERNELPART_OFFSET) $(LS_SD_KERNELPART_SIZE) \
+               $(LS_SD_ROOTFSPART_OFFSET) $(CONFIG_TARGET_ROOTFS_PARTSIZE)
+       dd if=$(STAGING_DIR_IMAGE)/$(1)-sdcard-head.img >> $@
+endef
+
 define Device/Default
   PROFILES := Default
   DEVICE_DTS := $(subst _,-,$(1))
diff --git a/target/linux/qoriq/image/gen_sdcard_head_img.sh b/target/linux/qoriq/image/gen_sdcard_head_img.sh
new file mode 100755 (executable)
index 0000000..53997a3
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright 2018 NXP
+
+set -x
+[ $# -eq 5 ] || {
+    echo "SYNTAX: $0 <file> <kernel part offset> <kernel size> <rootfs part offset> <rootfs size>"
+    exit 1
+}
+
+OUTPUT="$1"
+KERNELOFFSET="$(($2 * 1024))"
+KERNELSIZE="$3"
+ROOTFSOFFSET="$(($4 * 1024))"
+ROOTFSSIZE="$5"
+
+head=4
+sect=63
+
+set $(ptgen -o $OUTPUT -h $head -s $sect -t 83 -p ${KERNELSIZE}M@${KERNELOFFSET} -p ${ROOTFSSIZE}M@${ROOTFSOFFSET})
index 2a84112c03d48f961da15d709126941e61074f68..c2d7d94b35cf397889aa250a7d7b90305abcc1d8 100644 (file)
@@ -12,17 +12,34 @@ endef
 define Device/fsl_t4240rdb-nor
   $(Device/fsl_t4240rdb)
   DEVICE_MODEL := T4240RDB (SDCARD BOOT)
-  IMAGES := sysupgrade.bin
+  IMAGES := factory.bin.gz sysupgrade.bin rcw.bin
+  IMAGE/factory.bin.gz := \
+    append-kernel | append-rootfs | pad-rootfs | pad-to 126M | \
+    pad-to 127M | \
+    ls-append fsl_t4240-rdb-fman.bin | pad-to 130176k | \
+    ls-append $(1)-uboot-env.bin | pad-to 130304k | \
+    ls-append $(1)-uboot.bin | gzip
   IMAGE/sysupgrade.bin := \
     append-kernel | append-rootfs | pad-rootfs | append-metadata
+  IMAGE/rcw.bin := \
+    ls-append $(1)-rcw.bin
 endef
 TARGET_DEVICES += fsl_t4240rdb-nor
 
 define Device/fsl_t4240rdb-sdboot
   $(Device/fsl_t4240rdb)
   DEVICE_MODEL := T4240RDB (NOR BOOT)
-  IMAGES := sysupgrade.bin
+  IMAGES := sdcard.img.gz sysupgrade.bin
   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+  IMAGE/sdcard.img.gz := \
+    ls-clean | \
+    ls-append-sdhead $(1) | pad-to 4K | \
+    ls-append $(1)-uboot.bin | pad-to 1028k | \
+    ls-append $(1)-uboot-env.bin | pad-to 1040k | \
+    ls-append fsl_t4240-rdb-fman.bin | pad-to 2M | \
+    pad-to $(LS_SD_KERNELPART_OFFSET)M | \
+    ls-append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \
+    append-rootfs | pad-to $(LS_SD_IMAGE_SIZE)M | gzip
 endef
 TARGET_DEVICES += fsl_t4240rdb-sdboot