Prepare v2024.04-rc5

-----BEGIN PGP SIGNATURE-----
 
 iQGzBAABCgAdFiEEGjx/cOCPqxcHgJu/FHw5/5Y0tywFAmYCK3wACgkQFHw5/5Y0
 tyzV9wwAo6JN9dVBBivLFROeDb24t3TmgT7e0AEql6Vjfj1x9xzW/L7ki0cdbGjW
 sNmqPR9ObnONv5hxMV1nlUE6lRYOj/eRaWZsz1N8e02VFhegePNgd/ZDeaPZyO10
 mDhKdGh5yr0AaIer1Yj21b7QKxrriAN9ct/qR4sw2j1AlxF959PSw0qOzb6wjpDp
 I3QCbUkmKt6ATwyYzZnM0mifs0fb1u4M6C91V50SsyBBC30veEL8Bpgd83rTtZl+
 gm1ruekfKXhmT6V92Ok3maFNU+odF6X/R1YcM2n3DTso+MugPHFYTj5VZy5qZN3+
 4x6wHTQLDr81vPz7hx4gDTK42nVplFnIHp8p9WBSH6Zs7gCYPyZAfCPmF4EzBVfo
 bjpixpGuhmM8yQweD5nFWpvnXK/e5nbfxW2vt85G+cjjNbw0OZ182UJH8PEAUam6
 786p5y1YyS9pFgJgLSHrQ041E6EQ4QjMpNbVF+7MUpe49emA0l/V7VLSNGWpeKzg
 tcuO1ycK
 =4m/d
 -----END PGP SIGNATURE-----

Merge tag 'v2024.04-rc5' into next

Prepare v2024.04-rc5
This commit is contained in:
Tom Rini 2024-03-25 22:15:47 -04:00
commit ab8d9ca304
29 changed files with 222 additions and 72 deletions

View file

@ -57,6 +57,7 @@ John Linn <john.linn@amd.com> <john.linn@xilinx.com>
Jyotheeswar Reddy Mutthareddyvari <jyotheeswar.reddy.mutthareddyvari@amd.com> <jyothee@xilinx.com> Jyotheeswar Reddy Mutthareddyvari <jyotheeswar.reddy.mutthareddyvari@amd.com> <jyothee@xilinx.com>
Jyotheeswar Reddy Mutthareddyvari <jyotheeswar.reddy.mutthareddyvari@amd.com> <jyotheeswar.reddy.mutthareddyvari@xilinx.com> Jyotheeswar Reddy Mutthareddyvari <jyotheeswar.reddy.mutthareddyvari@amd.com> <jyotheeswar.reddy.mutthareddyvari@xilinx.com>
Kalyani Akula <kalyani.akula@amd.com> <kalyani.akula@xilinx.com> Kalyani Akula <kalyani.akula@amd.com> <kalyani.akula@xilinx.com>
Masahisa Kojima <kojima.masahisa@socionext.com> <masahisa.kojima@linaro.org>
Love Kumar <love.kumar@amd.com> <love.kumar@xilinx.com> Love Kumar <love.kumar@amd.com> <love.kumar@xilinx.com>
Lukasz Majewski <lukma@denx.de> Lukasz Majewski <lukma@denx.de>
Marek Behún <kabel@kernel.org> <marek.behun@nic.cz> Marek Behún <kabel@kernel.org> <marek.behun@nic.cz>

View file

@ -3,7 +3,7 @@
VERSION = 2024 VERSION = 2024
PATCHLEVEL = 04 PATCHLEVEL = 04
SUBLEVEL = SUBLEVEL =
EXTRAVERSION = -rc4 EXTRAVERSION = -rc5
NAME = NAME =
# *DOCUMENTATION* # *DOCUMENTATION*

View file

