From 9ff8f6f818d4e5a8aa0fe21cbfaba9ccd865bc7b Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Mon, 23 Feb 2015 14:31:09 -0800 Subject: Unify byte order macros and clrsetbits This patch removes quite a bit of code duplication between cpu_to_le32() and clrsetbits_le32() style macros on the different architectures. This also syncs those macros back up to the new write32(a, v) style IO accessor macros that are now used on ARM and ARM64. CQ-DEPEND=CL:254862 BRANCH=none BUG=chromium:444723 TEST=Compiled Cosmos, Daisy, Blaze, Falco, Pinky, Pit, Rambi, Ryu, Storm and Urara. Booted on Jerry. Tried to compare binary images... unfortunately something about the new macro notation makes the compiler evaluate it more efficiently (not recalculating the address between the read and the write), so this was of limited value. Change-Id: If8ab62912c952d68a67a0f71e82b038732cd1317 Signed-off-by: Patrick Georgi Original-Commit-Id: fd43bf446581bfb84bec4f2ebb56b5de95971c3b Original-Change-Id: I7d301b5bb5ac0db7f5ff39e3adc2b28a1f402a72 Original-Signed-off-by: Julius Werner Original-Reviewed-on: https://chromium-review.googlesource.com/254866 Original-Reviewed-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/9838 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- src/arch/arm/include/armv7/arch/arch_io.h | 68 ------------------------------ src/arch/arm/include/armv7/arch/io.h | 69 +++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 68 deletions(-) delete mode 100644 src/arch/arm/include/armv7/arch/arch_io.h create mode 100644 src/arch/arm/include/armv7/arch/io.h (limited to 'src/arch/arm/include/armv7') diff --git a/src/arch/arm/include/armv7/arch/arch_io.h b/src/arch/arm/include/armv7/arch/arch_io.h deleted file mode 100644 index 53eafc6967..0000000000 --- a/src/arch/arm/include/armv7/arch/arch_io.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Originally imported from linux/include/asm-arm/io.h. This file has changed - * substantially since then. - * - * Copyright 2013 Google Inc. - * Copyright (C) 1996-2000 Russell King - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Modifications: - * 08-Apr-2013 G Replaced several macros with inlines for type safety. - * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both - * constant addresses and variable addresses. - * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture - * specific IO header files. - * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. - * 04-Apr-1999 PJB Added check_signature. - * 12-Dec-1999 RMK More cleanups - * 18-Jun-2000 RMK Removed virt_to_* and friends definitions - */ -#ifndef __ASM_ARM_ARCH_IO_H -#define __ASM_ARM_ARCH_IO_H - -#include /* for dmb() */ -#include - -static inline uint8_t read8(const void *addr) -{ - dmb(); - return *(volatile uint8_t *)addr; -} - -static inline uint16_t read16(const void *addr) -{ - dmb(); - return *(volatile uint16_t *)addr; -} - -static inline uint32_t read32(const void *addr) -{ - dmb(); - return *(volatile uint32_t *)addr; -} - -static inline void write8(void *addr, uint8_t val) -{ - dmb(); - *(volatile uint8_t *)addr = val; - dmb(); -} - -static inline void write16(void *addr, uint16_t val) -{ - dmb(); - *(volatile uint16_t *)addr = val; - dmb(); -} - -static inline void write32(void *addr, uint32_t val) -{ - dmb(); - *(volatile uint32_t *)addr = val; - dmb(); -} - -#endif /* __ASM_ARM_ARCH_IO_H */ diff --git a/src/arch/arm/include/armv7/arch/io.h b/src/arch/arm/include/armv7/arch/io.h new file mode 100644 index 0000000000..9d060032e9 --- /dev/null +++ b/src/arch/arm/include/armv7/arch/io.h @@ -0,0 +1,69 @@ +/* + * Originally imported from linux/include/asm-arm/io.h. This file has changed + * substantially since then. + * + * Copyright 2013 Google Inc. + * Copyright (C) 1996-2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Modifications: + * 08-Apr-2013 G Replaced several macros with inlines for type safety. + * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both + * constant addresses and variable addresses. + * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture + * specific IO header files. + * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. + * 04-Apr-1999 PJB Added check_signature. + * 12-Dec-1999 RMK More cleanups + * 18-Jun-2000 RMK Removed virt_to_* and friends definitions + */ +#ifndef __ARCH_IO_H +#define __ARCH_IO_H + +#include /* for dmb() */ +#include +#include + +static inline uint8_t read8(const void *addr) +{ + dmb(); + return *(volatile uint8_t *)addr; +} + +static inline uint16_t read16(const void *addr) +{ + dmb(); + return *(volatile uint16_t *)addr; +} + +static inline uint32_t read32(const void *addr) +{ + dmb(); + return *(volatile uint32_t *)addr; +} + +static inline void write8(void *addr, uint8_t val) +{ + dmb(); + *(volatile uint8_t *)addr = val; + dmb(); +} + +static inline void write16(void *addr, uint16_t val) +{ + dmb(); + *(volatile uint16_t *)addr = val; + dmb(); +} + +static inline void write32(void *addr, uint32_t val) +{ + dmb(); + *(volatile uint32_t *)addr = val; + dmb(); +} + +#endif /* __ARCH_IO_H */ -- cgit v1.2.3