summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/arm/include/arch/byteorder.h21
-rw-r--r--src/arch/arm/include/arch/io.h96
-rw-r--r--src/arch/arm/include/armv4/arch/io.h (renamed from src/arch/arm/include/armv4/arch/arch_io.h)7
-rw-r--r--src/arch/arm/include/armv7/arch/io.h (renamed from src/arch/arm/include/armv7/arch/arch_io.h)7
-rw-r--r--src/arch/arm64/include/arch/byteorder.h21
-rw-r--r--src/arch/arm64/include/arch/io.h94
-rw-r--r--src/arch/arm64/include/armv8/arch/io.h (renamed from src/arch/arm64/include/armv8/arch/arch_io.h)7
-rw-r--r--src/arch/mips/include/arch/byteorder.h21
-rw-r--r--src/arch/mips/include/arch/io.h57
-rw-r--r--src/arch/riscv/include/arch/byteorder.h21
-rw-r--r--src/arch/x86/boot/smbios.c2
-rw-r--r--src/arch/x86/include/arch/byteorder.h21
-rw-r--r--src/arch/x86/include/arch/cbfs.h2
-rw-r--r--src/arch/x86/include/arch/io.h1
-rw-r--r--src/device/oprom/yabel/device.h2
-rw-r--r--src/device/oprom/yabel/vbe.c2
-rw-r--r--src/drivers/i2c/tpm/tis.c2
-rw-r--r--src/drivers/i2c/tpm/tpm.c2
-rw-r--r--src/drivers/pc80/tpm/tpm.c1
-rw-r--r--src/drivers/usb/ehci_debug.c1
-rw-r--r--src/include/device/pci_rom.h2
-rw-r--r--src/include/endian.h67
-rw-r--r--src/lib/edid.c1
-rw-r--r--src/lib/selfboot.c2
-rw-r--r--src/mainboard/amd/inagua/broadcom.c2
-rw-r--r--src/mainboard/google/butterfly/romstage.c1
-rw-r--r--src/mainboard/google/link/romstage.c1
-rw-r--r--src/mainboard/google/parrot/romstage.c1
-rw-r--r--src/mainboard/google/samus/spd/spd.c2
-rw-r--r--src/mainboard/google/stout/romstage.c1
-rw-r--r--src/mainboard/samsung/lumpy/romstage.c1
-rw-r--r--src/mainboard/samsung/stumpy/romstage.c1
32 files changed, 92 insertions, 378 deletions
diff --git a/src/arch/arm/include/arch/byteorder.h b/src/arch/arm/include/arch/byteorder.h
index 8dc069f486..3478bdb3c2 100644
--- a/src/arch/arm/include/arch/byteorder.h
+++ b/src/arch/arm/include/arch/byteorder.h
@@ -3,25 +3,4 @@
#define __LITTLE_ENDIAN 1234
-#include <stdint.h>
-#include <swab.h>
-
-#define cpu_to_le64(x) ((uint64_t)(x))
-#define le64_to_cpu(x) ((uint64_t)(x))
-#define cpu_to_le32(x) ((uint32_t)(x))
-#define le32_to_cpu(x) ((uint32_t)(x))
-#define cpu_to_le16(x) ((uint16_t)(x))
-#define le16_to_cpu(x) ((uint16_t)(x))
-#define cpu_to_be64(x) swab64(x)
-#define be64_to_cpu(x) swab64(x)
-#define cpu_to_be32(x) swab32((x))
-#define be32_to_cpu(x) swab32((x))
-#define cpu_to_be16(x) swab16((x))
-#define be16_to_cpu(x) swab16((x))
-
-#define ntohll(x) be64_to_cpu(x)
-#define htonll(x) cpu_to_be64(x)
-#define ntohl(x) be32_to_cpu(x)
-#define htonl(x) cpu_to_be32(x)
-
#endif /* _BYTEORDER_H */
diff --git a/src/arch/arm/include/arch/io.h b/src/arch/arm/include/arch/io.h
deleted file mode 100644
index 51d96b9255..0000000000
--- a/src/arch/arm/include/arch/io.h
+++ /dev/null
@@ -1,96 +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_IO_H
-#define __ASM_ARM_IO_H
-
-#include <arch/byteorder.h>
-#include <arch/arch_io.h>
-#include <stdint.h>
-
-/*
- * FIXME: These are to avoid breaking existing ARM code. We should eventually
- * re-factor all code to specify the data length intended.
- */
-#define readb(a) read8(a)
-#define writeb(v,a) write8(a,v)
-#define readw(a) read16(a)
-#define writew(v,a) write16(a,v)
-#define readl(a) read32(a)
-#define writel(v,a) write32(a,v)
-
-/*
- * Clear and set bits in one shot. These macros can be used to clear and
- * set multiple bits in a register using a single call. These macros can
- * also be used to set a multiple-bit bit pattern using a mask, by
- * specifying the mask in the 'clear' parameter and the new bit pattern
- * in the 'set' parameter.
- */
-
-#define out_arch(type,endian,a,v) write##type(cpu_to_##endian(v),a)
-#define in_arch(type,endian,a) endian##_to_cpu(read##type(a))
-
-#define out_le32(a,v) out_arch(l,le32,a,v)
-#define out_le16(a,v) out_arch(w,le16,a,v)
-
-#define in_le32(a) in_arch(l,le32,a)
-#define in_le16(a) in_arch(w,le16,a)
-
-#define out_be32(a,v) out_arch(l,be32,a,v)
-#define out_be16(a,v) out_arch(w,be16,a,v)
-
-#define in_be32(a) in_arch(l,be32,a)
-#define in_be16(a) in_arch(w,be16,a)
-
-#define out_8(a,v) writeb(v,a)
-#define in_8(a) readb(a)
-
-#define clrbits(type, addr, clear) \
- out_##type((addr), in_##type(addr) & ~(clear))
-
-#define setbits(type, addr, set) \
- out_##type((addr), in_##type(addr) | (set))
-
-#define clrsetbits(type, addr, clear, set) \
- out_##type((addr), (in_##type(addr) & ~(clear)) | (set))
-
-#define clrbits_be32(addr, clear) clrbits(be32, addr, clear)
-#define setbits_be32(addr, set) setbits(be32, addr, set)
-#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set)
-
-#define clrbits_le32(addr, clear) clrbits(le32, addr, clear)
-#define setbits_le32(addr, set) setbits(le32, addr, set)
-#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
-
-#define clrbits_be16(addr, clear) clrbits(be16, addr, clear)
-#define setbits_be16(addr, set) setbits(be16, addr, set)
-#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
-
-#define clrbits_le16(addr, clear) clrbits(le16, addr, clear)
-#define setbits_le16(addr, set) setbits(le16, addr, set)
-#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set)
-
-#define clrbits_8(addr, clear) clrbits(8, addr, clear)
-#define setbits_8(addr, set) setbits(8, addr, set)
-#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
-
-#endif /* __ASM_ARM_IO_H */
diff --git a/src/arch/arm/include/armv4/arch/arch_io.h b/src/arch/arm/include/armv4/arch/io.h
index cf5a9e115e..12af03827b 100644
--- a/src/arch/arm/include/armv4/arch/arch_io.h
+++ b/src/arch/arm/include/armv4/arch/io.h
@@ -20,9 +20,10 @@
* 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
+#ifndef __ARCH_IO_H
+#define __ARCH_IO_H
+#include <endian.h>
#include <stdint.h>
static inline uint8_t read8(const void *addr)
@@ -55,4 +56,4 @@ static inline void write32(void *addr, uint32_t val)
*(volatile uint32_t *)addr = val;
}
-#endif /* __ASM_ARM_ARCH_IO_H */
+#endif /* __ARCH_IO_H */
diff --git a/src/arch/arm/include/armv7/arch/arch_io.h b/src/arch/arm/include/armv7/arch/io.h
index 53eafc6967..9d060032e9 100644
--- a/src/arch/arm/include/armv7/arch/arch_io.h
+++ b/src/arch/arm/include/armv7/arch/io.h
@@ -20,10 +20,11 @@
* 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
+#ifndef __ARCH_IO_H
+#define __ARCH_IO_H
#include <arch/cache.h> /* for dmb() */
+#include <endian.h>
#include <stdint.h>
static inline uint8_t read8(const void *addr)
@@ -65,4 +66,4 @@ static inline void write32(void *addr, uint32_t val)
dmb();
}
-#endif /* __ASM_ARM_ARCH_IO_H */
+#endif /* __ARCH_IO_H */
diff --git a/src/arch/arm64/include/arch/byteorder.h b/src/arch/arm64/include/arch/byteorder.h
index 8dc069f486..3478bdb3c2 100644
--- a/src/arch/arm64/include/arch/byteorder.h
+++ b/src/arch/arm64/include/arch/byteorder.h
@@ -3,25 +3,4 @@
#define __LITTLE_ENDIAN 1234
-#include <stdint.h>
-#include <swab.h>
-
-#define cpu_to_le64(x) ((uint64_t)(x))
-#define le64_to_cpu(x) ((uint64_t)(x))
-#define cpu_to_le32(x) ((uint32_t)(x))
-#define le32_to_cpu(x) ((uint32_t)(x))
-#define cpu_to_le16(x) ((uint16_t)(x))
-#define le16_to_cpu(x) ((uint16_t)(x))
-#define cpu_to_be64(x) swab64(x)
-#define be64_to_cpu(x) swab64(x)
-#define cpu_to_be32(x) swab32((x))
-#define be32_to_cpu(x) swab32((x))
-#define cpu_to_be16(x) swab16((x))
-#define be16_to_cpu(x) swab16((x))
-
-#define ntohll(x) be64_to_cpu(x)
-#define htonll(x) cpu_to_be64(x)
-#define ntohl(x) be32_to_cpu(x)
-#define htonl(x) cpu_to_be32(x)
-
#endif /* _BYTEORDER_H */
diff --git a/src/arch/arm64/include/arch/io.h b/src/arch/arm64/include/arch/io.h
deleted file mode 100644
index 9ec13dcf8b..0000000000
--- a/src/arch/arm64/include/arch/io.h
+++ /dev/null
@@ -1,94 +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_ARM64_IO_H
-#define __ASM_ARM64_IO_H
-
-#include <arch/byteorder.h>
-#include <arch/arch_io.h>
-#include <stdint.h>
-
-/*
- * FIXME: These are to avoid breaking existing ARM code. We should eventually
- * re-factor all code to specify the data length intended.
- */
-#define readb(a) read8(a)
-#define writeb(v,a) write8(a,v)
-#define readl(a) read32(a)
-#define writel(v,a) write32(a,v)
-
-/*
- * Clear and set bits in one shot. These macros can be used to clear and
- * set multiple bits in a register using a single call. These macros can
- * also be used to set a multiple-bit bit pattern using a mask, by
- * specifying the mask in the 'clear' parameter and the new bit pattern
- * in the 'set' parameter.
- */
-
-#define out_arch(type,endian,a,v) write##type(cpu_to_##endian(v),a)
-#define in_arch(type,endian,a) endian##_to_cpu(read##type(a))
-
-#define out_le32(a,v) out_arch(l,le32,a,v)
-#define out_le16(a,v) out_arch(w,le16,a,v)
-
-#define in_le32(a) in_arch(l,le32,a)
-#define in_le16(a) in_arch(w,le16,a)
-
-#define out_be32(a,v) out_arch(l,be32,a,v)
-#define out_be16(a,v) out_arch(w,be16,a,v)
-
-#define in_be32(a) in_arch(l,be32,a)
-#define in_be16(a) in_arch(w,be16,a)
-
-#define out_8(a,v) writeb(v,a)
-#define in_8(a) readb(a)
-
-#define clrbits(type, addr, clear) \
- out_##type((addr), in_##type(addr) & ~(clear))
-
-#define setbits(type, addr, set) \
- out_##type((addr), in_##type(addr) | (set))
-
-#define clrsetbits(type, addr, clear, set) \
- out_##type((addr), (in_##type(addr) & ~(clear)) | (set))
-
-#define clrbits_be32(addr, clear) clrbits(be32, addr, clear)
-#define setbits_be32(addr, set) setbits(be32, addr, set)
-#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set)
-
-#define clrbits_le32(addr, clear) clrbits(le32, addr, clear)
-#define setbits_le32(addr, set) setbits(le32, addr, set)
-#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
-
-#define clrbits_be16(addr, clear) clrbits(be16, addr, clear)
-#define setbits_be16(addr, set) setbits(be16, addr, set)
-#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
-
-#define clrbits_le16(addr, clear) clrbits(le16, addr, clear)
-#define setbits_le16(addr, set) setbits(le16, addr, set)
-#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set)
-
-#define clrbits_8(addr, clear) clrbits(8, addr, clear)
-#define setbits_8(addr, set) setbits(8, addr, set)
-#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
-
-#endif /* __ASM_ARM64_IO_H */
diff --git a/src/arch/arm64/include/armv8/arch/arch_io.h b/src/arch/arm64/include/armv8/arch/io.h
index 96a15d72a2..bac64c3d18 100644
--- a/src/arch/arm64/include/armv8/arch/arch_io.h
+++ b/src/arch/arm64/include/armv8/arch/io.h
@@ -20,9 +20,10 @@
* 12-Dec-1999 RMK More cleanups
* 18-Jun-2000 RMK Removed virt_to_* and friends definitions
*/
-#ifndef __ASM_ARM64_ARCH_IO_H
-#define __ASM_ARM64_ARCH_IO_H
+#ifndef __ARCH_IO_H
+#define __ARCH_IO_H
+#include <endian.h>
#include <stdint.h>
#include <arch/barrier.h>
#include <arch/lib_helpers.h>
@@ -66,4 +67,4 @@ static inline void write32(void *addr, uint32_t val)
dmb();
}
-#endif /* __ASM_ARM64_ARCH_IO_H */
+#endif /* __ARCH_IO_H */
diff --git a/src/arch/mips/include/arch/byteorder.h b/src/arch/mips/include/arch/byteorder.h
index 90c375e691..a70ce82bac 100644
--- a/src/arch/mips/include/arch/byteorder.h
+++ b/src/arch/mips/include/arch/byteorder.h
@@ -20,29 +20,10 @@
#ifndef __MIPS_ARCH_BYTEORDER_H
#define __MIPS_ARCH_BYTEORDER_H
-#include <stdint.h>
-#include <swab.h>
-
#ifndef __ORDER_LITTLE_ENDIAN__
#errror "What endian are you!?"
#endif
-#define cpu_to_le64(x) ((uint64_t)(x))
-#define le64_to_cpu(x) ((uint64_t)(x))
-#define cpu_to_le32(x) ((uint32_t)(x))
-#define le32_to_cpu(x) ((uint32_t)(x))
-#define cpu_to_le16(x) ((uint16_t)(x))
-#define le16_to_cpu(x) ((uint16_t)(x))
-#define cpu_to_be64(x) swab64(x)
-#define be64_to_cpu(x) swab64(x)
-#define cpu_to_be32(x) swab32((x))
-#define be32_to_cpu(x) swab32((x))
-#define cpu_to_be16(x) swab16((x))
-#define be16_to_cpu(x) swab16((x))
-
-#define ntohll(x) be64_to_cpu(x)
-#define htonll(x) cpu_to_be64(x)
-#define ntohl(x) be32_to_cpu(x)
-#define htonl(x) cpu_to_be32(x)
+#define __LITTLE_ENDIAN 1234
#endif /* __MIPS_ARCH_BYTEORDER_H */
diff --git a/src/arch/mips/include/arch/io.h b/src/arch/mips/include/arch/io.h
index d034b09dc5..1d3d6c4504 100644
--- a/src/arch/mips/include/arch/io.h
+++ b/src/arch/mips/include/arch/io.h
@@ -26,7 +26,7 @@
#include <types.h>
#include <arch/cache.h>
-#include <arch/byteorder.h>
+#include <endian.h>
static inline uint8_t read8(unsigned long addr)
{
@@ -67,59 +67,4 @@ static inline void write32(unsigned long addr, uint32_t val)
asm("sync");
}
-/*
- * Clear and set bits in one shot. These macros can be used to clear and
- * set multiple bits in a register using a single call. These macros can
- * also be used to set a multiple-bit bit pattern using a mask, by
- * specifying the mask in the 'clear' parameter and the new bit pattern
- * in the 'set' parameter.
- */
-
-#define out_arch(type, endian, a, v) write##type(cpu_to_##endian(v), a)
-#define in_arch(type, endian, a) endian##_to_cpu(read##type(a))
-
-#define out_le32(a, v) out_arch(l, le32, a, v)
-#define out_le16(a, v) out_arch(w, le16, a, v)
-
-#define in_le32(a) in_arch(l, le32, a)
-#define in_le16(a) in_arch(w, le16, a)
-
-#define out_be32(a, v) out_arch(l, be32, a, v)
-#define out_be16(a, v) out_arch(w, be16, a, v)
-
-#define in_be32(a) in_arch(l, be32, a)
-#define in_be16(a) in_arch(w, be16, a)
-
-#define out_8(a, v) writeb(v, a)
-#define in_8(a) readb(a)
-
-#define clrbits(type, addr, clear) \
- out_##type((addr), in_##type(addr) & ~(clear))
-
-#define setbits(type, addr, set) \
- out_##type((addr), in_##type(addr) | (set))
-
-#define clrsetbits(type, addr, clear, set) \
- out_##type((addr), (in_##type(addr) & ~(clear)) | (set))
-
-#define clrbits_be32(addr, clear) clrbits(be32, addr, clear)
-#define setbits_be32(addr, set) setbits(be32, addr, set)
-#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set)
-
-#define clrbits_le32(addr, clear) clrbits(le32, addr, clear)
-#define setbits_le32(addr, set) setbits(le32, addr, set)
-#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
-
-#define clrbits_be16(addr, clear) clrbits(be16, addr, clear)
-#define setbits_be16(addr, set) setbits(be16, addr, set)
-#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
-
-#define clrbits_le16(addr, clear) clrbits(le16, addr, clear)
-#define setbits_le16(addr, set) setbits(le16, addr, set)
-#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set)
-
-#define clrbits_8(addr, clear) clrbits(8, addr, clear)
-#define setbits_8(addr, set) setbits(8, addr, set)
-#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
-
#endif /* __MIPS_ARCH_IO_H */
diff --git a/src/arch/riscv/include/arch/byteorder.h b/src/arch/riscv/include/arch/byteorder.h
index 8dc069f486..3478bdb3c2 100644
--- a/src/arch/riscv/include/arch/byteorder.h
+++ b/src/arch/riscv/include/arch/byteorder.h
@@ -3,25 +3,4 @@
#define __LITTLE_ENDIAN 1234
-#include <stdint.h>
-#include <swab.h>
-
-#define cpu_to_le64(x) ((uint64_t)(x))
-#define le64_to_cpu(x) ((uint64_t)(x))
-#define cpu_to_le32(x) ((uint32_t)(x))
-#define le32_to_cpu(x) ((uint32_t)(x))
-#define cpu_to_le16(x) ((uint16_t)(x))
-#define le16_to_cpu(x) ((uint16_t)(x))
-#define cpu_to_be64(x) swab64(x)
-#define be64_to_cpu(x) swab64(x)
-#define cpu_to_be32(x) swab32((x))
-#define be32_to_cpu(x) swab32((x))
-#define cpu_to_be16(x) swab16((x))
-#define be16_to_cpu(x) swab16((x))
-
-#define ntohll(x) be64_to_cpu(x)
-#define htonll(x) cpu_to_be64(x)
-#define ntohl(x) be32_to_cpu(x)
-#define htonl(x) cpu_to_be32(x)
-
#endif /* _BYTEORDER_H */
diff --git a/src/arch/x86/boot/smbios.c b/src/arch/x86/boot/smbios.c
index 0ba793f398..c3ac54ab89 100644
--- a/src/arch/x86/boot/smbios.c
+++ b/src/arch/x86/boot/smbios.c
@@ -28,8 +28,8 @@
#include <device/device.h>
#include <arch/cpu.h>
#include <cpu/x86/name.h>
-#include <arch/byteorder.h>
#include <elog.h>
+#include <endian.h>
#include <memory_info.h>
#include <spd.h>
#include <cbmem.h>
diff --git a/src/arch/x86/include/arch/byteorder.h b/src/arch/x86/include/arch/byteorder.h
index 8dc069f486..3478bdb3c2 100644
--- a/src/arch/x86/include/arch/byteorder.h
+++ b/src/arch/x86/include/arch/byteorder.h
@@ -3,25 +3,4 @@
#define __LITTLE_ENDIAN 1234
-#include <stdint.h>
-#include <swab.h>
-
-#define cpu_to_le64(x) ((uint64_t)(x))
-#define le64_to_cpu(x) ((uint64_t)(x))
-#define cpu_to_le32(x) ((uint32_t)(x))
-#define le32_to_cpu(x) ((uint32_t)(x))
-#define cpu_to_le16(x) ((uint16_t)(x))
-#define le16_to_cpu(x) ((uint16_t)(x))
-#define cpu_to_be64(x) swab64(x)
-#define be64_to_cpu(x) swab64(x)
-#define cpu_to_be32(x) swab32((x))
-#define be32_to_cpu(x) swab32((x))
-#define cpu_to_be16(x) swab16((x))
-#define be16_to_cpu(x) swab16((x))
-
-#define ntohll(x) be64_to_cpu(x)
-#define htonll(x) cpu_to_be64(x)
-#define ntohl(x) be32_to_cpu(x)
-#define htonl(x) cpu_to_be32(x)
-
#endif /* _BYTEORDER_H */
diff --git a/src/arch/x86/include/arch/cbfs.h b/src/arch/x86/include/arch/cbfs.h
index f2aed3b012..4a5a3c2ef0 100644
--- a/src/arch/x86/include/arch/cbfs.h
+++ b/src/arch/x86/include/arch/cbfs.h
@@ -20,8 +20,8 @@
#ifndef __INCLUDE_ARCH_CBFS__
#define __INCLUDE_ARCH_CBFS__
-#include <arch/byteorder.h>
#include <cbfs_serialized.h>
+#include <endian.h>
#define CBFS_SUBHEADER(_p) ( (void *) ((((uint8_t *) (_p)) + ntohl((_p)->offset))) )
diff --git a/src/arch/x86/include/arch/io.h b/src/arch/x86/include/arch/io.h
index 3130f64728..ce9477358a 100644
--- a/src/arch/x86/include/arch/io.h
+++ b/src/arch/x86/include/arch/io.h
@@ -1,6 +1,7 @@
#ifndef _ASM_IO_H
#define _ASM_IO_H
+#include <endian.h>
#include <stdint.h>
#include <rules.h>
diff --git a/src/device/oprom/yabel/device.h b/src/device/oprom/yabel/device.h
index 63f1d8e50e..5259125f74 100644
--- a/src/device/oprom/yabel/device.h
+++ b/src/device/oprom/yabel/device.h
@@ -15,7 +15,7 @@
#define DEVICE_LIB_H
#include <types.h>
-#include <arch/byteorder.h>
+#include <endian.h>
#include "compat/of.h"
#include "debug.h"
diff --git a/src/device/oprom/yabel/vbe.c b/src/device/oprom/yabel/vbe.c
index 6354afe92e..ab92c0ad26 100644
--- a/src/device/oprom/yabel/vbe.c
+++ b/src/device/oprom/yabel/vbe.c
@@ -17,7 +17,7 @@
#include <boot/coreboot_tables.h>
#endif
-#include <arch/byteorder.h>
+#include <endian.h>
#include "debug.h"
diff --git a/src/drivers/i2c/tpm/tis.c b/src/drivers/i2c/tpm/tis.c
index d9a7651008..47823e8953 100644
--- a/src/drivers/i2c/tpm/tis.c
+++ b/src/drivers/i2c/tpm/tis.c
@@ -25,8 +25,8 @@
#include <string.h>
#include <assert.h>
#include <delay.h>
-#include <arch/byteorder.h>
#include <device/i2c.h>
+#include <endian.h>
#include <tpm.h>
#include "tpm.h"
#include <timer.h>
diff --git a/src/drivers/i2c/tpm/tpm.c b/src/drivers/i2c/tpm/tpm.c
index 63ef29547f..830a04b04f 100644
--- a/src/drivers/i2c/tpm/tpm.c
+++ b/src/drivers/i2c/tpm/tpm.c
@@ -41,8 +41,8 @@
#include <types.h>
#include <delay.h>
#include <console/console.h>
-#include <arch/byteorder.h>
#include <device/i2c.h>
+#include <endian.h>
#include "tpm.h"
/* Address of the TPM on the I2C bus */
diff --git a/src/drivers/pc80/tpm/tpm.c b/src/drivers/pc80/tpm/tpm.c
index 22dbc41144..8006894da8 100644
--- a/src/drivers/pc80/tpm/tpm.c
+++ b/src/drivers/pc80/tpm/tpm.c
@@ -31,7 +31,6 @@
#include <string.h>
#include <delay.h>
#include <arch/io.h>
-#include <arch/byteorder.h>
#include <console/console.h>
#include <tpm.h>
#include <arch/early_variables.h>
diff --git a/src/drivers/usb/ehci_debug.c b/src/drivers/usb/ehci_debug.c
index 379a1bdebe..16f9164f60 100644
--- a/src/drivers/usb/ehci_debug.c
+++ b/src/drivers/usb/ehci_debug.c
@@ -22,7 +22,6 @@
#include <console/console.h>
#include <console/usb.h>
#include <arch/io.h>
-#include <arch/byteorder.h>
#include <arch/early_variables.h>
#include <string.h>
#include <cbmem.h>
diff --git a/src/include/device/pci_rom.h b/src/include/device/pci_rom.h
index a929206318..2fb2f7a8d5 100644
--- a/src/include/device/pci_rom.h
+++ b/src/include/device/pci_rom.h
@@ -1,6 +1,6 @@
#ifndef PCI_ROM_H
#define PCI_ROM_H
-#include <arch/byteorder.h>
+#include <endian.h>
#include <stddef.h>
#define PCI_ROM_HDR 0xAA55
diff --git a/src/include/endian.h b/src/include/endian.h
index b511a491a8..ce6d7c3c21 100644
--- a/src/include/endian.h
+++ b/src/include/endian.h
@@ -21,5 +21,72 @@
#define _ENDIAN_H_
#include <arch/byteorder.h>
+#include <stdint.h>
+#include <swab.h>
+
+#if defined(__LITTLE_ENDIAN)
+ #define cpu_to_le64(x) ((uint64_t)(x))
+ #define le64_to_cpu(x) ((uint64_t)(x))
+ #define cpu_to_le32(x) ((uint32_t)(x))
+ #define le32_to_cpu(x) ((uint32_t)(x))
+ #define cpu_to_le16(x) ((uint16_t)(x))
+ #define le16_to_cpu(x) ((uint16_t)(x))
+ #define cpu_to_be64(x) swab64(x)
+ #define be64_to_cpu(x) swab64(x)
+ #define cpu_to_be32(x) swab32(x)
+ #define be32_to_cpu(x) swab32(x)
+ #define cpu_to_be16(x) swab16(x)
+ #define be16_to_cpu(x) swab16(x)
+#elif defined(__BIG_ENDIAN)
+ #define cpu_to_le64(x) swab64(x)
+ #define le64_to_cpu(x) swab64(x)
+ #define cpu_to_le32(x) swab32(x)
+ #define le32_to_cpu(x) swab32(x)
+ #define cpu_to_le16(x) swab16(x)
+ #define le16_to_cpu(x) swab16(x)
+ #define cpu_to_be64(x) ((uint64_t)(x))
+ #define be64_to_cpu(x) ((uint64_t)(x))
+ #define cpu_to_be32(x) ((uint32_t)(x))
+ #define be32_to_cpu(x) ((uint32_t)(x))
+ #define cpu_to_be16(x) ((uint16_t)(x))
+ #define be16_to_cpu(x) ((uint16_t)(x))
+#else
+ #error "<arch/byteorder.h> must #define __LITTLE_ENDIAN or __BIG_ENDIAN"
+#endif
+
+#define ntohll(x) be64_to_cpu(x)
+#define htonll(x) cpu_to_be64(x)
+#define ntohl(x) be32_to_cpu(x)
+#define htonl(x) cpu_to_be32(x)
+
+#define __clrsetbits(endian, bits, addr, clear, set) \
+ write##bits(addr, cpu_to_##endian##bits((endian##bits##_to_cpu( \
+ read##bits(addr)) & ~((uint##bits##_t)(clear))) | (set)))
+
+#define clrbits_le64(addr, clear) __clrsetbits(le, 64, addr, clear, 0)
+#define clrbits_be64(addr, clear) __clrsetbits(be, 64, addr, clear, 0)
+#define clrbits_le32(addr, clear) __clrsetbits(le, 32, addr, clear, 0)
+#define clrbits_be32(addr, clear) __clrsetbits(be, 32, addr, clear, 0)
+#define clrbits_le16(addr, clear) __clrsetbits(le, 16, addr, clear, 0)
+#define clrbits_be16(addr, clear) __clrsetbits(be, 16, addr, clear, 0)
+
+#define setbits_le64(addr, set) __clrsetbits(le, 64, addr, 0, set)
+#define setbits_be64(addr, set) __clrsetbits(be, 64, addr, 0, set)
+#define setbits_le32(addr, set) __clrsetbits(le, 32, addr, 0, set)
+#define setbits_be32(addr, set) __clrsetbits(be, 32, addr, 0, set)
+#define setbits_le16(addr, set) __clrsetbits(le, 16, addr, 0, set)
+#define setbits_be16(addr, set) __clrsetbits(be, 16, addr, 0, set)
+
+#define clrsetbits_le64(addr, clear, set) __clrsetbits(le, 64, addr, clear, set)
+#define clrsetbits_be64(addr, clear, set) __clrsetbits(be, 64, addr, clear, set)
+#define clrsetbits_le32(addr, clear, set) __clrsetbits(le, 32, addr, clear, set)
+#define clrsetbits_be32(addr, clear, set) __clrsetbits(be, 32, addr, clear, set)
+#define clrsetbits_le16(addr, clear, set) __clrsetbits(le, 16, addr, clear, set)
+#define clrsetbits_be16(addr, clear, set) __clrsetbits(be, 16, addr, clear, set)
+
+#define clrsetbits_8(addr, clear, set) \
+ write8(addr, (read8(addr) & ~(clear)) | (set))
+#define clrbits_8(addr, clear) clrsetbits_8(addr, clear, 0)
+#define setbits_8(addr, set) setbits_8(addr, 0, set)
#endif
diff --git a/src/lib/edid.c b/src/lib/edid.c
index 2242d1c3d5..db0f412ba2 100644
--- a/src/lib/edid.c
+++ b/src/lib/edid.c
@@ -31,7 +31,6 @@
#include <stddef.h>
#include <console/console.h>
#include <arch/io.h>
-#include <arch/byteorder.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
diff --git a/src/lib/selfboot.c b/src/lib/selfboot.c
index d73b3f56af..edf36e7073 100644
--- a/src/lib/selfboot.c
+++ b/src/lib/selfboot.c
@@ -18,9 +18,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
*/
-#include <arch/byteorder.h>
#include <console/console.h>
#include <cpu/cpu.h>
+#include <endian.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
diff --git a/src/mainboard/amd/inagua/broadcom.c b/src/mainboard/amd/inagua/broadcom.c
index 86de3b4552..2807870f87 100644
--- a/src/mainboard/amd/inagua/broadcom.c
+++ b/src/mainboard/amd/inagua/broadcom.c
@@ -29,11 +29,11 @@
*/
#include <types.h>
-#include <arch/byteorder.h>
#include <console/console.h>
#include <device/device.h> //Coreboot device access
#include <device/pci.h>
#include <delay.h>
+#include <endian.h>
void broadcom_init(void);
diff --git a/src/mainboard/google/butterfly/romstage.c b/src/mainboard/google/butterfly/romstage.c
index 7f9ab605cd..1753cd57e5 100644
--- a/src/mainboard/google/butterfly/romstage.c
+++ b/src/mainboard/google/butterfly/romstage.c
@@ -22,7 +22,6 @@
#include <string.h>
#include <lib.h>
#include <timestamp.h>
-#include <arch/byteorder.h>
#include <arch/io.h>
#include <device/pci_def.h>
#include <device/pnp_def.h>
diff --git a/src/mainboard/google/link/romstage.c b/src/mainboard/google/link/romstage.c
index 2e7ee5240e..5844aa6168 100644
--- a/src/mainboard/google/link/romstage.c
+++ b/src/mainboard/google/link/romstage.c
@@ -22,7 +22,6 @@
#include <string.h>
#include <lib.h>
#include <timestamp.h>
-#include <arch/byteorder.h>
#include <arch/io.h>
#include <device/pci.h>
#include <device/pci_def.h>
diff --git a/src/mainboard/google/parrot/romstage.c b/src/mainboard/google/parrot/romstage.c
index f2e7345ce5..ab82bde63c 100644
--- a/src/mainboard/google/parrot/romstage.c
+++ b/src/mainboard/google/parrot/romstage.c
@@ -22,7 +22,6 @@
#include <string.h>
#include <lib.h>
#include <timestamp.h>
-#include <arch/byteorder.h>
#include <arch/io.h>
#include <device/pci_def.h>
#include <device/pnp_def.h>
diff --git a/src/mainboard/google/samus/spd/spd.c b/src/mainboard/google/samus/spd/spd.c
index 4f4f9efac9..1308ab262d 100644
--- a/src/mainboard/google/samus/spd/spd.c
+++ b/src/mainboard/google/samus/spd/spd.c
@@ -17,9 +17,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <arch/byteorder.h>
#include <cbfs.h>
#include <console/console.h>
+#include <endian.h>
#include <string.h>
#include <soc/gpio.h>
#include <soc/pei_data.h>
diff --git a/src/mainboard/google/stout/romstage.c b/src/mainboard/google/stout/romstage.c
index 714d8f13c9..6a6aa480dd 100644
--- a/src/mainboard/google/stout/romstage.c
+++ b/src/mainboard/google/stout/romstage.c
@@ -22,7 +22,6 @@
#include <string.h>
#include <lib.h>
#include <timestamp.h>
-#include <arch/byteorder.h>
#include <arch/io.h>
#include <device/pci_def.h>
#include <device/pnp_def.h>
diff --git a/src/mainboard/samsung/lumpy/romstage.c b/src/mainboard/samsung/lumpy/romstage.c
index e63a8f9964..29a238a140 100644
--- a/src/mainboard/samsung/lumpy/romstage.c
+++ b/src/mainboard/samsung/lumpy/romstage.c
@@ -23,7 +23,6 @@
#include <lib.h>
#include <timestamp.h>
#include <arch/io.h>
-#include <arch/byteorder.h>
#include <device/pci_def.h>
#include <device/pnp_def.h>
#include <cpu/x86/lapic.h>
diff --git a/src/mainboard/samsung/stumpy/romstage.c b/src/mainboard/samsung/stumpy/romstage.c
index 5db877337a..346026f45e 100644
--- a/src/mainboard/samsung/stumpy/romstage.c
+++ b/src/mainboard/samsung/stumpy/romstage.c
@@ -22,7 +22,6 @@
#include <string.h>
#include <lib.h>
#include <timestamp.h>
-#include <arch/byteorder.h>
#include <arch/io.h>
#include <device/pci_def.h>
#include <device/pnp_def.h>