From 9a01b005fd8c439a7ec00afaa43d0e134e23cf5c Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Wed, 19 Nov 2025 23:07:18 +0100 Subject: [PATCH] qoriq: add factory images for NXP T4240RDB board 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 Link: https://github.com/openwrt/openwrt/pull/10941 Signed-off-by: Stijn Tintel --- .../firmware/layerscape/fman-ucode/Makefile | 6 ++- package/firmware/layerscape/ls-rcw/Makefile | 8 ++-- .../patches/0003-fix_rcw_for_t4240rdb.patch | 42 +++++++++++++++++++ target/linux/qoriq/image/Makefile | 35 ++++++++++++++++ .../linux/qoriq/image/gen_sdcard_head_img.sh | 21 ++++++++++ target/linux/qoriq/image/generic.mk | 21 +++++++++- 6 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 package/firmware/layerscape/ls-rcw/patches/0003-fix_rcw_for_t4240rdb.patch create mode 100755 target/linux/qoriq/image/gen_sdcard_head_img.sh diff --git a/package/firmware/layerscape/fman-ucode/Makefile b/package/firmware/layerscape/fman-ucode/Makefile index 825983b2d1..315f31a6e6 100644 --- a/package/firmware/layerscape/fman-ucode/Makefile +++ b/package/firmware/layerscape/fman-ucode/Makefile @@ -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)) diff --git a/package/firmware/layerscape/ls-rcw/Makefile b/package/firmware/layerscape/ls-rcw/Makefile index e50011e7bc..d8f345d793 100644 --- a/package/firmware/layerscape/ls-rcw/Makefile +++ b/package/firmware/layerscape/ls-rcw/Makefile @@ -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 index 0000000000..2725a52789 --- /dev/null +++ b/package/firmware/layerscape/ls-rcw/patches/0003-fix_rcw_for_t4240rdb.patch @@ -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 diff --git a/target/linux/qoriq/image/Makefile b/target/linux/qoriq/image/Makefile index 69fea238b5..df0c2f6d8f 100644 --- a/target/linux/qoriq/image/Makefile +++ b/target/linux/qoriq/image/Makefile @@ -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 $@.boot @@ -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 $@.tmp && \ + cp $(IMAGE_KERNEL) $@.tmp/fitImage && \ + make_ext4fs -J -L kernel -l "$(LS_SD_KERNELPART_SIZE)M" \ + $(if $(SOURCE_DATE_EPOCH),-T $(SOURCE_DATE_EPOCH)) \ + "$@.kernel.part" "$@.tmp" && \ + dd if=$@.kernel.part >> $@ && \ + rm -rf $@.tmp && \ + rm -f $@.kernel.part +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 index 0000000000..53997a39c1 --- /dev/null +++ b/target/linux/qoriq/image/gen_sdcard_head_img.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright 2018 NXP + +set -x +[ $# -eq 5 ] || { + echo "SYNTAX: $0 " + 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}) diff --git a/target/linux/qoriq/image/generic.mk b/target/linux/qoriq/image/generic.mk index 2a84112c03..c2d7d94b35 100644 --- a/target/linux/qoriq/image/generic.mk +++ b/target/linux/qoriq/image/generic.mk @@ -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 -- 2.30.2