From 8a487a4417221412d1cd23d4e08253fc9413be51 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Wed, 10 Oct 2012 13:12:53 +0000 Subject: x86: Add initial memory barrier macros These are available on other architectures, so add them on x86. Signed-off-by: Simon Glass --- arch/x86/include/asm/io.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'arch/x86/include/asm/io.h') diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index 9b757d489..b12bdd8e2 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h @@ -234,4 +234,12 @@ static inline phys_addr_t virt_to_phys(void * vaddr) return (phys_addr_t)(vaddr); } +/* + * TODO: The kernel offers some more advanced versions of barriers, it might + * have some advantages to use them instead of the simple one here. + */ +#define dmb() __asm__ __volatile__ ("" : : : "memory") +#define __iormb() dmb() +#define __iowmb() dmb() + #endif -- cgit v1.2.3-70-g09d2 From 687c108b10e66ed45fb9543d1111c3d10501a65c Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sat, 20 Oct 2012 12:33:13 +0000 Subject: x86: Include types.h explicitly in the i386 version of io.h The i386 version of io.h depends on the phys_addr_t type which is defined in types.h. It wasn't including that explicitly, and was working presumably because the other files including it had already included types.h themselves directly or indirectly. This change fixes that. Signed-off-by: Gabe Black Signed-off-by: Simon Glass --- arch/x86/include/asm/io.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'arch/x86/include/asm/io.h') diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index b12bdd8e2..2214958d6 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h @@ -36,6 +36,8 @@ #define IO_SPACE_LIMIT 0xffff +#include + #ifdef __KERNEL__ -- cgit v1.2.3-70-g09d2 From 339c5111065c2b1893af1e4d6e9431b9496879a4 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Sat, 20 Oct 2012 12:33:16 +0000 Subject: x86: Don't spam POST80 codes with slow IO functions This patch prevents u-boot from "spamming" random progress codes on a port 80 "post card". The previous version of this patch just removed the delays in the "slow" IO functions, as they do not need to be slow, however, this patch is less intrusive. It uses another unused port that is often used by BIOSes (and the Linux Kernel) for small delay timing purposes. Signed-off-by: Stefan Reinauer Signed-off-by: Simon Glass --- arch/x86/include/asm/io.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/x86/include/asm/io.h') diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index 2214958d6..84a638da7 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h @@ -137,7 +137,7 @@ out: #ifdef SLOW_IO_BY_JUMPING #define __SLOW_DOWN_IO "\njmp 1f\n1:\tjmp 1f\n1:" #else -#define __SLOW_DOWN_IO "\noutb %%al,$0x80" +#define __SLOW_DOWN_IO "\noutb %%al,$0xed" #endif #ifdef REALLY_SLOW_IO -- cgit v1.2.3-70-g09d2 From ec516c489969c1c12e9b26900facee6efd60c938 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Tue, 23 Oct 2012 18:04:44 +0000 Subject: x86: Increase the size of the phys_size_t and phys_addr_t types These types should be 64 bits long to reflect the fact that physical addresses and the size of physical areas of memory are more than 32 bits long. Signed-off-by: Gabe Black Signed-off-by: Simon Glass --- arch/x86/include/asm/io.h | 6 ++++-- arch/x86/include/asm/types.h | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'arch/x86/include/asm/io.h') diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index 84a638da7..86bac90e8 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h @@ -1,6 +1,8 @@ #ifndef _ASM_IO_H #define _ASM_IO_H +#include + /* * This file contains the definitions for the x86 IO instructions * inb/inw/inl/outb/outw/outl and the "string versions" of the same @@ -220,7 +222,7 @@ static inline void sync(void) static inline void * map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags) { - return (void *)paddr; + return (void *)(uintptr_t)paddr; } /* @@ -233,7 +235,7 @@ static inline void unmap_physmem(void *vaddr, unsigned long flags) static inline phys_addr_t virt_to_phys(void * vaddr) { - return (phys_addr_t)(vaddr); + return (phys_addr_t)(uintptr_t)(vaddr); } /* diff --git a/arch/x86/include/asm/types.h b/arch/x86/include/asm/types.h index 9a40e383e..e9fde88f7 100644 --- a/arch/x86/include/asm/types.h +++ b/arch/x86/include/asm/types.h @@ -45,8 +45,8 @@ typedef unsigned long long u64; typedef u32 dma_addr_t; -typedef unsigned long phys_addr_t; -typedef unsigned long phys_size_t; +typedef unsigned long long phys_addr_t; +typedef unsigned long long phys_size_t; #endif /* __KERNEL__ */ -- cgit v1.2.3-70-g09d2