@ -23,7 +23,7 @@
*/ */
assigned-clocks = <&k3_clks 61 0>, <&k3_clks 135 0>, <&k3_clks 157 20>; assigned-clocks = <&k3_clks 61 0>, <&k3_clks 135 0>, <&k3_clks 157 20>;
assigned-clock-parents = <&k3_clks 61 2>, <0>, <&k3_clks 157 22>; assigned-clock-parents = <&k3_clks 61 2>, <0>, <&k3_clks 157 22>;
assigned-clock-rates = <200000000>, <1000000000>, <25000000>; assigned-clock-rates = <200000000>, <800000000>, <25000000>;
clocks = <&k3_clks 61 0>; clocks = <&k3_clks 61 0>;
power-domains = <&k3_pds 61 TI_SCI_PD_EXCLUSIVE>, power-domains = <&k3_pds 61 TI_SCI_PD_EXCLUSIVE>,
<&k3_pds 135 TI_SCI_PD_EXCLUSIVE>, <&k3_pds 135 TI_SCI_PD_EXCLUSIVE>,

View file

@ -0,0 +1,13 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2019 BayLibre, SAS.
* Author: Neil Armstrong <narmstrong@baylibre.com>
*/
#include "meson-gx-u-boot.dtsi"
&ethmac {
snps,reset-gpio = <&gpio GPIOZ_14 0>;
snps,reset-delays-us = <0 10000 1000000>;
snps,reset-active-low;
};

View file

@ -933,19 +933,28 @@ int disable_vpu_nodes(void *blob)
{ {
static const char * const nodes_path_8mq[] = { static const char * const nodes_path_8mq[] = {
"/vpu@38300000", "/vpu@38300000",
"/soc@0/vpu@38300000" "/soc@0/vpu@38300000",
"/soc@0/video-codec@38300000",
"/soc@0/video-codec@38310000",
"/soc@0/blk-ctrl@38320000",
}; };
static const char * const nodes_path_8mm[] = { static const char * const nodes_path_8mm[] = {
"/vpu_g1@38300000", "/vpu_g1@38300000",
"/vpu_g2@38310000", "/vpu_g2@38310000",
"/vpu_h1@38320000" "/vpu_h1@38320000",
"/soc@0/video-codec@38300000",
"/soc@0/video-codec@38310000",
"/soc@0/blk-ctrl@38330000",
}; };
static const char * const nodes_path_8mp[] = { static const char * const nodes_path_8mp[] = {
"/vpu_g1@38300000", "/vpu_g1@38300000",
"/vpu_g2@38310000", "/vpu_g2@38310000",
"/vpu_vc8000e@38320000" "/vpu_vc8000e@38320000",
"/soc@0/video-codec@38300000",
"/soc@0/video-codec@38310000",
"/soc@0/blk-ctrl@38330000",
}; };
if (is_imx8mq()) if (is_imx8mq())
@ -1100,7 +1109,8 @@ int disable_gpu_nodes(void *blob)
int disable_npu_nodes(void *blob) int disable_npu_nodes(void *blob)
{ {
static const char * const nodes_path_8mp[] = { static const char * const nodes_path_8mp[] = {
"/vipsi@38500000" "/vipsi@38500000",
"/soc@0/npu@38500000",
}; };
return disable_fdt_nodes(blob, nodes_path_8mp, ARRAY_SIZE(nodes_path_8mp)); return disable_fdt_nodes(blob, nodes_path_8mp, ARRAY_SIZE(nodes_path_8mp));

View file

@ -20,7 +20,7 @@
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[MAC_ADDR_LEN]; u8 mac_addr[MAC_ADDR_LEN + 1];
char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3]; char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
ssize_t len; ssize_t len;
@ -41,6 +41,7 @@ int misc_init_r(void)
tmp[2] = '\0'; tmp[2] = '\0';
mac_addr[i] = hextoul(tmp, NULL); mac_addr[i] = hextoul(tmp, NULL);
} }
mac_addr[MAC_ADDR_LEN] = '\0';
if (is_valid_ethaddr(mac_addr)) if (is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);

View file

@ -17,7 +17,7 @@
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[ARP_HLEN]; u8 mac_addr[ARP_HLEN + 1];
char serial[SM_SERIAL_SIZE]; char serial[SM_SERIAL_SIZE];
u32 sid; u32 sid;
@ -34,6 +34,7 @@ int misc_init_r(void)
mac_addr[3] = (sid >> 16) & 0xff; mac_addr[3] = (sid >> 16) & 0xff;
mac_addr[4] = (sid >> 8) & 0xff; mac_addr[4] = (sid >> 8) & 0xff;
mac_addr[5] = (sid >> 0) & 0xff; mac_addr[5] = (sid >> 0) & 0xff;
mac_addr[ARP_HLEN] = '\0';
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);
} }

