Commit 6440fcfc62767028a2bbdf742549d24f6a023004

Authored by Atsushi Nemoto
Committed by Ralf Baechle
1 parent b1043cc7d9

[MIPS] No ide_default_io_base() if PCI IDE was not found

Revert b5438582090406e2ccb4169d9b2df7c9939ae42b and add
no_pci_devices() check to avoid crash due to early calling of
pci_get_class().

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

Showing 1 changed file with 31 additions and 0 deletions Side-by-side Diff

include/asm-mips/mach-generic/ide.h
... ... @@ -29,6 +29,35 @@
29 29  
30 30 #define IDE_ARCH_OBSOLETE_DEFAULTS
31 31  
  32 +static __inline__ int ide_probe_legacy(void)
  33 +{
  34 +#ifdef CONFIG_PCI
  35 + struct pci_dev *dev;
  36 + /*
  37 + * This can be called on the ide_setup() path, super-early in
  38 + * boot. But the down_read() will enable local interrupts,
  39 + * which can cause some machines to crash. So here we detect
  40 + * and flag that situation and bail out early.
  41 + */
  42 + if (no_pci_devices())
  43 + return 0;
  44 + dev = pci_get_class(PCI_CLASS_BRIDGE_EISA << 8, NULL);
  45 + if (dev)
  46 + goto found;
  47 + dev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
  48 + if (dev)
  49 + goto found;
  50 + return 0;
  51 +found:
  52 + pci_dev_put(dev);
  53 + return 1;
  54 +#elif defined(CONFIG_EISA) || defined(CONFIG_ISA)
  55 + return 1;
  56 +#else
  57 + return 0;
  58 +#endif
  59 +}
  60 +
32 61 static __inline__ int ide_default_irq(unsigned long base)
33 62 {
34 63 switch (base) {
... ... @@ -45,6 +74,8 @@
45 74  
46 75 static __inline__ unsigned long ide_default_io_base(int index)
47 76 {
  77 + if (!ide_probe_legacy())
  78 + return 0;
48 79 /*
49 80 * If PCI is present then it is not safe to poke around
50 81 * the other legacy IDE ports. Only 0x1f0 and 0x170 are