[U-Boot] [RFC PATCH] bitops: Fix GENMASK definition for Sandbox
Vignesh R
vigneshr at ti.com
Wed Jan 9 09:21:37 UTC 2019
On 17/12/18 7:02 PM, Vignesh R wrote:
> In arch/sandbox/include/asm/types.h we have
> Therefore for 32 bit Sandbox build BITS_PER_LONG turns out to be 32 as
> CONFIG_PHYS64 is not set
>
> This messes up the current logic of GENMASK macro due to mismatch b/w
> size of unsigned long (64 bit) and that of BITS_PER_LONG.
> Fix this by using CONFIG_SANDBOX_BITS_PER_LONG which is set to 64/32
> based on the host machine on which its being compiled.
>
> Without this patch:
> GENMASK(14,0) => 0x7fffffffffff
> After this patch:
> GENMASK(14,0) => 0x7fff
>
> Signed-off-by: Vignesh R <vigneshr at ti.com>
> ---
>
Gentle ping.. Simon, this patch is required of upcoming SPI flash layer
changes. Any feedback on this patch?
Regards
Vignesh
> I marked it as RFC because, I am not really sure if I am running Sandbox
> tests properly.
> My host machine is x86_64 (Ubuntu 18.04). Running below command[1] with
> some of my yet to be upstreamed patches that use GENMASK macro shows this issue.
>
> [1]:
> $ make check
>
>
> include/linux/bitops.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/include/linux/bitops.h b/include/linux/bitops.h
> index a47f6d17bb5f..259df43fb00f 100644
> --- a/include/linux/bitops.h
> +++ b/include/linux/bitops.h
> @@ -21,8 +21,13 @@
> * position @h. For example
> * GENMASK_ULL(39, 21) gives us the 64bit vector 0x000000ffffe00000.
> */
> +#ifdef CONFIG_SANDBOX
> +#define GENMASK(h, l) \
> + (((~0UL) << (l)) & (~0UL >> (CONFIG_SANDBOX_BITS_PER_LONG - 1 - (h))))
> +#else
> #define GENMASK(h, l) \
> (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
> +#endif
>
> #define GENMASK_ULL(h, l) \
> (((~0ULL) << (l)) & (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))
>
More information about the U-Boot
mailing list