mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 08:26:59 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/pci-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/pci-2.6: PCI: Fix wrong reference counter check for proc_dir_entry PCI: fix up setup-bus.c #ifdef PCI: don't load acpi_php when acpi is disabled PCI: quirks: set 'En' bit of MSI Mapping for devices onHT-based nvidia platform PCI: kernel-doc: fix pci-acpi warning PCI: irq: patch for Intel ICH10 DeviceID's PCI: pci_ids: patch for Intel ICH10 DeviceID's PCI: AMD SATA IDE mode quirk PCI: drivers/pcmcia/i82092.c: fix up after pci_bus_region changes PCI: hotplug: acpiphp_ibm: Remove get device information
This commit is contained in:
commit
b8967d8883
10 changed files with 116 additions and 29 deletions
|
@ -72,7 +72,8 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return
|
||||||
#define PREFIX "ACPI: "
|
#define PREFIX "ACPI: "
|
||||||
|
|
||||||
int acpi_noirq; /* skip ACPI IRQ initialization */
|
int acpi_noirq; /* skip ACPI IRQ initialization */
|
||||||
int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */
|
int acpi_pci_disabled; /* skip ACPI PCI scan and IRQ initialization */
|
||||||
|
EXPORT_SYMBOL(acpi_pci_disabled);
|
||||||
int acpi_ht __initdata = 1; /* enable HT */
|
int acpi_ht __initdata = 1; /* enable HT */
|
||||||
|
|
||||||
int acpi_lapic;
|
int acpi_lapic;
|
||||||
|
|
|
@ -583,6 +583,10 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
|
||||||
case PCI_DEVICE_ID_INTEL_ICH9_4:
|
case PCI_DEVICE_ID_INTEL_ICH9_4:
|
||||||
case PCI_DEVICE_ID_INTEL_ICH9_5:
|
case PCI_DEVICE_ID_INTEL_ICH9_5:
|
||||||
case PCI_DEVICE_ID_INTEL_TOLAPAI_0:
|
case PCI_DEVICE_ID_INTEL_TOLAPAI_0:
|
||||||
|
case PCI_DEVICE_ID_INTEL_ICH10_0:
|
||||||
|
case PCI_DEVICE_ID_INTEL_ICH10_1:
|
||||||
|
case PCI_DEVICE_ID_INTEL_ICH10_2:
|
||||||
|
case PCI_DEVICE_ID_INTEL_ICH10_3:
|
||||||
r->name = "PIIX/ICH";
|
r->name = "PIIX/ICH";
|
||||||
r->get = pirq_piix_get;
|
r->get = pirq_piix_get;
|
||||||
r->set = pirq_piix_set;
|
r->set = pirq_piix_set;
|
||||||
|
|
|
@ -392,6 +392,9 @@ static int __init acpiphp_init(void)
|
||||||
{
|
{
|
||||||
info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
|
info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
|
||||||
|
|
||||||
|
if (acpi_pci_disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
acpiphp_debug = debug;
|
acpiphp_debug = debug;
|
||||||
|
|
||||||
/* read all the ACPI info from the system */
|
/* read all the ACPI info from the system */
|
||||||
|
@ -401,6 +404,9 @@ static int __init acpiphp_init(void)
|
||||||
|
|
||||||
static void __exit acpiphp_exit(void)
|
static void __exit acpiphp_exit(void)
|
||||||
{
|
{
|
||||||
|
if (acpi_pci_disabled)
|
||||||
|
return;
|
||||||
|
|
||||||
/* deallocate internal data structures etc. */
|
/* deallocate internal data structures etc. */
|
||||||
acpiphp_glue_exit();
|
acpiphp_glue_exit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -395,33 +395,34 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
|
||||||
{
|
{
|
||||||
acpi_handle *phandle = (acpi_handle *)context;
|
acpi_handle *phandle = (acpi_handle *)context;
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
struct acpi_device_info info;
|
struct acpi_device_info *info;
|
||||||
struct acpi_buffer info_buffer = {
|
struct acpi_buffer info_buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||||
.length = sizeof(struct acpi_device_info),
|
int retval = 0;
|
||||||
.pointer = &info,
|
|
||||||
};
|
|
||||||
|
|
||||||
status = acpi_get_object_info(handle, &info_buffer);
|
status = acpi_get_object_info(handle, &info_buffer);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
err("%s: Failed to get device information\n", __FUNCTION__);
|
err("%s: Failed to get device information status=0x%x\n",
|
||||||
return 0;
|
__FUNCTION__, status);
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
info.hardware_id.value[sizeof(info.hardware_id.value) - 1] = '\0';
|
info = info_buffer.pointer;
|
||||||
|
info->hardware_id.value[sizeof(info->hardware_id.value) - 1] = '\0';
|
||||||
|
|
||||||
if (info.current_status && (info.valid & ACPI_VALID_HID) &&
|
if (info->current_status && (info->valid & ACPI_VALID_HID) &&
|
||||||
(!strcmp(info.hardware_id.value, IBM_HARDWARE_ID1) ||
|
(!strcmp(info->hardware_id.value, IBM_HARDWARE_ID1) ||
|
||||||
!strcmp(info.hardware_id.value, IBM_HARDWARE_ID2))) {
|
!strcmp(info->hardware_id.value, IBM_HARDWARE_ID2))) {
|
||||||
dbg("found hardware: %s, handle: %p\n", info.hardware_id.value,
|
dbg("found hardware: %s, handle: %p\n",
|
||||||
handle);
|
info->hardware_id.value, handle);
|
||||||
*phandle = handle;
|
*phandle = handle;
|
||||||
/* returning non-zero causes the search to stop
|
/* returning non-zero causes the search to stop
|
||||||
* and returns this value to the caller of
|
* and returns this value to the caller of
|
||||||
* acpi_walk_namespace, but it also causes some warnings
|
* acpi_walk_namespace, but it also causes some warnings
|
||||||
* in the acpi debug code to print...
|
* in the acpi debug code to print...
|
||||||
*/
|
*/
|
||||||
return FOUND_APCI;
|
retval = FOUND_APCI;
|
||||||
}
|
}
|
||||||
return 0;
|
kfree(info);
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init ibm_acpiphp_init(void)
|
static int __init ibm_acpiphp_init(void)
|
||||||
|
|
|
@ -158,6 +158,7 @@ acpi_run_osc (
|
||||||
/**
|
/**
|
||||||
* __pci_osc_support_set - register OS support to Firmware
|
* __pci_osc_support_set - register OS support to Firmware
|
||||||
* @flags: OS support bits
|
* @flags: OS support bits
|
||||||
|
* @hid: hardware ID
|
||||||
*
|
*
|
||||||
* Update OS support fields and doing a _OSC Query to obtain an update
|
* Update OS support fields and doing a _OSC Query to obtain an update
|
||||||
* from Firmware on supported control bits.
|
* from Firmware on supported control bits.
|
||||||
|
|
|
@ -422,7 +422,7 @@ int pci_proc_detach_device(struct pci_dev *dev)
|
||||||
struct proc_dir_entry *e;
|
struct proc_dir_entry *e;
|
||||||
|
|
||||||
if ((e = dev->procent)) {
|
if ((e = dev->procent)) {
|
||||||
if (atomic_read(&e->count))
|
if (atomic_read(&e->count) > 1)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
remove_proc_entry(e->name, dev->bus->procdir);
|
remove_proc_entry(e->name, dev->bus->procdir);
|
||||||
dev->procent = NULL;
|
dev->procent = NULL;
|
||||||
|
|
|
@ -867,13 +867,13 @@ static void quirk_disable_pxb(struct pci_dev *pdev)
|
||||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb);
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb);
|
||||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb);
|
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb);
|
||||||
|
|
||||||
|
static void __devinit quirk_amd_ide_mode(struct pci_dev *pdev)
|
||||||
static void __devinit quirk_sb600_sata(struct pci_dev *pdev)
|
|
||||||
{
|
{
|
||||||
/* set sb600 sata to ahci mode */
|
/* set sb600/sb700/sb800 sata to ahci mode */
|
||||||
if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
|
u8 tmp;
|
||||||
u8 tmp;
|
|
||||||
|
|
||||||
|
pci_read_config_byte(pdev, PCI_CLASS_DEVICE, &tmp);
|
||||||
|
if (tmp == 0x01) {
|
||||||
pci_read_config_byte(pdev, 0x40, &tmp);
|
pci_read_config_byte(pdev, 0x40, &tmp);
|
||||||
pci_write_config_byte(pdev, 0x40, tmp|1);
|
pci_write_config_byte(pdev, 0x40, tmp|1);
|
||||||
pci_write_config_byte(pdev, 0x9, 1);
|
pci_write_config_byte(pdev, 0x9, 1);
|
||||||
|
@ -881,10 +881,13 @@ static void __devinit quirk_sb600_sata(struct pci_dev *pdev)
|
||||||
pci_write_config_byte(pdev, 0x40, tmp);
|
pci_write_config_byte(pdev, 0x40, tmp);
|
||||||
|
|
||||||
pdev->class = PCI_CLASS_STORAGE_SATA_AHCI;
|
pdev->class = PCI_CLASS_STORAGE_SATA_AHCI;
|
||||||
|
dev_info(&pdev->dev, "set SATA to AHCI mode\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata);
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode);
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_sb600_sata);
|
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode);
|
||||||
|
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Serverworks CSB5 IDE does not fully support native mode
|
* Serverworks CSB5 IDE does not fully support native mode
|
||||||
|
@ -1775,6 +1778,68 @@ static void __devinit quirk_nvidia_ck804_msi_ht_cap(struct pci_dev *dev)
|
||||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
|
||||||
quirk_nvidia_ck804_msi_ht_cap);
|
quirk_nvidia_ck804_msi_ht_cap);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force enable MSI mapping capability on HT bridges */
|
||||||
|
static inline void ht_enable_msi_mapping(struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
int pos, ttl = 48;
|
||||||
|
|
||||||
|
pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
|
||||||
|
while (pos && ttl--) {
|
||||||
|
u8 flags;
|
||||||
|
|
||||||
|
if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
|
||||||
|
&flags) == 0) {
|
||||||
|
dev_info(&dev->dev, "Enabling HT MSI Mapping\n");
|
||||||
|
|
||||||
|
pci_write_config_byte(dev, pos + HT_MSI_FLAGS,
|
||||||
|
flags | HT_MSI_FLAGS_ENABLE);
|
||||||
|
}
|
||||||
|
pos = pci_find_next_ht_capability(dev, pos,
|
||||||
|
HT_CAPTYPE_MSI_MAPPING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
struct pci_dev *host_bridge;
|
||||||
|
int pos, ttl = 48;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HT MSI mapping should be disabled on devices that are below
|
||||||
|
* a non-Hypertransport host bridge. Locate the host bridge...
|
||||||
|
*/
|
||||||
|
host_bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0));
|
||||||
|
if (host_bridge == NULL) {
|
||||||
|
dev_warn(&dev->dev,
|
||||||
|
"nv_msi_ht_cap_quirk didn't locate host bridge\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE);
|
||||||
|
if (pos != 0) {
|
||||||
|
/* Host bridge is to HT */
|
||||||
|
ht_enable_msi_mapping(dev);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Host bridge is not to HT, disable HT MSI mapping on this device */
|
||||||
|
pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
|
||||||
|
while (pos && ttl--) {
|
||||||
|
u8 flags;
|
||||||
|
|
||||||
|
if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
|
||||||
|
&flags) == 0) {
|
||||||
|
dev_info(&dev->dev, "Quirk disabling HT MSI mapping");
|
||||||
|
pci_write_config_byte(dev, pos + HT_MSI_FLAGS,
|
||||||
|
flags & ~HT_MSI_FLAGS_ENABLE);
|
||||||
|
}
|
||||||
|
pos = pci_find_next_ht_capability(dev, pos,
|
||||||
|
HT_CAPTYPE_MSI_MAPPING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, nv_msi_ht_cap_quirk);
|
||||||
|
|
||||||
static void __devinit quirk_msi_intx_disable_bug(struct pci_dev *dev)
|
static void __devinit quirk_msi_intx_disable_bug(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
|
dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
|
||||||
|
|
|
@ -206,10 +206,8 @@ pci_setup_bridge(struct pci_bus *bus)
|
||||||
if (bus->resource[2]->flags & IORESOURCE_PREFETCH) {
|
if (bus->resource[2]->flags & IORESOURCE_PREFETCH) {
|
||||||
l = (region.start >> 16) & 0xfff0;
|
l = (region.start >> 16) & 0xfff0;
|
||||||
l |= region.end & 0xfff00000;
|
l |= region.end & 0xfff00000;
|
||||||
#ifdef CONFIG_RESOURCES_64BIT
|
bu = upper_32_bits(region.start);
|
||||||
bu = region.start >> 32;
|
lu = upper_32_bits(region.end);
|
||||||
lu = region.end >> 32;
|
|
||||||
#endif
|
|
||||||
DBG(KERN_INFO " PREFETCH window: 0x%016llx-0x%016llx\n",
|
DBG(KERN_INFO " PREFETCH window: 0x%016llx-0x%016llx\n",
|
||||||
(unsigned long long)region.start,
|
(unsigned long long)region.start,
|
||||||
(unsigned long long)region.end);
|
(unsigned long long)region.end);
|
||||||
|
|
|
@ -647,7 +647,12 @@ static int i82092aa_set_mem_map(struct pcmcia_socket *socket, struct pccard_mem_
|
||||||
if ( (mem->card_start > 0x3ffffff) || (region.start > region.end) ||
|
if ( (mem->card_start > 0x3ffffff) || (region.start > region.end) ||
|
||||||
(mem->speed > 1000) ) {
|
(mem->speed > 1000) ) {
|
||||||
leave("i82092aa_set_mem_map: invalid address / speed");
|
leave("i82092aa_set_mem_map: invalid address / speed");
|
||||||
printk("invalid mem map for socket %i : %lx to %lx with a start of %x \n",sock,region.start, region.end, mem->card_start);
|
printk("invalid mem map for socket %i: %llx to %llx with a "
|
||||||
|
"start of %x\n",
|
||||||
|
sock,
|
||||||
|
(unsigned long long)region.start,
|
||||||
|
(unsigned long long)region.end,
|
||||||
|
mem->card_start);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2374,6 +2374,12 @@
|
||||||
#define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a
|
#define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a
|
||||||
#define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
|
#define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
|
||||||
#define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b
|
#define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b
|
||||||
|
#define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14
|
||||||
|
#define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16
|
||||||
|
#define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18
|
||||||
|
#define PCI_DEVICE_ID_INTEL_ICH10_3 0x3a1a
|
||||||
|
#define PCI_DEVICE_ID_INTEL_ICH10_4 0x3a30
|
||||||
|
#define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60
|
||||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f
|
#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f
|
||||||
#define PCI_DEVICE_ID_INTEL_IOAT_SCNB 0x65ff
|
#define PCI_DEVICE_ID_INTEL_IOAT_SCNB 0x65ff
|
||||||
#define PCI_DEVICE_ID_INTEL_TOLAPAI_0 0x5031
|
#define PCI_DEVICE_ID_INTEL_TOLAPAI_0 0x5031
|
||||||
|
|
Loading…
Reference in a new issue