Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 100036
b: refs/heads/master
c: e2079c4
h: refs/heads/master
v: v3
  • Loading branch information
Rafael J. Wysocki authored and Ingo Molnar committed Jul 9, 2008
1 parent 6361e6d commit 5ffc611
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c2e6d65bcea2672788f9bb58ce7606c41388387b
refs/heads/master: e2079c43861f71b2deb78ee20e247ad954fdd67e
43 changes: 37 additions & 6 deletions trunk/arch/x86/kernel/acpi/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -1373,8 +1373,6 @@ static void __init acpi_process_madt(void)
return;
}

#ifdef __i386__

static int __init disable_acpi_irq(const struct dmi_system_id *d)
{
if (!acpi_force) {
Expand Down Expand Up @@ -1435,6 +1433,17 @@ dmi_disable_irq0_through_ioapic(const struct dmi_system_id *d)
return 0;
}

/*
* Force ignoring BIOS IRQ0 pin2 override
*/
static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
{
pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n", d->ident);
acpi_skip_timer_override = 1;
force_mask_ioapic_irq_2();
return 0;
}

/*
* If your system is blacklisted here, but you find that acpi=force
* works for you, please contact acpi-devel@sourceforge.net
Expand Down Expand Up @@ -1628,11 +1637,35 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
},
},
/*
* HP laptops which use a DSDT reporting as HP/SB400/10000,
* which includes some code which overrides all temperature
* trip points to 16C if the INTIN2 input of the I/O APIC
* is enabled. This input is incorrectly designated the
* ISA IRQ 0 via an interrupt source override even though
* it is wired to the output of the master 8259A and INTIN0
* is not connected at all. Force ignoring BIOS IRQ0 pin2
* override in that cases.
*/
{
.callback = dmi_ignore_irq0_timer_override,
.ident = "HP NX6125 laptop",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6125"),
},
},
{
.callback = dmi_ignore_irq0_timer_override,
.ident = "HP NX6325 laptop",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
},
},
{}
};

#endif /* __i386__ */

/*
* acpi_boot_table_init() and acpi_boot_init()
* called from setup_arch(), always.
Expand Down Expand Up @@ -1660,9 +1693,7 @@ int __init acpi_boot_table_init(void)
{
int error;

#ifdef __i386__
dmi_check_system(acpi_dmi_table);
#endif

/*
* If acpi_disabled, bail out
Expand Down
10 changes: 10 additions & 0 deletions trunk/arch/x86/kernel/io_apic_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@ static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
static DEFINE_SPINLOCK(ioapic_lock);
static DEFINE_SPINLOCK(vector_lock);

static bool mask_ioapic_irq_2 __initdata;

void __init force_mask_ioapic_irq_2(void)
{
mask_ioapic_irq_2 = true;
}

int timer_through_8259 __initdata;

/*
Expand Down Expand Up @@ -2172,6 +2179,9 @@ static inline void __init check_timer(void)
printk(KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n",
vector, apic1, pin1, apic2, pin2);

if (mask_ioapic_irq_2)
mask_IO_APIC_irq(2);

/*
* Some BIOS writers are clueless and report the ExtINTA
* I/O APIC input from the cascaded 8259A as the timer
Expand Down
10 changes: 10 additions & 0 deletions trunk/arch/x86/kernel/io_apic_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,13 @@ static int no_timer_check;

static int disable_timer_pin_1 __initdata;

static bool mask_ioapic_irq_2 __initdata;

void __init force_mask_ioapic_irq_2(void)
{
mask_ioapic_irq_2 = true;
}

int timer_through_8259 __initdata;

/* Where if anywhere is the i8259 connect in external int mode */
Expand Down Expand Up @@ -1698,6 +1705,9 @@ static inline void __init check_timer(void)
apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n",
cfg->vector, apic1, pin1, apic2, pin2);

if (mask_ioapic_irq_2)
mask_IO_APIC_irq(2);

/*
* Some BIOS writers are clueless and report the ExtINTA
* I/O APIC input from the cascaded 8259A as the timer
Expand Down
1 change: 1 addition & 0 deletions trunk/include/asm-x86/genapic_32.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,5 +119,6 @@ enum uv_system_type {UV_NONE, UV_LEGACY_APIC, UV_X2APIC, UV_NON_UNIQUE_APIC};
#define is_uv_system() 0
#define uv_wakeup_secondary(a, b) 1

extern void force_mask_ioapic_irq_2(void);

#endif
2 changes: 2 additions & 0 deletions trunk/include/asm-x86/genapic_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,6 @@ extern int uv_wakeup_secondary(int phys_apicid, unsigned int start_rip);

extern void setup_apic_routing(void);

extern void force_mask_ioapic_irq_2(void);

#endif

0 comments on commit 5ffc611

Please sign in to comment.