diff mbox series

[v3,3/4] x86: select CONFIG_64BIT for X86_64

Message ID 20241120100157.485418-4-andrew.goodbody@linaro.org
State Superseded
Headers show
Series Select CONFIG_64BIT for sandbox64 and x86_64 | expand

Commit Message

Andrew Goodbody Nov. 20, 2024, 10:01 a.m. UTC
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 <dan.carpenter@linaro.org>
Signed-off-by: Andrew Goodbody <andrew.goodbody@linaro.org>
---

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(-)

Comments

Simon Glass Nov. 20, 2024, 1:46 p.m. UTC | #1
Hi Andrew,

On Wed, 20 Nov 2024 at 03:02, Andrew Goodbody
<andrew.goodbody@linaro.org> 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 <dan.carpenter@linaro.org>
> Signed-off-by: Andrew Goodbody <andrew.goodbody@linaro.org>
> ---
>
> 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

> +
>  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?

> 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
Andrew Goodbody Nov. 20, 2024, 6:29 p.m. UTC | #2
On 20/11/2024 13:46, Simon Glass wrote:
> Hi Andrew,
> 
> On Wed, 20 Nov 2024 at 03:02, Andrew Goodbody
> <andrew.goodbody@linaro.org> 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 <dan.carpenter@linaro.org>
>> Signed-off-by: Andrew Goodbody <andrew.goodbody@linaro.org>
>> ---
>>
>> 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
diff mbox series

Patch

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
+
 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)) |
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