firmware-imx: add support for iMX8M firmware
PATCH 1/4 firmware-imx: add support for iMX8M firmware
--- package/freescale-imx/firmware-imx/Config.in | 2 +- package/freescale-imx/firmware-imx/firmware-imx.mk | 28 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-)
package/freescale-imx/firmware-imx/Config.in +1 -1
@@ -1,6 +1,6 @@ config BR2_PACKAGE_FIRMWARE_IMX bool "firmware-imx" - depends on BR2_arm # Only relevant for i.MX + depends on BR2_arm || BR2_aarch64 # Only relevant for i.MX help Firmware blobs for the Freescale i.MX SoCs.
package/freescale-imx/firmware-imx/firmware-imx.mk +28 -0
@@ -18,6 +18,33 @@ define FIRMWARE_IMX_EXTRACT_CMDS $(call FREESCALE_IMX_EXTRACT_HELPER,$(FIRMWARE_IMX_DL_DIR)/$(FIRMWARE_IMX_SOURCE)) endef +ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M),y) +FIRMWARE_IMX_INSTALL_IMAGES = YES +define FIRMWARE_IMX_PREPARE_LPDDR4_FW + (cd $(@D)/firmware/ddr/synopsys/ && \ + $(TARGET_OBJCOPY) -I binary -O binary --pad-to 0x8000 --gap-fill=0x0 \ + lpddr4_pmu_train_$(1)_imem.bin \ + lpddr4_pmu_train_$(1)_imem_pad.bin && \ + $(TARGET_OBJCOPY) -I binary -O binary --pad-to 0x4000 --gap-fill=0x0 \ + lpddr4_pmu_train_$(1)_dmem.bin \ + lpddr4_pmu_train_$(1)_dmem_pad.bin && \ + cat lpddr4_pmu_train_$(1)_imem_pad.bin lpddr4_pmu_train_$(1)_dmem_pad.bin > \ + lpddr4_pmu_train_$(1)_fw.bin \ + ) +endef + +define FIRMWARE_IMX_INSTALL_IMAGES_CMDS + # Create padded versions of lpddr4_pmu_* and generate lpddr4_pmu_train_fw.bin. + # lpddr4_pmu_train_fw.bin isneeded when generating imx-boot-imx8mqevk-sd.bin + # which is done in post-image script. + $(call FIRMWARE_IMX_PREPARE_LPDDR4_FW,1d) + $(call FIRMWARE_IMX_PREPARE_LPDDR4_FW,2d) + cat $(@D)/firmware/ddr/synopsys/lpddr4_pmu_train_1d_fw.bin \ + $(@D)/firmware/ddr/synopsys/lpddr4_pmu_train_2d_fw.bin > \ + $(BINARIES_DIR)/lpddr4_pmu_train_fw.bin + cp $(@D)/firmware/hdmi/cadence/signed_hdmi_imx8m.bin $(BINARIES_DIR)/signed_hdmi_imx8m.bin +endef +else define FIRMWARE_IMX_INSTALL_TARGET_CMDS mkdir -p $(TARGET_DIR)/lib/firmware/imx for blobdir in $(FIRMWARE_IMX_BLOBS); do \
@@ -27,5 +54,6 @@ define FIRMWARE_IMX_INSTALL_TARGET_CMDS mv $(TARGET_DIR)/lib/firmware/imx/epdc/epdc_ED060XH2C1.fw.nonrestricted \ $(TARGET_DIR)/lib/firmware/imx/epdc/epdc_ED060XH2C1.fw endef +endif $(eval $(generic-package))
Signature · 1 line
2.7.4
PATCH 2/4 imx: make post-image.sh arm64 compatible
--- board/freescale/common/imx/post-image.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
board/freescale/common/imx/post-image.sh +4 -2
@@ -7,10 +7,10 @@ # dtb_list() { - local DTB_LIST="$(sed -n 's/^BR2_LINUX_KERNEL_INTREE_DTS_NAME="\([a-z0-9 \-]*\)"$/\1/p' ${BR2_CONFIG})" + local DTB_LIST="$(sed -n 's/^BR2_LINUX_KERNEL_INTREE_DTS_NAME="\([\/a-z0-9 \-]*\)"$/\1/p' ${BR2_CONFIG})" for dt in $DTB_LIST; do - echo -n "\"$dt.dtb\", " + echo -n "\"`basename $dt`.dtb\", " done }
@@ -23,6 +23,8 @@ linux_image() { if grep -Eq "^BR2_LINUX_KERNEL_UIMAGE=y$" ${BR2_CONFIG}; then echo "\"uImage\"" + elif grep -Eq "^BR2_LINUX_KERNEL_IMAGE=y$" ${BR2_CONFIG}; then + echo "\"Image\"" else echo "\"zImage\"" fi
Signature · 1 line
2.7.4
PATCH 2/4 imx: make post-image.sh arm64 compatible
Hello,
Quoted 5 lines · Erik Larsson
Signed-off-by Erik Larsson <[email protected]>Signed-off-by Christopher Dahlberg <[email protected]>--- board/freescale/common/imx/post-image.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
I've applied after adding more details in the commit log and tweaking the commit title. See
https://git.buildroot.org/buildroot/commit/?id=4755bf2bd43a7b4c3bf4f88be790240a01b3116f.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com
PATCH 3/4 imx: add imx8 boot preparation script
In reply to Erik LarssonAdd a new script, imx8-prepare-boot.sh, that finalize the boot file for a specific iMX8 board. Currently only imx8mqevk is available and supported.
Also add genimage template for iMX8.
--- .../common/imx/genimage.cfg.template_imx8 | 40 ++++++++++++++++++++++ .../common/imx/imx8-bootloader-prepare.sh | 16 +++++++++ board/freescale/common/imx/post-image.sh | 4 ++- 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 board/freescale/common/imx/genimage.cfg.template_imx8 create mode 100755 board/freescale/common/imx/imx8-bootloader-prepare.sh
board/freescale/common/imx/genimage.cfg.template_imx8 new file +40 -0
@@ -0,0 +1,40 @@ +# Minimal SD card image for the Freescale iMX8 boards +# +# We mimic the .sdcard Freescale's image format: +# * the SD card must have 33 kB free space at the beginning, +# * U-Boot is integrated into imx8-boot-sd.bin and is dumped as is, +# * a FAT partition at offset 32MB is containing Image and DTB files +# * a single root filesystem partition is required (ext2, ext3 or ext4) +# + +image boot.vfat { + vfat { + files = { + %FILES% + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition imx-boot { + in-partition-table = "no" + image = "imx8-boot-sd.bin" + offset = 33K + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + offset = 8M + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + } +}
board/freescale/common/imx/imx8-bootloader-prepare.sh new file +16 -0
@@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +main () +{ + # Currently we support imx8mqevk. + cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/lpddr4_pmu_train_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin + BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot.bin ${HOST_DIR}/bin/mkimage_fit_atf.sh ${BINARIES_DIR}/fsl-imx8mq-evk.dtb > ${BINARIES_DIR}/u-boot.its + ${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb + rm -f ${BINARIES_DIR}/u-boot.its + + ${HOST_DIR}/bin/mkimage_imx8 -fit -signed_hdmi ${BINARIES_DIR}/signed_hdmi_imx8m.bin -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x7E1000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin + + exit $? +} + +main $@
board/freescale/common/imx/post-image.sh +3 -1
@@ -32,7 +32,9 @@ linux_image() genimage_type() { - if grep -Eq "^BR2_TARGET_UBOOT_SPL=y$" ${BR2_CONFIG}; then + if grep -Eq "^BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M=y$" ${BR2_CONFIG}; then + echo "genimage.cfg.template_imx8" + elif grep -Eq "^BR2_TARGET_UBOOT_SPL=y$" ${BR2_CONFIG}; then echo "genimage.cfg.template_spl" else echo "genimage.cfg.template"
Signature · 1 line
2.7.4
PATCH 3/4 imx: add imx8 boot preparation script
Hello,
Quoted 5 lines · Erik Larsson
Add a new script,
imx8-prepare-boot.sh, that finalize the boot file for a specific iMX8 board. Currently only imx8mqevk is available and supported.Also add genimage template for iMX8.
This commit was doing two fairly unrelated things: adding the bootloader preparation script, and adding the genimage template, so I've split this commit into two, and applied to master. Thanks!
Quoted 7 lines
board/freescale/common/imx/imx8-bootloader-prepare.sh new file +1
-0@@ -0,0 +1,16 @@ +#!/usr/bin/env bash
board/freescale/common/imx/imx8-bootloader-prepare.sh line 11
Quoted 10 lines
board/freescale/common/imx/imx8-bootloader-prepare.sh new file +10
-0+ +main () +{ + # Currently we support imx8mqevk. + cat ${BINARIES_DIR}/u-boot-spl.bin ${BINARIES_DIR}/lpddr4_pmu_train_fw.bin > ${BINARIES_DIR}/u-boot-spl-ddr.bin + BL31=${BINARIES_DIR}/bl31.bin BL33=${BINARIES_DIR}/u-boot.bin ${HOST_DIR}/bin/mkimage_fit_atf.sh ${BINARIES_DIR}/fsl-imx8mq-evk.dtb > ${BINARIES_DIR}/u-boot.its + ${HOST_DIR}/bin/mkimage -E -p 0x3000 -f ${BINARIES_DIR}/u-boot.its ${BINARIES_DIR}/u-boot.itb + rm -f ${BINARIES_DIR}/u-boot.its + + ${HOST_DIR}/bin/mkimage_imx8 -fit -signed_hdmi ${BINARIES_DIR}/signed_hdmi_imx8m.bin -loader ${BINARIES_DIR}/u-boot-spl-ddr.bin 0x7E1000 -second_loader ${BINARIES_DIR}/u-boot.itb 0x40200000 0x60000 -out ${BINARIES_DIR}/imx8-boot-sd.bin
Thinking more about this, perhaps moving forward we will want to do this in the U-Boot package directly. But I'd like to wait and see how mainline U-Boot will handle i.MX8 platforms in terms of image creation.
Best regards,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com
PATCH 4/4 configs/freescale_imx8mqevk: new defconfig
In reply to Erik Larsson--- board/freescale/imx8mqevk/readme.txt | 81 +++++++++++++++++++++++++++++++++++ configs/freescale_imx8mqevk_defconfig | 41 ++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 board/freescale/imx8mqevk/readme.txt create mode 100644 configs/freescale_imx8mqevk_defconfig
board/freescale/imx8mqevk/readme.txt new file +81 -0
@@ -0,0 +1,81 @@ +*************************** +Freescale i.MX8mq EVK board +*************************** + +This file documents the Buildroot support for the Freescale i.MX8mq EVK board. + +Hardware support +================ + +Currently only basic support for hardware is avialable, currently no +support for GPU, VPU and other HW features. + +Build +===== + +First, configure Buildroot for the i.MX8mq EVK board: + + make freescale_imx8mqevk_defconfig + +Build all components: + + make + +You will find in output/images/ the following files: + - bl31.bin + - boot.vfat + - fsl-imx8mq-evk.dtb + - Image + - imx-boot-imx8mqevk-sd.bin + - lpddr4_pmu_train_fw.bin + - rootfs.ext2 + - rootfs.ext4 + - rootfs.tar + - sdcard.img + - signed_hdmi_imx8m.bin + - u-boot.bin + - u-boot.imx + - u-boot-nodtb.bin + - u-boot-spl-ddr.bin + +Create a bootable SD card +========================= + +To determine the device associated to the SD card have a look in the +/proc/partitions file: + + cat /proc/partitions + +Buildroot prepares a bootable "sdcard.img" image in the output/images/ +directory, ready to be dumped on a SD card. Launch the following +command as root: + + dd if=output/images/sdcard.img of=/dev/<your-sd-device> + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout, see the definition in +board/freescale/common/imx/genimage.cfg.template_imx8. + +Boot the i.MX8mq EVK board +========================== + +To boot your newly created system: +- insert the SD card in the SD slot of the board; +- put a micro USB cable into the Debug USB Port and connect using a terminal + emulator at 115200 bps, 8n1; +- power on the board. + +Enable HDMI output +================== + +To enable HDMI output at boot you must provide the video kernel boot argument. +To set the video boot argument from U-Boot run after stoping in U-Boot prompt: + +setenv mmcargs 'setenv bootargs console=${console} root=${mmcroot} video=HDMI-A-1:1920x1080-32 at 60' +saveenv +reset + +Change screen resolution to suit your connected display. + +Enjoy!
configs/freescale_imx8mqevk_defconfig new file +41 -0
41 lines not on this page · raw message
Signature · 1 line
2.7.4
Thomas Petazzoni
AppliedPATCH 4/4 configs/freescale_imx8mqevk: new defconfig
Hello,
Quoted 8 lines · Erik Larsson
Signed-off-by Erik Larsson <[email protected]>Signed-off-by Christopher Dahlberg <[email protected]>--- board/freescale/imx8mqevk/readme.txt | 81 +++++++++++++++++++++++++++++++++++ configs/freescale_imx8mqevk_defconfig | 41 ++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 board/freescale/imx8mqevk/readme.txt create mode 100644 configs/freescale_imx8mqevk_defconfig
Applied to master, thanks.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com
Thomas Petazzoni
AppliedPATCH 1/4 firmware-imx: add support for iMX8M firmware
In reply to Erik LarssonHello,
package/freescale-imx/firmware-imx/firmware-imx.mk define FIRMWARE_IMX_EXTRACT_CMDS · line 33
Quoted 13 lines · Erik Larsson
package/freescale-imx/firmware-imx/firmware-imx.mk +13
-0+ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M),y) +FIRMWARE_IMX_INSTALL_IMAGES = YES +define FIRMWARE_IMX_PREPARE_LPDDR4_FW + (cd $(@D)/firmware/ddr/synopsys/ && \ + $(TARGET_OBJCOPY) -I binary -O binary --pad-to 0x8000 --gap-fill=0x0 \ + lpddr4_pmu_train_$(1)_imem.bin \ + lpddr4_pmu_train_$(1)_imem_pad.bin && \ + $(TARGET_OBJCOPY) -I binary -O binary --pad-to 0x4000 --gap-fill=0x0 \ + lpddr4_pmu_train_$(1)_dmem.bin \ + lpddr4_pmu_train_$(1)_dmem_pad.bin && \ + cat lpddr4_pmu_train_$(1)_imem_pad.bin lpddr4_pmu_train_$(1)_dmem_pad.bin > \ + lpddr4_pmu_train_$(1)_fw.bin \ + )
It was still a bit annoying that we had to have all those commands inside a single command, so I've instead introduced a FIRMWARE_IMX_DDRFW_DIR variable, set to $(@D)/firmware/ddr/synopsys/ and used that everywhere. To me it makes the whole thing more readable.
Applied to master with this change.
Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com