# HG changeset patch
# User Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
# Date 1314701218 -3600
# Node ID ac9aa65050e9abc8f1c12c8603acf3b99e22cddc
# Parent 469aa1fbd843d0797345ebf1e3d6c6df27ce744b
# Parent 2c687e70a34390b05ed8df833bd121e6f650193d
Merge
---
diff -r 469aa1fbd843 -r ac9aa65050e9 Config.mk
--- a/Config.mk Fri Aug 26 14:58:41 2011 +0100
+++ b/Config.mk Tue Aug 30 11:46:58 2011 +0100
@@ -1,5 +1,7 @@
# -*- mode: Makefile; -*-
+-include $(XEN_ROOT)/.config
+
# A debug build of Xen and tools?
debug ?= y
@@ -223,5 +225,3 @@
ifeq ($(OCAML_TOOLS),y)
OCAML_TOOLS := $(shell ocamlopt -v > /dev/null 2>&1 && echo "y" || echo "n")
endif
-
--include $(XEN_ROOT)/.config
diff -r 469aa1fbd843 -r ac9aa65050e9 xen/arch/x86/dmi_scan.c
--- a/xen/arch/x86/dmi_scan.c Fri Aug 26 14:58:41 2011 +0100
+++ b/xen/arch/x86/dmi_scan.c Tue Aug 30 11:46:58 2011 +0100
@@ -10,6 +10,8 @@
#include <asm/system.h>
#include <xen/dmi.h>
#include <xen/efi.h>
+#include <xen/pci.h>
+#include <xen/pci_regs.h>
#define bt_ioremap(b,l) ((void *)__acpi_map_table(b,l))
#define bt_iounmap(b,l) ((void)0)
@@ -278,6 +280,28 @@
return 0;
}
+static int __init ich10_bios_quirk(struct dmi_system_id *d)
+{
+ u32 port, smictl;
+
+ if ( pci_conf_read16(0, 0x1f, 0, PCI_VENDOR_ID) != 0x8086 )
+ return 0;
+
+ switch ( pci_conf_read16(0, 0x1f, 0, PCI_DEVICE_ID) ) {
+ case 0x3a14:
+ case 0x3a16:
+ case 0x3a18:
+ case 0x3a1a:
+ port = (pci_conf_read16(0, 0x1f, 0, 0x40) & 0xff80) + 0x30;
+ smictl = inl(port);
+ /* turn off LEGACY_USB{,2}_EN if enabled */
+ if ( smictl & 0x20008 )
+ outl(smictl & ~0x20008, port);
+ break;
+ }
+
+ return 0;
+}
#ifdef CONFIG_ACPI_SLEEP
static __init int reset_videomode_after_s3(struct dmi_blacklist *d)
@@ -342,6 +366,18 @@
} },
#endif
+ { ich10_bios_quirk, "Intel board & BIOS",
+ /*
+ * BIOS leaves legacy USB emulation enabled while
+ * SMM can't properly handle it.
+ */
+ {
+ MATCH(DMI_BOARD_VENDOR, "Intel Corp"),
+ MATCH(DMI_BIOS_VENDOR, "Intel Corp"),
+ NO_MATCH, NO_MATCH
+ }
+ },
+
#ifdef CONFIG_ACPI_BOOT
/*
* If your system is blacklisted here, but you find that acpi=force
diff -r 469aa1fbd843 -r ac9aa65050e9 xen/arch/x86/hpet.c
--- a/xen/arch/x86/hpet.c Fri Aug 26 14:58:41 2011 +0100
+++ b/xen/arch/x86/hpet.c Tue Aug 30 11:46:58 2011 +0100
@@ -342,7 +342,7 @@
{
struct msi_msg msg;
- msi_compose_msg(NULL, irq, &msg);
+ msi_compose_msg(irq, &msg);
hpet_msi_write(irq, &msg);
}
diff -r 469aa1fbd843 -r ac9aa65050e9 xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c Fri Aug 26 14:58:41 2011 +0100
+++ b/xen/arch/x86/irq.c Tue Aug 30 11:46:58 2011 +0100
@@ -1670,7 +1670,7 @@
&& !desc->chip_data->used_vectors )
desc->chip_data->used_vectors = &pdev->info.used_vectors;
set_domain_irq_pirq(d, irq, info);
- setup_msi_irq(pdev, msi_desc, irq);
+ setup_msi_irq(msi_desc, irq);
spin_unlock_irqrestore(&desc->lock, flags);
}
else
diff -r 469aa1fbd843 -r ac9aa65050e9 xen/arch/x86/msi.c
--- a/xen/arch/x86/msi.c Fri Aug 26 14:58:41 2011 +0100
+++ b/xen/arch/x86/msi.c Tue Aug 30 11:46:58 2011 +0100
@@ -120,8 +120,7 @@
/*
* MSI message composition
*/
-void msi_compose_msg(struct pci_dev *pdev, int irq,
- struct msi_msg *msg)
+void msi_compose_msg(int irq, struct msi_msg *msg)
{
unsigned dest;
cpumask_t domain;
@@ -414,11 +413,11 @@
return entry;
}
-int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq)
+int setup_msi_irq(struct msi_desc *msidesc, int irq)
{
struct msi_msg msg;
- msi_compose_msg(dev, irq, &msg);
+ msi_compose_msg(irq, &msg);
set_irq_msi(msidesc);
write_msi_msg(irq_desc[irq].msi_desc, &msg);
diff -r 469aa1fbd843 -r ac9aa65050e9 xen/arch/x86/x86_64/mmconfig_64.c
--- a/xen/arch/x86/x86_64/mmconfig_64.c Fri Aug 26 14:58:41 2011 +0100
+++ b/xen/arch/x86/x86_64/mmconfig_64.c Tue Aug 30 11:46:58 2011 +0100
@@ -113,12 +113,11 @@
}
static void __iomem *mcfg_ioremap(const struct acpi_mcfg_allocation *cfg,
- unsigned int prot)
+ unsigned long idx, unsigned int prot)
{
unsigned long virt, size;
- virt = PCI_MCFG_VIRT_START +
- ((unsigned long)cfg->pci_segment << mmcfg_pci_segment_shift) +
+ virt = PCI_MCFG_VIRT_START + (idx << mmcfg_pci_segment_shift) +
(cfg->start_bus_number << 20);
size = (cfg->end_bus_number - cfg->start_bus_number + 1) << 20;
if (virt + size < virt || virt + size > PCI_MCFG_VIRT_END)
@@ -139,7 +138,7 @@
if (pci_mmcfg_virt[idx].virt)
return 0;
- pci_mmcfg_virt[idx].virt = mcfg_ioremap(cfg, PAGE_HYPERVISOR_NOCACHE);
+ pci_mmcfg_virt[idx].virt = mcfg_ioremap(cfg, idx, PAGE_HYPERVISOR_NOCACHE);
if (!pci_mmcfg_virt[idx].virt) {
printk(KERN_ERR "PCI: Cannot map MCFG aperture for segment %04x\n",
cfg->pci_segment);
@@ -160,7 +159,7 @@
* the necessary L4 entries get populated (so that they get properly
* propagated to guest domains' page tables).
*/
- mcfg_ioremap(cfg, 0);
+ mcfg_ioremap(cfg, idx, 0);
printk(KERN_WARNING "PCI: Not using MCFG for segment %04x bus %02x-%02x\n",
cfg->pci_segment, cfg->start_bus_number, cfg->end_bus_number);
}
diff -r 469aa1fbd843 -r ac9aa65050e9 xen/include/asm-x86/msi.h
--- a/xen/include/asm-x86/msi.h Fri Aug 26 14:58:41 2011 +0100
+++ b/xen/include/asm-x86/msi.h Tue Aug 30 11:46:58 2011 +0100
@@ -81,7 +81,7 @@
extern int pci_enable_msi(struct msi_info *msi, struct msi_desc **desc);
extern void pci_disable_msi(struct msi_desc *desc);
extern void pci_cleanup_msi(struct pci_dev *pdev);
-extern int setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc, int irq);
+extern int setup_msi_irq(struct msi_desc *desc, int irq);
extern void teardown_msi_irq(int irq);
extern int msi_free_vector(struct msi_desc *entry);
extern int pci_restore_msi_state(struct pci_dev *pdev);
@@ -221,6 +221,5 @@
__u32 hi_address;
} __attribute__ ((packed));
-void msi_compose_msg(struct pci_dev *pdev, int irq,
- struct msi_msg *msg);
+void msi_compose_msg(int irq, struct msi_msg *);
#endif /* __ASM_MSI_H */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|