mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 09:02:00 +00:00
[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: Olaf Hering <olaf@aepfle.de> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
8d2169e8d6
commit
8d8a0241eb
@ -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)
|
|||||||
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) {
|
|||||||
.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)
|
|||||||
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) {
|
|||||||
.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)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* 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) {
|
|||||||
.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)
|
|||||||
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) {
|
|||||||
.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)
|
|||||||
#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) {
|
|||||||
.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)
|
|||||||
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) {
|
|||||||
.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 @@
|
|||||||
|
|
||||||
/* 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 {
|
|||||||
*/
|
*/
|
||||||
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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user