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

Commit 958ede7f authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'x86-fixes-for-linus' of...

Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86 quirk: Fix polarity for IRQ0 pin2 override on SB800 systems
  x86/mrst: Fix apb timer rating when lapic timer is used
  x86: Fix reboot problem on VersaLogic Menlow boards
parents d4035850 7f74f8f2
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -88,6 +88,7 @@ extern int acpi_disabled;
extern int acpi_pci_disabled;
extern int acpi_pci_disabled;
extern int acpi_skip_timer_override;
extern int acpi_skip_timer_override;
extern int acpi_use_timer_override;
extern int acpi_use_timer_override;
extern int acpi_fix_pin2_polarity;


extern u8 acpi_sci_flags;
extern u8 acpi_sci_flags;
extern int acpi_sci_override_gsi;
extern int acpi_sci_override_gsi;
+10 −4
Original line number Original line Diff line number Diff line
@@ -72,6 +72,7 @@ u8 acpi_sci_flags __initdata;
int acpi_sci_override_gsi __initdata;
int acpi_sci_override_gsi __initdata;
int acpi_skip_timer_override __initdata;
int acpi_skip_timer_override __initdata;
int acpi_use_timer_override __initdata;
int acpi_use_timer_override __initdata;
int acpi_fix_pin2_polarity __initdata;


#ifdef CONFIG_X86_LOCAL_APIC
#ifdef CONFIG_X86_LOCAL_APIC
static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
@@ -415,11 +416,16 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header,
		return 0;
		return 0;
	}
	}


	if (acpi_skip_timer_override &&
	if (intsrc->source_irq == 0 && intsrc->global_irq == 2) {
	    intsrc->source_irq == 0 && intsrc->global_irq == 2) {
		if (acpi_skip_timer_override) {
			printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n");
			printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n");
			return 0;
			return 0;
		}
		}
		if (acpi_fix_pin2_polarity && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) {
			intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK;
			printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n");
		}
	}


	mp_override_legacy_irq(intsrc->source_irq,
	mp_override_legacy_irq(intsrc->source_irq,
				intsrc->inti_flags & ACPI_MADT_POLARITY_MASK,
				intsrc->inti_flags & ACPI_MADT_POLARITY_MASK,
+1 −1
Original line number Original line Diff line number Diff line
@@ -284,7 +284,7 @@ static int __init apbt_clockevent_register(void)
	memcpy(&adev->evt, &apbt_clockevent, sizeof(struct clock_event_device));
	memcpy(&adev->evt, &apbt_clockevent, sizeof(struct clock_event_device));


	if (mrst_timer_options == MRST_TIMER_LAPIC_APBT) {
	if (mrst_timer_options == MRST_TIMER_LAPIC_APBT) {
		apbt_clockevent.rating = APBT_CLOCKEVENT_RATING - 100;
		adev->evt.rating = APBT_CLOCKEVENT_RATING - 100;
		global_clock_event = &adev->evt;
		global_clock_event = &adev->evt;
		printk(KERN_DEBUG "%s clockevent registered as global\n",
		printk(KERN_DEBUG "%s clockevent registered as global\n",
		       global_clock_event->name);
		       global_clock_event->name);
+7 −9
Original line number Original line Diff line number Diff line
@@ -143,15 +143,10 @@ static void __init ati_bugs(int num, int slot, int func)


static u32 __init ati_sbx00_rev(int num, int slot, int func)
static u32 __init ati_sbx00_rev(int num, int slot, int func)
{
{
	u32 old, d;
	u32 d;


	d = read_pci_config(num, slot, func, 0x70);
	old = d;
	d &= ~(1<<8);
	write_pci_config(num, slot, func, 0x70, d);
	d = read_pci_config(num, slot, func, 0x8);
	d = read_pci_config(num, slot, func, 0x8);
	d &= 0xff;
	d &= 0xff;
	write_pci_config(num, slot, func, 0x70, old);


	return d;
	return d;
}
}
@@ -160,13 +155,16 @@ static void __init ati_bugs_contd(int num, int slot, int func)
{
{
	u32 d, rev;
	u32 d, rev;


	if (acpi_use_timer_override)
		return;

	rev = ati_sbx00_rev(num, slot, func);
	rev = ati_sbx00_rev(num, slot, func);
	if (rev >= 0x40)
		acpi_fix_pin2_polarity = 1;

	if (rev > 0x13)
	if (rev > 0x13)
		return;
		return;


	if (acpi_use_timer_override)
		return;

	/* check for IRQ0 interrupt swap */
	/* check for IRQ0 interrupt swap */
	d = read_pci_config(num, slot, func, 0x64);
	d = read_pci_config(num, slot, func, 0x64);
	if (!(d & (1<<14)))
	if (!(d & (1<<14)))
+8 −0
Original line number Original line Diff line number Diff line
@@ -285,6 +285,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
			DMI_MATCH(DMI_BOARD_NAME, "P4S800"),
			DMI_MATCH(DMI_BOARD_NAME, "P4S800"),
		},
		},
	},
	},
	{	/* Handle problems with rebooting on VersaLogic Menlow boards */
		.callback = set_bios_reboot,
		.ident = "VersaLogic Menlow based board",
		.matches = {
			DMI_MATCH(DMI_BOARD_VENDOR, "VersaLogic Corporation"),
			DMI_MATCH(DMI_BOARD_NAME, "VersaLogic Menlow board"),
		},
	},
	{ }
	{ }
};
};