View file

@ -27,9 +27,9 @@
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[EFUSE_MAC_SIZE]; u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE]; char serial[EFUSE_SN_SIZE + 1];
char usid[EFUSE_USID_SIZE]; char usid[EFUSE_USID_SIZE + 1];
ssize_t len; ssize_t len;
unsigned int adcval; unsigned int adcval;
int ret; int ret;
@ -37,6 +37,7 @@ int misc_init_r(void)
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE); mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);
else else
@ -46,6 +47,7 @@ int misc_init_r(void)
if (!env_get("serial")) { if (!env_get("serial")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE); EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE) if (len == EFUSE_SN_SIZE)
env_set("serial", serial); env_set("serial", serial);
} }
@ -53,6 +55,7 @@ int misc_init_r(void)
if (!env_get("usid")) { if (!env_get("usid")) {
len = meson_sm_read_efuse(EFUSE_USID_OFFSET, usid, len = meson_sm_read_efuse(EFUSE_USID_OFFSET, usid,
EFUSE_USID_SIZE); EFUSE_USID_SIZE);
usid[len] = '\0';
if (len == EFUSE_USID_SIZE) if (len == EFUSE_USID_SIZE)
env_set("usid", usid); env_set("usid", usid);
} }

View file

@ -107,7 +107,7 @@ static int odroid_detect_variant(void)
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[MAC_ADDR_LEN]; u8 mac_addr[MAC_ADDR_LEN + 1];
char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3]; char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
ssize_t len; ssize_t len;
@ -128,6 +128,7 @@ int misc_init_r(void)
tmp[2] = '\0'; tmp[2] = '\0';
mac_addr[i] = hextoul(tmp, NULL); mac_addr[i] = hextoul(tmp, NULL);
} }
mac_addr[MAC_ADDR_LEN] = '\0';
if (is_valid_ethaddr(mac_addr)) if (is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);

View file

@ -21,20 +21,24 @@
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[EFUSE_MAC_SIZE]; u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE]; char serial[EFUSE_SN_SIZE + 1];
ssize_t len; ssize_t len;
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE); mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);
else
meson_generate_serial_ethaddr();
} }
if (!env_get("serial#")) { if (!env_get("serial#")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE); EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE) if (len == EFUSE_SN_SIZE)
env_set("serial#", serial); env_set("serial#", serial);
} }

View file

@ -21,13 +21,14 @@
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[EFUSE_MAC_SIZE]; u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE]; char serial[EFUSE_SN_SIZE + 1];
ssize_t len; ssize_t len;
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE); mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);
} }
@ -35,6 +36,7 @@ int misc_init_r(void)
if (!env_get("serial#")) { if (!env_get("serial#")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE); EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE) if (len == EFUSE_SN_SIZE)
env_set("serial#", serial); env_set("serial#", serial);
} }

View file

@ -22,13 +22,14 @@
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[EFUSE_MAC_SIZE]; u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE]; char serial[EFUSE_SN_SIZE + 1];
ssize_t len; ssize_t len;
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE); mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);
else else
@ -38,6 +39,7 @@ int misc_init_r(void)
if (!env_get("serial#")) { if (!env_get("serial#")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE); EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE) if (len == EFUSE_SN_SIZE)
env_set("serial#", serial); env_set("serial#", serial);
} }

View file

@ -22,13 +22,14 @@
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[EFUSE_MAC_SIZE]; u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE]; char serial[EFUSE_SN_SIZE + 1];
ssize_t len; ssize_t len;
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE); mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);
else else
@ -38,6 +39,7 @@ int misc_init_r(void)
if (!env_get("serial#")) { if (!env_get("serial#")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE); EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE) if (len == EFUSE_SN_SIZE)
env_set("serial#", serial); env_set("serial#", serial);
} }

View file

