[PATCH v3 3/4] x86: select CONFIG_64BIT for X86_64
Andrew Goodbody
andrew.goodbody at linaro.org
Wed Nov 20 19:29:17 CET 2024
On 20/11/2024 13:46, Simon Glass wrote:
> Hi Andrew,
>
> On Wed, 20 Nov 2024 at 03:02, Andrew Goodbody
> <andrew.goodbody at 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 at linaro.org>
>> Signed-off-by: Andrew Goodbody <andrew.goodbody at 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
More information about the U-Boot
mailing list