From c1cdd48e13b2842669f0ab30e817d8064663beec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Szymanski?= Date: Thu, 8 Feb 2024 13:54:21 +0100 Subject: [PATCH] package/freescale-imx: add i.MX91 and i.MX93 SoC support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds i.MX91 and i.MX93 support to Buildroot. https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-9-processors:IMX9-PROCESSORS There is no i.MX95 software provided by NXP at the moment that's why i.MX95 is left behind. Adapt package firmware-imx for the LPPDR4 firmware binaries. The i.MX91 and i.MX93 only support LPDDR4 and LPDDR4x, but using different binaries than i.MX8. For simplicity, use a completely separate code path for i.MX91 and i.MX93, using the symbol BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW_IMX9. There is only one type of firmware supported, so there's no need for a choice or for selecting the version (at least for now). Reviewed-by: Gary Bisson Signed-off-by: Sébastien Szymanski [Arnout: - Remove BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX91A1 option. - Re-wrap help text. - Introduce BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW_IMX9 instead of reusing BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW. - Create completely separate instance of FIRMWARE_IMX_INSTALL_IMAGE_DDR_FW for BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW_IMX9. - Drop the training binaries choice for IMX9. - Drop the firmware version option for IMX9. - Keep options for IMEM and DMEM padding. ] Signed-off-by: Arnout Vandecappelle --- package/freescale-imx/Config.in | 26 ++++++++++++++++++ package/freescale-imx/firmware-imx/Config.in | 11 +++++++- .../firmware-imx/firmware-imx.mk | 27 +++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/package/freescale-imx/Config.in b/package/freescale-imx/Config.in index 1c26b3cc6f..3221f06e43 100644 --- a/package/freescale-imx/Config.in +++ b/package/freescale-imx/Config.in @@ -61,6 +61,30 @@ config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8DXL bool "imx8dxl" +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX91 + bool "imx91" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX93 + bool "imx93" + +endchoice + +choice + prompt "i.MX Silicon Revision" + default BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX93A1 + depends on BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX93 + help + Some packages related to the selected i.MX platform need to + know the silicon revision of the platform they will run on. + + Note - mismatches may result in a failure to boot! + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX93A0 + bool "imx93a0" + +config BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX93A1 + bool "imx93a1" + endchoice config BR2_PACKAGE_FREESCALE_IMX_PLATFORM @@ -80,6 +104,8 @@ config BR2_PACKAGE_FREESCALE_IMX_PLATFORM default "IMX8MM" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM default "IMX8MN" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN default "IMX8MP" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MP + default "IMX91" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX91 + default "IMX93" if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX93 config BR2_PACKAGE_FREESCALE_IMX_HAS_VPU bool diff --git a/package/freescale-imx/firmware-imx/Config.in b/package/freescale-imx/firmware-imx/Config.in index 087ddef877..63990947c8 100644 --- a/package/freescale-imx/firmware-imx/Config.in +++ b/package/freescale-imx/firmware-imx/Config.in @@ -56,6 +56,11 @@ config BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MN default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MP +config BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW_IMX9 + bool + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX91 + default y if BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX93 + if BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW choice @@ -93,6 +98,10 @@ config BR2_PACKAGE_FIRMWARE_IMX_DDR_VERSION Use a specific version of the imx ddr binaries. Leaving this field empty will select the default version. +endif # BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW + +if BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW || BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW_IMX9 + config BR2_PACKAGE_FIRMWARE_IMX_IMEM_LEN hex "(LP)DDR IMEM padding length" default 0x8000 @@ -105,6 +114,6 @@ config BR2_PACKAGE_FIRMWARE_IMX_DMEM_LEN help The DMEM firmware will be padded to this length -endif # BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW +endif # BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW || BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW_IMX9 endif # BR2_PACKAGE_FIRMWARE_IMX diff --git a/package/freescale-imx/firmware-imx/firmware-imx.mk b/package/freescale-imx/firmware-imx/firmware-imx.mk index 66ef8c3930..2a74f58aa6 100644 --- a/package/freescale-imx/firmware-imx/firmware-imx.mk +++ b/package/freescale-imx/firmware-imx/firmware-imx.mk @@ -45,6 +45,33 @@ ifneq ($(FIRMWARE_IMX_DDR_VERSION),) FIRMWARE_IMX_DDR_VERSION_SUFFIX = _$(FIRMWARE_IMX_DDR_VERSION) endif +ifeq ($(BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW_IMX9),y) +FIRMWARE_IMX_DDRFW_DIR = $(@D)/firmware/ddr/synopsys + +define FIRMWARE_IMX_INSTALL_IMAGE_DDR_FW + # Create padded versions of lpddr4_{d,i}mem_{1,2}d_* and generate lpddr4_fw.bin. + # lpddr4_fw.bin is needed when generating imx9-boot-sd.bin + # which is done in post-image script. + $(call FIRMWARE_IMX_PREPARE_DDR_FW, \ + lpddr4_imem_1d_v202201, + lpddr4_dmem_1d_v202201, + lpddr4_1d_fw) + $(call FIRMWARE_IMX_PREPARE_DDR_FW, \ + lpddr4_imem_2d_v202201, + lpddr4_dmem_2d_v202201, + lpddr4_2d_fw) + cat $(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_1d_fw.bin \ + $(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_2d_fw.bin > \ + $(BINARIES_DIR)/lpddr4_fw.bin + ln -sf $(BINARIES_DIR)/lpddr4_fw.bin $(BINARIES_DIR)/ddr_fw.bin + + # U-Boot supports creation of the combined flash.bin image. To make + # sure that U-Boot can access all available files copy them to + # the binary dir. + cp $(FIRMWARE_IMX_DDRFW_DIR)/lpddr4*.bin $(BINARIES_DIR)/ +endef +endif + ifeq ($(BR2_PACKAGE_FIRMWARE_IMX_LPDDR4),y) FIRMWARE_IMX_DDRFW_DIR = $(@D)/firmware/ddr/synopsys