@ -151,7 +151,7 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
int misc_init_r(void) int misc_init_r(void)
{ {
u8 mac_addr[MAC_ADDR_LEN]; u8 mac_addr[MAC_ADDR_LEN + 1];
char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3]; char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
char serial_string[EFUSE_MAC_SIZE + 1]; char serial_string[EFUSE_MAC_SIZE + 1];
ssize_t len; ssize_t len;
@ -169,6 +169,7 @@ int misc_init_r(void)
tmp[2] = '\0'; tmp[2] = '\0';
mac_addr[i] = hextoul(tmp, NULL); mac_addr[i] = hextoul(tmp, NULL);
} }
mac_addr[MAC_ADDR_LEN] = '\0';
if (is_valid_ethaddr(mac_addr)) if (is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr); eth_env_set_enetaddr("ethaddr", mac_addr);

View file

@ -248,4 +248,9 @@ u8 __maybe_unused phytec_get_rev(struct phytec_eeprom_data *data)
return PHYTEC_EEPROM_INVAL; return PHYTEC_EEPROM_INVAL;
} }
u8 __maybe_unused phytec_get_som_type(struct phytec_eeprom_data *data)
{
return PHYTEC_EEPROM_INVAL;
}
#endif /* IS_ENABLED(CONFIG_PHYTEC_SOM_DETECTION) */ #endif /* IS_ENABLED(CONFIG_PHYTEC_SOM_DETECTION) */

View file

@ -133,7 +133,7 @@ void board_mem_get_layout(u64 *phys_sdram_1_start,
struct tdx_user_fuses tdxramfuses; struct tdx_user_fuses tdxramfuses;
int scierr = sc_misc_otp_fuse_read(-1, 6, &val); int scierr = sc_misc_otp_fuse_read(-1, 6, &val);
if (scierr) { if (!scierr) {
/* QP has one A72 core disabled */ /* QP has one A72 core disabled */
is_quadplus = ((val >> 4) & 0x3) != 0x0; is_quadplus = ((val >> 4) & 0x3) != 0x0;
} }

View file

@ -46,7 +46,7 @@ static int is_imx8dx(void)
u32 val = 0; u32 val = 0;
int sc_err = sc_misc_otp_fuse_read(-1, 6, &val); int sc_err = sc_misc_otp_fuse_read(-1, 6, &val);
if (sc_err) { if (!sc_err) {
/* DX has two A35 cores disabled */ /* DX has two A35 cores disabled */
return (val & 0xf) != 0x0; return (val & 0xf) != 0x0;
} }

View file

@ -154,9 +154,7 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
!strcmp(argv[1], "bootmgr")) { !strcmp(argv[1], "bootmgr")) {
ret = efi_bootmgr_run(fdt); ret = efi_bootmgr_run(fdt);
if (ret == EFI_INVALID_PARAMETER) if (ret != EFI_SUCCESS)
return CMD_RET_USAGE;
else if (ret)
return CMD_RET_FAILURE; return CMD_RET_FAILURE;
return CMD_RET_SUCCESS; return CMD_RET_SUCCESS;
@ -173,9 +171,7 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
} }
ret = efi_install_fdt(fdt); ret = efi_install_fdt(fdt);
if (ret == EFI_INVALID_PARAMETER) if (ret != EFI_SUCCESS)
return CMD_RET_USAGE;
else if (ret != EFI_SUCCESS)
return CMD_RET_FAILURE; return CMD_RET_FAILURE;
return do_efi_selftest(); return do_efi_selftest();
@ -218,9 +214,7 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
ret = efi_binary_run(image_buf, size, fdt); ret = efi_binary_run(image_buf, size, fdt);
if (ret == EFI_INVALID_PARAMETER) if (ret != EFI_SUCCESS)
return CMD_RET_USAGE;
else if (ret)
return CMD_RET_FAILURE; return CMD_RET_FAILURE;
return CMD_RET_SUCCESS; return CMD_RET_SUCCESS;

View file

@ -35,7 +35,7 @@ CONFIG_SPL_BSS_MAX_SIZE=0x3000
CONFIG_SPL_SYS_REPORT_STACK_F_USAGE=y CONFIG_SPL_SYS_REPORT_STACK_F_USAGE=y
CONFIG_SPL_SYS_MALLOC_SIMPLE=y CONFIG_SPL_SYS_MALLOC_SIMPLE=y
CONFIG_SPL_STACK_R=y CONFIG_SPL_STACK_R=y
CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x140000 CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x200000
CONFIG_SPL_SEPARATE_BSS=y CONFIG_SPL_SEPARATE_BSS=y
CONFIG_SPL_SYS_MALLOC=y CONFIG_SPL_SYS_MALLOC=y
CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y

