[coreboot-gerrit] New patch to review for coreboot: 4afe3af libpayload: sync ARMv7 arch/io.h with coreboot

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Tue Dec 3 21:08:40 CET 2013


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4316

-gerrit

commit 4afe3af4a1e099fe98623363c9054ce3f6a11cd1
Author: Stefan Reinauer <reinauer at chromium.org>
Date:   Wed Jun 19 12:39:52 2013 -0700

    libpayload: sync ARMv7 arch/io.h with coreboot
    
    On ARMv7 we need to carefully add memory barriers to
    all memory read and write operations. This change
    brings libpayload in sync with what coreboot is doing.
    
    Signed-off-by: Stefan Reinauer <reinauer at google.com>
    
    Change-Id: Ie9c30b0f0d30531c5f9d99c2729246a86b8cec26
    Reviewed-on: https://gerrit.chromium.org/gerrit/59294
    Reviewed-by: Gabe Black <gabeblack at chromium.org>
    Tested-by: Stefan Reinauer <reinauer at chromium.org>
    Commit-Queue: Stefan Reinauer <reinauer at chromium.org>
---
 payloads/libpayload/include/armv7/arch/io.h | 46 +++++++++++++++++++++++++----
 1 file changed, 40 insertions(+), 6 deletions(-)

diff --git a/payloads/libpayload/include/armv7/arch/io.h b/payloads/libpayload/include/armv7/arch/io.h
index 807dc1d..8948e13 100644
--- a/payloads/libpayload/include/armv7/arch/io.h
+++ b/payloads/libpayload/include/armv7/arch/io.h
@@ -31,12 +31,46 @@
 #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 int *) (_a))
+#include <stdint.h>
+#include <arch/cache.h>
 
-#define writeb(_v, _a) (*(volatile unsigned char *) (_a) = (_v))
-#define writew(_v, _a) (*(volatile unsigned short *) (_a) = (_v))
-#define writel(_v, _a) (*(volatile unsigned int *) (_a) = (_v))
+static inline uint8_t readb(volatile void *_a)
+{
+	dmb();
+	return *(volatile uint8_t *)_a;
+}
+
+static inline uint16_t readw(volatile void *_a)
+{
+	dmb();
+	return *(volatile uint16_t *)_a;
+}
+
+static inline uint32_t readl(volatile void *_a)
+{
+	dmb();
+	return *(volatile uint32_t *)_a;
+}
+
+static inline void writeb(uint8_t _v, volatile void *_a)
+{
+	dmb();
+	*(volatile uint8_t *)_a = _v;
+	dmb();
+}
+
+static inline void writew(uint16_t _v, volatile void *_a)
+{
+	dmb();
+	*(volatile uint16_t *)_a = _v;
+	dmb();
+}
+
+static inline void writel(uint32_t _v, volatile void *_a)
+{
+	dmb();
+	*(volatile uint32_t *)_a = _v;
+	dmb();
+}
 
 #endif



More information about the coreboot-gerrit mailing list