summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/libpayload/include/arm/arch/io.h24
-rw-r--r--payloads/libpayload/include/arm64/arch/io.h12
-rw-r--r--payloads/libpayload/include/endian.h17
-rw-r--r--payloads/libpayload/include/libpayload.h1
-rw-r--r--payloads/libpayload/include/x86/arch/io.h6
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))