View file

@ -20,36 +20,36 @@ Quick Start
Get and Build the ARM Trusted Firmware Get and Build the ARM Trusted Firmware
-------------------------------------- --------------------------------------
Download the imx-atf repository:
.. code-block:: bash
$ git clone -b lf_v2.6 https://github.com/nxp-imx/imx-atf.git
Compile it with an aarch64 toolchain:
.. code-block:: bash .. code-block:: bash
$ git clone -b imx_4.14.78_1.0.0_ga https://github.com/nxp-imx/imx-atf
$ cd imx-atf/ $ cd imx-atf/
$ make PLAT=imx8qm bl31 $ make PLAT=imx8qm bl31
Get scfw_tcm.bin and ahab-container.img Get scfw_tcm.bin and ahab-container.img
--------------------------------------- ---------------------------------------
Download imx-seco firmware and extract it:
.. code-block:: bash .. code-block:: bash
$ wget https://github.com/toradex/meta-fsl-bsp-release/blob/toradex-sumo-4.14.78-1.0.0_ga-bringup/imx/meta-bsp/recipes- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-seco-5.8.7.bin
bsp/imx-sc-firmware/files/mx8qm-apalis-scfw-tcm.bin?raw=true $ sh imx-seco-5.8.7.bin --auto-accept
$ mv mx8qm-apalis-scfw-tcm.bin\?raw\=true mx8qm-apalis-scfw-tcm.bin
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.0.bin
$ chmod +x firmware-imx-8.0.bin
$ ./firmware-imx-8.0.bin
Copy the following binaries to the U-Boot folder: Copy the following binaries to the U-Boot folder:
.. code-block:: bash .. code-block:: bash
$ cp imx-atf/build/imx8qm/release/bl31.bin . $ wget https://github.com/toradex/i.MX-System-Controller-Firmware/raw/master/src/scfw_export_mx8qm_b0/build_mx8qm_b0/mx8qm-apalis-scfw-tcm.bin
$ cp u-boot/u-boot.bin . $ cp ../imx-atf/build/imx8qm/release/bl31.bin .
$ cp ../imx-seco-5.8.7/firmware/seco/mx8qmb0-ahab-container.img mx8qm-ahab-container.img
Copy the following firmware to the U-Boot folder:
.. code-block:: bash
$ cp firmware-imx-8.0/firmware/seco/ahab-container.img .
Build U-Boot Build U-Boot
------------ ------------
@ -64,7 +64,7 @@ Load the U-Boot Binary Using UUU
Get the latest version of the universal update utility (uuu) aka ``mfgtools 3.0``: Get the latest version of the universal update utility (uuu) aka ``mfgtools 3.0``:
https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fgithub.com%2FNXPmicro%2Fmfgtools%2Freleases https://github.com/nxp-imx/mfgtools/releases
Put the module into USB recovery aka serial downloader mode, connect the USB Put the module into USB recovery aka serial downloader mode, connect the USB
device to your host and execute ``uuu``: device to your host and execute ``uuu``:

View file

