mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-05-06 05:06:13 +02:00
imx8mq: Correct signed_hdmi firmware position
signed_hdmi_imx8m.bin is already signed and has a IVT header. It should not be put in u-boot-spl-mkimage.signed.bin. Move it to head of flash.bin following NXP imx-mkimage. Keeping it in u-boot-spl-mkimage.signed.bin also consumes a lot of TCM space which is not expected. While moving it to head of flash.bin, other changes are required, u-boot.itb is put at sector 768 per defconfig, so u-boot.itb binman offset should be updated and it should be moved out from binman section. Also binman symbol address are updated, so need to subtract u-boot-spl image_pos + CONFIG_SPL_TEXT_BASE to find the correct location of ddr phy firmware. Because there is 1KB padding in HDMI firmware, use 32KB when burning flash.bin to sd card. Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
parent
913b8c6cb8
commit
5b6dba2924
@ -10,7 +10,7 @@
|
||||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
&binman_imx_spl {
|
||||
&binman {
|
||||
section {
|
||||
signed-hdmi-imx8m {
|
||||
filename = "signed_dp_imx8m.bin";
|
||||
|
||||
@ -41,6 +41,33 @@
|
||||
filename = "flash.bin";
|
||||
section {
|
||||
pad-byte = <0x00>;
|
||||
/*
|
||||
* signed_hdmi_imx8m.bin contains a 1KB zero-filled padding at
|
||||
* its beginning. This padding has no functional purpose, but
|
||||
* the firmware is provided and signed by NXP, so the head
|
||||
* must be preserved and should not be removed.
|
||||
*
|
||||
* When the signed HDMI firmware is placed at the beginning of
|
||||
* flash.bin, the IVT header of u-boot-spl must still reside at
|
||||
* a 4KB-aligned address. Since flash.bin starts with the HDMI
|
||||
* firmware (including its 1KB padding), there is already a 1KB
|
||||
* empty region at the head of flash.bin.
|
||||
*
|
||||
* The required 4KB alignment is therefore calculated relative
|
||||
* to the location after this 1KB padding. To achieve this, we
|
||||
* explicitly set align and align-size to 0x1000, and add an
|
||||
* additional 0x400 (1KB) fill to account for the padding.
|
||||
*/
|
||||
signed-hdmi-imx8m {
|
||||
filename = "signed_hdmi_imx8m.bin";
|
||||
type = "blob-ext";
|
||||
align = <0x1000>;
|
||||
align-size = <0x1000>;
|
||||
};
|
||||
|
||||
fill {
|
||||
size = <0x400>;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_IMX_HAB
|
||||
nxp-imx8mcst@0 {
|
||||
@ -51,145 +78,142 @@
|
||||
#endif
|
||||
|
||||
binman_imx_spl: nxp-imx8mimage {
|
||||
filename = "u-boot-spl-mkimage.bin";
|
||||
nxp,boot-from = "sd";
|
||||
nxp,rom-version = <1>;
|
||||
nxp,loader-address = <CONFIG_SPL_TEXT_BASE>;
|
||||
args; /* Needed by mkimage etype superclass */
|
||||
|
||||
section {
|
||||
align = <4>;
|
||||
align-size = <4>;
|
||||
filename = "u-boot-spl-ddr.bin";
|
||||
pad-byte = <0xff>;
|
||||
|
||||
u-boot-spl {
|
||||
align-end = <4>;
|
||||
filename = "u-boot-spl.bin";
|
||||
};
|
||||
|
||||
ddr-1d-imem-fw {
|
||||
filename = "lpddr4_pmu_train_1d_imem.bin";
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
|
||||
ddr-1d-dmem-fw {
|
||||
filename = "lpddr4_pmu_train_1d_dmem.bin";
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
|
||||
ddr-2d-imem-fw {
|
||||
filename = "lpddr4_pmu_train_2d_imem.bin";
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
|
||||
ddr-2d-dmem-fw {
|
||||
filename = "lpddr4_pmu_train_2d_dmem.bin";
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
|
||||
signed-hdmi-imx8m {
|
||||
filename = "signed_hdmi_imx8m.bin";
|
||||
type = "blob-ext";
|
||||
};
|
||||
};
|
||||
};
|
||||
#ifdef CONFIG_IMX_HAB
|
||||
};
|
||||
|
||||
nxp-imx8mcst@1 {
|
||||
filename = "u-boot-fit.signed.bin";
|
||||
nxp,loader-address = <CONFIG_SPL_LOAD_FIT_ADDRESS>;
|
||||
offset = <0x58000>;
|
||||
filename = "u-boot-spl-mkimage.bin";
|
||||
nxp,boot-from = "sd";
|
||||
nxp,rom-version = <1>;
|
||||
nxp,loader-address = <CONFIG_SPL_TEXT_BASE>;
|
||||
args; /* Needed by mkimage etype superclass */
|
||||
#endif
|
||||
|
||||
binman_imx_fit: fit {
|
||||
description = "Configuration to load ATF before U-Boot";
|
||||
filename = "u-boot.itb";
|
||||
#ifndef CONFIG_IMX_HAB
|
||||
fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>;
|
||||
#endif
|
||||
#address-cells = <1>;
|
||||
section {
|
||||
align = <4>;
|
||||
align-size = <4>;
|
||||
filename = "u-boot-spl-ddr.bin";
|
||||
pad-byte = <0xff>;
|
||||
|
||||
offset = <0x57c00>;
|
||||
|
||||
images {
|
||||
uboot {
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
description = "U-Boot (64-bit)";
|
||||
load = <CONFIG_TEXT_BASE>;
|
||||
type = "standalone";
|
||||
|
||||
uboot-blob {
|
||||
filename = "u-boot-nodtb.bin";
|
||||
type = "blob-ext";
|
||||
};
|
||||
};
|
||||
|
||||
#ifndef CONFIG_ARMV8_PSCI
|
||||
atf {
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
description = "ARM Trusted Firmware";
|
||||
entry = <0x910000>;
|
||||
load = <0x910000>;
|
||||
type = "firmware";
|
||||
|
||||
atf-blob {
|
||||
filename = "bl31.bin";
|
||||
type = "blob-ext";
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
tee: tee {
|
||||
description = "OP-TEE";
|
||||
type = "tee";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
os = "tee";
|
||||
load = <CONFIG_IMX8M_OPTEE_LOAD_ADDR>;
|
||||
entry = <CONFIG_IMX8M_OPTEE_LOAD_ADDR>;
|
||||
|
||||
tee-os {
|
||||
filename = "tee.bin";
|
||||
optional;
|
||||
};
|
||||
};
|
||||
|
||||
fdt {
|
||||
compression = "none";
|
||||
description = "NAME";
|
||||
type = "flat_dt";
|
||||
|
||||
uboot-fdt-blob {
|
||||
filename = "u-boot.dtb";
|
||||
type = "blob-ext";
|
||||
};
|
||||
};
|
||||
u-boot-spl {
|
||||
align-end = <4>;
|
||||
filename = "u-boot-spl.bin";
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "conf";
|
||||
ddr-1d-imem-fw {
|
||||
filename = "lpddr4_pmu_train_1d_imem.bin";
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
|
||||
conf {
|
||||
description = "NAME";
|
||||
fdt = "fdt";
|
||||
firmware = "uboot";
|
||||
#ifndef CONFIG_ARMV8_PSCI
|
||||
loadables = "atf", "tee";
|
||||
#endif
|
||||
};
|
||||
ddr-1d-dmem-fw {
|
||||
filename = "lpddr4_pmu_train_1d_dmem.bin";
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
|
||||
ddr-2d-imem-fw {
|
||||
filename = "lpddr4_pmu_train_2d_imem.bin";
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
|
||||
ddr-2d-dmem-fw {
|
||||
filename = "lpddr4_pmu_train_2d_dmem.bin";
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
};
|
||||
};
|
||||
#ifdef CONFIG_IMX_HAB
|
||||
};
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_IMX_HAB
|
||||
nxp-imx8mcst@1 {
|
||||
filename = "u-boot-fit.signed.bin";
|
||||
nxp,loader-address = <CONFIG_SPL_LOAD_FIT_ADDRESS>;
|
||||
offset = <0x58400>;
|
||||
args; /* Needed by mkimage etype superclass */
|
||||
#endif
|
||||
|
||||
binman_imx_fit: fit {
|
||||
description = "Configuration to load ATF before U-Boot";
|
||||
filename = "u-boot.itb";
|
||||
#ifndef CONFIG_IMX_HAB
|
||||
fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>;
|
||||
#endif
|
||||
#address-cells = <1>;
|
||||
|
||||
offset = <0x58000>;
|
||||
|
||||
images {
|
||||
uboot {
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
description = "U-Boot (64-bit)";
|
||||
load = <CONFIG_TEXT_BASE>;
|
||||
type = "standalone";
|
||||
|
||||
uboot-blob {
|
||||
filename = "u-boot-nodtb.bin";
|
||||
type = "blob-ext";
|
||||
};
|
||||
};
|
||||
|
||||
#ifndef CONFIG_ARMV8_PSCI
|
||||
atf {
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
description = "ARM Trusted Firmware";
|
||||
entry = <0x910000>;
|
||||
load = <0x910000>;
|
||||
type = "firmware";
|
||||
|
||||
atf-blob {
|
||||
filename = "bl31.bin";
|
||||
type = "blob-ext";
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
tee: tee {
|
||||
description = "OP-TEE";
|
||||
type = "tee";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
os = "tee";
|
||||
load = <CONFIG_IMX8M_OPTEE_LOAD_ADDR>;
|
||||
entry = <CONFIG_IMX8M_OPTEE_LOAD_ADDR>;
|
||||
|
||||
tee-os {
|
||||
filename = "tee.bin";
|
||||
optional;
|
||||
};
|
||||
};
|
||||
|
||||
fdt {
|
||||
compression = "none";
|
||||
description = "NAME";
|
||||
type = "flat_dt";
|
||||
|
||||
uboot-fdt-blob {
|
||||
filename = "u-boot.dtb";
|
||||
type = "blob-ext";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "conf";
|
||||
|
||||
conf {
|
||||
description = "NAME";
|
||||
fdt = "fdt";
|
||||
firmware = "uboot";
|
||||
#ifndef CONFIG_ARMV8_PSCI
|
||||
loadables = "atf", "tee";
|
||||
#endif
|
||||
};
|
||||
};
|
||||
};
|
||||
#ifdef CONFIG_IMX_HAB
|
||||
};
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -45,11 +45,11 @@ Build U-Boot
|
||||
$ make imx8mq_evk_defconfig
|
||||
$ make
|
||||
|
||||
Burn the flash.bin to MicroSD card offset 33KB:
|
||||
Burn the flash.bin to MicroSD card offset 32KB:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$sudo dd if=flash.bin of=/dev/sd[x] bs=1024 seek=33 conv=notrunc
|
||||
$sudo dd if=flash.bin of=/dev/sd[x] bs=1024 seek=32 conv=notrunc
|
||||
|
||||
Boot
|
||||
----
|
||||
|
||||
@ -38,6 +38,8 @@ binman_sym_declare(ulong, ddr_2d_dmem_fw, image_pos);
|
||||
binman_sym_declare(ulong, ddr_2d_dmem_fw, size);
|
||||
#endif
|
||||
|
||||
binman_sym_declare(ulong, u_boot_spl, image_pos);
|
||||
|
||||
/* We need PHY iMEM PHY is 32KB padded */
|
||||
void ddr_load_train_firmware(enum fw_type type)
|
||||
{
|
||||
@ -49,6 +51,7 @@ void ddr_load_train_firmware(enum fw_type type)
|
||||
unsigned long dmem_start;
|
||||
unsigned long imem_len = IMEM_LEN, dmem_len = DMEM_LEN;
|
||||
static enum fw_type last_type = -1;
|
||||
unsigned long spl_start = 0;
|
||||
|
||||
/* If FW doesn't change, we can save the loading. */
|
||||
if (last_type == type)
|
||||
@ -67,6 +70,9 @@ void ddr_load_train_firmware(enum fw_type type)
|
||||
dmem_start = imem_start + imem_len;
|
||||
|
||||
if (BINMAN_SYMS_OK) {
|
||||
if (IS_ENABLED(CONFIG_IMX8MQ))
|
||||
spl_start = binman_sym(ulong, u_boot_spl, image_pos);
|
||||
|
||||
switch (type) {
|
||||
case FW_1D_IMAGE:
|
||||
imem_start = binman_sym(ulong, ddr_1d_imem_fw, image_pos);
|
||||
@ -83,6 +89,13 @@ void ddr_load_train_firmware(enum fw_type type)
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX8MQ)) {
|
||||
imem_start -= spl_start;
|
||||
imem_start += CONFIG_SPL_TEXT_BASE;
|
||||
dmem_start -= spl_start;
|
||||
dmem_start += CONFIG_SPL_TEXT_BASE;
|
||||
}
|
||||
}
|
||||
|
||||
pr_from32 = imem_start;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user