Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8ce0aad authored by Helge Deller's avatar Helge Deller Committed by Kyle McMartin
Browse files

[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: default avatarHelge Deller <deller@parisc-linux.org>
Signed-off-by: default avatarKyle McMartin <kyle@parisc-linux.org>
parent b31059f7
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -138,6 +138,17 @@ config 64BIT
	  enable this option otherwise. The 64bit kernel is significantly bigger
	  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
	bool "Symmetric multi-processing support"
	---help---
+6 −7
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ remap_area_pmd(pmd_t *pmd, unsigned long address, unsigned long size,
	return 0;
}

#if USE_HPPA_IOREMAP
#ifdef CONFIG_HPPA_IOREMAP
static int 
remap_area_pages(unsigned long address, unsigned long phys_addr,
		 unsigned long size, unsigned long flags)
@@ -114,7 +114,7 @@ remap_area_pages(unsigned long address, unsigned long phys_addr,

	return error;
}
#endif /* USE_HPPA_IOREMAP */
#endif /* CONFIG_HPPA_IOREMAP */

#ifdef CONFIG_DEBUG_IOREMAP
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)
{
#if !(USE_HPPA_IOREMAP)

#if !defined(CONFIG_HPPA_IOREMAP)
	unsigned long end = phys_addr + size - 1;
	/* Support EISA addresses */
	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)
{
#if !(USE_HPPA_IOREMAP)
	return;
#else
#ifdef CONFIG_HPPA_IOREMAP
	if (addr > high_memory)
		return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
#else
	return;
#endif
}
+5 −11
Original line number Diff line number Diff line
@@ -26,11 +26,7 @@ extern unsigned long parisc_vmerge_max_size;
 */

#ifdef CONFIG_DEBUG_IOREMAP
#ifdef CONFIG_64BIT
#define NYBBLE_SHIFT 60
#else
#define NYBBLE_SHIFT 28
#endif
#define NYBBLE_SHIFT (BITS_PER_LONG - 4)
extern void gsc_bad_addr(unsigned long addr);
extern void __raw_bad_addr(const volatile void __iomem *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);

/*
 * 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
 * machines.
 */
#define USE_HPPA_IOREMAP 0

#if USE_HPPA_IOREMAP
#ifdef CONFIG_HPPA_IOREMAP
static inline unsigned char __raw_readb(const volatile void __iomem *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;
}
#else /* !USE_HPPA_IOREMAP */
#else /* !CONFIG_HPPA_IOREMAP */
static inline unsigned char __raw_readb(const volatile void __iomem *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);
}
#endif /* !USE_HPPA_IOREMAP */
#endif /* !CONFIG_HPPA_IOREMAP */

/* readb can never be const, so use __fswab instead of le*_to_cpu */
#define readb(addr) __raw_readb(addr)