@ -20,26 +20,35 @@ Quick Start
Get and Build the ARM Trusted Firmware Get and Build the ARM Trusted Firmware
-------------------------------------- --------------------------------------
Download the imx-atf repository:
.. code-block:: bash
$ git clone -b lf_v2.6 https://github.com/nxp-imx/imx-atf.git
Compile it with an aarch64 toolchain:
.. code-block:: bash .. code-block:: bash
$ git clone -b toradex_imx_5.4.70_2.3.0 http://git.toradex.com/cgit/imx-atf.git/
$ make PLAT=imx8qx bl31 -C imx-atf $ make PLAT=imx8qx bl31 -C imx-atf
Get scfw_tcm.bin and ahab-container.img Get scfw_tcm.bin and ahab-container.img
--------------------------------------- ---------------------------------------
Download imx-seco firmware and extract it:
.. code-block:: bash .. code-block:: bash
$ wget https://github.com/toradex/i.MX-System-Controller-Firmware/raw/master/src/scfw_export_mx8qx_b0/build_mx8qx_b0/mx8qx-colibri-scfw-tcm.bin $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-seco-5.8.7.bin
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-seco-3.8.1.bin $ sh imx-seco-5.8.7.bin --auto-accept
$ sh imx-seco-3.8.1.bin --auto-accept
Copy the following firmware to the U-Boot folder: Copy the following firmware to the U-Boot folder:
.. code-block:: bash .. code-block:: bash
$ cp imx-atf/build/imx8qx/release/bl31.bin . $ wget https://github.com/toradex/i.MX-System-Controller-Firmware/raw/master/src/scfw_export_mx8qx_b0/build_mx8qx_b0/mx8qx-colibri-scfw-tcm.bin
$ cp imx-seco-3.8.1/firmware/seco/mx8qxc0-ahab-container.img mx8qx-ahab-container.img $ cp ../imx-atf/build/imx8qx/release/bl31.bin .
$ cp ../imx-seco-5.8.7/firmware/seco/mx8qxc0-ahab-container.img mx8qx-ahab-container.img
Build U-Boot Build U-Boot
------------ ------------
@ -54,7 +63,7 @@ Load the U-Boot Binary Using UUU
Get the latest version of the universal update utility (uuu) aka ``mfgtools 3.0``: Get the latest version of the universal update utility (uuu) aka ``mfgtools 3.0``:
https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fgithub.com%2FNXPmicro%2Fmfgtools%2Freleases https://github.com/nxp-imx/mfgtools/releases
Put the module into USB recovery aka serial downloader mode, connect the USB Put the module into USB recovery aka serial downloader mode, connect the USB
device to your host and execute ``uuu``: device to your host and execute ``uuu``:

View file

@ -64,15 +64,15 @@ Future Releases
For the next scheduled release, release candidates were made on:: For the next scheduled release, release candidates were made on::
* U-Boot v2024.01-rc1 was released on Mon 29 January 2024. * U-Boot v2024.04-rc1 was released on Mon 29 January 2024.
* U-Boot v2024.01-rc2 was released on Tue 13 February 2024. * U-Boot v2024.04-rc2 was released on Tue 13 February 2024.
* U-Boot v2024.01-rc3 was released on Mon 26 February 2024. * U-Boot v2024.04-rc3 was released on Mon 26 February 2024.
* U-Boot v2024.01-rc4 was released on Mon 11 March 2024. * U-Boot v2024.04-rc4 was released on Mon 11 March 2024.
.. * U-Boot v2024.01-rc5 was released on Mon 25 March 2024. * U-Boot v2024.04-rc5 was released on Mon 25 March 2024.
Please note that the following dates are planned only and may be deviated from Please note that the following dates are planned only and may be deviated from
as needed. as needed.

72
doc/usage/cmd/if.rst Normal file
View file

@ -0,0 +1,72 @@
.. SPDX-License-Identifier: GPL-2.0-or-later
.. index::
single: if (command)
if command
==========
Synopsis
--------
::
if <test statement>
then
<statements>
fi
if <test statement>
then
<statements>
else
<statements>
fi
Description
-----------
The if command is used to conditionally execute statements.
test statement
Any command. The test statement set the $? variable. If the value of
$? becomes 0 (true) the statements after the **then** statement will
be executed. Otherwise the statements after the **else** statement.
Example
-------
The examples shows how the value of a numeric variable can be tested with
**itest**.
::
=> a=1; if itest $a == 0; then echo true; else echo false; fi
false
=> a=0; if itest $a == 0; then echo true; else echo false; fi
true
In the following example we try to load an EFI binary via TFTP. If loading
succeeds, the binary is executed.
::
if tftp $kernel_addr_r shellriscv64.efi; then bootefi $kernel_addr_r; fi
Return value
------------
The value of $? is the return value of the last executed statement.
::
=> if true; then true; else true; fi; echo $?
0
=> if false; then true; else true; fi; echo $?
0
=> if false; then false; else false; fi; echo $?
1
=> if true; then false; else false; fi; echo $?
1
=> if false; then true; fi; echo $?
1

View file

