diff options
-rw-r--r-- | payloads/libpayload/include/arm/arch/io.h | 24 | ||||
-rw-r--r-- | payloads/libpayload/include/arm64/arch/io.h | 12 | ||||
-rw-r--r-- | payloads/libpayload/include/endian.h | 17 | ||||
-rw-r--r-- | payloads/libpayload/include/libpayload.h | 1 | ||||
-rw-r--r-- | payloads/libpayload/include/x86/arch/io.h | 6 |
5 files changed, 33 insertions, 27 deletions
diff --git a/payloads/libpayload/include/arm/arch/io.h b/payloads/libpayload/include/arm/arch/io.h index 5cb66dcd69..4b0a687c7b 100644 --- a/payloads/libpayload/include/arm/arch/io.h +++ b/payloads/libpayload/include/arm/arch/io.h @@ -34,22 +34,22 @@ #include <stdint.h> #include <arch/cache.h> -static inline uint8_t readb(volatile void *_a) +static inline uint8_t readb(volatile const void *_a) { dmb(); - return *(volatile uint8_t *)_a; + return *(volatile const uint8_t *)_a; } -static inline uint16_t readw(volatile void *_a) +static inline uint16_t readw(volatile const void *_a) { dmb(); - return *(volatile uint16_t *)_a; + return *(volatile const uint16_t *)_a; } -static inline uint32_t readl(volatile void *_a) +static inline uint32_t readl(volatile const void *_a) { dmb(); - return *(volatile uint32_t *)_a; + return *(volatile const uint32_t *)_a; } static inline void writeb(uint8_t _v, volatile void *_a) @@ -73,17 +73,5 @@ static inline void writel(uint32_t _v, volatile void *_a) dmb(); } -/* - * Handy bit manipulation macros, BE version will have to be added when/if - * needed. - */ - -#ifdef CONFIG_LP_LITTLE_ENDIAN -#define clrsetbits_le32(addr, clear, set) writel((readl(addr) & ~(clear)) |\ - (set), (addr)) -#define setbits_le32(addr, set) writel(readl(addr) | (set), (addr)) -#define clrbits_le32(addr, clear) writel(readl(addr) & ~(clear), (addr)) -#endif - #endif diff --git a/payloads/libpayload/include/arm64/arch/io.h b/payloads/libpayload/include/arm64/arch/io.h index 8948e133ef..df3a0d51ae 100644 --- a/payloads/libpayload/include/arm64/arch/io.h +++ b/payloads/libpayload/include/arm64/arch/io.h @@ -34,22 +34,22 @@ #include <stdint.h> #include <arch/cache.h> -static inline uint8_t readb(volatile void *_a) +static inline uint8_t readb(volatile const void *_a) { dmb(); - return *(volatile uint8_t *)_a; + return *(volatile const uint8_t *)_a; } -static inline uint16_t readw(volatile void *_a) +static inline uint16_t readw(volatile const void *_a) { dmb(); - return *(volatile uint16_t *)_a; + return *(volatile const uint16_t *)_a; } -static inline uint32_t readl(volatile void *_a) +static inline uint32_t readl(volatile const void *_a) { dmb(); - return *(volatile uint32_t *)_a; + return *(volatile const uint32_t *)_a; } static inline void writeb(uint8_t _v, volatile void *_a) diff --git a/payloads/libpayload/include/endian.h b/payloads/libpayload/include/endian.h index dd4d9fa2ca..3b79393492 100644 --- a/payloads/libpayload/include/endian.h +++ b/payloads/libpayload/include/endian.h @@ -30,6 +30,7 @@ #ifndef _ENDIAN_H_ #define _ENDIAN_H_ +#include <arch/io.h> #include <arch/types.h> #include <libpayload-config.h> @@ -178,4 +179,20 @@ static inline void le32enc(void *pp, uint32_t u) #define letohl(in) le32toh(in) #define letohll(in) le64toh(in) +/* Handy bit manipulation macros */ + +#define clrsetbits_le32(addr, clear, set) writel(htole32((le32toh(readl(addr)) \ + & ~(clear)) | (set)), (addr)) +#define setbits_le32(addr, set) writel(htole32(le32toh(readl(addr)) \ + | (set)), (addr)) +#define clrbits_le32(addr, clear) writel(htole32(le32toh(readl(addr)) \ + & ~(clear)), (addr)) + +#define clrsetbits_be32(addr, clear, set) writel(htobe32((be32toh(readl(addr)) \ + & ~(clear)) | (set)), (addr)) +#define setbits_be32(addr, set) writel(htobe32(be32toh(readl(addr)) \ + | (set)), (addr)) +#define clrbits_be32(addr, clear) writel(htobe32(be32toh(readl(addr)) \ + & ~(clear)), (addr)) + #endif /* _ENDIAN_H_ */ diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h index 21b9da7a03..5bdd55dfad 100644 --- a/payloads/libpayload/include/libpayload.h +++ b/payloads/libpayload/include/libpayload.h @@ -46,6 +46,7 @@ #include <libpayload-config.h> #include <ctype.h> #include <die.h> +#include <endian.h> #include <ipchksum.h> #include <stddef.h> #include <stdio.h> diff --git a/payloads/libpayload/include/x86/arch/io.h b/payloads/libpayload/include/x86/arch/io.h index bcfd30771e..0cb610fcc3 100644 --- a/payloads/libpayload/include/x86/arch/io.h +++ b/payloads/libpayload/include/x86/arch/io.h @@ -31,9 +31,9 @@ #ifndef _ARCH_IO_H #define _ARCH_IO_H -#define readb(_a) (*(volatile unsigned char *) (_a)) -#define readw(_a) (*(volatile unsigned short *) (_a)) -#define readl(_a) (*(volatile unsigned long *) (_a)) +#define readb(_a) (*(volatile const unsigned char *) (_a)) +#define readw(_a) (*(volatile const unsigned short *) (_a)) +#define readl(_a) (*(volatile const unsigned long *) (_a)) #define writeb(_v, _a) (*(volatile unsigned char *) (_a) = (_v)) #define writew(_v, _a) (*(volatile unsigned short *) (_a) = (_v)) |