Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6440fcfc authored by Atsushi Nemoto's avatar Atsushi Nemoto Committed by Ralf Baechle
Browse files

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



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

Signed-off-by: default avatarAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent b1043cc7
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -29,6 +29,35 @@

#define IDE_ARCH_OBSOLETE_DEFAULTS

static __inline__ int ide_probe_legacy(void)
{
#ifdef CONFIG_PCI
	struct pci_dev *dev;
	/*
	 * This can be called on the ide_setup() path, super-early in
	 * boot.  But the down_read() will enable local interrupts,
	 * which can cause some machines to crash.  So here we detect
	 * and flag that situation and bail out early.
	 */
	if (no_pci_devices())
		return 0;
	dev = pci_get_class(PCI_CLASS_BRIDGE_EISA << 8, NULL);
	if (dev)
		goto found;
	dev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
	if (dev)
		goto found;
	return 0;
found:
	pci_dev_put(dev);
	return 1;
#elif defined(CONFIG_EISA) || defined(CONFIG_ISA)
	return 1;
#else
	return 0;
#endif
}

static __inline__ int ide_default_irq(unsigned long base)
{
	switch (base) {
@@ -45,6 +74,8 @@ static __inline__ int ide_default_irq(unsigned long base)

static __inline__ unsigned long ide_default_io_base(int index)
{
	if (!ide_probe_legacy())
		return 0;
	/*
	 *      If PCI is present then it is not safe to poke around
	 *      the other legacy IDE ports. Only 0x1f0 and 0x170 are