On 1/22/23 16:15, Samuel Holland wrote:
Some 32-bit SoCs can use SCP firmware to implement additional PSCI
functionality, such as system suspend. In order to load this firmware
from SPL, we need to generate and use a FIT instead of a legacy image.

Adjust the binman FIT definition so it does not rely on TF-A BL31, as
this is not used on 32-bit SoCs. Instead, after loading the firmware,
U-Boot proper is executed directly.

Signed-off-by: Samuel Holland <sam...@sholland.org>
---

Changes in v2:
  - Rely on binman min-size instead of using explicit offsets
  - Use Kconfig for firmware addresses instead of an #ifdef staircase

  arch/arm/dts/sunxi-u-boot.dtsi | 23 ++++++++++++++++++-----
  1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/arch/arm/dts/sunxi-u-boot.dtsi b/arch/arm/dts/sunxi-u-boot.dtsi
index f38359fd42..c7089b8619 100644
--- a/arch/arm/dts/sunxi-u-boot.dtsi
+++ b/arch/arm/dts/sunxi-u-boot.dtsi
@@ -1,5 +1,11 @@
  #include <config.h>
+#ifdef CONFIG_ARM64
+#define ARCH "arm64"
+#else
+#define ARCH "arm"
+#endif
+
There should be a better way to do this, but if not shouldn't the else should be elseif because of the RISCV SOCs.

The rest looks fine to me.

Thanks,
Jesse T
  / {
        aliases {
  #ifndef CONFIG_MACH_SUNIV
@@ -29,30 +35,32 @@
                        filename = "spl/sunxi-spl.bin";
                };
-#ifdef CONFIG_ARM64
+#ifdef CONFIG_SPL_LOAD_FIT
                fit {
-                       description = "Configuration to load ATF before U-Boot";
+                       description = "Configuration to load U-Boot and 
firmware";
                        #address-cells = <1>;
                        fit,fdt-list = "of-list";
images {
                                uboot {
-                                       description = "U-Boot (64-bit)";
+                                       description = "U-Boot";
                                        type = "standalone";
                                        os = "u-boot";
-                                       arch = "arm64";
+                                       arch = ARCH;
                                        compression = "none";
                                        load = <CONFIG_TEXT_BASE>;
+                                       entry = <CONFIG_TEXT_BASE>;
u-boot-nodtb {
                                        };
                                };
+#if CONFIG_SUNXI_BL31_BASE
                                atf {
                                        description = "ARM Trusted Firmware";
                                        type = "firmware";
                                        os = "arm-trusted-firmware";
-                                       arch = "arm64";
+                                       arch = ARCH;
                                        compression = "none";
                                        load = <CONFIG_SUNXI_BL31_BASE>;
                                        entry = <CONFIG_SUNXI_BL31_BASE>;
@@ -62,6 +70,7 @@
                                                missing-msg = "atf-bl31-sunxi";
                                        };
                                };
+#endif
#if CONFIG_SUNXI_SCP_BASE
                                scp {
@@ -90,7 +99,11 @@
@config-SEQ {
                                        description = "NAME";
+#if CONFIG_SUNXI_BL31_BASE
                                        firmware = "atf";
+#else
+                                       firmware = "uboot";
+#endif
  #if CONFIG_SUNXI_SCP_BASE
                                        loadables = "scp", "uboot";
  #else

Reply via email to