From e47ac1fd634a3934d7d3ac446190b2f4bd8a640f Mon Sep 17 00:00:00 2001 From: Antonio Nino Diaz Date: Thu, 14 Sep 2017 15:57:44 +0100 Subject: Fix type of `unsigned long` constants The type `unsigned long` is 32 bit wide in AArch32, but 64 bit wide in AArch64. This is inconsistent and that's why we avoid using it as per the Coding Guidelines. This patch changes all `UL` occurrences to `U` or `ULL` depending on the context so that the size of the constant is clear. This problem affected the macro `BIT(nr)`. As long as this macro is used to fill fields of registers, that's not a problem, since all registers are 32 bit wide in AArch32 and 64 bit wide in AArch64. However, if the macro is used to fill the fields of a 64-bit integer, it won't be able to set the upper 32 bits in AArch32. By changing the type of this macro to `unsigned long long` the behaviour is always the same regardless of the architecture, as this type is 64-bit wide in both cases. Some Tegra platform files have been modified by this patch. Change-Id: I918264c03e7d691a931f0d1018df25a2796cc221 Signed-off-by: Antonio Nino Diaz --- include/lib/utils_def.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/lib/utils_def.h') diff --git a/include/lib/utils_def.h b/include/lib/utils_def.h index 26ac4409..b397e302 100644 --- a/include/lib/utils_def.h +++ b/include/lib/utils_def.h @@ -16,7 +16,7 @@ #define SIZE_FROM_LOG2_WORDS(n) (4 << (n)) -#define BIT(nr) (1UL << (nr)) +#define BIT(nr) (1ULL << (nr)) #define MIN(x, y) __extension__ ({ \ __typeof__(x) _x = (x); \ -- cgit v1.2.3