aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/parisc/Kconfig11
-rw-r--r--arch/parisc/mm/ioremap.c16
-rw-r--r--include/asm-parisc/io.h58
3 files changed, 3 insertions, 82 deletions
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index fc5755d1db57..6b3c50964ca9 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -138,17 +138,6 @@ config 64BIT
138 enable this option otherwise. The 64bit kernel is significantly bigger 138 enable this option otherwise. The 64bit kernel is significantly bigger
139 and slower than the 32bit one. 139 and slower than the 32bit one.
140 140
141config HPPA_IOREMAP
142 bool "Enable IOREMAP functionality (EXPERIMENTAL)"
143 depends on EXPERIMENTAL
144 default n
145 help
146 Enable this option if you want to enable real IOREMAPPING on PA-RISC.
147 Currently we just "simulate" I/O remapping, and enabling this option
148 will just crash your machine.
149
150 Say N here, unless you are a real PA-RISC Linux kernel hacker.
151
152config SMP 141config SMP
153 bool "Symmetric multi-processing support" 142 bool "Symmetric multi-processing support"
154 ---help--- 143 ---help---
diff --git a/arch/parisc/mm/ioremap.c b/arch/parisc/mm/ioremap.c
index 028772144191..5a22e1cab217 100644
--- a/arch/parisc/mm/ioremap.c
+++ b/arch/parisc/mm/ioremap.c
@@ -72,7 +72,6 @@ remap_area_pmd(pmd_t *pmd, unsigned long address, unsigned long size,
72 return 0; 72 return 0;
73} 73}
74 74
75#ifdef CONFIG_HPPA_IOREMAP
76static int 75static int
77remap_area_pages(unsigned long address, unsigned long phys_addr, 76remap_area_pages(unsigned long address, unsigned long phys_addr,
78 unsigned long size, unsigned long flags) 77 unsigned long size, unsigned long flags)
@@ -114,7 +113,6 @@ remap_area_pages(unsigned long address, unsigned long phys_addr,
114 113
115 return error; 114 return error;
116} 115}
117#endif /* CONFIG_HPPA_IOREMAP */
118 116
119#ifdef CONFIG_DEBUG_IOREMAP 117#ifdef CONFIG_DEBUG_IOREMAP
120static unsigned long last = 0; 118static unsigned long last = 0;
@@ -154,21 +152,16 @@ EXPORT_SYMBOL(__raw_bad_addr);
154 */ 152 */
155void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) 153void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
156{ 154{
157#if !defined(CONFIG_HPPA_IOREMAP) 155#ifdef CONFIG_EISA
156 #error FIXME.
158 unsigned long end = phys_addr + size - 1; 157 unsigned long end = phys_addr + size - 1;
159 /* Support EISA addresses */ 158 /* Support EISA addresses */
160 if ((phys_addr >= 0x00080000 && end < 0x000fffff) 159 if ((phys_addr >= 0x00080000 && end < 0x000fffff)
161 || (phys_addr >= 0x00500000 && end < 0x03bfffff)) { 160 || (phys_addr >= 0x00500000 && end < 0x03bfffff)) {
162 phys_addr |= 0xfc000000; 161 phys_addr |= 0xfc000000;
163 } 162 }
164
165#ifdef CONFIG_DEBUG_IOREMAP
166 return (void __iomem *)(phys_addr - (0x1UL << NYBBLE_SHIFT));
167#else
168 return (void __iomem *)phys_addr;
169#endif 163#endif
170 164
171#else
172 void *addr; 165 void *addr;
173 struct vm_struct *area; 166 struct vm_struct *area;
174 unsigned long offset, last_addr; 167 unsigned long offset, last_addr;
@@ -216,15 +209,10 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
216 } 209 }
217 210
218 return (void __iomem *) (offset + (char *)addr); 211 return (void __iomem *) (offset + (char *)addr);
219#endif
220} 212}
221 213
222void iounmap(void __iomem *addr) 214void iounmap(void __iomem *addr)
223{ 215{
224#ifdef CONFIG_HPPA_IOREMAP
225 if (addr > high_memory) 216 if (addr > high_memory)
226 return vfree((void *) (PAGE_MASK & (unsigned long __force) addr)); 217 return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
227#else
228 return;
229#endif
230} 218}
diff --git a/include/asm-parisc/io.h b/include/asm-parisc/io.h
index 2fb253255102..bcfe0b09c93f 100644
--- a/include/asm-parisc/io.h
+++ b/include/asm-parisc/io.h
@@ -176,12 +176,7 @@ extern inline void * ioremap_nocache(unsigned long offset, unsigned long size)
176 176
177extern void iounmap(void __iomem *addr); 177extern void iounmap(void __iomem *addr);
178 178
179/* 179
180 * CONFIG_HPPA_IOREMAP is the magic flag to enable or disable real ioremap()
181 * functionality. It's currently disabled because it may not work on some
182 * machines.
183 */
184#ifdef CONFIG_HPPA_IOREMAP
185static inline unsigned char __raw_readb(const volatile void __iomem *addr) 180static inline unsigned char __raw_readb(const volatile void __iomem *addr)
186{ 181{
187 return (*(volatile unsigned char __force *) (addr)); 182 return (*(volatile unsigned char __force *) (addr));
@@ -215,57 +210,6 @@ static inline void __raw_writeq(unsigned long long b, volatile void __iomem *add
215{ 210{
216 *(volatile unsigned long long __force *) addr = b; 211 *(volatile unsigned long long __force *) addr = b;
217} 212}
218#else /* !CONFIG_HPPA_IOREMAP */
219static inline unsigned char __raw_readb(const volatile void __iomem *addr)
220{
221 __raw_check_addr(addr);
222
223 return gsc_readb((unsigned long) addr);
224}
225static inline unsigned short __raw_readw(const volatile void __iomem *addr)
226{
227 __raw_check_addr(addr);
228
229 return gsc_readw((unsigned long) addr);
230}
231static inline unsigned int __raw_readl(const volatile void __iomem *addr)
232{
233 __raw_check_addr(addr);
234
235 return gsc_readl((unsigned long) addr);
236}
237static inline unsigned long long __raw_readq(const volatile void __iomem *addr)
238{
239 __raw_check_addr(addr);
240
241 return gsc_readq((unsigned long) addr);
242}
243
244static inline void __raw_writeb(unsigned char b, volatile void __iomem *addr)
245{
246 __raw_check_addr(addr);
247
248 gsc_writeb(b, (unsigned long) addr);
249}
250static inline void __raw_writew(unsigned short b, volatile void __iomem *addr)
251{
252 __raw_check_addr(addr);
253
254 gsc_writew(b, (unsigned long) addr);
255}
256static inline void __raw_writel(unsigned int b, volatile void __iomem *addr)
257{
258 __raw_check_addr(addr);
259
260 gsc_writel(b, (unsigned long) addr);
261}
262static inline void __raw_writeq(unsigned long long b, volatile void __iomem *addr)
263{
264 __raw_check_addr(addr);
265
266 gsc_writeq(b, (unsigned long) addr);
267}
268#endif /* !CONFIG_HPPA_IOREMAP */
269 213
270/* readb can never be const, so use __fswab instead of le*_to_cpu */ 214/* readb can never be const, so use __fswab instead of le*_to_cpu */
271#define readb(addr) __raw_readb(addr) 215#define readb(addr) __raw_readb(addr)