Merge tag 'v2025.07-rc3' into next
Prepare v2025.07-rc3
diff --git a/arch/arm/cpu/armv7m/start.S b/arch/arm/cpu/armv7m/start.S
index 0c07f21..a439404 100644
--- a/arch/arm/cpu/armv7m/start.S
+++ b/arch/arm/cpu/armv7m/start.S
@@ -4,13 +4,19 @@
* Kamil Lulko, <kamil.lulko@gmail.com>
*/
+#include <linux/linkage.h>
#include <asm/assembler.h>
-.globl reset
-.type reset, %function
-reset:
- W(b) _main
+/*
+ * Startup code (reset vector)
+ */
+ENTRY(reset)
+ W(b) _main @ Jump to _main (C runtime crt0.S)
+ENDPROC(reset)
-.globl c_runtime_cpu_setup
-c_runtime_cpu_setup:
- mov pc, lr
+/*
+ * Setup CPU for C runtime
+ */
+ENTRY(c_runtime_cpu_setup)
+ mov pc, lr @ Jump back to caller
+ENDPROC(c_runtime_cpu_setup)
diff --git a/arch/arm/dts/k3-am625-phycore-som-binman.dtsi b/arch/arm/dts/k3-am625-phycore-som-binman.dtsi
index 9b536d6..32d8804 100644
--- a/arch/arm/dts/k3-am625-phycore-som-binman.dtsi
+++ b/arch/arm/dts/k3-am625-phycore-som-binman.dtsi
@@ -36,7 +36,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -45,7 +44,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -82,7 +80,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -91,7 +88,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -125,7 +121,6 @@
ti_fs_gp: ti-fs-gp.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-gp.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
filename = "combined-tifs-cfg.bin";
diff --git a/arch/arm/dts/k3-am625-r5-beagleplay.dts b/arch/arm/dts/k3-am625-r5-beagleplay.dts
index 9e0a6ed..0ff46a2 100644
--- a/arch/arm/dts/k3-am625-r5-beagleplay.dts
+++ b/arch/arm/dts/k3-am625-r5-beagleplay.dts
@@ -103,7 +103,6 @@
ti_fs_gp: ti-fs-gp.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-gp.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
filename = "combined-tifs-cfg.bin";
diff --git a/arch/arm/dts/k3-am625-sk-binman.dtsi b/arch/arm/dts/k3-am625-sk-binman.dtsi
index cc619f5..6822a5d 100644
--- a/arch/arm/dts/k3-am625-sk-binman.dtsi
+++ b/arch/arm/dts/k3-am625-sk-binman.dtsi
@@ -34,7 +34,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -43,7 +42,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -80,7 +78,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -89,7 +86,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -123,7 +119,6 @@
ti_fs_gp: ti-fs-gp.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-gp.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
filename = "combined-tifs-cfg.bin";
@@ -263,7 +258,6 @@
};
dm: ti-dm {
filename = "ti-dm/am62xx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
@@ -391,7 +385,6 @@
dm {
ti-dm {
filename = "ti-dm/am62xx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-am625-verdin-wifi-dev-binman.dtsi b/arch/arm/dts/k3-am625-verdin-wifi-dev-binman.dtsi
index 5a8788b..bfbba28 100644
--- a/arch/arm/dts/k3-am625-verdin-wifi-dev-binman.dtsi
+++ b/arch/arm/dts/k3-am625-verdin-wifi-dev-binman.dtsi
@@ -34,7 +34,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -43,7 +42,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -80,7 +78,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -89,7 +86,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62x-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -123,7 +119,6 @@
ti_fs_gp: ti-fs-gp.bin {
filename = "ti-sysfw/ti-fs-firmware-am62x-gp.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
filename = "combined-tifs-cfg.bin";
diff --git a/arch/arm/dts/k3-am62a-phycore-som-binman.dtsi b/arch/arm/dts/k3-am62a-phycore-som-binman.dtsi
index 1871926..fd34010 100644
--- a/arch/arm/dts/k3-am62a-phycore-som-binman.dtsi
+++ b/arch/arm/dts/k3-am62a-phycore-som-binman.dtsi
@@ -41,7 +41,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62ax-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -50,7 +49,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62ax-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -87,7 +85,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62ax-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -96,7 +93,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62ax-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -130,7 +126,6 @@
ti_fs_gp: ti-fs-gp.bin {
filename = "ti-sysfw/ti-fs-firmware-am62ax-gp.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
filename = "combined-tifs-cfg.bin";
@@ -269,7 +264,6 @@
};
dm: ti-dm {
filename = "ti-dm/am62axx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
@@ -456,7 +450,6 @@
dm {
ti-dm {
filename = "ti-dm/am62axx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-am62a-sk-binman.dtsi b/arch/arm/dts/k3-am62a-sk-binman.dtsi
index ed97354..877a513 100644
--- a/arch/arm/dts/k3-am62a-sk-binman.dtsi
+++ b/arch/arm/dts/k3-am62a-sk-binman.dtsi
@@ -38,7 +38,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62ax-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -47,7 +46,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62ax-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -84,7 +82,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62ax-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -93,7 +90,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62ax-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -127,7 +123,6 @@
ti_fs_gp: ti-fs-gp.bin {
filename = "ti-sysfw/ti-fs-firmware-am62ax-gp.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
filename = "combined-tifs-cfg.bin";
@@ -253,7 +248,6 @@
};
dm: ti-dm {
filename = "ti-dm/am62axx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
@@ -379,7 +373,6 @@
dm {
ti-dm {
filename = "ti-dm/am62axx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-am62p-sk-binman.dtsi b/arch/arm/dts/k3-am62p-sk-binman.dtsi
index 8216add..d65e5c4 100644
--- a/arch/arm/dts/k3-am62p-sk-binman.dtsi
+++ b/arch/arm/dts/k3-am62p-sk-binman.dtsi
@@ -38,7 +38,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62px-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
@@ -49,7 +48,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62px-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
@@ -87,7 +85,6 @@
ti_fs_enc_hs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-am62px-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_hs: combined-tifs-cfg.bin {
@@ -98,7 +95,6 @@
sysfw_inner_cert_hs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-am62px-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_hs: combined-dm-cfg.bin {
@@ -203,7 +199,6 @@
dm: ti-dm {
filename = "ti-dm/am62pxx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-am642-phycore-som-binman.dtsi b/arch/arm/dts/k3-am642-phycore-som-binman.dtsi
index 5228eed..966905b 100644
--- a/arch/arm/dts/k3-am642-phycore-som-binman.dtsi
+++ b/arch/arm/dts/k3-am642-phycore-som-binman.dtsi
@@ -33,7 +33,6 @@
ti_sci_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_sysfw_cfg: combined-sysfw-cfg.bin {
filename = "combined-sysfw-cfg.bin";
@@ -42,7 +41,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-cert.bin";
type = "blob-ext";
- optional;
};
};
@@ -73,7 +71,6 @@
ti_sci_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_sysfw_cfg_fs: combined-sysfw-cfg.bin {
filename = "combined-sysfw-cfg.bin";
@@ -82,7 +79,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
};
@@ -109,7 +105,6 @@
ti_sci_gp: ti-sci-gp.bin {
filename = "ti-sysfw/ti-sci-firmware-am64x-gp.bin";
type = "blob-ext";
- optional;
};
combined_sysfw_cfg_gp: combined-sysfw-cfg-gp.bin {
filename = "combined-sysfw-cfg.bin";
diff --git a/arch/arm/dts/k3-am64x-binman.dtsi b/arch/arm/dts/k3-am64x-binman.dtsi
index f768c4d..32e47a3 100644
--- a/arch/arm/dts/k3-am64x-binman.dtsi
+++ b/arch/arm/dts/k3-am64x-binman.dtsi
@@ -29,7 +29,6 @@
ti_sci_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_sysfw_cfg: combined-sysfw-cfg.bin {
filename = "combined-sysfw-cfg.bin";
@@ -38,7 +37,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-cert.bin";
type = "blob-ext";
- optional;
};
};
@@ -69,7 +67,6 @@
ti_sci_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_sysfw_cfg_fs: combined-sysfw-cfg.bin {
filename = "combined-sysfw-cfg.bin";
@@ -78,7 +75,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
};
@@ -105,7 +101,6 @@
ti_sci_gp: ti-sci-gp.bin {
filename = "ti-sysfw/ti-sci-firmware-am64x-gp.bin";
type = "blob-ext";
- optional;
};
combined_sysfw_cfg_gp: combined-sysfw-cfg-gp.bin {
filename = "combined-sysfw-cfg.bin";
diff --git a/arch/arm/dts/k3-am65x-binman.dtsi b/arch/arm/dts/k3-am65x-binman.dtsi
index 350775e..cc82c8b 100644
--- a/arch/arm/dts/k3-am65x-binman.dtsi
+++ b/arch/arm/dts/k3-am65x-binman.dtsi
@@ -32,12 +32,10 @@
ti_sci_cert: ti-sci-cert.bin {
filename = "ti-sysfw/ti-sci-firmware-am65x_sr2-hs-cert.bin";
type = "blob-ext";
- optional;
};
ti-sci-firmware-am65x-hs-enc.bin {
filename = "ti-sysfw/ti-sci-firmware-am65x_sr2-hs-enc.bin";
type = "blob-ext";
- optional;
};
};
itb {
@@ -73,7 +71,6 @@
ti_sci: ti-sci.bin {
filename = "ti-sysfw/ti-sci-firmware-am65x_sr2-gp.bin";
type = "blob-ext";
- optional;
};
};
itb_gp {
diff --git a/arch/arm/dts/k3-am67a-beagley-ai-u-boot.dtsi b/arch/arm/dts/k3-am67a-beagley-ai-u-boot.dtsi
index ba05d41..2a0023f 100644
--- a/arch/arm/dts/k3-am67a-beagley-ai-u-boot.dtsi
+++ b/arch/arm/dts/k3-am67a-beagley-ai-u-boot.dtsi
@@ -88,7 +88,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j722s-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
@@ -99,7 +98,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j722s-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
@@ -140,7 +138,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j722s-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
@@ -151,7 +148,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j722s-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
@@ -181,7 +177,6 @@
dm: ti-dm {
filename = "ti-dm/j722s/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-j7200-binman.dtsi b/arch/arm/dts/k3-j7200-binman.dtsi
index 47a4cde..b74bd16 100644
--- a/arch/arm/dts/k3-j7200-binman.dtsi
+++ b/arch/arm/dts/k3-j7200-binman.dtsi
@@ -35,7 +35,6 @@
ti_fs_enc_sr1: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j7200-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_sr1: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -44,7 +43,6 @@
sysfw_inner_cert_sr1: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j7200-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_sr1: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -80,7 +78,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j7200_sr2-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -89,7 +86,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j7200_sr2-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -127,7 +123,6 @@
ti_fs_enc_fs_sr1: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j7200-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs_sr1: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -136,7 +131,6 @@
sysfw_inner_cert_fs_sr1: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j7200-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs_sr1: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -172,7 +166,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j7200_sr2-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -181,7 +174,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j7200_sr2-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -216,7 +208,6 @@
ti_fs_gp: ti-fs-gp.bin {
filename = "ti-sysfw/ti-fs-firmware-j7200-gp.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
filename = "combined-tifs-cfg.bin";
@@ -339,7 +330,6 @@
};
dm: ti-dm {
filename = "ti-dm/j7200/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
@@ -425,7 +415,6 @@
dm {
ti-dm {
filename = "ti-dm/j7200/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-j721e-binman.dtsi b/arch/arm/dts/k3-j721e-binman.dtsi
index 6adfab1..9522a95 100644
--- a/arch/arm/dts/k3-j721e-binman.dtsi
+++ b/arch/arm/dts/k3-j721e-binman.dtsi
@@ -46,12 +46,10 @@
ti_fs_cert: ti-fs-cert.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e_sr1_1-hs-cert.bin";
type = "blob-ext";
- optional;
};
ti-fs-firmware-j721e_sr1_1-hs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e_sr1_1-hs-enc.bin";
type = "blob-ext";
- optional;
};
};
@@ -67,12 +65,10 @@
ti_fs_cert_sr2: ti-fs-cert.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e_sr2-hs-cert.bin";
type = "blob-ext";
- optional;
};
ti-fs-firmware-j721e_sr2-hs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e_sr2-hs-enc.bin";
type = "blob-ext";
- optional;
};
};
@@ -148,12 +144,10 @@
ti-fs-cert-fs.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e_sr1_1-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
ti-fs-firmware-j721e-hs-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e_sr1_1-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
};
itb_fs_sr1_1 {
@@ -235,12 +229,10 @@
ti-fs-cert-fs.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e_sr2-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
ti-fs-firmware-j721e-hs-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e_sr2-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
};
itb_fs {
@@ -276,7 +268,6 @@
ti_fs: ti-fs.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e-gp.bin";
type = "blob-ext";
- optional;
};
};
itb_gp {
@@ -461,7 +452,6 @@
};
dm: ti-dm {
filename = "ti-dm/j721e/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
@@ -546,7 +536,6 @@
dm {
ti-dm {
filename = "ti-dm/j721e/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-j721e-r5-beagleboneai64.dts b/arch/arm/dts/k3-j721e-r5-beagleboneai64.dts
index 586ddb6..5f0dfe9 100644
--- a/arch/arm/dts/k3-j721e-r5-beagleboneai64.dts
+++ b/arch/arm/dts/k3-j721e-r5-beagleboneai64.dts
@@ -47,7 +47,6 @@
ti_fs: ti-fs.bin {
filename = "ti-sysfw/ti-fs-firmware-j721e-gp.bin";
type = "blob-ext";
- optional;
};
};
diff --git a/arch/arm/dts/k3-j721s2-binman.dtsi b/arch/arm/dts/k3-j721s2-binman.dtsi
index 73af184..4f524e5 100644
--- a/arch/arm/dts/k3-j721s2-binman.dtsi
+++ b/arch/arm/dts/k3-j721s2-binman.dtsi
@@ -34,7 +34,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j721s2-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -43,7 +42,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j721s2-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -79,7 +77,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j721s2-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
filename = "combined-tifs-cfg.bin";
@@ -88,7 +85,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j721s2-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
filename = "combined-dm-cfg.bin";
@@ -123,7 +119,6 @@
ti_fs_gp: ti-fs-gp.bin {
filename = "ti-sysfw/ti-fs-firmware-j721s2-gp.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
filename = "combined-tifs-cfg.bin";
@@ -280,7 +275,6 @@
};
dm: ti-dm {
filename = "ti-dm/j721s2/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
@@ -366,7 +360,6 @@
dm {
ti-dm {
filename = "ti-dm/j721s2/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-j722s-binman.dtsi b/arch/arm/dts/k3-j722s-binman.dtsi
index 8f14713..57e966e 100644
--- a/arch/arm/dts/k3-j722s-binman.dtsi
+++ b/arch/arm/dts/k3-j722s-binman.dtsi
@@ -36,7 +36,6 @@
ti_fs_enc: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j722s-hs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
@@ -47,7 +46,6 @@
sysfw_inner_cert: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j722s-hs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
@@ -88,7 +86,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
filename = "ti-sysfw/ti-fs-firmware-j722s-hs-fs-enc.bin";
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
@@ -99,7 +96,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
filename = "ti-sysfw/ti-fs-firmware-j722s-hs-fs-cert.bin";
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
@@ -129,7 +125,6 @@
dm: ti-dm {
filename = "ti-dm/j722s/ipc_echo_testb_mcu1_0_release_strip.xer5f";
- optional;
};
};
diff --git a/arch/arm/dts/k3-j784s4-binman.dtsi b/arch/arm/dts/k3-j784s4-binman.dtsi
index cb1fbc6..a7ce1ee 100644
--- a/arch/arm/dts/k3-j784s4-binman.dtsi
+++ b/arch/arm/dts/k3-j784s4-binman.dtsi
@@ -39,7 +39,6 @@
ti_fs_enc: ti-fs-enc.bin {
type = "blob-ext";
- optional;
};
combined_tifs_cfg: combined-tifs-cfg.bin {
@@ -49,7 +48,6 @@
sysfw_inner_cert: sysfw-inner-cert {
type = "blob-ext";
- optional;
};
combined_dm_cfg: combined-dm-cfg.bin {
@@ -88,7 +86,6 @@
ti_fs_enc_fs: ti-fs-enc.bin {
type = "blob-ext";
- optional;
};
combined_tifs_cfg_fs: combined-tifs-cfg.bin {
@@ -98,7 +95,6 @@
sysfw_inner_cert_fs: sysfw-inner-cert {
type = "blob-ext";
- optional;
};
combined_dm_cfg_fs: combined-dm-cfg.bin {
@@ -135,7 +131,6 @@
ti_fs_gp: ti-fs-gp.bin {
type = "blob-ext";
- optional;
};
combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
@@ -166,7 +161,6 @@
};
dm: ti-dm {
- optional;
};
};
@@ -255,7 +249,6 @@
images {
dm {
ti-dm {
- optional;
};
};
diff --git a/board/phytec/common/k3/board.c b/board/phytec/common/k3/board.c
index 828973a..d9aec16 100644
--- a/board/phytec/common/k3/board.c
+++ b/board/phytec/common/k3/board.c
@@ -121,24 +121,37 @@
}
#if IS_ENABLED(CONFIG_BOARD_LATE_INIT)
-int board_late_init(void)
+/**
+ * Ensure the boot order favors the device we just booted from.
+ * If boot_targets is still at its default value, move the current
+ * boot device to the front of the list. Otherwise, leave any customized
+ * order untouched.
+ */
+static void boot_targets_setup(void)
{
u32 boot_device = get_boot_device();
+ const char *boot_targets = NULL;
+ char boot_targets_default[100];
+ int ret;
switch (boot_device) {
case BOOT_DEVICE_MMC1:
env_set_ulong("mmcdev", 0);
env_set("boot", "mmc");
+ boot_targets = "mmc0 mmc1 spi_flash dhcp";
break;
case BOOT_DEVICE_MMC2:
env_set_ulong("mmcdev", 1);
env_set("boot", "mmc");
+ boot_targets = "mmc1 mmc0 spi_flash dhcp";
break;
case BOOT_DEVICE_SPI:
env_set("boot", "spi");
+ boot_targets = "spi_flash mmc0 mmc1 dhcp";
break;
case BOOT_DEVICE_ETHERNET:
env_set("boot", "net");
+ boot_targets = "dhcp mmc0 mmc1 spi_flash";
break;
case BOOT_DEVICE_UART:
env_set("boot", "uart");
@@ -148,26 +161,49 @@
break;
};
+ if (!boot_targets)
+ return;
+
+ ret = env_get_default_into("boot_targets", boot_targets_default, sizeof(boot_targets_default));
+ if (ret < 0)
+ boot_targets_default[0] = '\0';
+
- if (IS_ENABLED(CONFIG_PHYTEC_SOM_DETECTION_BLOCKS)) {
- struct phytec_api3_element *block_element;
- struct phytec_eeprom_data data;
- int ret;
+ if (strcmp(boot_targets_default, env_get("boot_targets"))) {
+ debug("boot_targets not default, don't change it\n");
+ return;
+ }
+
+ env_set("boot_targets", boot_targets);
+}
- ret = phytec_eeprom_data_setup(&data, 0, EEPROM_ADDR);
- if (ret || !data.valid)
- return 0;
+static void setup_mac_from_eeprom(void)
+{
+ struct phytec_api3_element *block_element;
+ struct phytec_eeprom_data data;
+ int ret;
- PHYTEC_API3_FOREACH_BLOCK(block_element, &data) {
- switch (block_element->block_type) {
- case PHYTEC_API3_BLOCK_MAC:
- phytec_blocks_add_mac_to_env(block_element);
- break;
- default:
- debug("%s: Unknown block type %i\n", __func__,
- block_element->block_type);
- }
+ ret = phytec_eeprom_data_setup(&data, 0, EEPROM_ADDR);
+ if (ret || !data.valid)
+ return;
+
+ PHYTEC_API3_FOREACH_BLOCK(block_element, &data) {
+ switch (block_element->block_type) {
+ case PHYTEC_API3_BLOCK_MAC:
+ phytec_blocks_add_mac_to_env(block_element);
+ break;
+ default:
+ debug("%s: Unknown block type %i\n", __func__,
+ block_element->block_type);
}
}
+}
+
+int board_late_init(void)
+{
+ boot_targets_setup();
+
+ if (IS_ENABLED(CONFIG_PHYTEC_SOM_DETECTION_BLOCKS))
+ setup_mac_from_eeprom();
#if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)
configure_capsule_updates();
diff --git a/board/phytec/phycore_am62ax/phycore_am62ax.env b/board/phytec/phycore_am62ax/phycore_am62ax.env
index 40787b0..7979040 100644
--- a/board/phytec/phycore_am62ax/phycore_am62ax.env
+++ b/board/phytec/phycore_am62ax/phycore_am62ax.env
@@ -24,3 +24,6 @@
spi_fdt_addr=0x700000
spi_image_addr=0x800000
spi_ramdisk_addr=0x2200000
+
+bootmeths=script efi extlinux pxe
+boot_targets=mmc1 mmc0 spi_flash dhcp
diff --git a/board/phytec/phycore_am62x/phycore_am62x.env b/board/phytec/phycore_am62x/phycore_am62x.env
index 5c48e85..7979040 100644
--- a/board/phytec/phycore_am62x/phycore_am62x.env
+++ b/board/phytec/phycore_am62x/phycore_am62x.env
@@ -10,6 +10,7 @@
kernel_addr_r=0x82000000
ramdisk_addr_r=0x88080000
fdtoverlay_addr_r=0x89000000
+fit_addr_r=0x90000000
fdtfile=CONFIG_DEFAULT_FDT_FILE
mmcdev=1
@@ -23,3 +24,6 @@
spi_fdt_addr=0x700000
spi_image_addr=0x800000
spi_ramdisk_addr=0x2200000
+
+bootmeths=script efi extlinux pxe
+boot_targets=mmc1 mmc0 spi_flash dhcp
diff --git a/board/phytec/phycore_am64x/phycore_am64x.env b/board/phytec/phycore_am64x/phycore_am64x.env
index d69dfe7..36ab16e 100644
--- a/board/phytec/phycore_am64x/phycore_am64x.env
+++ b/board/phytec/phycore_am64x/phycore_am64x.env
@@ -9,6 +9,7 @@
kernel_addr_r=0x82000000
ramdisk_addr_r=0x88080000
fdtoverlay_addr_r=0x89000000
+fit_addr_r=0x90000000
fdtfile=CONFIG_DEFAULT_FDT_FILE
mmcdev=1
@@ -22,3 +23,6 @@
spi_fdt_addr=0x700000
spi_image_addr=0x800000
spi_ramdisk_addr=0x2200000
+
+bootmeths=script efi extlinux pxe
+boot_targets=mmc1 mmc0 spi_flash dhcp
diff --git a/cmd/Kconfig b/cmd/Kconfig
index f21d27c..9a70c7a 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1986,6 +1986,7 @@
config BOOTP_PXE_DHCP_OPTION
bool "Request & store 'pxe_configfile' from BOOTP/DHCP server"
+ default y
depends on BOOTP_PXE
config BOOTP_VCI_STRING
@@ -1996,6 +1997,30 @@
default "U-Boot.arm" if ARM
default "U-Boot"
+config BOOTP_RANDOM_XID
+ bool "Send random transaction ID to BOOTP/DHCP server"
+ depends on CMD_BOOTP && (LIB_RAND || LIB_HW_RAND)
+ help
+ Selecting this will allow for a random transaction ID to get
+ selected for each BOOTP/DHCPv4 exchange.
+
+if CMD_DHCP6
+
+config DHCP6_PXE_CLIENTARCH
+ hex
+ default 0x16 if ARM64
+ default 0x15 if ARM
+ default 0xFF
+
+config DHCP6_PXE_DHCP_OPTION
+ bool "Request & store 'pxe_configfile' from DHCP6 server"
+
+config DHCP6_ENTERPRISE_ID
+ int "Enterprise ID to send in DHCPv6 Vendor Class Option"
+ default 0
+
+endif
+
config CMD_TFTPPUT
bool "tftp put"
depends on CMD_TFTPBOOT
diff --git a/cmd/cat.c b/cmd/cat.c
index 6828b7b..3167cda 100644
--- a/cmd/cat.c
+++ b/cmd/cat.c
@@ -8,6 +8,7 @@
#include <fs.h>
#include <malloc.h>
#include <mapmem.h>
+#include <linux/errno.h>
static int do_cat(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
diff --git a/cmd/pxe.c b/cmd/pxe.c
index 0f26b3b..71d8b54 100644
--- a/cmd/pxe.c
+++ b/cmd/pxe.c
@@ -64,6 +64,8 @@
int ret = get_pxe_file(ctx, pxelinux_configfile, pxefile_addr_r);
free(pxelinux_configfile);
+ /* set to NULL to avoid double-free if DHCP is tried again */
+ pxelinux_configfile = NULL;
return ret;
}
diff --git a/cmd/ximg.c b/cmd/ximg.c
index 29d7c32..e97167a 100644
--- a/cmd/ximg.c
+++ b/cmd/ximg.c
@@ -27,6 +27,7 @@
#include <asm/byteorder.h>
#include <asm/cache.h>
#include <asm/io.h>
+#include <u-boot/zlib.h>
static int
do_imgextract(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
@@ -206,11 +207,18 @@
break;
#ifdef CONFIG_GZIP
case IH_COMP_GZIP:
- printf(" Uncompressing part %d ... ", part);
- if (gunzip((void *) dest, unc_len,
- (uchar *) data, &len) != 0) {
- puts("GUNZIP ERROR - image not loaded\n");
- return 1;
+ {
+ int ret = 0;
+ printf(" Uncompressing part %d ... ", part);
+ ret = gunzip((void *)dest, unc_len,
+ (uchar *)data, &len);
+ if (ret == Z_BUF_ERROR) {
+ puts("Image too large: increase CONFIG_SYS_XIMG_LEN\n");
+ return 1;
+ } else if (ret != 0) {
+ puts("GUNZIP ERROR - image not loaded\n");
+ return 1;
+ }
}
break;
#endif
diff --git a/common/Kconfig b/common/Kconfig
index be517b8..1753907 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -727,6 +727,13 @@
relocation. With this option, U-Boot calls board_early_init_r()
in the post-relocation init sequence.
+config BOARD_INIT
+ bool "Call board-specific init board_init() during init-calls"
+ default y if ARM || RISCV || SANDBOX
+ help
+ Some boards need an board_init() function called during the initcall
+ phase of startup.
+
config BOARD_POSTCLK_INIT
bool "Call board_postclk_init"
help
diff --git a/common/board_r.c b/common/board_r.c
index 41c8dec..980bd38 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -649,8 +649,7 @@
#if CONFIG_IS_ENABLED(ADDR_MAP)
INITCALL(init_addr_map);
#endif
-#if CONFIG_IS_ENABLED(ARM) || CONFIG_IS_ENABLED(RISCV) || \
- CONFIG_IS_ENABLED(SANDBOX)
+#if CONFIG_IS_ENABLED(BOARD_INIT)
INITCALL(board_init); /* Setup chipselects */
#endif
/*
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index 77cf04d..be87b3e 100644
--- a/common/spl/Kconfig
+++ b/common/spl/Kconfig
@@ -1138,6 +1138,7 @@
config SPL_NET
bool "Support networking"
depends on !NET_LWIP
+ select SPL_USE_TINY_PRINTF_POINTER_SUPPORT if SPL_USE_TINY_PRINTF
help
Enable support for network devices (such as Ethernet) in SPL.
This permits SPL to load U-Boot over a network link rather than
diff --git a/configs/phycore_am62ax_a53_defconfig b/configs/phycore_am62ax_a53_defconfig
index c74909d..11aaec6 100644
--- a/configs/phycore_am62ax_a53_defconfig
+++ b/configs/phycore_am62ax_a53_defconfig
@@ -41,7 +41,7 @@
CONFIG_SPL_LOAD_FIT_ADDRESS=0x81000000
CONFIG_BOOTSTD_FULL=y
CONFIG_OF_BOARD_SETUP=y
-CONFIG_BOOTCOMMAND="run ${boot}boot; bootflow scan -lb"
+CONFIG_BOOTCOMMAND="bootflow scan -lb; run ${boot}boot"
CONFIG_DEFAULT_FDT_FILE="oftree"
CONFIG_BOARD_LATE_INIT=y
CONFIG_SPL_MAX_SIZE=0x58000
@@ -129,6 +129,7 @@
CONFIG_MTD=y
CONFIG_DM_MTD=y
CONFIG_DM_SPI_FLASH=y
+CONFIG_BOOTDEV_SPI_FLASH=y
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
# CONFIG_SPI_FLASH_SMART_HWCAPS is not set
CONFIG_SPI_FLASH_SOFT_RESET=y
diff --git a/configs/phycore_am62x_a53_defconfig b/configs/phycore_am62x_a53_defconfig
index 487eafb..5f91ca6 100644
--- a/configs/phycore_am62x_a53_defconfig
+++ b/configs/phycore_am62x_a53_defconfig
@@ -44,7 +44,7 @@
CONFIG_SPL_LOAD_FIT_ADDRESS=0x81000000
CONFIG_BOOTSTD_FULL=y
CONFIG_OF_BOARD_SETUP=y
-CONFIG_BOOTCOMMAND="run ${boot}boot; bootflow scan -lb"
+CONFIG_BOOTCOMMAND="bootflow scan -lb; run ${boot}boot"
CONFIG_DEFAULT_FDT_FILE="oftree"
CONFIG_BOARD_LATE_INIT=y
CONFIG_SPL_MAX_SIZE=0x58000
@@ -125,6 +125,7 @@
CONFIG_MTD=y
CONFIG_DM_MTD=y
CONFIG_DM_SPI_FLASH=y
+CONFIG_BOOTDEV_SPI_FLASH=y
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
# CONFIG_SPI_FLASH_SMART_HWCAPS is not set
CONFIG_SPI_FLASH_SOFT_RESET=y
diff --git a/configs/phycore_am64x_a53_defconfig b/configs/phycore_am64x_a53_defconfig
index 2032a34..8b508d0 100644
--- a/configs/phycore_am64x_a53_defconfig
+++ b/configs/phycore_am64x_a53_defconfig
@@ -40,7 +40,7 @@
CONFIG_SPL_LOAD_FIT_ADDRESS=0x81000000
CONFIG_BOOTSTD_FULL=y
CONFIG_OF_BOARD_SETUP=y
-CONFIG_BOOTCOMMAND="run ${boot}boot; bootflow scan -lb"
+CONFIG_BOOTCOMMAND="bootflow scan -lb; run ${boot}boot"
CONFIG_DEFAULT_FDT_FILE="oftree"
CONFIG_BOARD_LATE_INIT=y
CONFIG_SPL_MAX_SIZE=0x180000
@@ -131,6 +131,7 @@
CONFIG_MTD=y
CONFIG_DM_MTD=y
CONFIG_DM_SPI_FLASH=y
+CONFIG_BOOTDEV_SPI_FLASH=y
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
# CONFIG_SPI_FLASH_SMART_HWCAPS is not set
CONFIG_SPI_FLASH_SOFT_RESET=y
diff --git a/configs/verdin-am62_a53_defconfig b/configs/verdin-am62_a53_defconfig
index 4bdcb4b..c299c9f 100644
--- a/configs/verdin-am62_a53_defconfig
+++ b/configs/verdin-am62_a53_defconfig
@@ -1,5 +1,4 @@
CONFIG_ARM=y
-CONFIG_SKIP_LOWLEVEL_INIT=y
CONFIG_ARCH_K3=y
CONFIG_SYS_MALLOC_LEN=0x2000000
CONFIG_SYS_MALLOC_F_LEN=0x8000
@@ -28,8 +27,6 @@
CONFIG_SYS_LOAD_ADDR=0x88200000
CONFIG_SPL_SIZE_LIMIT=0x40000
CONFIG_SPL_SIZE_LIMIT_PROVIDE_STACK=0x800
-CONFIG_SPL_FS_FAT=y
-CONFIG_SPL_LIBDISK_SUPPORT=y
CONFIG_SYS_MEMTEST_START=0x80000000
CONFIG_SYS_MEMTEST_END=0xB0000000
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
@@ -53,13 +50,11 @@
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1400
CONFIG_SPL_DMA=y
CONFIG_SPL_ENV_SUPPORT=y
-CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="u-boot.img"
CONFIG_SPL_I2C=y
CONFIG_SPL_DM_MAILBOX=y
CONFIG_SPL_POWER_DOMAIN=y
CONFIG_SPL_RAM_DEVICE=y
CONFIG_SPL_THERMAL=y
-CONFIG_SPL_YMODEM_SUPPORT=y
CONFIG_SYS_PROMPT="Verdin AM62 # "
CONFIG_CMD_ADTIMG=y
CONFIG_CMD_ASKENV=y
@@ -192,8 +187,6 @@
CONFIG_SPL_USB_DWC3_GENERIC=y
CONFIG_SPL_USB_DWC3_AM62=y
CONFIG_USB_DWC3_AM62=y
-CONFIG_USB_KEYBOARD=y
-CONFIG_USB_HOST_ETHER=y
CONFIG_USB_GADGET=y
CONFIG_SPL_USB_GADGET=y
CONFIG_USB_GADGET_MANUFACTURER="Toradex"
diff --git a/configs/verdin-am62_r5_defconfig b/configs/verdin-am62_r5_defconfig
index f9580e6..6d662f2 100644
--- a/configs/verdin-am62_r5_defconfig
+++ b/configs/verdin-am62_r5_defconfig
@@ -47,14 +47,8 @@
CONFIG_SPL_DM_RESET=y
CONFIG_SPL_POWER_DOMAIN=y
CONFIG_SPL_RAM_DEVICE=y
-CONFIG_SPL_YMODEM_SUPPORT=y
-CONFIG_HUSH_PARSER=y
-CONFIG_CMD_ASKENV=y
CONFIG_CMD_DFU=y
-CONFIG_CMD_GPT=y
-CONFIG_CMD_MMC=y
# CONFIG_CMD_SETEXPR is not set
-CONFIG_CMD_TIME=y
CONFIG_OF_CONTROL=y
CONFIG_SPL_OF_CONTROL=y
CONFIG_SPL_MULTI_DTB_FIT=y
diff --git a/drivers/clk/mediatek/clk-mt7981.c b/drivers/clk/mediatek/clk-mt7981.c
index 6081465..6130c93 100644
--- a/drivers/clk/mediatek/clk-mt7981.c
+++ b/drivers/clk/mediatek/clk-mt7981.c
@@ -566,7 +566,7 @@
.of_match = mt7981_fixed_pll_compat,
.probe = mt7981_fixed_pll_probe,
.priv_auto = sizeof(struct mtk_clk_priv),
- .ops = &mtk_clk_topckgen_ops,
+ .ops = &mtk_clk_fixed_pll_ops,
.flags = DM_FLAG_PRE_RELOC,
};
diff --git a/drivers/clk/mediatek/clk-mt7986.c b/drivers/clk/mediatek/clk-mt7986.c
index f9d6f9c..cf298af 100644
--- a/drivers/clk/mediatek/clk-mt7986.c
+++ b/drivers/clk/mediatek/clk-mt7986.c
@@ -573,7 +573,7 @@
.of_match = mt7986_fixed_pll_compat,
.probe = mt7986_fixed_pll_probe,
.priv_auto = sizeof(struct mtk_clk_priv),
- .ops = &mtk_clk_topckgen_ops,
+ .ops = &mtk_clk_fixed_pll_ops,
.flags = DM_FLAG_PRE_RELOC,
};
diff --git a/drivers/clk/mediatek/clk-mt7987.c b/drivers/clk/mediatek/clk-mt7987.c
index 173686a..b662d68 100644
--- a/drivers/clk/mediatek/clk-mt7987.c
+++ b/drivers/clk/mediatek/clk-mt7987.c
@@ -67,7 +67,7 @@
.of_match = mt7987_fixed_pll_compat,
.probe = mt7987_fixed_pll_probe,
.priv_auto = sizeof(struct mtk_clk_priv),
- .ops = &mtk_clk_topckgen_ops,
+ .ops = &mtk_clk_fixed_pll_ops,
.flags = DM_FLAG_PRE_RELOC,
};
diff --git a/drivers/clk/mediatek/clk-mt7988.c b/drivers/clk/mediatek/clk-mt7988.c
index 73fd9c6..c6da42f 100644
--- a/drivers/clk/mediatek/clk-mt7988.c
+++ b/drivers/clk/mediatek/clk-mt7988.c
@@ -830,7 +830,7 @@
.of_match = mt7988_fixed_pll_compat,
.probe = mt7988_fixed_pll_probe,
.priv_auto = sizeof(struct mtk_clk_priv),
- .ops = &mtk_clk_topckgen_ops,
+ .ops = &mtk_clk_fixed_pll_ops,
.flags = DM_FLAG_PRE_RELOC,
};
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index 66683ae..f91777e 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -47,6 +47,11 @@
return id;
}
+static int mtk_dummy_enable(struct clk *clk)
+{
+ return 0;
+}
+
static int mtk_gate_enable(void __iomem *base, const struct mtk_gate *gate)
{
u32 bit = BIT(gate->shift);
@@ -752,6 +757,12 @@
.get_rate = mtk_apmixedsys_get_rate,
};
+const struct clk_ops mtk_clk_fixed_pll_ops = {
+ .enable = mtk_dummy_enable,
+ .disable = mtk_dummy_enable,
+ .get_rate = mtk_topckgen_get_rate,
+};
+
const struct clk_ops mtk_clk_topckgen_ops = {
.enable = mtk_clk_mux_enable,
.disable = mtk_clk_mux_disable,
diff --git a/drivers/clk/mediatek/clk-mtk.h b/drivers/clk/mediatek/clk-mtk.h
index c1d9901..4ef1341 100644
--- a/drivers/clk/mediatek/clk-mtk.h
+++ b/drivers/clk/mediatek/clk-mtk.h
@@ -283,6 +283,7 @@
};
extern const struct clk_ops mtk_clk_apmixedsys_ops;
+extern const struct clk_ops mtk_clk_fixed_pll_ops;
extern const struct clk_ops mtk_clk_topckgen_ops;
extern const struct clk_ops mtk_clk_infrasys_ops;
extern const struct clk_ops mtk_clk_gate_ops;
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 716a1d4..e6fed8c 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -839,8 +839,6 @@
static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
phy_interface_t interface)
{
- /* Soft Reset the PHY */
- phy_reset(phydev);
if (phydev->dev && phydev->dev != dev) {
printf("%s:%d is connected to %s. Reconnecting to %s\n",
phydev->bus->name, phydev->addr,
diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c
index f10c622..51944b6 100644
--- a/fs/ext4/ext4fs.c
+++ b/fs/ext4/ext4fs.c
@@ -27,6 +27,7 @@
#include <ext4fs.h>
#include <malloc.h>
#include <part.h>
+#include <rtc.h>
#include <u-boot/uuid.h>
#include "ext4_common.h"
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index e2570e8..89f2acb 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -21,6 +21,7 @@
#include <part.h>
#include <malloc.h>
#include <memalign.h>
+#include <rtc.h>
#include <asm/cache.h>
#include <linux/compiler.h>
#include <linux/ctype.h>
diff --git a/include/fs.h b/include/fs.h
index 731aaa0..bec0211 100644
--- a/include/fs.h
+++ b/include/fs.h
@@ -5,7 +5,7 @@
#ifndef _FS_H
#define _FS_H
-#include <rtc.h>
+#include <rtc_def.h>
struct cmd_tbl;
diff --git a/lib/Kconfig b/lib/Kconfig
index b2aecd8..6a89f79 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -253,6 +253,14 @@
The supported format specifiers are %c, %s, %u/%d and %x.
+config SPL_USE_TINY_PRINTF_POINTER_SUPPORT
+ bool "Extend tiny printf with the pointer formatting %p"
+ depends on SPL_USE_TINY_PRINTF
+ help
+ This option enables the formatting of pointers %p. It supports
+ %p and %pa / %pap. If this option is selected by SPL_NET
+ it also supports the formatting with %pm, %pM and %pI4.
+
config PANIC_HANG
bool "Do not reset the system on fatal error"
help
@@ -275,7 +283,8 @@
choice
prompt "Pseudo-random library support type"
depends on NET_RANDOM_ETHADDR || RANDOM_UUID || CMD_UUID || \
- RNG_SANDBOX || UT_LIB && AES || FAT_WRITE
+ RNG_SANDBOX || UT_LIB && AES || FAT_WRITE || CMD_BOOTP || \
+ CMD_DHCP || CMD_DHCP6
default LIB_RAND
help
Select the library to provide pseudo-random number generator
diff --git a/lib/linux_string.c b/lib/linux_string.c
index d5a5e08..4b92cd9 100644
--- a/lib/linux_string.c
+++ b/lib/linux_string.c
@@ -31,13 +31,15 @@
* Note that the first trailing whitespace is replaced with a %NUL-terminator
* in the given string @s. Returns a pointer to the first non-whitespace
* character in @s.
+ *
+ * Note that if the string consist of only spaces, then the terminator is placed
+ * at the start of the string, with the return value pointing there also.
*/
char *strim(char *s)
{
size_t size;
char *end;
- s = skip_spaces(s);
size = strlen(s);
if (!size)
return s;
@@ -47,5 +49,5 @@
end--;
*(end + 1) = '\0';
- return s;
+ return skip_spaces(s);
}
diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c
index 2a7a4d2..411ae61 100644
--- a/lib/tiny-printf.c
+++ b/lib/tiny-printf.c
@@ -141,7 +141,7 @@
string(info, ip4_addr);
}
-#endif
+#endif /* CONFIG_SPL_NET */
/*
* Show a '%p' thing. A kernel extension is that the '%p' is followed
@@ -157,18 +157,14 @@
* decimal).
*/
-static void __maybe_unused pointer(struct printf_info *info, const char *fmt,
- void *ptr)
+#if defined(CONFIG_SPL_USE_TINY_PRINTF_POINTER_SUPPORT) || defined(DEBUG)
+static void pointer(struct printf_info *info, const char *fmt, void *ptr)
{
-#ifdef DEBUG
unsigned long num = (uintptr_t)ptr;
unsigned long div;
-#endif
switch (*fmt) {
-#ifdef DEBUG
case 'a':
-
switch (fmt[1]) {
case 'p':
default:
@@ -176,7 +172,6 @@
break;
}
break;
-#endif
#ifdef CONFIG_SPL_NET
case 'm':
return mac_address_string(info, ptr, false);
@@ -185,16 +180,22 @@
case 'I':
if (fmt[1] == '4')
return ip4_addr_string(info, ptr);
+#else
+ case 'm':
+ case 'M':
+ case 'I':
+ out(info, '?');
+ return;
#endif
default:
break;
}
-#ifdef DEBUG
+
div = 1UL << (sizeof(long) * 8 - 4);
for (; div; div /= 0x10)
div_out(info, &num, div);
-#endif
}
+#endif
static int _vprintf(struct printf_info *info, const char *fmt, va_list va)
{
@@ -269,21 +270,18 @@
div_out(info, &num, div);
}
break;
+#if defined(CONFIG_SPL_USE_TINY_PRINTF_POINTER_SUPPORT) || defined(DEBUG)
case 'p':
- if (CONFIG_IS_ENABLED(NET) ||
- CONFIG_IS_ENABLED(NET_LWIP) || _DEBUG) {
- pointer(info, fmt, va_arg(va, void *));
- /*
- * Skip this because it pulls in _ctype which is
- * 256 bytes, and we don't generally implement
- * pointer anyway
- */
- while (isalnum(fmt[0]))
- fmt++;
- break;
- }
- islong = true;
- fallthrough;
+ pointer(info, fmt, va_arg(va, void *));
+ /*
+ * Skip this because it pulls in _ctype which is
+ * 256 bytes, and we don't generally implement
+ * pointer anyway
+ */
+ while (isalnum(fmt[0]))
+ fmt++;
+ break;
+#endif
case 'x':
case 'X':
if (islong) {
@@ -310,7 +308,9 @@
break;
case '%':
out(info, '%');
+ break;
default:
+ out(info, '?');
break;
}
diff --git a/net/bootp.c b/net/bootp.c
index afd5b48..f22921e 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -41,6 +41,22 @@
*/
#define TIMEOUT_MS ((3 + (CONFIG_NET_RETRY_COUNT * 5)) * 1000)
+/*
+ * According to rfc951 : 7.2. Client Retransmission Strategy
+ * "After the 'average' backoff reaches about 60 seconds, it should be
+ * increased no further, but still randomized."
+ *
+ * U-Boot has saturated this backoff at 2 seconds for a long time.
+ * To modify, set the environment variable "bootpretransmitperiodmax"
+ */
+#define RETRANSMIT_PERIOD_MAX_MS 60000
+
+/* Retransmission timeout for the initial packet (in milliseconds).
+ * This timeout will double on each retry. To modify, set the
+ * environment variable bootpretransmitperiodinit.
+ */
+#define RETRANSMIT_PERIOD_INIT_MS 250
+
#ifndef CFG_DHCP_MIN_EXT_LEN /* minimal length of extension list */
#define CFG_DHCP_MIN_EXT_LEN 64
#endif
@@ -52,6 +68,7 @@
u32 bootp_ids[CFG_BOOTP_ID_CACHE_SIZE];
unsigned int bootp_num_ids;
int bootp_try;
+u32 bootp_id;
ulong bootp_start;
ulong bootp_timeout;
char net_nis_domain[32] = {0,}; /* Our NIS domain */
@@ -59,6 +76,7 @@
char net_root_path[CONFIG_BOOTP_MAX_ROOT_PATH_LEN] = {0,}; /* Our bootpath */
static ulong time_taken_max;
+static u32 retransmit_period_max_ms;
#if defined(CONFIG_CMD_DHCP)
static dhcp_state_t dhcp_state = INIT;
@@ -395,6 +413,7 @@
static void bootp_timeout_handler(void)
{
ulong time_taken = get_timer(bootp_start);
+ int rand_minus_plus_100;
if (time_taken >= time_taken_max) {
#ifdef CONFIG_BOOTP_MAY_FAIL
@@ -413,8 +432,17 @@
}
} else {
bootp_timeout *= 2;
- if (bootp_timeout > 2000)
- bootp_timeout = 2000;
+ if (bootp_timeout > retransmit_period_max_ms)
+ bootp_timeout = retransmit_period_max_ms;
+
+ /* Randomize by adding bootp_timeout*RAND, where RAND
+ * is a randomization factor between -0.1..+0.1
+ */
+ srand(get_ticks() + rand());
+ rand_minus_plus_100 = ((rand() % 200) - 100);
+ bootp_timeout = bootp_timeout +
+ (((int)bootp_timeout * rand_minus_plus_100) / 1000);
+
net_set_timeout_handler(bootp_timeout, bootp_timeout_handler);
bootp_request();
}
@@ -602,7 +630,7 @@
*cnt += 1;
#endif
if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION)) {
- *e++ = 209; /* PXELINUX Config File */
+ *e++ = DHCP_OPTION_PXE_CONFIG_FILE; /* PXELINUX Config File */
*cnt += 1;
}
/* no options, so back up to avoid sending an empty request list */
@@ -713,7 +741,8 @@
bootp_num_ids = 0;
bootp_try = 0;
bootp_start = get_timer(0);
- bootp_timeout = 250;
+
+ bootp_timeout = env_get_ulong("bootpretransmitperiodinit", 10, RETRANSMIT_PERIOD_INIT_MS);
}
void bootp_request(void)
@@ -725,7 +754,6 @@
#ifdef CONFIG_BOOTP_RANDOM_DELAY
ulong rand_ms;
#endif
- u32 bootp_id;
struct in_addr zero_ip;
struct in_addr bcast_ip;
char *ep; /* Environment pointer */
@@ -741,6 +769,9 @@
else
time_taken_max = TIMEOUT_MS;
+ retransmit_period_max_ms = env_get_ulong("bootpretransmitperiodmax", 10,
+ RETRANSMIT_PERIOD_MAX_MS);
+
#ifdef CONFIG_BOOTP_RANDOM_DELAY /* Random BOOTP delay */
if (bootp_try == 0)
srand_mac();
@@ -800,19 +831,27 @@
extlen = bootp_extended((u8 *)bp->bp_vend);
#endif
- /*
- * Bootp ID is the lower 4 bytes of our ethernet address
- * plus the current time in ms.
- */
- bootp_id = ((u32)net_ethaddr[2] << 24)
- | ((u32)net_ethaddr[3] << 16)
- | ((u32)net_ethaddr[4] << 8)
- | (u32)net_ethaddr[5];
- bootp_id += get_timer(0);
- bootp_id = htonl(bootp_id);
+ /* Only generate a new transaction ID for each new BOOTP request */
+ if (bootp_try == 1) {
+ if (IS_ENABLED(CONFIG_BOOTP_RANDOM_XID)) {
+ srand(get_ticks() + rand());
+ bootp_id = rand();
+ } else {
+ /*
+ * Bootp ID is the lower 4 bytes of our ethernet address
+ * plus the current time in ms.
+ */
+ bootp_id = ((u32)net_ethaddr[2] << 24)
+ | ((u32)net_ethaddr[3] << 16)
+ | ((u32)net_ethaddr[4] << 8)
+ | (u32)net_ethaddr[5];
+ bootp_id += get_timer(0);
+ bootp_id = htonl(bootp_id);
+ }
+ }
+
bootp_add_id(bootp_id);
net_copy_u32(&bp->bp_id, &bootp_id);
-
/*
* Calculate proper packet lengths taking into account the
* variable size of the options field
@@ -921,7 +960,7 @@
net_boot_file_name[size] = 0;
}
break;
- case 209: /* PXELINUX Config File */
+ case DHCP_OPTION_PXE_CONFIG_FILE: /* PXELINUX Config File */
if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION)) {
/* In case it has already been allocated when get DHCP Offer packet,
* free first to avoid memory leak.
diff --git a/net/bootp.h b/net/bootp.h
index 521d38f..68320bf 100644
--- a/net/bootp.h
+++ b/net/bootp.h
@@ -90,6 +90,8 @@
#define DHCP_NAK 6
#define DHCP_RELEASE 7
+#define DHCP_OPTION_PXE_CONFIG_FILE 209 /* "ConfigFile" option according to rfc5071 */
+
/**********************************************************************/
#endif /* __BOOTP_H__ */
diff --git a/net/eth-uclass.c b/net/eth-uclass.c
index 5555f82..a233912 100644
--- a/net/eth-uclass.c
+++ b/net/eth-uclass.c
@@ -461,6 +461,8 @@
eth_get_ops(current)->free_pkt(current, packet, ret);
if (ret <= 0)
break;
+ if (!eth_is_active(current))
+ break;
}
if (ret == -EAGAIN)
ret = 0;
diff --git a/net/tftp.c b/net/tftp.c
index fd9c9492..1ca9a5e 100644
--- a/net/tftp.c
+++ b/net/tftp.c
@@ -655,7 +655,7 @@
net_set_timeout_handler(timeout_ms, tftp_timeout_handler);
if (store_block(tftp_cur_block, pkt + 2, len)) {
- eth_halt();
+ eth_halt_state_only();
net_set_state(NETLOOP_FAIL);
break;
}
@@ -685,7 +685,7 @@
case TFTP_ERR_FILE_NOT_FOUND:
case TFTP_ERR_ACCESS_DENIED:
puts("Not retrying...\n");
- eth_halt();
+ eth_halt_state_only();
net_set_state(NETLOOP_FAIL);
break;
case TFTP_ERR_UNDEFINED:
diff --git a/test/lib/string.c b/test/lib/string.c
index 31391a3..f56c2e4 100644
--- a/test/lib/string.c
+++ b/test/lib/string.c
@@ -261,3 +261,40 @@
return 0;
}
LIB_TEST(lib_strstr, 0);
+
+static int lib_strim(struct unit_test_state *uts)
+{
+ char buf[BUFLEN], *p;
+
+ strcpy(buf, "abc");
+ ut_asserteq_str("abc", strim(buf));
+
+ /* leading space */
+ strcpy(buf, " abc");
+ ut_asserteq_str("abc", strim(buf));
+
+ /* multiple leading spaces */
+ strcpy(buf, " abc");
+ ut_asserteq_str("abc", strim(buf));
+
+ /* multiple internal spaces */
+ strcpy(buf, " a bc");
+ ut_asserteq_str("a bc", strim(buf));
+
+ /* with trailing space */
+ strcpy(buf, " a bc ");
+ ut_asserteq_str("a bc", strim(buf));
+
+ /* with multiple trailing spaces */
+ strcpy(buf, " a bc ");
+ ut_asserteq_str("a bc", strim(buf));
+
+ /* with only spaces */
+ strcpy(buf, " ");
+ p = strim(buf);
+ ut_asserteq_ptr(p, buf);
+ ut_asserteq_str("", p);
+
+ return 0;
+}
+LIB_TEST(lib_strim, 0);