On 20/11/2024 13:46, Simon Glass wrote:
Hi Andrew,

On Wed, 20 Nov 2024 at 03:02, Andrew Goodbody
<[email protected]> wrote:

Select CONFIG_64BIT so that we pass the -m64 option (instead of -m32) to
static analysis tools.
Introduce CONFIG_SPL_64BIT and select it for architectures other than
x86 with 64 bit builds. Do not select it for x86 builds as x86 uses
a 32 bit SPL.
Ensure that when limits are set they use CONFIG_64BIT for U-Boot
proper and CONFIG_SPL_64BIT for SPL. This is to allow for the 32 bit
SPL build used by x86.

Signed-off-by: Dan Carpenter <[email protected]>
Signed-off-by: Andrew Goodbody <[email protected]>
---

Changes in v3:
Introduce CONFIG_SPL_64BIT to allow for x86 building a 32 bit SPL and
a 64 bit U-Boot proper.

Changes in v2:
Corrected commit title to be x86 not sandbox

  arch/Kconfig         | 3 +++
  arch/arm/Kconfig     | 1 +
  arch/mips/Kconfig    | 4 ++++
  arch/riscv/Kconfig   | 1 +
  arch/sandbox/Kconfig | 1 +
  arch/x86/Kconfig     | 1 +
  common/bloblist.c    | 3 ++-
  include/limits.h     | 3 ++-
  8 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/arch/Kconfig b/arch/Kconfig
index 6258788f53..c726ac5fc7 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -38,6 +38,9 @@ config 32BIT
  config 64BIT
         bool

+config SPL_64BIT
+       bool

Please document what this means and its implications, with some help

Ack

+
  config SYS_CACHELINE_SIZE
         int
         default 128 if SYS_CACHE_SHIFT_7
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 7282c4123b..055762b0b9 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -7,6 +7,7 @@ config SYS_ARCH
  config ARM64
         bool
         select 64BIT
+       select SPL_64BIT if SPL
         select PHYS_64BIT
         select SYS_CACHE_SHIFT_6
         imply SPL_SEPARATE_BSS
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 38577af43d..7ea439e857 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -211,6 +211,7 @@ config CPU_MIPS64_R1
         bool "MIPS64 Release 1"
         depends on SUPPORTS_CPU_MIPS64_R1
         select 64BIT
+       select SPL_64BIT if SPL
         help
           Choose this option to build a kernel for release 1 through 5 of the
           MIPS64 architecture.
@@ -219,6 +220,7 @@ config CPU_MIPS64_R2
         bool "MIPS64 Release 2"
         depends on SUPPORTS_CPU_MIPS64_R2
         select 64BIT
+       select SPL_64BIT if SPL
         help
           Choose this option to build a kernel for release 2 through 5 of the
           MIPS64 architecture.
@@ -227,6 +229,7 @@ config CPU_MIPS64_R6
         bool "MIPS64 Release 6"
         depends on SUPPORTS_CPU_MIPS64_R6
         select 64BIT
+       select SPL_64BIT if SPL
         help
           Choose this option to build a kernel for release 6 or later of the
           MIPS64 architecture.
@@ -235,6 +238,7 @@ config CPU_MIPS64_OCTEON
         bool "Marvell Octeon series of CPUs"
         depends on SUPPORTS_CPU_MIPS64_OCTEON
         select 64BIT
+       select SPL_64BIT if SPL
         help
          Choose this option for Marvell Octeon CPUs.  These CPUs are between
          MIPS64 R5 and R6 with other extensions.
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 043d963f63..abb7a984c4 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -120,6 +120,7 @@ config ARCH_RV32I
  config ARCH_RV64I
         bool "RV64I"
         select 64BIT
+       select SPL_64BIT if SPL
         select PHYS_64BIT
         help
           Choose this option to target the RV64I base integer instruction set.
diff --git a/arch/sandbox/Kconfig b/arch/sandbox/Kconfig
index db29ca14bd..4c169034d9 100644
--- a/arch/sandbox/Kconfig
+++ b/arch/sandbox/Kconfig
@@ -47,6 +47,7 @@ config HOST_32BIT
  config HOST_64BIT
         def_bool $(cc-define,_LP64)
         select 64BIT
+       select SPL_64BIT if SPL

  config HOST_HAS_SDL
         def_bool $(success,sdl2-config --version)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 23a1e21b29..006a59d6fa 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -44,6 +44,7 @@ endchoice

  config X86_64
         bool
+       select 64BIT

  config SPL_X86_64
         bool
diff --git a/common/bloblist.c b/common/bloblist.c
index ec6ff7a5a9..30fe1cb4b3 100644
--- a/common/bloblist.c
+++ b/common/bloblist.c
@@ -579,7 +579,8 @@ int bloblist_check_reg_conv(ulong rfdt, ulong rzero, ulong 
rsig)
         ulong version = BLOBLIST_REGCONV_VER;
         ulong sigval;

-       sigval = (IS_ENABLED(CONFIG_64BIT)) ?
+       sigval = ((IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_SPL_BUILD)) ||
+                       (IS_ENABLED(CONFIG_SPL_64BIT) && 
IS_ENABLED(CONFIG_SPL_BUILD))) ?
                         ((BLOBLIST_MAGIC & ((1UL << BLOBLIST_REGCONV_SHIFT_64) 
- 1)) |
                          ((version  & BLOBLIST_REGCONV_MASK) << 
BLOBLIST_REGCONV_SHIFT_64)) :
                         ((BLOBLIST_MAGIC & ((1UL << BLOBLIST_REGCONV_SHIFT_32) 
- 1)) |

Gosh this is pretty ugly.

Can you split it into separate statements?

Like this?

if ((IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_SPL_BUILD)) ||
                (IS_ENABLED(CONFIG_SPL_64BIT) && IS_ENABLED(CONFIG_SPL_BUILD))) 
{
        sigval = ((BLOBLIST_MAGIC & ((1UL << BLOBLIST_REGCONV_SHIFT_64) - 1)) |
                 ((version  & BLOBLIST_REGCONV_MASK) << 
BLOBLIST_REGCONV_SHIFT_64));
} else {
        sigval = ((BLOBLIST_MAGIC & ((1UL << BLOBLIST_REGCONV_SHIFT_32) - 1)) |
                 ((version  & BLOBLIST_REGCONV_MASK) << 
BLOBLIST_REGCONV_SHIFT_32));
}

Andrew


diff --git a/include/limits.h b/include/limits.h
index 4700cc7a59..1d0bbf69be 100644
--- a/include/limits.h
+++ b/include/limits.h
@@ -9,7 +9,8 @@
  #define UINT32_MAX  0xffffffffU
  #define UINT64_MAX  0xffffffffffffffffULL

-#ifdef CONFIG_64BIT
+#if (defined(CONFIG_64BIT) && !defined(CONFIG_SPL_BUILD)) || \
+       (defined(CONFIG_SPL_64BIT) && defined(CONFIG_SPL_BUILD))
      #define UINTPTR_MAX UINT64_MAX
  #else
      #define UINTPTR_MAX UINT32_MAX
--
2.39.5


REgards,
Simon

Reply via email to