From eb684205e5e6958ad71cf4a179fa776f6507f7e3 Mon Sep 17 00:00:00 2001 From: Yangbo Lu Date: Wed, 18 Jul 2018 14:14:40 +0800 Subject: [PATCH] layerscape: add SD card boot support NOR/QSPI Flash on Layerscape board only has limited 64MB memory size. Since some boards (ls1043ardb/ls1046ardb/ls1088ardb/ls1021atwr) could support SD card boot, we added SD boot support for them to put all things on SD card to meet large memory requirement. Signed-off-by: Yangbo Lu --- package/boot/uboot-layerscape/Makefile | 32 ++++++++- .../files/ls1021atwr-sdboot-uEnv.txt | 8 +++ .../files/ls1043ardb-sdboot-uEnv.txt | 9 +++ .../files/ls1046ardb-sdboot-uEnv.txt | 9 +++ .../files/ls1088ardb-sdboot-uEnv.txt | 10 +++ package/firmware/layerscape/ls-rcw/Makefile | 6 ++ target/linux/layerscape/Makefile | 2 +- target/linux/layerscape/image/Makefile | 10 +++ target/linux/layerscape/image/armv7.mk | 16 +++++ target/linux/layerscape/image/armv8_64b.mk | 69 +++++++++++++++++++ .../layerscape/image/gen_sdcard_head_img.sh | 22 ++++++ 11 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 package/boot/uboot-layerscape/files/ls1021atwr-sdboot-uEnv.txt create mode 100644 package/boot/uboot-layerscape/files/ls1043ardb-sdboot-uEnv.txt create mode 100644 package/boot/uboot-layerscape/files/ls1046ardb-sdboot-uEnv.txt create mode 100644 package/boot/uboot-layerscape/files/ls1088ardb-sdboot-uEnv.txt create mode 100755 target/linux/layerscape/image/gen_sdcard_head_img.sh diff --git a/package/boot/uboot-layerscape/Makefile b/package/boot/uboot-layerscape/Makefile index 875e08f0e1..ef456bfc7e 100644 --- a/package/boot/uboot-layerscape/Makefile +++ b/package/boot/uboot-layerscape/Makefile @@ -44,16 +44,34 @@ define U-Boot/ls1043ardb ENV_SIZE:=0x20000 endef +define U-Boot/ls1043ardb-sdboot + NAME:=NXP LS1043ARDB SD Card Boot + UBOOT_CONFIG:=ls1043ardb_sdcard + UBOOT_IMAGE:=u-boot-with-spl-pbl.bin +endef + define U-Boot/ls1046ardb NAME:=NXP LS1046ARDB UBOOT_CONFIG:=ls1046ardb_qspi endef +define U-Boot/ls1046ardb-sdboot + NAME:=NXP LS1046ARDB SD Card Boot + UBOOT_CONFIG:=ls1046ardb_sdcard + UBOOT_IMAGE:=u-boot-with-spl-pbl.bin +endef + define U-Boot/ls1088ardb NAME:=NXP LS1088ARDB UBOOT_CONFIG:=ls1088ardb_qspi endef +define U-Boot/ls1088ardb-sdboot + NAME:=NXP LS1088ARDB SD Card Boot + UBOOT_CONFIG:=ls1088ardb_sdcard_qspi + UBOOT_IMAGE:=u-boot-with-spl.bin +endef + define U-Boot/ls2088ardb NAME:=NXP LS2088ARDB UBOOT_CONFIG:=ls2080ardb @@ -66,14 +84,26 @@ define U-Boot/ls1021atwr ENV_SIZE:=0x20000 endef +define U-Boot/ls1021atwr-sdboot + NAME:=NXP LS1021ATWR SD Card Boot + BUILD_SUBTARGET:=armv7 + UBOOT_CONFIG:=ls1021atwr_sdcard_ifc + UBOOT_IMAGE:=u-boot-with-spl-pbl.bin + ENV_SIZE:=0x20000 +endef + UBOOT_TARGETS := \ ls1012ardb \ ls1012afrdm \ ls1043ardb \ + ls1043ardb-sdboot \ ls1046ardb \ + ls1046ardb-sdboot \ ls1088ardb \ + ls1088ardb-sdboot \ ls2088ardb \ - ls1021atwr + ls1021atwr \ + ls1021atwr-sdboot define Build/InstallDev $(INSTALL_DIR) $(STAGING_DIR_IMAGE) diff --git a/package/boot/uboot-layerscape/files/ls1021atwr-sdboot-uEnv.txt b/package/boot/uboot-layerscape/files/ls1021atwr-sdboot-uEnv.txt new file mode 100644 index 0000000000..0a1a6bdd1b --- /dev/null +++ b/package/boot/uboot-layerscape/files/ls1021atwr-sdboot-uEnv.txt @@ -0,0 +1,8 @@ +fdtaddr=0x8f000000 +loadaddr=0x81000000 +fdt_high=0xffffffff +initrd_high=0xffffffff +sd_boot=mmc read $fdtaddr 7800 800;mmc read $loadaddr 8000 8000;bootm $loadaddr - $fdtaddr +bootargs=root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 noinitrd earlycon=uart8250,mmio,0x21c0500 console=ttyS0,115200 +bootcmd=echo starting openwrt ...;run sd_boot +bootdelay=3 diff --git a/package/boot/uboot-layerscape/files/ls1043ardb-sdboot-uEnv.txt b/package/boot/uboot-layerscape/files/ls1043ardb-sdboot-uEnv.txt new file mode 100644 index 0000000000..c1596b506a --- /dev/null +++ b/package/boot/uboot-layerscape/files/ls1043ardb-sdboot-uEnv.txt @@ -0,0 +1,9 @@ +fdtaddr=0x8f000000 +loadaddr=0x81000000 +fdt_high=0xffffffffffffffff +initrd_high=0xffffffffffffffff +hwconfig=fsl_ddr:bank_intlv=auto +sd_boot=mmc read $fdtaddr 7800 800;mmc read $loadaddr 8000 8000;bootm $loadaddr - $fdtaddr +bootargs=root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 noinitrd earlycon=uart8250,mmio,0x21c0500 console=ttyS0,115200 +bootcmd=echo starting openwrt ...;run sd_boot +bootdelay=3 diff --git a/package/boot/uboot-layerscape/files/ls1046ardb-sdboot-uEnv.txt b/package/boot/uboot-layerscape/files/ls1046ardb-sdboot-uEnv.txt new file mode 100644 index 0000000000..c1596b506a --- /dev/null +++ b/package/boot/uboot-layerscape/files/ls1046ardb-sdboot-uEnv.txt @@ -0,0 +1,9 @@ +fdtaddr=0x8f000000 +loadaddr=0x81000000 +fdt_high=0xffffffffffffffff +initrd_high=0xffffffffffffffff +hwconfig=fsl_ddr:bank_intlv=auto +sd_boot=mmc read $fdtaddr 7800 800;mmc read $loadaddr 8000 8000;bootm $loadaddr - $fdtaddr +bootargs=root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 noinitrd earlycon=uart8250,mmio,0x21c0500 console=ttyS0,115200 +bootcmd=echo starting openwrt ...;run sd_boot +bootdelay=3 diff --git a/package/boot/uboot-layerscape/files/ls1088ardb-sdboot-uEnv.txt b/package/boot/uboot-layerscape/files/ls1088ardb-sdboot-uEnv.txt new file mode 100644 index 0000000000..2d27f7eb05 --- /dev/null +++ b/package/boot/uboot-layerscape/files/ls1088ardb-sdboot-uEnv.txt @@ -0,0 +1,10 @@ +fdtaddr=0x8f000000 +loadaddr=0x81000000 +fdt_high=0xa0000000 +initrd_high=0xffffffffffffffff +hwconfig=fsl_ddr:bank_intlv=auto +mc_init=mmc read 80000000 5000 1800;mmc read 80300000 7000 800;fsl_mc start mc 80000000 80300000;mmc read 80400000 6800 800;fsl_mc apply dpl 80400000 +sd_boot=mmc read $fdtaddr 7800 800;mmc read $loadaddr 8000 8000;bootm $loadaddr - $fdtaddr +bootargs=root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 noinitrd earlycon=uart8250,mmio,0x21c0500 console=ttyS0,115200 +bootcmd=echo starting openwrt ...;run mc_init;run sd_boot +bootdelay=3 diff --git a/package/firmware/layerscape/ls-rcw/Makefile b/package/firmware/layerscape/ls-rcw/Makefile index d12bff9bba..13d015d251 100644 --- a/package/firmware/layerscape/ls-rcw/Makefile +++ b/package/firmware/layerscape/ls-rcw/Makefile @@ -53,6 +53,11 @@ define Package/layerscape-rcw/ls1088ardb CONFIG:=ls1088ardb/FCQQQQQQQQ_PPP_H_0x1d_0x0d/rcw_1600_qspi.bin endef +define Package/layerscape-rcw/ls1088ardb-sdboot + TITLE:=NXP LS1088ARDB SD card boot RCW binary + CONFIG:=ls1088ardb/FCQQQQQQQQ_PPP_H_0x1d_0x0d/rcw_1600_sd.bin +endef + define Package/layerscape-rcw/ls2088ardb TITLE:=NXP LS2088ARDB RCW binary CONFIG:=ls2088ardb/FFFFFFFF_PP_HH_0x2a_0x41/rcw_1800.bin @@ -76,6 +81,7 @@ RCWS := \ ls1043ardb \ ls1046ardb \ ls1088ardb \ + ls1088ardb-sdboot \ ls2088ardb \ ls1021atwr diff --git a/target/linux/layerscape/Makefile b/target/linux/layerscape/Makefile index 148c09814a..9b8ae4082f 100644 --- a/target/linux/layerscape/Makefile +++ b/target/linux/layerscape/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk BOARD:=layerscape BOARDNAME:=NXP Layerscape KERNEL_PATCHVER:=4.9 -FEATURES:=squashfs nand usb pcie gpio fpu ubifs +FEATURES:=squashfs nand usb pcie gpio fpu ubifs ext4 SUBTARGETS:=armv8_64b armv8_32b armv7 MAINTAINER:=Yangbo Lu diff --git a/target/linux/layerscape/image/Makefile b/target/linux/layerscape/image/Makefile index b275ef71cc..a08cc2c2cb 100644 --- a/target/linux/layerscape/image/Makefile +++ b/target/linux/layerscape/image/Makefile @@ -9,6 +9,10 @@ include $(INCLUDE_DIR)/image.mk ITB_BOARDS = traverse-five64 +LS_SD_ROOTFSPART_OFFSET = 64 +LS_SD_IMAGE_SIZE = $(shell echo $$((($(LS_SD_ROOTFSPART_OFFSET) + \ + $(CONFIG_TARGET_ROOTFS_PARTSIZE)) * 1024 * 1024))) + define Build/ls-clean rm -f $@ endef @@ -22,6 +26,12 @@ define Build/ls-append-dtb dd if=$(DTS_DIR)/$(1).dtb >> $@ endef +define Build/ls-append-sdhead + ./gen_sdcard_head_img.sh $(STAGING_DIR_IMAGE)/$(1)-sdcard-head.img \ + $(LS_SD_ROOTFSPART_OFFSET) $(CONFIG_TARGET_ROOTFS_PARTSIZE) + dd if=$(STAGING_DIR_IMAGE)/$(1)-sdcard-head.img >> $@ +endef + define Build/traverse-fit ./mkits-multiple-config.sh -o $@.its -A $(LINUX_KARCH) \ -v $(LINUX_VERSION) -k $@ -a $(KERNEL_LOADADDR) \ diff --git a/target/linux/layerscape/image/armv7.mk b/target/linux/layerscape/image/armv7.mk index 59cc982017..7a582d79bf 100644 --- a/target/linux/layerscape/image/armv7.mk +++ b/target/linux/layerscape/image/armv7.mk @@ -29,3 +29,19 @@ define Device/ls1021atwr append-rootfs | pad-rootfs | check-size 67108865 endef TARGET_DEVICES += ls1021atwr + +define Device/ls1021atwr-sdboot + DEVICE_TITLE := LS1021ATWR (SD Card Boot) + DEVICE_DTS := ls1021a-twr + FILESYSTEMS := ext4 + IMAGES := sdcard.img + IMAGE/sdcard.img := \ + ls-clean | \ + ls-append-sdhead $(1) | pad-to 4K | \ + ls-append $(1)-uboot.bin | pad-to 3M | \ + ls-append $(1)-uboot-env.bin | pad-to 15M | \ + ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ + append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ + append-rootfs | check-size $(LS_SD_IMAGE_SIZE) +endef +TARGET_DEVICES += ls1021atwr-sdboot diff --git a/target/linux/layerscape/image/armv8_64b.mk b/target/linux/layerscape/image/armv8_64b.mk index 15963eb912..a144fd0c66 100644 --- a/target/linux/layerscape/image/armv8_64b.mk +++ b/target/linux/layerscape/image/armv8_64b.mk @@ -85,6 +85,27 @@ define Device/ls1043ardb endef TARGET_DEVICES += ls1043ardb +define Device/ls1043ardb-sdboot + DEVICE_TITLE := LS1043ARDB (SD Card Boot) + DEVICE_PACKAGES += \ + layerscape-fman-ls1043ardb \ + layerscape-ppa-ls1043ardb + DEVICE_DTS := freescale/fsl-ls1043a-rdb-sdk + FILESYSTEMS := ext4 + IMAGES := sdcard.img + IMAGE/sdcard.img := \ + ls-clean | \ + ls-append-sdhead $(1) | pad-to 4K | \ + ls-append $(1)-uboot.bin | pad-to 3M | \ + ls-append $(1)-uboot-env.bin | pad-to 4M | \ + ls-append ls1043ardb-ppa.itb | pad-to 9M | \ + ls-append ls1043ardb-fman.bin | pad-to 15M | \ + ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ + append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ + append-rootfs | check-size $(LS_SD_IMAGE_SIZE) +endef +TARGET_DEVICES += ls1043ardb-sdboot + define Device/ls1046ardb DEVICE_TITLE := LS1046ARDB DEVICE_PACKAGES += \ @@ -109,6 +130,27 @@ define Device/ls1046ardb endef TARGET_DEVICES += ls1046ardb +define Device/ls1046ardb-sdboot + DEVICE_TITLE := LS1046ARDB (SD Card Boot) + DEVICE_PACKAGES += \ + layerscape-fman-ls1046ardb \ + layerscape-ppa-ls1046ardb + DEVICE_DTS := freescale/fsl-ls1046a-rdb-sdk + FILESYSTEMS := ext4 + IMAGES := sdcard.img + IMAGE/sdcard.img := \ + ls-clean | \ + ls-append-sdhead $(1) | pad-to 4K | \ + ls-append $(1)-uboot.bin | pad-to 3M | \ + ls-append $(1)-uboot-env.bin | pad-to 4M | \ + ls-append ls1046ardb-ppa.itb | pad-to 9M | \ + ls-append ls1046ardb-fman.bin | pad-to 15M | \ + ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ + append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ + append-rootfs | check-size $(LS_SD_IMAGE_SIZE) +endef +TARGET_DEVICES += ls1046ardb-sdboot + define Device/ls1088ardb DEVICE_TITLE := LS1088ARDB DEVICE_PACKAGES += \ @@ -137,6 +179,33 @@ define Device/ls1088ardb endef TARGET_DEVICES += ls1088ardb +define Device/ls1088ardb-sdboot + DEVICE_TITLE := LS1088ARDB (SD Card Boot) + DEVICE_PACKAGES += \ + layerscape-rcw-ls1088ardb-sdboot \ + layerscape-mc-ls1088ardb \ + layerscape-dpl-ls1088ardb \ + layerscape-ppa-ls1088ardb \ + restool + DEVICE_DTS := freescale/fsl-ls1088a-rdb + FILESYSTEMS := ext4 + IMAGES := sdcard.img + IMAGE/sdcard.img := \ + ls-clean | \ + ls-append-sdhead $(1) | pad-to 4K | \ + ls-append $(1)-rcw.bin | pad-to 1M | \ + ls-append $(1)-uboot.bin | pad-to 3M | \ + ls-append $(1)-uboot-env.bin | pad-to 4M | \ + ls-append ls1088ardb-ppa.itb | pad-to 10M | \ + ls-append ls1088ardb-mc.itb | pad-to 13M | \ + ls-append ls1088ardb-dpl.dtb | pad-to 14M | \ + ls-append ls1088ardb-dpc.dtb | pad-to 15M | \ + ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \ + append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \ + append-rootfs | check-size $(LS_SD_IMAGE_SIZE) +endef +TARGET_DEVICES += ls1088ardb-sdboot + define Device/ls2088ardb DEVICE_TITLE := LS2088ARDB DEVICE_PACKAGES += \ diff --git a/target/linux/layerscape/image/gen_sdcard_head_img.sh b/target/linux/layerscape/image/gen_sdcard_head_img.sh new file mode 100755 index 0000000000..dc1efbb3e0 --- /dev/null +++ b/target/linux/layerscape/image/gen_sdcard_head_img.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# +# Copyright 2018 NXP +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +set -x +[ $# -eq 3 ] || { + echo "SYNTAX: $0 " + exit 1 +} + +OUTPUT="$1" +ROOTFSOFFSET="$(($2 * 1024))" +ROOTFSSIZE="$3" + +head=4 +sect=16 + +set `ptgen -o $OUTPUT -h $head -s $sect -l $ROOTFSOFFSET -t 83 -p ${ROOTFSSIZE}M`