Fix types of arch.h definitions
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Thu, 12 Jul 2018 12:23:59 +0000 (13:23 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Wed, 18 Jul 2018 10:09:54 +0000 (11:09 +0100)
commit30399885f5ab98b48c3053bf052642bc2cb1c243
tree8d8b33bcebe7fc8c51b72a4d537819ef622510d0
parent0107aa49b4afeab09a0ee167eed8de6878b891ad
Fix types of arch.h definitions

Define the values as unsigned int or unsigned long long based on the
actual size of the register. This prevents subtle issues caused by
having a type that is too small. For example:

    #define OPTION_ENABLE 0x3
    #define OPTION_SHIFT  32

    uint64_t mask = OPTION_ENABLE << OPTION_SHIFT;

Because OPTION_ENABLE fits in an int, the value is considered an int.
This means that, after shifting it 32 places to the left, the final
result is 0. The correct way to define the values is:

    #define OPTION_ENABLE ULL(0x3)
    #define OPTION_SHIFT  U(32)

In this case, the compiler is forced to use a 64 bit value from the
start, so shifting it 32 places to the left results in the expected
value.

Change-Id: Ieaf2ffc2d8caa48c622db011f2aef549e713e019
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
include/lib/aarch32/arch.h
include/lib/aarch64/arch.h
plat/mediatek/mt6795/power_tracer.c
plat/mediatek/mt8173/power_tracer.c