@ -71,6 +71,7 @@ Shell commands
cmd/gpt cmd/gpt
cmd/history cmd/history
cmd/host cmd/host
cmd/if
cmd/imxtract cmd/imxtract
cmd/load cmd/load
cmd/loadb cmd/loadb

View file

@ -95,20 +95,23 @@ ulong imx8_clk_get_rate(struct clk *clk)
resource = SC_R_SDHC_2; resource = SC_R_SDHC_2;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART0_IPG_CLK:
case IMX8QM_UART0_CLK: case IMX8QM_UART0_CLK:
case IMX8QM_UART0_IPG_CLK:
resource = SC_R_UART_0; resource = SC_R_UART_0;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART1_CLK: case IMX8QM_UART1_CLK:
case IMX8QM_UART1_IPG_CLK:
resource = SC_R_UART_1; resource = SC_R_UART_1;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART2_CLK: case IMX8QM_UART2_CLK:
case IMX8QM_UART2_IPG_CLK:
resource = SC_R_UART_2; resource = SC_R_UART_2;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART3_CLK: case IMX8QM_UART3_CLK:
case IMX8QM_UART3_IPG_CLK:
resource = SC_R_UART_3; resource = SC_R_UART_3;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
@ -181,18 +184,22 @@ ulong imx8_clk_set_rate(struct clk *clk, unsigned long rate)
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART0_CLK: case IMX8QM_UART0_CLK:
case IMX8QM_UART0_IPG_CLK:
resource = SC_R_UART_0; resource = SC_R_UART_0;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART1_CLK: case IMX8QM_UART1_CLK:
case IMX8QM_UART1_IPG_CLK:
resource = SC_R_UART_1; resource = SC_R_UART_1;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART2_CLK: case IMX8QM_UART2_CLK:
case IMX8QM_UART2_IPG_CLK:
resource = SC_R_UART_2; resource = SC_R_UART_2;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART3_CLK: case IMX8QM_UART3_CLK:
case IMX8QM_UART3_IPG_CLK:
resource = SC_R_UART_3; resource = SC_R_UART_3;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
@ -283,18 +290,22 @@ int __imx8_clk_enable(struct clk *clk, bool enable)
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART0_CLK: case IMX8QM_UART0_CLK:
case IMX8QM_UART0_IPG_CLK:
resource = SC_R_UART_0; resource = SC_R_UART_0;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART1_CLK: case IMX8QM_UART1_CLK:
case IMX8QM_UART1_IPG_CLK:
resource = SC_R_UART_1; resource = SC_R_UART_1;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART2_CLK: case IMX8QM_UART2_CLK:
case IMX8QM_UART2_IPG_CLK:
resource = SC_R_UART_2; resource = SC_R_UART_2;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QM_UART3_CLK: case IMX8QM_UART3_CLK:
case IMX8QM_UART3_IPG_CLK:
resource = SC_R_UART_3; resource = SC_R_UART_3;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;

View file

