Commit 8d8a0241 authored by Olaf Hering's avatar Olaf Hering Committed by Paul Mackerras

[POWERPC] Generic check_legacy_ioport

check_legacy_ioport makes only sense on PREP, CHRP and pSeries.
They may have an isa node with PS/2, parport, floppy and serial ports.

Remove the check_legacy_ioport call from ppc_md, it's not needed
anymore.  Hardware capabilities come from the device-tree.
Signed-off-by: default avatarOlaf Hering <olaf@aepfle.de>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 8d2169e8
...@@ -478,11 +478,39 @@ void probe_machine(void) ...@@ -478,11 +478,39 @@ 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);
} }
/* Match a class of boards, not a specific device configuration. */
int check_legacy_ioport(unsigned long base_port) int check_legacy_ioport(unsigned long base_port)
{ {
if (ppc_md.check_legacy_ioport == NULL) struct device_node *parent, *np = NULL;
return 0; int ret = -ENODEV;
return ppc_md.check_legacy_ioport(base_port);
switch(base_port) {
case I8042_DATA_REG:
np = of_find_node_by_type(NULL, "8042");
break;
case FDC_BASE: /* FDC1 */
np = of_find_node_by_type(NULL, "fdc");
break;
#ifdef CONFIG_PPC_PREP
case _PIDXR:
case _PNPWRP:
case PNPBIOS_BASE:
/* implement me */
#endif
default:
/* ipmi is supposed to fail here */
break;
}
if (!np)
return ret;
parent = of_get_parent(np);
if (parent) {
if (strcmp(parent->type, "isa") == 0)
ret = 0;
of_node_put(parent);
}
of_node_put(np);
return ret;
} }
EXPORT_SYMBOL(check_legacy_ioport); EXPORT_SYMBOL(check_legacy_ioport);
......
...@@ -190,15 +190,6 @@ static int __init cell_probe(void) ...@@ -190,15 +190,6 @@ static int __init cell_probe(void)
return 1; return 1;
} }
/*
* Cell has no legacy IO; anything calling this function has to
* fail or bad things will happen
*/
static int cell_check_legacy_ioport(unsigned int baseport)
{
return -ENODEV;
}
define_machine(cell) { define_machine(cell) {
.name = "Cell", .name = "Cell",
.probe = cell_probe, .probe = cell_probe,
...@@ -211,7 +202,6 @@ define_machine(cell) { ...@@ -211,7 +202,6 @@ define_machine(cell) {
.get_rtc_time = rtas_get_rtc_time, .get_rtc_time = rtas_get_rtc_time,
.set_rtc_time = rtas_set_rtc_time, .set_rtc_time = rtas_set_rtc_time,
.calibrate_decr = generic_calibrate_decr, .calibrate_decr = generic_calibrate_decr,
.check_legacy_ioport = cell_check_legacy_ioport,
.progress = cell_progress, .progress = cell_progress,
.init_IRQ = cell_init_irq, .init_IRQ = cell_init_irq,
.pci_setup_phb = rtas_setup_phb, .pci_setup_phb = rtas_setup_phb,
......
...@@ -128,15 +128,6 @@ static int __init celleb_probe(void) ...@@ -128,15 +128,6 @@ static int __init celleb_probe(void)
return 1; return 1;
} }
/*
* Cell has no legacy IO; anything calling this function has to
* fail or bad things will happen
*/
static int celleb_check_legacy_ioport(unsigned int baseport)
{
return -ENODEV;
}
#ifdef CONFIG_KEXEC #ifdef CONFIG_KEXEC
static void celleb_kexec_cpu_down(int crash, int secondary) static void celleb_kexec_cpu_down(int crash, int secondary)
{ {
...@@ -173,7 +164,6 @@ define_machine(celleb) { ...@@ -173,7 +164,6 @@ define_machine(celleb) {
.get_rtc_time = beat_get_rtc_time, .get_rtc_time = beat_get_rtc_time,
.set_rtc_time = beat_set_rtc_time, .set_rtc_time = beat_set_rtc_time,
.calibrate_decr = generic_calibrate_decr, .calibrate_decr = generic_calibrate_decr,
.check_legacy_ioport = celleb_check_legacy_ioport,
.progress = celleb_progress, .progress = celleb_progress,
.power_save = beat_power_save, .power_save = beat_power_save,
.nvram_size = beat_nvram_get_size, .nvram_size = beat_nvram_get_size,
......
...@@ -628,15 +628,6 @@ static void iseries_iounmap(volatile void __iomem *token) ...@@ -628,15 +628,6 @@ static void iseries_iounmap(volatile void __iomem *token)
{ {
} }
/*
* iSeries has no legacy IO, anything calling this function has to
* fail or bad things will happen
*/
static int iseries_check_legacy_ioport(unsigned int baseport)
{
return -ENODEV;
}
static int __init iseries_probe(void) static int __init iseries_probe(void)
{ {
unsigned long root = of_get_flat_dt_root(); unsigned long root = of_get_flat_dt_root();
...@@ -667,7 +658,6 @@ define_machine(iseries) { ...@@ -667,7 +658,6 @@ define_machine(iseries) {
.calibrate_decr = generic_calibrate_decr, .calibrate_decr = generic_calibrate_decr,
.progress = iSeries_progress, .progress = iSeries_progress,
.probe = iseries_probe, .probe = iseries_probe,
.check_legacy_ioport = iseries_check_legacy_ioport,
.ioremap = iseries_ioremap, .ioremap = iseries_ioremap,
.iounmap = iseries_iounmap, .iounmap = iseries_iounmap,
/* XXX Implement enable_pmcs for iSeries */ /* XXX Implement enable_pmcs for iSeries */
......
...@@ -102,12 +102,6 @@ void __init pas_setup_arch(void) ...@@ -102,12 +102,6 @@ void __init pas_setup_arch(void)
pasemi_idle_init(); pasemi_idle_init();
} }
/* No legacy IO on our parts */
static int pas_check_legacy_ioport(unsigned int baseport)
{
return -ENODEV;
}
static __init void pas_init_IRQ(void) static __init void pas_init_IRQ(void)
{ {
struct device_node *np; struct device_node *np;
...@@ -252,7 +246,6 @@ define_machine(pas) { ...@@ -252,7 +246,6 @@ define_machine(pas) {
.restart = pas_restart, .restart = pas_restart,
.get_boot_time = pas_get_boot_time, .get_boot_time = pas_get_boot_time,
.calibrate_decr = generic_calibrate_decr, .calibrate_decr = generic_calibrate_decr,
.check_legacy_ioport = pas_check_legacy_ioport,
.progress = pas_progress, .progress = pas_progress,
.machine_check_exception = pas_machine_check_handler, .machine_check_exception = pas_machine_check_handler,
.pci_irq_fixup = pas_pci_irq_fixup, .pci_irq_fixup = pas_pci_irq_fixup,
......
...@@ -635,15 +635,6 @@ static void __init pmac_init_early(void) ...@@ -635,15 +635,6 @@ static void __init pmac_init_early(void)
#endif #endif
} }
/*
* pmac has no legacy IO, anything calling this function has to
* fail or bad things will happen
*/
static int pmac_check_legacy_ioport(unsigned int baseport)
{
return -ENODEV;
}
static int __init pmac_declare_of_platform_devices(void) static int __init pmac_declare_of_platform_devices(void)
{ {
struct device_node *np; struct device_node *np;
...@@ -755,7 +746,6 @@ define_machine(powermac) { ...@@ -755,7 +746,6 @@ define_machine(powermac) {
.get_rtc_time = pmac_get_rtc_time, .get_rtc_time = pmac_get_rtc_time,
.calibrate_decr = pmac_calibrate_decr, .calibrate_decr = pmac_calibrate_decr,
.feature_call = pmac_do_feature_call, .feature_call = pmac_do_feature_call,
.check_legacy_ioport = pmac_check_legacy_ioport,
.progress = udbg_progress, .progress = udbg_progress,
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
.pci_probe_mode = pmac_pci_probe_mode, .pci_probe_mode = pmac_pci_probe_mode,
......
...@@ -335,32 +335,6 @@ static void __init pSeries_init_early(void) ...@@ -335,32 +335,6 @@ static void __init pSeries_init_early(void)
DBG(" <- pSeries_init_early()\n"); DBG(" <- pSeries_init_early()\n");
} }
static int pSeries_check_legacy_ioport(unsigned int baseport)
{
struct device_node *np;
#define I8042_DATA_REG 0x60
#define FDC_BASE 0x3f0
switch(baseport) {
case I8042_DATA_REG:
np = of_find_node_by_type(NULL, "8042");
if (np == NULL)
return -ENODEV;
of_node_put(np);
break;
case FDC_BASE:
np = of_find_node_by_type(NULL, "fdc");
if (np == NULL)
return -ENODEV;
of_node_put(np);
break;
}
return 0;
}
/* /*
* Called very early, MMU is off, device-tree isn't unflattened * Called very early, MMU is off, device-tree isn't unflattened
*/ */
...@@ -537,7 +511,6 @@ define_machine(pseries) { ...@@ -537,7 +511,6 @@ define_machine(pseries) {
.set_rtc_time = rtas_set_rtc_time, .set_rtc_time = rtas_set_rtc_time,
.calibrate_decr = generic_calibrate_decr, .calibrate_decr = generic_calibrate_decr,
.progress = rtas_progress, .progress = rtas_progress,
.check_legacy_ioport = pSeries_check_legacy_ioport,
.system_reset_exception = pSeries_system_reset_exception, .system_reset_exception = pSeries_system_reset_exception,
.machine_check_exception = pSeries_machine_check_exception, .machine_check_exception = pSeries_machine_check_exception,
}; };
...@@ -11,7 +11,12 @@ ...@@ -11,7 +11,12 @@
/* Check of existence of legacy devices */ /* Check of existence of legacy devices */
extern int check_legacy_ioport(unsigned long base_port); extern int check_legacy_ioport(unsigned long base_port);
#define PNPBIOS_BASE 0xf000 /* only relevant for PReP */ #define I8042_DATA_REG 0x60
#define FDC_BASE 0x3f0
/* only relevant for PReP */
#define _PIDXR 0x279
#define _PNPWRP 0xa79
#define PNPBIOS_BASE 0xf000
#include <linux/compiler.h> #include <linux/compiler.h>
#include <asm/page.h> #include <asm/page.h>
......
...@@ -153,9 +153,6 @@ struct machdep_calls { ...@@ -153,9 +153,6 @@ struct machdep_calls {
*/ */
long (*feature_call)(unsigned int feature, ...); long (*feature_call)(unsigned int feature, ...);
/* Check availability of legacy devices like i8042 */
int (*check_legacy_ioport)(unsigned int baseport);
/* Get legacy PCI/IDE interrupt mapping */ /* Get legacy PCI/IDE interrupt mapping */
int (*pci_get_legacy_ide_irq)(struct pci_dev *dev, int channel); int (*pci_get_legacy_ide_irq)(struct pci_dev *dev, int channel);
......
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