Commit 881b3747 authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'x86/apic' into x86/core

parents c83d1280 d4c63ec0
...@@ -205,11 +205,15 @@ EXPORT_SYMBOL_GPL(apic_ops); ...@@ -205,11 +205,15 @@ EXPORT_SYMBOL_GPL(apic_ops);
*/ */
void __cpuinit enable_NMI_through_LVT0(void) void __cpuinit enable_NMI_through_LVT0(void)
{ {
unsigned int v = APIC_DM_NMI; unsigned int v;
/* unmask and set to NMI */
v = APIC_DM_NMI;
/* Level triggered for 82489DX */ /* Level triggered for 82489DX (32bit mode) */
if (!lapic_is_integrated()) if (!lapic_is_integrated())
v |= APIC_LVT_LEVEL_TRIGGER; v |= APIC_LVT_LEVEL_TRIGGER;
apic_write(APIC_LVT0, v); apic_write(APIC_LVT0, v);
} }
...@@ -226,9 +230,13 @@ int get_physical_broadcast(void) ...@@ -226,9 +230,13 @@ int get_physical_broadcast(void)
*/ */
int lapic_get_maxlvt(void) int lapic_get_maxlvt(void)
{ {
unsigned int v = apic_read(APIC_LVR); unsigned int v;
/* 82489DXs do not report # of LVT entries. */ v = apic_read(APIC_LVR);
/*
* - we always have APIC integrated on 64bit mode
* - 82489DXs do not report # of LVT entries
*/
return APIC_INTEGRATED(GET_APIC_VERSION(v)) ? GET_APIC_MAXLVT(v) : 2; return APIC_INTEGRATED(GET_APIC_VERSION(v)) ? GET_APIC_MAXLVT(v) : 2;
} }
......
...@@ -220,6 +220,11 @@ void __cpuinit enable_NMI_through_LVT0(void) ...@@ -220,6 +220,11 @@ void __cpuinit enable_NMI_through_LVT0(void)
/* unmask and set to NMI */ /* unmask and set to NMI */
v = APIC_DM_NMI; v = APIC_DM_NMI;
/* Level triggered for 82489DX (32bit mode) */
if (!lapic_is_integrated())
v |= APIC_LVT_LEVEL_TRIGGER;
apic_write(APIC_LVT0, v); apic_write(APIC_LVT0, v);
} }
...@@ -228,11 +233,14 @@ void __cpuinit enable_NMI_through_LVT0(void) ...@@ -228,11 +233,14 @@ void __cpuinit enable_NMI_through_LVT0(void)
*/ */
int lapic_get_maxlvt(void) int lapic_get_maxlvt(void)
{ {
unsigned int v, maxlvt; unsigned int v;
v = apic_read(APIC_LVR); v = apic_read(APIC_LVR);
maxlvt = GET_APIC_MAXLVT(v); /*
return maxlvt; * - we always have APIC integrated on 64bit mode
* - 82489DXs do not report # of LVT entries
*/
return APIC_INTEGRATED(GET_APIC_VERSION(v)) ? GET_APIC_MAXLVT(v) : 2;
} }
/* /*
......
...@@ -51,6 +51,8 @@ ...@@ -51,6 +51,8 @@
#include <mach_apic.h> #include <mach_apic.h>
#include <mach_apicdef.h> #include <mach_apicdef.h>
#define __apicdebuginit(type) static type __init
int (*ioapic_renumber_irq)(int ioapic, int irq); int (*ioapic_renumber_irq)(int ioapic, int irq);
atomic_t irq_mis_count; atomic_t irq_mis_count;
...@@ -1342,7 +1344,8 @@ static void __init setup_timer_IRQ0_pin(unsigned int apic, unsigned int pin, ...@@ -1342,7 +1344,8 @@ static void __init setup_timer_IRQ0_pin(unsigned int apic, unsigned int pin,
ioapic_write_entry(apic, pin, entry); ioapic_write_entry(apic, pin, entry);
} }
void __init print_IO_APIC(void)
__apicdebuginit(void) print_IO_APIC(void)
{ {
int apic, i; int apic, i;
union IO_APIC_reg_00 reg_00; union IO_APIC_reg_00 reg_00;
...@@ -1457,9 +1460,7 @@ void __init print_IO_APIC(void) ...@@ -1457,9 +1460,7 @@ void __init print_IO_APIC(void)
return; return;
} }
#if 0 __apicdebuginit(void) print_APIC_bitfield(int base)
static void print_APIC_bitfield(int base)
{ {
unsigned int v; unsigned int v;
int i, j; int i, j;
...@@ -1480,7 +1481,7 @@ static void print_APIC_bitfield(int base) ...@@ -1480,7 +1481,7 @@ static void print_APIC_bitfield(int base)
} }
} }
void /*__init*/ print_local_APIC(void *dummy) __apicdebuginit(void) print_local_APIC(void *dummy)
{ {
unsigned int v, ver, maxlvt; unsigned int v, ver, maxlvt;
u64 icr; u64 icr;
...@@ -1564,12 +1565,12 @@ void /*__init*/ print_local_APIC(void *dummy) ...@@ -1564,12 +1565,12 @@ void /*__init*/ print_local_APIC(void *dummy)
printk("\n"); printk("\n");
} }
void print_all_local_APICs(void) __apicdebuginit(void) print_all_local_APICs(void)
{ {
on_each_cpu(print_local_APIC, NULL, 1); on_each_cpu(print_local_APIC, NULL, 1);
} }
void /*__init*/ print_PIC(void) __apicdebuginit(void) print_PIC(void)
{ {
unsigned int v; unsigned int v;
unsigned long flags; unsigned long flags;
...@@ -1601,7 +1602,17 @@ void /*__init*/ print_PIC(void) ...@@ -1601,7 +1602,17 @@ void /*__init*/ print_PIC(void)
printk(KERN_DEBUG "... PIC ELCR: %04x\n", v); printk(KERN_DEBUG "... PIC ELCR: %04x\n", v);
} }
#endif /* 0 */ __apicdebuginit(int) print_all_ICs(void)
{
print_PIC();
print_all_local_APICs();
print_IO_APIC();
return 0;
}
fs_initcall(print_all_ICs);
static void __init enable_IO_APIC(void) static void __init enable_IO_APIC(void)
{ {
...@@ -2327,8 +2338,6 @@ void __init setup_IO_APIC(void) ...@@ -2327,8 +2338,6 @@ void __init setup_IO_APIC(void)
setup_IO_APIC_irqs(); setup_IO_APIC_irqs();
init_IO_APIC_traps(); init_IO_APIC_traps();
check_timer(); check_timer();
if (!acpi_ioapic)
print_IO_APIC();
} }
/* /*
......
...@@ -55,6 +55,8 @@ ...@@ -55,6 +55,8 @@
#include <mach_ipi.h> #include <mach_ipi.h>
#include <mach_apic.h> #include <mach_apic.h>
#define __apicdebuginit(type) static type __init
struct irq_cfg { struct irq_cfg {
cpumask_t domain; cpumask_t domain;
cpumask_t old_domain; cpumask_t old_domain;
...@@ -89,8 +91,6 @@ int first_system_vector = 0xfe; ...@@ -89,8 +91,6 @@ int first_system_vector = 0xfe;
char system_vectors[NR_VECTORS] = { [0 ... NR_VECTORS-1] = SYS_VECTOR_FREE}; char system_vectors[NR_VECTORS] = { [0 ... NR_VECTORS-1] = SYS_VECTOR_FREE};
#define __apicdebuginit __init
int sis_apic_bug; /* not actually supported, dummy for compile */ int sis_apic_bug; /* not actually supported, dummy for compile */
static int no_timer_check; static int no_timer_check;
...@@ -1117,7 +1117,8 @@ static void __init setup_timer_IRQ0_pin(unsigned int apic, unsigned int pin, ...@@ -1117,7 +1117,8 @@ static void __init setup_timer_IRQ0_pin(unsigned int apic, unsigned int pin,
ioapic_write_entry(apic, pin, entry); ioapic_write_entry(apic, pin, entry);
} }
void __apicdebuginit print_IO_APIC(void)
__apicdebuginit(void) print_IO_APIC(void)
{ {
int apic, i; int apic, i;
union IO_APIC_reg_00 reg_00; union IO_APIC_reg_00 reg_00;
...@@ -1211,9 +1212,7 @@ void __apicdebuginit print_IO_APIC(void) ...@@ -1211,9 +1212,7 @@ void __apicdebuginit print_IO_APIC(void)
return; return;
} }
#if 0 __apicdebuginit(void) print_APIC_bitfield(int base)
static __apicdebuginit void print_APIC_bitfield (int base)
{ {
unsigned int v; unsigned int v;
int i, j; int i, j;
...@@ -1234,7 +1233,7 @@ static __apicdebuginit void print_APIC_bitfield (int base) ...@@ -1234,7 +1233,7 @@ static __apicdebuginit void print_APIC_bitfield (int base)
} }
} }
void __apicdebuginit print_local_APIC(void * dummy) __apicdebuginit(void) print_local_APIC(void *dummy)
{ {
unsigned int v, ver, maxlvt; unsigned int v, ver, maxlvt;
unsigned long icr; unsigned long icr;
...@@ -1311,12 +1310,12 @@ void __apicdebuginit print_local_APIC(void * dummy) ...@@ -1311,12 +1310,12 @@ void __apicdebuginit print_local_APIC(void * dummy)
printk("\n"); printk("\n");
} }
void print_all_local_APICs (void) __apicdebuginit(void) print_all_local_APICs(void)
{ {
on_each_cpu(print_local_APIC, NULL, 1); on_each_cpu(print_local_APIC, NULL, 1);
} }
void __apicdebuginit print_PIC(void) __apicdebuginit(void) print_PIC(void)
{ {
unsigned int v; unsigned int v;
unsigned long flags; unsigned long flags;
...@@ -1348,7 +1347,17 @@ void __apicdebuginit print_PIC(void) ...@@ -1348,7 +1347,17 @@ void __apicdebuginit print_PIC(void)
printk(KERN_DEBUG "... PIC ELCR: %04x\n", v); printk(KERN_DEBUG "... PIC ELCR: %04x\n", v);
} }
#endif /* 0 */ __apicdebuginit(int) print_all_ICs(void)
{
print_PIC();
print_all_local_APICs();
print_IO_APIC();
return 0;
}
fs_initcall(print_all_ICs);
void __init enable_IO_APIC(void) void __init enable_IO_APIC(void)
{ {
...@@ -2172,8 +2181,6 @@ void __init setup_IO_APIC(void) ...@@ -2172,8 +2181,6 @@ void __init setup_IO_APIC(void)
setup_IO_APIC_irqs(); setup_IO_APIC_irqs();
init_IO_APIC_traps(); init_IO_APIC_traps();
check_timer(); check_timer();
if (!acpi_ioapic)
print_IO_APIC();
} }
struct sysfs_ioapic_data { struct sysfs_ioapic_data {
......
...@@ -250,10 +250,5 @@ int __init pci_acpi_init(void) ...@@ -250,10 +250,5 @@ int __init pci_acpi_init(void)
acpi_pci_irq_enable(dev); acpi_pci_irq_enable(dev);
} }
#ifdef CONFIG_X86_IO_APIC
if (acpi_ioapic)
print_IO_APIC();
#endif
return 0; return 0;
} }
...@@ -64,7 +64,6 @@ extern unsigned long io_apic_irqs; ...@@ -64,7 +64,6 @@ extern unsigned long io_apic_irqs;
extern void init_VISWS_APIC_irqs(void); extern void init_VISWS_APIC_irqs(void);
extern void setup_IO_APIC(void); extern void setup_IO_APIC(void);
extern void disable_IO_APIC(void); extern void disable_IO_APIC(void);
extern void print_IO_APIC(void);
extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn); extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn);
extern void setup_ioapic_dest(void); extern void setup_ioapic_dest(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment