Commit 1269277a authored by David Woodhouse's avatar David Woodhouse Committed by Paul Mackerras

[PATCH] powerpc: Use check_legacy_ioport() on ppc32 too.

Some people report that we die on some Macs when we are expecting to
catch machine checks after poking at some random I/O address. I'd seen
it happen on my dual G4 with serial ports until we fixed those to use
OF, but now other users are reporting it with i8042.

This expands the use of check_legacy_ioport() to avoid that situation
even on 32-bit kernels.
Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent f749edae
...@@ -516,3 +516,11 @@ void probe_machine(void) ...@@ -516,3 +516,11 @@ void probe_machine(void)
printk(KERN_INFO "Using %s machine description\n", ppc_md.name); printk(KERN_INFO "Using %s machine description\n", ppc_md.name);
} }
int check_legacy_ioport(unsigned long base_port)
{
if (ppc_md.check_legacy_ioport == NULL)
return 0;
return ppc_md.check_legacy_ioport(base_port);
}
EXPORT_SYMBOL(check_legacy_ioport);
...@@ -594,14 +594,6 @@ void ppc64_terminate_msg(unsigned int src, const char *msg) ...@@ -594,14 +594,6 @@ void ppc64_terminate_msg(unsigned int src, const char *msg)
printk("[terminate]%04x %s\n", src, msg); printk("[terminate]%04x %s\n", src, msg);
} }
int check_legacy_ioport(unsigned long base_port)
{
if (ppc_md.check_legacy_ioport == NULL)
return 0;
return ppc_md.check_legacy_ioport(base_port);
}
EXPORT_SYMBOL(check_legacy_ioport);
void cpu_die(void) void cpu_die(void)
{ {
if (ppc_md.cpu_die) if (ppc_md.cpu_die)
......
...@@ -4301,7 +4301,7 @@ static int __init floppy_init(void) ...@@ -4301,7 +4301,7 @@ static int __init floppy_init(void)
} }
use_virtual_dma = can_use_virtual_dma & 1; use_virtual_dma = can_use_virtual_dma & 1;
#if defined(CONFIG_PPC64) #if defined(CONFIG_PPC_MERGE)
if (check_legacy_ioport(FDC1)) { if (check_legacy_ioport(FDC1)) {
del_timer(&fd_timeout); del_timer(&fd_timeout);
err = -ENODEV; err = -ENODEV;
......
...@@ -67,14 +67,14 @@ static inline int i8042_platform_init(void) ...@@ -67,14 +67,14 @@ static inline int i8042_platform_init(void)
* On some platforms touching the i8042 data register region can do really * On some platforms touching the i8042 data register region can do really
* bad things. Because of this the region is always reserved on such boxes. * bad things. Because of this the region is always reserved on such boxes.
*/ */
#if !defined(__sh__) && !defined(__alpha__) && !defined(__mips__) && !defined(CONFIG_PPC64) #if !defined(__sh__) && !defined(__alpha__) && !defined(__mips__) && !defined(CONFIG_PPC_MERGE)
if (!request_region(I8042_DATA_REG, 16, "i8042")) if (!request_region(I8042_DATA_REG, 16, "i8042"))
return -EBUSY; return -EBUSY;
#endif #endif
i8042_reset = 1; i8042_reset = 1;
#if defined(CONFIG_PPC64) #if defined(CONFIG_PPC_MERGE)
if (check_legacy_ioport(I8042_DATA_REG)) if (check_legacy_ioport(I8042_DATA_REG))
return -EBUSY; return -EBUSY;
if (!request_region(I8042_DATA_REG, 16, "i8042")) if (!request_region(I8042_DATA_REG, 16, "i8042"))
......
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
*/ */
/* Check of existence of legacy devices */
extern int check_legacy_ioport(unsigned long base_port);
#ifndef CONFIG_PPC64 #ifndef CONFIG_PPC64
#include <asm-ppc/io.h> #include <asm-ppc/io.h>
#else #else
...@@ -437,9 +440,6 @@ static inline int check_signature(const volatile void __iomem * io_addr, ...@@ -437,9 +440,6 @@ static inline int check_signature(const volatile void __iomem * io_addr,
#define dma_cache_wback(_start,_size) do { } while (0) #define dma_cache_wback(_start,_size) do { } while (0)
#define dma_cache_wback_inv(_start,_size) do { } while (0) #define dma_cache_wback_inv(_start,_size) do { } while (0)
/* Check of existence of legacy devices */
extern int check_legacy_ioport(unsigned long base_port);
/* /*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem * Convert a physical pointer to a virtual kernel pointer for /dev/mem
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment