d981a3227e
Several i.MX8 (e.g.: 8M, 8MM, 8MN) support many DDR types (LPDDR4, DDR4, etc.), for which the DDR training is performed in the bootloader. Some boards have LPDDR4 (e.g.: nitrogen8mn) and some others have the DDR4 (e.g.: NXP's reference board EVK). This patch allows the selection of either of the binaries used to train the DDR. Note that DDR and HDMI FW copies are now separated, which makes latter being properly copied only for the relevant SoC (i.MX8MQ). Suggested-by: Gary Bisson <gary.bisson@boundarydevices.com> Signed-off-by: Stephane Viau <stephane.viau@oss.nxp.com> Reviewed-by: Maeva Manuel <maeva.manuel@oss.nxp.com> Reviewed-by: Julien Olivain <julien.olivain@oss.nxp.com> Reviewed-by: Gary Bisson <gary.bisson@boundarydevices.com> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
107 lines
4.2 KiB
Makefile
107 lines
4.2 KiB
Makefile
################################################################################
|
|
#
|
|
# firmware-imx
|
|
#
|
|
################################################################################
|
|
|
|
FIRMWARE_IMX_VERSION = 8.5
|
|
FIRMWARE_IMX_SITE = $(FREESCALE_IMX_SITE)
|
|
FIRMWARE_IMX_SOURCE = firmware-imx-$(FIRMWARE_IMX_VERSION).bin
|
|
|
|
FIRMWARE_IMX_LICENSE = NXP Semiconductor Software License Agreement
|
|
FIRMWARE_IMX_LICENSE_FILES = EULA COPYING
|
|
FIRMWARE_IMX_REDISTRIBUTE = NO
|
|
|
|
FIRMWARE_IMX_BLOBS = sdma vpu
|
|
|
|
define FIRMWARE_IMX_EXTRACT_CMDS
|
|
$(call FREESCALE_IMX_EXTRACT_HELPER,$(FIRMWARE_IMX_DL_DIR)/$(FIRMWARE_IMX_SOURCE))
|
|
endef
|
|
|
|
ifeq ($(BR2_PACKAGE_FREESCALE_IMX_NEED_DDR_FW),y)
|
|
FIRMWARE_IMX_INSTALL_IMAGES = YES
|
|
|
|
ifeq ($(BR2_PACKAGE_FIRMWARE_DDRFW_LPDDR4),y)
|
|
FIRMWARE_IMX_DDRFW_DIR = $(@D)/firmware/ddr/synopsys
|
|
define FIRMWARE_IMX_PREPARE_LPDDR4_FW
|
|
$(TARGET_OBJCOPY) -I binary -O binary --pad-to 0x8000 --gap-fill=0x0 \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_$(1)_imem.bin \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_$(1)_imem_pad.bin
|
|
$(TARGET_OBJCOPY) -I binary -O binary --pad-to 0x4000 --gap-fill=0x0 \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_$(1)_dmem.bin \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_$(1)_dmem_pad.bin
|
|
cat $(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_$(1)_imem_pad.bin \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_$(1)_dmem_pad.bin > \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_$(1)_fw.bin
|
|
endef
|
|
|
|
define FIRMWARE_IMX_PREPARE_DDR_FW
|
|
# Create padded versions of lpddr4_pmu_* and generate lpddr4_pmu_train_fw.bin.
|
|
# lpddr4_pmu_train_fw.bin is needed when generating imx8-boot-sd.bin
|
|
# which is done in post-image script.
|
|
$(call FIRMWARE_IMX_PREPARE_LPDDR4_FW,1d)
|
|
$(call FIRMWARE_IMX_PREPARE_LPDDR4_FW,2d)
|
|
cat $(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_1d_fw.bin \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/lpddr4_pmu_train_2d_fw.bin > \
|
|
$(BINARIES_DIR)/lpddr4_pmu_train_fw.bin
|
|
ln -sf $(BINARIES_DIR)/lpddr4_pmu_train_fw.bin $(BINARIES_DIR)/ddr_fw.bin
|
|
endef
|
|
else ifeq ($(BR2_PACKAGE_FIRMWARE_DDRFW_DDR4),y)
|
|
FIRMWARE_IMX_DDRFW_DIR = $(@D)/firmware/ddr/synopsys
|
|
define FIRMWARE_IMX_PREPARE_DDR4_FW
|
|
$(TARGET_OBJCOPY) -I binary -O binary --pad-to 0x8000 --gap-fill=0x0 \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/ddr4_imem_$(1)_201810.bin \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/ddr4_imem_$(1)_201810_pad.bin
|
|
$(TARGET_OBJCOPY) -I binary -O binary --pad-to 0x4000 --gap-fill=0x0 \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/ddr4_dmem_$(1)_201810.bin \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/ddr4_dmem_$(1)_201810_pad.bin
|
|
cat $(FIRMWARE_IMX_DDRFW_DIR)/ddr4_imem_$(1)_201810_pad.bin \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/ddr4_dmem_$(1)_201810_pad.bin > \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/ddr4_$(1)_201810_fw.bin
|
|
endef
|
|
|
|
define FIRMWARE_IMX_PREPARE_DDR_FW
|
|
# Create padded versions of ddr4_* and generate ddr4_fw.bin.
|
|
# ddr4_fw.bin is needed when generating imx8-boot-sd.bin
|
|
# which is done in post-image script.
|
|
$(call FIRMWARE_IMX_PREPARE_DDR4_FW,1d)
|
|
$(call FIRMWARE_IMX_PREPARE_DDR4_FW,2d)
|
|
cat $(FIRMWARE_IMX_DDRFW_DIR)/ddr4_1d_201810_fw.bin \
|
|
$(FIRMWARE_IMX_DDRFW_DIR)/ddr4_2d_201810_fw.bin > \
|
|
$(BINARIES_DIR)/ddr4_201810_fw.bin
|
|
ln -sf $(BINARIES_DIR)/ddr4_201810_fw.bin $(BINARIES_DIR)/ddr_fw.bin
|
|
endef
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8M),y)
|
|
define FIRMWARE_IMX_PREPARE_HDMI_FW
|
|
cp $(@D)/firmware/hdmi/cadence/signed_hdmi_imx8m.bin \
|
|
$(BINARIES_DIR)/signed_hdmi_imx8m.bin
|
|
endef
|
|
endif
|
|
|
|
define FIRMWARE_IMX_INSTALL_IMAGES_CMDS
|
|
$(FIRMWARE_IMX_PREPARE_DDR_FW)
|
|
$(FIRMWARE_IMX_PREPARE_HDMI_FW)
|
|
endef
|
|
else ifeq ($(BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8X),y)
|
|
define FIRMWARE_IMX_INSTALL_TARGET_CMDS
|
|
$(INSTALL) -D -m 0644 $(@D)/firmware/vpu/vpu_fw_imx8_dec.bin \
|
|
$(TARGET_DIR)/lib/firmware/vpu/vpu_fw_imx8_dec.bin
|
|
$(INSTALL) -D -m 0644 $(@D)/firmware/vpu/vpu_fw_imx8_enc.bin \
|
|
$(TARGET_DIR)/lib/firmware/vpu/vpu_fw_imx8_enc.bin
|
|
endef
|
|
else
|
|
define FIRMWARE_IMX_INSTALL_TARGET_CMDS
|
|
mkdir -p $(TARGET_DIR)/lib/firmware/imx
|
|
for blobdir in $(FIRMWARE_IMX_BLOBS); do \
|
|
cp -r $(@D)/firmware/$${blobdir} $(TARGET_DIR)/lib/firmware; \
|
|
done
|
|
cp -r $(@D)/firmware/epdc $(TARGET_DIR)/lib/firmware/imx
|
|
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))
|