mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03: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:
@@ -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 {
|
||||
@@ -91,20 +118,18 @@
|
||||
align-end = <4>;
|
||||
type = "blob-ext";
|
||||
};
|
||||
|
||||
signed-hdmi-imx8m {
|
||||
filename = "signed_hdmi_imx8m.bin";
|
||||
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 = <0x58000>;
|
||||
offset = <0x58400>;
|
||||
args; /* Needed by mkimage etype superclass */
|
||||
#endif
|
||||
|
||||
@@ -116,7 +141,7 @@
|
||||
#endif
|
||||
#address-cells = <1>;
|
||||
|
||||
offset = <0x57c00>;
|
||||
offset = <0x58000>;
|
||||
|
||||
images {
|
||||
uboot {
|
||||
@@ -191,5 +216,4 @@
|
||||
#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;
|
||||
|
||||
Reference in New Issue
Block a user