mirror of
https://github.com/torvalds/linux.git
synced 2024-12-30 14:52:05 +00:00
[PARISC] Add CONFIG_HPPA_IOREMAP to conditionally enable ioremap
Instead of making it a #define in asm/io.h, allow user to select to turn on IOREMAP from the config menu. Signed-off-by: Helge Deller <deller@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
This commit is contained in:
parent
b31059f763
commit
b8ce0aadcd
@ -138,6 +138,17 @@ config 64BIT
|
|||||||
enable this option otherwise. The 64bit kernel is significantly bigger
|
enable this option otherwise. The 64bit kernel is significantly bigger
|
||||||
and slower than the 32bit one.
|
and slower than the 32bit one.
|
||||||
|
|
||||||
|
config HPPA_IOREMAP
|
||||||
|
bool "Enable IOREMAP functionality (EXPERIMENTAL)"
|
||||||
|
depends on EXPERIMENTAL
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Enable this option if you want to enable real IOREMAPPING on PA-RISC.
|
||||||
|
Currently we just "simulate" I/O remapping, and enabling this option
|
||||||
|
will just crash your machine.
|
||||||
|
|
||||||
|
Say N here, unless you are a real PA-RISC Linux kernel hacker.
|
||||||
|
|
||||||
config SMP
|
config SMP
|
||||||
bool "Symmetric multi-processing support"
|
bool "Symmetric multi-processing support"
|
||||||
---help---
|
---help---
|
||||||
|
@ -72,7 +72,7 @@ remap_area_pmd(pmd_t *pmd, unsigned long address, unsigned long size,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if USE_HPPA_IOREMAP
|
#ifdef CONFIG_HPPA_IOREMAP
|
||||||
static int
|
static int
|
||||||
remap_area_pages(unsigned long address, unsigned long phys_addr,
|
remap_area_pages(unsigned long address, unsigned long phys_addr,
|
||||||
unsigned long size, unsigned long flags)
|
unsigned long size, unsigned long flags)
|
||||||
@ -114,7 +114,7 @@ remap_area_pages(unsigned long address, unsigned long phys_addr,
|
|||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
#endif /* USE_HPPA_IOREMAP */
|
#endif /* CONFIG_HPPA_IOREMAP */
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_IOREMAP
|
#ifdef CONFIG_DEBUG_IOREMAP
|
||||||
static unsigned long last = 0;
|
static unsigned long last = 0;
|
||||||
@ -154,8 +154,7 @@ EXPORT_SYMBOL(__raw_bad_addr);
|
|||||||
*/
|
*/
|
||||||
void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
|
void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
|
||||||
{
|
{
|
||||||
#if !(USE_HPPA_IOREMAP)
|
#if !defined(CONFIG_HPPA_IOREMAP)
|
||||||
|
|
||||||
unsigned long end = phys_addr + size - 1;
|
unsigned long end = phys_addr + size - 1;
|
||||||
/* Support EISA addresses */
|
/* Support EISA addresses */
|
||||||
if ((phys_addr >= 0x00080000 && end < 0x000fffff)
|
if ((phys_addr >= 0x00080000 && end < 0x000fffff)
|
||||||
@ -222,10 +221,10 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
|
|||||||
|
|
||||||
void iounmap(void __iomem *addr)
|
void iounmap(void __iomem *addr)
|
||||||
{
|
{
|
||||||
#if !(USE_HPPA_IOREMAP)
|
#ifdef CONFIG_HPPA_IOREMAP
|
||||||
return;
|
|
||||||
#else
|
|
||||||
if (addr > high_memory)
|
if (addr > high_memory)
|
||||||
return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
|
return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
|
||||||
|
#else
|
||||||
|
return;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -26,11 +26,7 @@ extern unsigned long parisc_vmerge_max_size;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_IOREMAP
|
#ifdef CONFIG_DEBUG_IOREMAP
|
||||||
#ifdef CONFIG_64BIT
|
#define NYBBLE_SHIFT (BITS_PER_LONG - 4)
|
||||||
#define NYBBLE_SHIFT 60
|
|
||||||
#else
|
|
||||||
#define NYBBLE_SHIFT 28
|
|
||||||
#endif
|
|
||||||
extern void gsc_bad_addr(unsigned long addr);
|
extern void gsc_bad_addr(unsigned long addr);
|
||||||
extern void __raw_bad_addr(const volatile void __iomem *addr);
|
extern void __raw_bad_addr(const volatile void __iomem *addr);
|
||||||
#define gsc_check_addr(addr) \
|
#define gsc_check_addr(addr) \
|
||||||
@ -181,13 +177,11 @@ extern inline void * ioremap_nocache(unsigned long offset, unsigned long size)
|
|||||||
extern void iounmap(void __iomem *addr);
|
extern void iounmap(void __iomem *addr);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USE_HPPA_IOREMAP is the magic flag to enable or disable real ioremap()
|
* CONFIG_HPPA_IOREMAP is the magic flag to enable or disable real ioremap()
|
||||||
* functionality. It's currently disabled because it may not work on some
|
* functionality. It's currently disabled because it may not work on some
|
||||||
* machines.
|
* machines.
|
||||||
*/
|
*/
|
||||||
#define USE_HPPA_IOREMAP 0
|
#ifdef CONFIG_HPPA_IOREMAP
|
||||||
|
|
||||||
#if USE_HPPA_IOREMAP
|
|
||||||
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
|
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
return (*(volatile unsigned char __force *) (addr));
|
return (*(volatile unsigned char __force *) (addr));
|
||||||
@ -221,7 +215,7 @@ static inline void __raw_writeq(unsigned long long b, volatile void __iomem *add
|
|||||||
{
|
{
|
||||||
*(volatile unsigned long long __force *) addr = b;
|
*(volatile unsigned long long __force *) addr = b;
|
||||||
}
|
}
|
||||||
#else /* !USE_HPPA_IOREMAP */
|
#else /* !CONFIG_HPPA_IOREMAP */
|
||||||
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
|
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
|
||||||
{
|
{
|
||||||
__raw_check_addr(addr);
|
__raw_check_addr(addr);
|
||||||
@ -271,7 +265,7 @@ static inline void __raw_writeq(unsigned long long b, volatile void __iomem *add
|
|||||||
|
|
||||||
gsc_writeq(b, (unsigned long) addr);
|
gsc_writeq(b, (unsigned long) addr);
|
||||||
}
|
}
|
||||||
#endif /* !USE_HPPA_IOREMAP */
|
#endif /* !CONFIG_HPPA_IOREMAP */
|
||||||
|
|
||||||
/* readb can never be const, so use __fswab instead of le*_to_cpu */
|
/* readb can never be const, so use __fswab instead of le*_to_cpu */
|
||||||
#define readb(addr) __raw_readb(addr)
|
#define readb(addr) __raw_readb(addr)
|
||||||
|
Loading…
Reference in New Issue
Block a user