@ -88,20 +88,23 @@ ulong imx8_clk_get_rate(struct clk *clk)
resource = SC_R_SDHC_1; resource = SC_R_SDHC_1;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART0_IPG_CLK:
case IMX8QXP_UART0_CLK: case IMX8QXP_UART0_CLK:
case IMX8QXP_UART0_IPG_CLK:
resource = SC_R_UART_0; resource = SC_R_UART_0;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART1_CLK: case IMX8QXP_UART1_CLK:
case IMX8QXP_UART1_IPG_CLK:
resource = SC_R_UART_1; resource = SC_R_UART_1;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART2_CLK: case IMX8QXP_UART2_CLK:
case IMX8QXP_UART2_IPG_CLK:
resource = SC_R_UART_2; resource = SC_R_UART_2;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART3_CLK: case IMX8QXP_UART3_CLK:
case IMX8QXP_UART3_IPG_CLK:
resource = SC_R_UART_3; resource = SC_R_UART_3;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
@ -170,18 +173,22 @@ ulong imx8_clk_set_rate(struct clk *clk, unsigned long rate)
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART0_CLK: case IMX8QXP_UART0_CLK:
case IMX8QXP_UART0_IPG_CLK:
resource = SC_R_UART_0; resource = SC_R_UART_0;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART1_CLK: case IMX8QXP_UART1_CLK:
case IMX8QXP_UART1_IPG_CLK:
resource = SC_R_UART_1; resource = SC_R_UART_1;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART2_CLK: case IMX8QXP_UART2_CLK:
case IMX8QXP_UART2_IPG_CLK:
resource = SC_R_UART_2; resource = SC_R_UART_2;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART3_CLK: case IMX8QXP_UART3_CLK:
case IMX8QXP_UART3_IPG_CLK:
resource = SC_R_UART_3; resource = SC_R_UART_3;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
@ -263,18 +270,22 @@ int __imx8_clk_enable(struct clk *clk, bool enable)
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART0_CLK: case IMX8QXP_UART0_CLK:
case IMX8QXP_UART0_IPG_CLK:
resource = SC_R_UART_0; resource = SC_R_UART_0;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART1_CLK: case IMX8QXP_UART1_CLK:
case IMX8QXP_UART1_IPG_CLK:
resource = SC_R_UART_1; resource = SC_R_UART_1;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART2_CLK: case IMX8QXP_UART2_CLK:
case IMX8QXP_UART2_IPG_CLK:
resource = SC_R_UART_2; resource = SC_R_UART_2;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;
case IMX8QXP_UART3_CLK: case IMX8QXP_UART3_CLK:
case IMX8QXP_UART3_IPG_CLK:
resource = SC_R_UART_3; resource = SC_R_UART_3;
pm_clk = SC_PM_CLK_PER; pm_clk = SC_PM_CLK_PER;
break; break;

View file

@ -125,7 +125,7 @@ efi_status_t efi_run_image(void *source_buffer, efi_uintn_t source_size)
efi_handle_t mem_handle = NULL, handle; efi_handle_t mem_handle = NULL, handle;
struct efi_device_path *file_path = NULL; struct efi_device_path *file_path = NULL;
struct efi_device_path *msg_path; struct efi_device_path *msg_path;
efi_status_t ret, ret2; efi_status_t ret;
u16 *load_options; u16 *load_options;
if (!bootefi_device_path || !bootefi_image_path) { if (!bootefi_device_path || !bootefi_image_path) {
@ -172,11 +172,17 @@ efi_status_t efi_run_image(void *source_buffer, efi_uintn_t source_size)
ret = do_bootefi_exec(handle, load_options); ret = do_bootefi_exec(handle, load_options);
out: out:
ret2 = efi_uninstall_multiple_protocol_interfaces(mem_handle, if (mem_handle) {
&efi_guid_device_path, efi_status_t r;
file_path, NULL);
r = efi_uninstall_multiple_protocol_interfaces(
mem_handle, &efi_guid_device_path, file_path, NULL);
if (r != EFI_SUCCESS)
log_err("Uninstalling protocol interfaces failed\n");
}
efi_free_pool(file_path); efi_free_pool(file_path);
return (ret != EFI_SUCCESS) ? ret : ret2;
return ret;
} }
/** /**

View file

@ -144,7 +144,7 @@ patman.py. For reference, the useful ones (at the moment) shown below
process_tags: False process_tags: False
verbose: True verbose: True
smtp_server: /path/to/sendmail smtp_server: /path/to/sendmail
patchwork_server: https://patchwork.ozlabs.org patchwork_url: https://patchwork.ozlabs.org
If you want to adjust settings (or aliases) that affect just a single If you want to adjust settings (or aliases) that affect just a single
project you can add a section that looks like [project_settings] or project you can add a section that looks like [project_settings] or
@ -248,9 +248,9 @@ Series-links: [id | version:id]...
Series-patchwork-url: url Series-patchwork-url: url
This allows specifying the Patchwork URL for a branch. This overrides This allows specifying the Patchwork URL for a branch. This overrides
both the setting files and the command-line argument. The URL should both the setting files ("patchwork_url") and the command-line argument.
include the protocol and web site, with no trailing slash, for example The URL should include the protocol and web site, with no trailing slash,
'https://patchwork.ozlabs.org/project' for example 'https://patchwork.ozlabs.org/project'
Cover-letter: Cover-letter:
Sets the cover letter contents for the series. The first line Sets the cover letter contents for the series. The first line