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>
This commit is contained in:
Russell King 2009-12-12 14:53:08 +00:00
Родитель 0d782dc430
Коммит c7baab5d1e
7 изменённых файлов: 50 добавлений и 23 удалений

Просмотреть файл

@ -30,6 +30,8 @@
#define __virt_to_bus(x) ((x) - PAGE_OFFSET) #define __virt_to_bus(x) ((x) - PAGE_OFFSET)
#define __bus_to_virt(x) ((x) + PAGE_OFFSET) #define __bus_to_virt(x) ((x) + PAGE_OFFSET)
#define __pfn_to_bus(x) (__pfn_to_phys(x) - PHYS_OFFSET)
#define __bus_to_pfn(x) __phys_to_pfn((x) + PHYS_OFFSET)
#endif #endif

Просмотреть файл

@ -201,6 +201,11 @@ void __init footbridge_map_io(void)
#ifdef CONFIG_FOOTBRIDGE_ADDIN #ifdef CONFIG_FOOTBRIDGE_ADDIN
static inline unsigned long fb_bus_sdram_offset(void)
{
return *CSR_PCISDRAMBASE & 0xfffffff0;
}
/* /*
* These two functions convert virtual addresses to PCI addresses and PCI * These two functions convert virtual addresses to PCI addresses and PCI
* addresses to virtual addresses. Note that it is only legal to use these * 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)
{ {
WARN_ON(res < PAGE_OFFSET || res >= (unsigned long)high_memory); WARN_ON(res < PAGE_OFFSET || res >= (unsigned long)high_memory);
return (res - PAGE_OFFSET) + (*CSR_PCISDRAMBASE & 0xfffffff0); return res + (fb_bus_sdram_offset() - PAGE_OFFSET);
} }
EXPORT_SYMBOL(__virt_to_bus); EXPORT_SYMBOL(__virt_to_bus);
unsigned long __bus_to_virt(unsigned long res) unsigned long __bus_to_virt(unsigned long res)
{ {
res -= (*CSR_PCISDRAMBASE & 0xfffffff0); res = res - (fb_bus_sdram_offset() - PAGE_OFFSET);
res += PAGE_OFFSET;
WARN_ON(res < PAGE_OFFSET || res >= (unsigned long)high_memory); WARN_ON(res < PAGE_OFFSET || res >= (unsigned long)high_memory);
@ -225,4 +229,16 @@ unsigned long __bus_to_virt(unsigned long res)
} }
EXPORT_SYMBOL(__bus_to_virt); EXPORT_SYMBOL(__bus_to_virt);
unsigned long __pfn_to_bus(unsigned long pfn)
{
return __pfn_to_phys(pfn) + (fb_bus_sdram_offset() - PHYS_OFFSET));
}
EXPORT_SYMBOL(__pfn_to_bus);
unsigned long __bus_to_pfn(unsigned long bus)
{
return __phys_to_pfn(bus - (fb_bus_sdram_offset() - PHYS_OFFSET));
}
EXPORT_SYMBOL(__bus_to_pfn);
#endif #endif

Просмотреть файл

@ -29,6 +29,8 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
extern unsigned long __virt_to_bus(unsigned long); extern unsigned long __virt_to_bus(unsigned long);
extern unsigned long __bus_to_virt(unsigned long); extern unsigned long __bus_to_virt(unsigned long);
extern unsigned long __pfn_to_bus(unsigned long);
extern unsigned long __bus_to_pfn(unsigned long);
#endif #endif
#define __virt_to_bus __virt_to_bus #define __virt_to_bus __virt_to_bus
#define __bus_to_virt __bus_to_virt #define __bus_to_virt __bus_to_virt
@ -36,14 +38,15 @@ extern unsigned long __bus_to_virt(unsigned long);
#elif defined(CONFIG_FOOTBRIDGE_HOST) #elif defined(CONFIG_FOOTBRIDGE_HOST)
/* /*
* The footbridge is programmed to expose the system RAM at the corresponding * The footbridge is programmed to expose the system RAM at 0xe0000000.
* address. So, if PAGE_OFFSET is 0xc0000000, RAM appears at 0xe0000000. * The requirement is that the RAM isn't placed at bus address 0, which
* If 0x80000000, then its exposed at 0xa0000000 on the bus. etc.
* The only requirement is that the RAM isn't placed at bus address 0 which
* would clash with VGA cards. * would clash with VGA cards.
*/ */
#define __virt_to_bus(x) ((x) - 0xe0000000) #define BUS_OFFSET 0xe0000000
#define __bus_to_virt(x) ((x) + 0xe0000000) #define __virt_to_bus(x) ((x) + (BUS_OFFSET - PAGE_OFFSET))
#define __bus_to_virt(x) ((x) - (BUS_OFFSET - PAGE_OFFSET))
#define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PHYS_OFFSET))
#define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PHYS_OFFSET))
#else #else

