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

Commit 01abc2aa authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

Revert "adjust legacy IDE resource setting (v2)"

This reverts commit ed8ccee0.

It causes hang on boot for some users and we don't yet know why:

http://bugzilla.kernel.org/show_bug.cgi?id=7562

http://lkml.org/lkml/2007/4/20/404
http://lkml.org/lkml/2007/3/25/113



Just reverse it for 2.6.21-final, having broken X server is somehow
better than unbootable system.

Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent c445a31c
Loading
Loading
Loading
Loading
+13 −32
Original line number Diff line number Diff line
@@ -682,34 +682,7 @@ static void pci_read_irq(struct pci_dev *dev)
	dev->irq = irq;
}

static void change_legacy_io_resource(struct pci_dev * dev, unsigned index,
                                      unsigned start, unsigned end)
{
	unsigned base = start & PCI_BASE_ADDRESS_IO_MASK;
	unsigned len = (end | ~PCI_BASE_ADDRESS_IO_MASK) - base + 1;

	/*
	 * Some X versions get confused when the BARs reported through
	 * /sys or /proc differ from those seen in config space, thus
	 * try to update the config space values, too.
	 */
	if (!(pci_resource_flags(dev, index) & IORESOURCE_IO))
		printk(KERN_WARNING "%s: cannot adjust BAR%u (not I/O)\n",
		       pci_name(dev), index);
	else if (pci_resource_len(dev, index) != len)
		printk(KERN_WARNING "%s: cannot adjust BAR%u (size %04X)\n",
		       pci_name(dev), index, (unsigned)pci_resource_len(dev, index));
	else {
		printk(KERN_INFO "%s: trying to change BAR%u from %04X to %04X\n",
		       pci_name(dev), index,
		       (unsigned)pci_resource_start(dev, index), base);
		pci_write_config_dword(dev, PCI_BASE_ADDRESS_0 + index * 4, base);
	}
	pci_resource_start(dev, index) = start;
	pci_resource_end(dev, index)   = end;
	pci_resource_flags(dev, index) =
		IORESOURCE_IO | IORESOURCE_PCI_FIXED | PCI_BASE_ADDRESS_SPACE_IO;
}
#define LEGACY_IO_RESOURCE	(IORESOURCE_IO | IORESOURCE_PCI_FIXED)

/**
 * pci_setup_device - fill in class and map information of a device
@@ -762,12 +735,20 @@ static int pci_setup_device(struct pci_dev * dev)
			u8 progif;
			pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
			if ((progif & 1) == 0) {
				change_legacy_io_resource(dev, 0, 0x1F0, 0x1F7);
				change_legacy_io_resource(dev, 1, 0x3F6, 0x3F6);
				dev->resource[0].start = 0x1F0;
				dev->resource[0].end = 0x1F7;
				dev->resource[0].flags = LEGACY_IO_RESOURCE;
				dev->resource[1].start = 0x3F6;
				dev->resource[1].end = 0x3F6;
				dev->resource[1].flags = LEGACY_IO_RESOURCE;
			}
			if ((progif & 4) == 0) {
				change_legacy_io_resource(dev, 2, 0x170, 0x177);
				change_legacy_io_resource(dev, 3, 0x376, 0x376);
				dev->resource[2].start = 0x170;
				dev->resource[2].end = 0x177;
				dev->resource[2].flags = LEGACY_IO_RESOURCE;
				dev->resource[3].start = 0x376;
				dev->resource[3].end = 0x376;
				dev->resource[3].flags = LEGACY_IO_RESOURCE;
			}
		}
		break;