diff options
Diffstat (limited to 'arch/x86_64/kernel/io_apic.c')
-rw-r--r-- | arch/x86_64/kernel/io_apic.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index e8cf44ef8778..4282d72b2a26 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
@@ -304,6 +304,14 @@ void __init check_ioapic(void) | |||
304 | #endif | 304 | #endif |
305 | /* RED-PEN skip them on mptables too? */ | 305 | /* RED-PEN skip them on mptables too? */ |
306 | return; | 306 | return; |
307 | case PCI_VENDOR_ID_ATI: | ||
308 | if (apic_runs_main_timer != 0) | ||
309 | break; | ||
310 | printk(KERN_INFO | ||
311 | "ATI board detected. Using APIC/PM timer.\n"); | ||
312 | apic_runs_main_timer = 1; | ||
313 | nohpet = 1; | ||
314 | return; | ||
307 | } | 315 | } |
308 | 316 | ||
309 | /* No multi-function device? */ | 317 | /* No multi-function device? */ |
@@ -2027,7 +2035,7 @@ int __init io_apic_get_redir_entries (int ioapic) | |||
2027 | } | 2035 | } |
2028 | 2036 | ||
2029 | 2037 | ||
2030 | int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low) | 2038 | int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity) |
2031 | { | 2039 | { |
2032 | struct IO_APIC_route_entry entry; | 2040 | struct IO_APIC_route_entry entry; |
2033 | unsigned long flags; | 2041 | unsigned long flags; |
@@ -2049,8 +2057,8 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a | |||
2049 | entry.delivery_mode = INT_DELIVERY_MODE; | 2057 | entry.delivery_mode = INT_DELIVERY_MODE; |
2050 | entry.dest_mode = INT_DEST_MODE; | 2058 | entry.dest_mode = INT_DEST_MODE; |
2051 | entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); | 2059 | entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); |
2052 | entry.trigger = edge_level; | 2060 | entry.trigger = triggering; |
2053 | entry.polarity = active_high_low; | 2061 | entry.polarity = polarity; |
2054 | entry.mask = 1; /* Disabled (masked) */ | 2062 | entry.mask = 1; /* Disabled (masked) */ |
2055 | 2063 | ||
2056 | irq = gsi_irq_sharing(irq); | 2064 | irq = gsi_irq_sharing(irq); |
@@ -2065,9 +2073,9 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a | |||
2065 | apic_printk(APIC_VERBOSE,KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> " | 2073 | apic_printk(APIC_VERBOSE,KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> " |
2066 | "IRQ %d Mode:%i Active:%i)\n", ioapic, | 2074 | "IRQ %d Mode:%i Active:%i)\n", ioapic, |
2067 | mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq, | 2075 | mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq, |
2068 | edge_level, active_high_low); | 2076 | triggering, polarity); |
2069 | 2077 | ||
2070 | ioapic_register_intr(irq, entry.vector, edge_level); | 2078 | ioapic_register_intr(irq, entry.vector, triggering); |
2071 | 2079 | ||
2072 | if (!ioapic && (irq < 16)) | 2080 | if (!ioapic && (irq < 16)) |
2073 | disable_8259A_irq(irq); | 2081 | disable_8259A_irq(irq); |