Просмотреть файл

@ -28,6 +28,7 @@
#define BUS_OFFSET UL(0x80000000) #define BUS_OFFSET UL(0x80000000)
#define __virt_to_bus(x) ((x) - PAGE_OFFSET + BUS_OFFSET) #define __virt_to_bus(x) ((x) - PAGE_OFFSET + BUS_OFFSET)
#define __bus_to_virt(x) ((x) - BUS_OFFSET + PAGE_OFFSET) #define __bus_to_virt(x) ((x) - BUS_OFFSET + PAGE_OFFSET)
#define __pfn_to_bus(x) (((x) << PAGE_SHIFT) + BUS_OFFSET) #define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PHYS_OFFSET))
#define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PHYS_OFFSET))
#endif #endif

Просмотреть файл

@ -17,11 +17,15 @@
#include <mach/ixp2000-regs.h> #include <mach/ixp2000-regs.h>
#define __virt_to_bus(v) \ #define IXP2000_PCI_SDRAM_OFFSET (*IXP2000_PCI_SDRAM_BAR & 0xfffffff0)
(((__virt_to_phys(v) - 0x0) + (*IXP2000_PCI_SDRAM_BAR & 0xfffffff0)))
#define __bus_to_virt(b) \ #define __phys_to_bus(x) ((x) + (IXP2000_PCI_SDRAM_OFFSET - PHYS_OFFSET))
__phys_to_virt((((b - (*IXP2000_PCI_SDRAM_BAR & 0xfffffff0)) + 0x0))) #define __bus_to_phys(x) ((x) - (IXP2000_PCI_SDRAM_OFFSET - PHYS_OFFSET))
#define __virt_to_bus(v) __phys_to_bus(__virt_to_phys(v))
#define __bus_to_virt(b) __phys_to_virt(__bus_to_phys(b))
#define __pfn_to_bus(p) __phys_to_bus(__pfn_to_phys(p))
#define __bus_to_pfn(b) __phys_to_pfn(__bus_to_phys(b))
#endif #endif

Просмотреть файл

@ -19,16 +19,15 @@
*/ */
#define PHYS_OFFSET (0x00000000) #define PHYS_OFFSET (0x00000000)
#define __virt_to_bus(v) \ #define IXP23XX_PCI_SDRAM_OFFSET (*((volatile int *)IXP23XX_PCI_SDRAM_BAR) & 0xfffffff0))
({ unsigned int ret; \
ret = ((__virt_to_phys(v) - 0x00000000) + \
(*((volatile int *)IXP23XX_PCI_SDRAM_BAR) & 0xfffffff0)); \
ret; })
#define __bus_to_virt(b) \ #define __phys_to_bus(x) ((x) + (IXP23XX_PCI_SDRAM_OFFSET - PHYS_OFFSET))
({ unsigned int data; \ #define __bus_to_phys(x) ((x) - (IXP23XX_PCI_SDRAM_OFFSET - PHYS_OFFSET))
data = *((volatile int *)IXP23XX_PCI_SDRAM_BAR); \
__phys_to_virt((((b - (data & 0xfffffff0)) + 0x00000000))); }) #define __virt_to_bus(v) __phys_to_bus(__virt_to_phys(v))
#define __bus_to_virt(b) __phys_to_virt(__bus_to_phys(b))
#define __pfn_to_bus(p) __phys_to_bus(__pfn_to_phys(p))
#define __bus_to_pfn(b) __phys_to_pfn(__bus_to_phys(b))
#define arch_is_coherent() 1 #define arch_is_coherent() 1

Просмотреть файл

@ -15,5 +15,7 @@
#define __virt_to_bus(x) __virt_to_phys(x) #define __virt_to_bus(x) __virt_to_phys(x)
#define __bus_to_virt(x) __phys_to_virt(x) #define __bus_to_virt(x) __phys_to_virt(x)
#define __pfn_to_bus(x) __pfn_to_phys(x)
#define __bus_to_pfn(x) __phys_to_pfn(x)
#endif #endif