Skip to content

Commit

Permalink
[PATCH] powerpc: Use check_legacy_ioport() on ppc32 too.
Browse files Browse the repository at this point in the history
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: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
David Woodhouse authored and Paul Mackerras committed Apr 28, 2006
1 parent f749eda commit 1269277
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 14 deletions.
8 changes: 8 additions & 0 deletions arch/powerpc/kernel/setup-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -516,3 +516,11 @@ void probe_machine(void)

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);
8 changes: 0 additions & 8 deletions arch/powerpc/kernel/setup_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -594,14 +594,6 @@ void ppc64_terminate_msg(unsigned int src, const char *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)
{
if (ppc_md.cpu_die)
Expand Down
2 changes: 1 addition & 1 deletion drivers/block/floppy.c
Original file line number Diff line number Diff line change
Expand Up @@ -4301,7 +4301,7 @@ static int __init floppy_init(void)
}

use_virtual_dma = can_use_virtual_dma & 1;
#if defined(CONFIG_PPC64)
#if defined(CONFIG_PPC_MERGE)
if (check_legacy_ioport(FDC1)) {
del_timer(&fd_timeout);
err = -ENODEV;
Expand Down
4 changes: 2 additions & 2 deletions drivers/input/serio/i8042-io.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ static inline int i8042_platform_init(void)
* 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.
*/
#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"))
return -EBUSY;
#endif

i8042_reset = 1;

#if defined(CONFIG_PPC64)
#if defined(CONFIG_PPC_MERGE)
if (check_legacy_ioport(I8042_DATA_REG))
return -EBUSY;
if (!request_region(I8042_DATA_REG, 16, "i8042"))
Expand Down
6 changes: 3 additions & 3 deletions include/asm-powerpc/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
* 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
#include <asm-ppc/io.h>
#else
Expand Down Expand Up @@ -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_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
Expand Down

0 comments on commit 1269277

Please sign in to comment.