From fbdeb12ca0b78d84745ba6b76e912c2ac4c992e6 Mon Sep 17 00:00:00 2001 From: Marcus Overhagen Date: Sun, 23 Dec 2007 23:22:54 +0000 Subject: [PATCH] Properly restore IRQ setting for JMicron PATA function. No longer reconfigure JMB360 and JMB362, those have no PATA function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23148 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/bus_managers/pci/pci_fixup.cpp | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp b/src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp index a3cb6f74a7..85c409a583 100644 --- a/src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp +++ b/src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp @@ -20,12 +20,12 @@ static void jmicron_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function, uint16 deviceId) { switch (deviceId) { - case 0x2360: - case 0x2361: - case 0x2362: - case 0x2363: - case 0x2366: + case 0x2361: // 1 SATA, 1 PATA + case 0x2363: // 2 SATA, 1 PATA + case 0x2366: // 2 SATA, 2 PATA break; + // case 0x2360: // 1 SATA + // case 0x2362: // 2 SATA default: return; } @@ -47,7 +47,10 @@ jmicron_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function val &= ~(1 << 16); val |= (1 << 1) | (1 << 17) | (1 << 22); pci->WritePciConfig(domain, bus, device, function, 0x40, 4, val); - pci->WritePciConfig(domain, bus, device, function, 0x3c, 1, irq); + if (function == 0) + pci->WritePciConfig(domain, bus, device, 1, 0x3c, 1, irq); + else + dprintf("jmicron_fixup_ahci: can't assign IRQ\n"); } dprintf("jmicron_fixup_ahci: 0x40: 0x%08lx\n", pci->ReadPciConfig(domain, bus, device, function, 0x40, 4)); dprintf("jmicron_fixup_ahci: 0xdc: 0x%08lx\n", pci->ReadPciConfig(domain, bus, device, function, 0xdc, 4)); @@ -60,10 +63,10 @@ intel_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function, { switch (deviceId) { case 0x2825: // ICH8 Desktop when in IDE emulation mode - dprintf("intel_fixup_ahci: WARNING found ICH8 device id 0x2825"); + dprintf("intel_fixup_ahci: WARNING found ICH8 device id 0x2825\n"); return; case 0x2926: // ICH9 Desktop when in IDE emulation mode - dprintf("intel_fixup_ahci: WARNING found ICH9 device id 0x2926"); + dprintf("intel_fixup_ahci: WARNING found ICH9 device id 0x2926\n"); return; case 0x27c0: // ICH7 Desktop non-AHCI and non-RAID mode @@ -124,6 +127,8 @@ pci_fixup_device(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function) uint16 vendorId = pci->ReadPciConfig(domain, bus, device, function, PCI_vendor_id, 2); uint16 deviceId = pci->ReadPciConfig(domain, bus, device, function, PCI_device_id, 2); +// dprintf("pci_fixup_device: domain %u, bus %u, device %u, function %u\n", domain, bus, device, function); + switch (vendorId) { case 0x197b: jmicron_fixup_ahci(pci, domain, bus, device, function, deviceId);