diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-12-12 09:53:08 -0500 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-12-13 11:33:19 -0500 |
| commit | c7baab5d1e97437a2fca63b71d467f193dbebb02 (patch) | |
| tree | 227c8a1ffb2465035c1fd4466301d1bf5617892a | |
| parent | 0d782dc430d94dc36b47cb11c2e33ecb1bb38234 (diff) | |
ARM: fix clps711x, footbridge, integrator, ixp2000, ixp2300 and s3c build bug
Anders Grafström reports that footbridge fails to build after 1c4a4f4.
Fix this by adding the necessary definitions for __pfn_to_bus and
__bus_to_pfn.
Reported-by: Anders Grafström <anders.grafstrom@netinsight.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
| -rw-r--r-- | arch/arm/mach-clps711x/include/mach/memory.h | 2 | ||||
| -rw-r--r-- | arch/arm/mach-footbridge/common.c | 22 | ||||
| -rw-r--r-- | arch/arm/mach-footbridge/include/mach/memory.h | 15 | ||||
| -rw-r--r-- | arch/arm/mach-integrator/include/mach/memory.h | 3 | ||||
| -rw-r--r-- | arch/arm/mach-ixp2000/include/mach/memory.h | 12 | ||||
| -rw-r--r-- | arch/arm/mach-ixp23xx/include/mach/memory.h | 19 | ||||
| -rw-r--r-- | arch/arm/mach-s3c24a0/include/mach/memory.h | 2 |
7 files changed, 51 insertions, 24 deletions
diff --git a/arch/arm/mach-clps711x/include/mach/memory.h b/arch/arm/mach-clps711x/include/mach/memory.h index e522b20bcbc2..f70d52be48a2 100644 --- a/arch/arm/mach-clps711x/include/mach/memory.h +++ b/arch/arm/mach-clps711x/include/mach/memory.h | |||
| @@ -30,6 +30,8 @@ | |||
| 30 | 30 | ||
| 31 | #define __virt_to_bus(x) ((x) - PAGE_OFFSET) | 31 | #define __virt_to_bus(x) ((x) - PAGE_OFFSET) |
| 32 | #define __bus_to_virt(x) ((x) + PAGE_OFFSET) | 32 | #define __bus_to_virt(x) ((x) + PAGE_OFFSET) |
| 33 | #define __pfn_to_bus(x) (__pfn_to_phys(x) - PHYS_OFFSET) | ||
| 34 | #define __bus_to_pfn(x) __phys_to_pfn((x) + PHYS_OFFSET) | ||
| 33 | 35 | ||
| 34 | #endif | 36 | #endif |
| 35 | 37 | ||
diff --git a/arch/arm/mach-footbridge/common.c b/arch/arm/mach-footbridge/common.c index b97f529e58e8..41febc796b1c 100644 --- a/arch/arm/mach-footbridge/common.c +++ b/arch/arm/mach-footbridge/common.c | |||
| @@ -201,6 +201,11 @@ void __init footbridge_map_io(void) | |||
| 201 | 201 | ||
| 202 | #ifdef CONFIG_FOOTBRIDGE_ADDIN | 202 | #ifdef CONFIG_FOOTBRIDGE_ADDIN |
| 203 | 203 | ||
| 204 | static inline unsigned long fb_bus_sdram_offset(void) | ||
| 205 | { | ||
| 206 | return *CSR_PCISDRAMBASE & 0xfffffff0; | ||
| 207 | } | ||
| 208 | |||
| 204 | /* | 209 | /* |
| 205 | * These two functions convert virtual addresses to PCI addresses and PCI | 210 | * These two functions convert virtual addresses to PCI addresses and PCI |
| 206 | * addresses to virtual addresses. Note that it is only legal to use these | 211 | * addresses to virtual addresses. Note that it is only legal to use these |
| @@ -210,14 +215,13 @@ unsigned long __virt_to_bus(unsigned long res) | |||
| 210 | { | 215 | { |
| 211 | WARN_ON(res < PAGE_OFFSET || res >= (unsigned long)high_memory); | 216 | WARN_ON(res < PAGE_OFFSET || res >= (unsigned long)high_memory); |
| 212 | 217 | ||
| 213 | return (res - PAGE_OFFSET) + (*CSR_PCISDRAMBASE & 0xfffffff0); | 218 | return res + (fb_bus_sdram_offset() - PAGE_OFFSET); |
| 214 | } | 219 | } |
| 215 | EXPORT_SYMBOL(__virt_to_bus); | 220 | EXPORT_SYMBOL(__virt_to_bus); |
| 216 | 221 | ||
| 217 | unsigned long __bus_to_virt(unsigned long res) | 222 | unsigned long __bus_to_virt(unsigned long res) |
| 218 | { | 223 | { |
| 219 | res -= (*CSR_PCISDRAMBASE & 0xfffffff0); | 224 | res = res - (fb_bus_sdram_offset() - PAGE_OFFSET); |
| 220 | res += PAGE_OFFSET; | ||
| 221 | 225 | ||
| 222 | WARN_ON(res < PAGE_OFFSET || res >= (unsigned long)high_memory); | 226 | WARN_ON(res < PAGE_OFFSET || res >= (unsigned long)high_memory); |
| 223 | 227 | ||
| @@ -225,4 +229,16 @@ unsigned long __bus_to_virt(unsigned long res) | |||
| 225 | } | 229 | } |
| 226 | EXPORT_SYMBOL(__bus_to_virt); | 230 | EXPORT_SYMBOL(__bus_to_virt); |
| 227 | 231 | ||
| 232 | unsigned long __pfn_to_bus(unsigned long pfn) | ||
| 233 | { | ||
| 234 | return __pfn_to_phys(pfn) + (fb_bus_sdram_offset() - PHYS_OFFSET)); | ||
| 235 | } | ||
| 236 | EXPORT_SYMBOL(__pfn_to_bus); | ||
| 237 | |||
| 238 | unsigned long __bus_to_pfn(unsigned long bus) | ||
| 239 | { | ||
| 240 | return __phys_to_pfn(bus - (fb_bus_sdram_offset() - PHYS_OFFSET)); | ||
| 241 | } | ||
| 242 | EXPORT_SYMBOL(__bus_to_pfn); | ||
| 243 | |||
| 228 | #endif | 244 | #endif |
diff --git a/arch/arm/mach-footbridge/include/mach/memory.h b/arch/arm/mach-footbridge/include/mach/memory.h index cb16e59d87b6..8d64f4574087 100644 --- a/arch/arm/mach-footbridge/include/mach/memory.h +++ b/arch/arm/mach-footbridge/include/mach/memory.h | |||
| @@ -29,6 +29,8 @@ | |||
| 29 | #ifndef __ASSEMBLY__ | 29 | #ifndef __ASSEMBLY__ |
| 30 | extern unsigned long __virt_to_bus(unsigned long); | 30 | extern unsigned long __virt_to_bus(unsigned long); |
| 31 | extern unsigned long __bus_to_virt(unsigned long); | 31 | extern unsigned long __bus_to_virt(unsigned long); |
| 32 | extern unsigned long __pfn_to_bus(unsigned long); | ||
| 33 | extern unsigned long __bus_to_pfn(unsigned long); | ||
| 32 | #endif | 34 | #endif |
| 33 | #define __virt_to_bus __virt_to_bus | 35 | #define __virt_to_bus __virt_to_bus |
| 34 | #define __bus_to_virt __bus_to_virt | 36 | #define __bus_to_virt __bus_to_virt |
| @@ -36,14 +38,15 @@ extern unsigned long __bus_to_virt(unsigned long); | |||
| 36 | #elif defined(CONFIG_FOOTBRIDGE_HOST) | 38 | #elif defined(CONFIG_FOOTBRIDGE_HOST) |
| 37 | 39 | ||
| 38 | /* | 40 | /* |
| 39 | * The footbridge is programmed to expose the system RAM at the corresponding | 41 | * The footbridge is programmed to expose the system RAM at 0xe0000000. |
| 40 | * address. So, if PAGE_OFFSET is 0xc0000000, RAM appears at 0xe0000000. | 42 | * The requirement is that the RAM isn't placed at bus address 0, which |
| 41 | * If 0x80000000, then its exposed at 0xa0000000 on the bus. etc. | ||
| 42 | * The only requirement is that the RAM isn't placed at bus address 0 which | ||
| 43 | * would clash with VGA cards. | 43 | * would clash with VGA cards. |
| 44 | */ | 44 | */ |
| 45 | #define __virt_to_bus(x) ((x) - 0xe0000000) | 45 | #define BUS_OFFSET 0xe0000000 |
| 46 | #define __bus_to_virt(x) ((x) + 0xe0000000) | 46 | #define __virt_to_bus(x) ((x) + (BUS_OFFSET - PAGE_OFFSET)) |
| 47 | #define __bus_to_virt(x) ((x) - (BUS_OFFSET - PAGE_OFFSET)) | ||
| 48 | #define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PHYS_OFFSET)) | ||
| 49 | #define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PHYS_OFFSET)) | ||
| 47 | 50 | ||
| 48 | #else | 51 | #else |
| 49 | 52 | ||
diff --git a/arch/arm/mach-integrator/include/mach/memory.h b/arch/arm/mach-integrator/include/mach/memory.h index 4891828454f5..991f24d2c115 100644 --- a/arch/arm/mach-integrator/include/mach/memory.h +++ b/arch/arm/mach-integrator/include/mach/memory.h | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #define BUS_OFFSET UL(0x80000000) | 28 | #define BUS_OFFSET UL(0x80000000) |
| 29 | #define __virt_to_bus(x) ((x) - PAGE_OFFSET + BUS_OFFSET) | 29 | #define __virt_to_bus(x) ((x) - PAGE_OFFSET + BUS_OFFSET) |
| 30 | #define __bus_to_virt(x) ((x) - BUS_OFFSET + PAGE_OFFSET) | 30 | #define __bus_to_virt(x) ((x) - BUS_OFFSET + PAGE_OFFSET) |
| 31 | #define __pfn_to_bus(x) (((x) << PAGE_SHIFT) + BUS_OFFSET) | 31 | #define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PHYS_OFFSET)) |
| 32 | #define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PHYS_OFFSET)) | ||
| 32 | 33 | ||
| 33 | #endif | 34 | #endif |
diff --git a/arch/arm/mach-ixp2000/include/mach/memory.h b/arch/arm/mach-ixp2000/include/mach/memory.h index aee7eb8a71b2..98e3471be15b 100644 --- a/arch/arm/mach-ixp2000/include/mach/memory.h +++ b/arch/arm/mach-ixp2000/include/mach/memory.h | |||
| @@ -17,11 +17,15 @@ | |||
| 17 | 17 | ||
| 18 | #include <mach/ixp2000-regs.h> | 18 | #include <mach/ixp2000-regs.h> |
| 19 | 19 | ||
| 20 | #define __virt_to_bus(v) \ | 20 | #define IXP2000_PCI_SDRAM_OFFSET (*IXP2000_PCI_SDRAM_BAR & 0xfffffff0) |
| 21 | (((__virt_to_phys(v) - 0x0) + (*IXP2000_PCI_SDRAM_BAR & 0xfffffff0))) | ||
| 22 | 21 | ||
| 23 | #define __bus_to_virt(b) \ | 22 | #define __phys_to_bus(x) ((x) + (IXP2000_PCI_SDRAM_OFFSET - PHYS_OFFSET)) |
| 24 | __phys_to_virt((((b - (*IXP2000_PCI_SDRAM_BAR & 0xfffffff0)) + 0x0))) | 23 | #define __bus_to_phys(x) ((x) - (IXP2000_PCI_SDRAM_OFFSET - PHYS_OFFSET)) |
| 24 | |||
| 25 | #define __virt_to_bus(v) __phys_to_bus(__virt_to_phys(v)) | ||
| 26 | #define __bus_to_virt(b) __phys_to_virt(__bus_to_phys(b)) | ||
| 27 | #define __pfn_to_bus(p) __phys_to_bus(__pfn_to_phys(p)) | ||
| 28 | #define __bus_to_pfn(b) __phys_to_pfn(__bus_to_phys(b)) | ||
| 25 | 29 | ||
| 26 | #endif | 30 | #endif |
| 27 | 31 | ||
diff --git a/arch/arm/mach-ixp23xx/include/mach/memory.h b/arch/arm/mach-ixp23xx/include/mach/memory.h index fdd138706c70..94a3a86cfeb8 100644 --- a/arch/arm/mach-ixp23xx/include/mach/memory.h +++ b/arch/arm/mach-ixp23xx/include/mach/memory.h | |||
| @@ -19,16 +19,15 @@ | |||
| 19 | */ | 19 | */ |
| 20 | #define PHYS_OFFSET (0x00000000) | 20 | #define PHYS_OFFSET (0x00000000) |
| 21 | 21 | ||
| 22 | #define __virt_to_bus(v) \ | 22 | #define IXP23XX_PCI_SDRAM_OFFSET (*((volatile int *)IXP23XX_PCI_SDRAM_BAR) & 0xfffffff0)) |
| 23 | ({ unsigned int ret; \ | 23 | |
| 24 | ret = ((__virt_to_phys(v) - 0x00000000) + \ | 24 | #define __phys_to_bus(x) ((x) + (IXP23XX_PCI_SDRAM_OFFSET - PHYS_OFFSET)) |
| 25 | (*((volatile int *)IXP23XX_PCI_SDRAM_BAR) & 0xfffffff0)); \ | 25 | #define __bus_to_phys(x) ((x) - (IXP23XX_PCI_SDRAM_OFFSET - PHYS_OFFSET)) |
| 26 | ret; }) | 26 | |
| 27 | 27 | #define __virt_to_bus(v) __phys_to_bus(__virt_to_phys(v)) | |
| 28 | #define __bus_to_virt(b) \ | 28 | #define __bus_to_virt(b) __phys_to_virt(__bus_to_phys(b)) |
| 29 | ({ unsigned int data; \ | 29 | #define __pfn_to_bus(p) __phys_to_bus(__pfn_to_phys(p)) |
| 30 | data = *((volatile int *)IXP23XX_PCI_SDRAM_BAR); \ | 30 | #define __bus_to_pfn(b) __phys_to_pfn(__bus_to_phys(b)) |
| 31 | __phys_to_virt((((b - (data & 0xfffffff0)) + 0x00000000))); }) | ||
| 32 | 31 | ||
| 33 | #define arch_is_coherent() 1 | 32 | #define arch_is_coherent() 1 |
| 34 | 33 | ||
diff --git a/arch/arm/mach-s3c24a0/include/mach/memory.h b/arch/arm/mach-s3c24a0/include/mach/memory.h index 585211ca0187..7d74fd5c8d66 100644 --- a/arch/arm/mach-s3c24a0/include/mach/memory.h +++ b/arch/arm/mach-s3c24a0/include/mach/memory.h | |||
| @@ -15,5 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | #define __virt_to_bus(x) __virt_to_phys(x) | 16 | #define __virt_to_bus(x) __virt_to_phys(x) |
| 17 | #define __bus_to_virt(x) __phys_to_virt(x) | 17 | #define __bus_to_virt(x) __phys_to_virt(x) |
| 18 | #define __pfn_to_bus(x) __pfn_to_phys(x) | ||
| 19 | #define __bus_to_pfn(x) __phys_to_pfn(x) | ||
| 18 | 20 | ||
| 19 | #endif | 21 | #endif |
