aboutsummaryrefslogtreecommitdiffstats
path: root/pci
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-06-22 10:18:46 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2006-06-22 10:18:46 -0700
commitc16d033288d8409b168cccfdfa12a9b413466c57 (patch)
treed544f98b7cbfe44c4a16454361ebaee2b4e8d8bc /pci
parent2c24f77edd13d12fdbcc341e5cf1cb63e0fcde25 (diff)
downloadpatches-c16d033288d8409b168cccfdfa12a9b413466c57.tar.gz
remove pci patches that made it into mainline
Diffstat (limited to 'pci')
-rw-r--r--pci/acpi_pcihp-add-support-for-_hpx.patch424
-rw-r--r--pci/acpi_pcihp-fix-programming-_hpp-values.patch135
-rw-r--r--pci/acpi_pcihp-remove-improper-error-message-about-oshp.patch75
-rw-r--r--pci/acpiphp-configure-_prt-v3.patch128
-rw-r--r--pci/acpiphp-host-and-p2p-hotplug.patch31
-rw-r--r--pci/acpiphp-hotplug-slot-hotplug.patch268
-rw-r--r--pci/acpiphp-turn-off-slot-power-at-error-case.patch41
-rw-r--r--pci/pci-hotplug-don-t-use-acpi_os_free.patch113
-rw-r--r--pci/pci-hotplug-fake-null-pointer-dereferences-in-ibm-hot-plug-controller-driver.patch73
-rw-r--r--pci/pci-hotplug-fix-recovery-path-from-errors-during-pcie_init.patch83
-rw-r--r--pci/pci-hotplug-tollhouse-hp-sgi-hotplug-driver-changes.patch123
-rw-r--r--pci/pci-pci_ids-add-new-device-ids.patch30
-rw-r--r--pci/pciehp-add-missing-pci_dev_put.patch36
-rw-r--r--pci/pciehp-dont-call-pci_enable_dev.patch29
-rw-r--r--pci/pciehp-fix-programming-hotplug-parameters.patch179
-rw-r--r--pci/pciehp-implement-get_address-callback.patch60
-rw-r--r--pci/pciehp-replace-pci_find_slot-with-pci_get_slot.patch70
-rw-r--r--pci/sgi-hotplug-incorrect-power-status.patch37
-rw-r--r--pci/shpc-cleanup-shpc-logical-slot-register-access.patch142
-rw-r--r--pci/shpc-cleanup-shpc-logical-slot-register-bits-access.patch299
-rw-r--r--pci/shpc-cleanup-shpc-register-access.patch536
-rw-r--r--pci/shpc-fix-shpc-contoller-serr-int-register-bits-access.patch115
-rw-r--r--pci/shpc-fix-shpc-logical-slot-register-bits-access.patch148
-rw-r--r--pci/shpchp-cleanup-improper-info-messages.patch164
-rw-r--r--pci/shpchp-cleanup-interrupt-handler.patch204
-rw-r--r--pci/shpchp-cleanup-interrupt-polling-timer.patch105
-rw-r--r--pci/shpchp-cleanup-shpc-commands.patch191
-rw-r--r--pci/shpchp-create-shpchpd-at-controller-probe-time.patch90
-rw-r--r--pci/shpchp-mask-global-serr-and-intr-at-controller-release-time.patch45
-rw-r--r--pci/shpchp-remove-unnecessary-hpc_ctlr_handle-check.patch371
-rw-r--r--pci/shpchp-remove-unused-hpc_evelnt_lock.patch50
31 files changed, 0 insertions, 4395 deletions
diff --git a/pci/acpi_pcihp-add-support-for-_hpx.patch b/pci/acpi_pcihp-add-support-for-_hpx.patch
deleted file mode 100644
index e4dafc5655d6b..0000000000000
--- a/pci/acpi_pcihp-add-support-for-_hpx.patch
+++ /dev/null
@@ -1,424 +0,0 @@
-From pcihpd-discuss-admin@lists.sourceforge.net Mon May 1 19:00:10 2006
-Message-ID: <4456BC7A.10908@jp.fujitsu.com>
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: gregkh@suse.de, kristen.c.accardi@intel.com
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: acpi_pcihp: Add support for _HPX
-Date: Tue, 02 May 2006 10:57:14 +0900
-
-This patch adds support for _HPX (Hot Plug Parameter Extensions)
-defined in ACPI3.0a spec.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/acpi_pcihp.c | 190 +++++++++++++++++++++++++++++++++++--
- drivers/pci/hotplug/acpiphp_glue.c | 31 +++---
- drivers/pci/hotplug/pci_hotplug.h | 48 ++++++++-
- drivers/pci/hotplug/shpchp_pci.c | 35 ++++--
- 4 files changed, 265 insertions(+), 39 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/acpi_pcihp.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpi_pcihp.c
-@@ -47,6 +47,171 @@
-
- static int debug_acpi;
-
-+static acpi_status
-+decode_type0_hpx_record(union acpi_object *record, struct hotplug_params *hpx)
-+{
-+ int i;
-+ union acpi_object *fields = record->package.elements;
-+ u32 revision = fields[1].integer.value;
-+
-+ switch (revision) {
-+ case 1:
-+ if (record->package.count != 6)
-+ return AE_ERROR;
-+ for (i = 2; i < 6; i++)
-+ if (fields[i].type != ACPI_TYPE_INTEGER)
-+ return AE_ERROR;
-+ hpx->t0 = &hpx->type0_data;
-+ hpx->t0->revision = revision;
-+ hpx->t0->cache_line_size = fields[2].integer.value;
-+ hpx->t0->latency_timer = fields[3].integer.value;
-+ hpx->t0->enable_serr = fields[4].integer.value;
-+ hpx->t0->enable_perr = fields[5].integer.value;
-+ break;
-+ default:
-+ printk(KERN_WARNING
-+ "%s: Type 0 Revision %d record not supported\n",
-+ __FUNCTION__, revision);
-+ return AE_ERROR;
-+ }
-+ return AE_OK;
-+}
-+
-+static acpi_status
-+decode_type1_hpx_record(union acpi_object *record, struct hotplug_params *hpx)
-+{
-+ int i;
-+ union acpi_object *fields = record->package.elements;
-+ u32 revision = fields[1].integer.value;
-+
-+ switch (revision) {
-+ case 1:
-+ if (record->package.count != 5)
-+ return AE_ERROR;
-+ for (i = 2; i < 5; i++)
-+ if (fields[i].type != ACPI_TYPE_INTEGER)
-+ return AE_ERROR;
-+ hpx->t1 = &hpx->type1_data;
-+ hpx->t1->revision = revision;
-+ hpx->t1->max_mem_read = fields[2].integer.value;
-+ hpx->t1->avg_max_split = fields[3].integer.value;
-+ hpx->t1->tot_max_split = fields[4].integer.value;
-+ break;
-+ default:
-+ printk(KERN_WARNING
-+ "%s: Type 1 Revision %d record not supported\n",
-+ __FUNCTION__, revision);
-+ return AE_ERROR;
-+ }
-+ return AE_OK;
-+}
-+
-+static acpi_status
-+decode_type2_hpx_record(union acpi_object *record, struct hotplug_params *hpx)
-+{
-+ int i;
-+ union acpi_object *fields = record->package.elements;
-+ u32 revision = fields[1].integer.value;
-+
-+ switch (revision) {
-+ case 1:
-+ if (record->package.count != 18)
-+ return AE_ERROR;
-+ for (i = 2; i < 18; i++)
-+ if (fields[i].type != ACPI_TYPE_INTEGER)
-+ return AE_ERROR;
-+ hpx->t2 = &hpx->type2_data;
-+ hpx->t2->revision = revision;
-+ hpx->t2->unc_err_mask_and = fields[2].integer.value;
-+ hpx->t2->unc_err_mask_or = fields[3].integer.value;
-+ hpx->t2->unc_err_sever_and = fields[4].integer.value;
-+ hpx->t2->unc_err_sever_or = fields[5].integer.value;
-+ hpx->t2->cor_err_mask_and = fields[6].integer.value;
-+ hpx->t2->cor_err_mask_or = fields[7].integer.value;
-+ hpx->t2->adv_err_cap_and = fields[8].integer.value;
-+ hpx->t2->adv_err_cap_or = fields[9].integer.value;
-+ hpx->t2->pci_exp_devctl_and = fields[10].integer.value;
-+ hpx->t2->pci_exp_devctl_or = fields[11].integer.value;
-+ hpx->t2->pci_exp_lnkctl_and = fields[12].integer.value;
-+ hpx->t2->pci_exp_lnkctl_or = fields[13].integer.value;
-+ hpx->t2->sec_unc_err_sever_and = fields[14].integer.value;
-+ hpx->t2->sec_unc_err_sever_or = fields[15].integer.value;
-+ hpx->t2->sec_unc_err_mask_and = fields[16].integer.value;
-+ hpx->t2->sec_unc_err_mask_or = fields[17].integer.value;
-+ break;
-+ default:
-+ printk(KERN_WARNING
-+ "%s: Type 2 Revision %d record not supported\n",
-+ __FUNCTION__, revision);
-+ return AE_ERROR;
-+ }
-+ return AE_OK;
-+}
-+
-+static acpi_status
-+acpi_run_hpx(acpi_handle handle, struct hotplug_params *hpx)
-+{
-+ acpi_status status;
-+ struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-+ union acpi_object *package, *record, *fields;
-+ u32 type;
-+ int i;
-+
-+ /* Clear the return buffer with zeros */
-+ memset(hpx, 0, sizeof(struct hotplug_params));
-+
-+ status = acpi_evaluate_object(handle, "_HPX", NULL, &buffer);
-+ if (ACPI_FAILURE(status))
-+ return status;
-+
-+ package = (union acpi_object *)buffer.pointer;
-+ if (package->type != ACPI_TYPE_PACKAGE) {
-+ status = AE_ERROR;
-+ goto exit;
-+ }
-+
-+ for (i = 0; i < package->package.count; i++) {
-+ record = &package->package.elements[i];
-+ if (record->type != ACPI_TYPE_PACKAGE) {
-+ status = AE_ERROR;
-+ goto exit;
-+ }
-+
-+ fields = record->package.elements;
-+ if (fields[0].type != ACPI_TYPE_INTEGER ||
-+ fields[1].type != ACPI_TYPE_INTEGER) {
-+ status = AE_ERROR;
-+ goto exit;
-+ }
-+
-+ type = fields[0].integer.value;
-+ switch (type) {
-+ case 0:
-+ status = decode_type0_hpx_record(record, hpx);
-+ if (ACPI_FAILURE(status))
-+ goto exit;
-+ break;
-+ case 1:
-+ status = decode_type1_hpx_record(record, hpx);
-+ if (ACPI_FAILURE(status))
-+ goto exit;
-+ break;
-+ case 2:
-+ status = decode_type2_hpx_record(record, hpx);
-+ if (ACPI_FAILURE(status))
-+ goto exit;
-+ break;
-+ default:
-+ printk(KERN_ERR "%s: Type %d record not supported\n",
-+ __FUNCTION__, type);
-+ status = AE_ERROR;
-+ goto exit;
-+ }
-+ }
-+ exit:
-+ kfree(buffer.pointer);
-+ return status;
-+}
-
- static acpi_status
- acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp)
-@@ -60,6 +225,9 @@ acpi_run_hpp(acpi_handle handle, struct
-
- acpi_get_name(handle, ACPI_FULL_PATHNAME, &string);
-
-+ /* Clear the return buffer with zeros */
-+ memset(hpp, 0, sizeof(struct hotplug_params));
-+
- /* get _hpp */
- status = acpi_evaluate_object(handle, METHOD_NAME__HPP, NULL, &ret_buf);
- switch (status) {
-@@ -108,15 +276,16 @@ acpi_run_hpp(acpi_handle handle, struct
- }
- }
-
-- hpp->cache_line_size = nui[0];
-- hpp->latency_timer = nui[1];
-- hpp->enable_serr = nui[2];
-- hpp->enable_perr = nui[3];
--
-- pr_debug(" _HPP: cache_line_size=0x%x\n", hpp->cache_line_size);
-- pr_debug(" _HPP: latency timer =0x%x\n", hpp->latency_timer);
-- pr_debug(" _HPP: enable SERR =0x%x\n", hpp->enable_serr);
-- pr_debug(" _HPP: enable PERR =0x%x\n", hpp->enable_perr);
-+ hpp->t0 = &hpp->type0_data;
-+ hpp->t0->cache_line_size = nui[0];
-+ hpp->t0->latency_timer = nui[1];
-+ hpp->t0->enable_serr = nui[2];
-+ hpp->t0->enable_perr = nui[3];
-+
-+ pr_debug(" _HPP: cache_line_size=0x%x\n", hpp->t0->cache_line_size);
-+ pr_debug(" _HPP: latency timer =0x%x\n", hpp->t0->latency_timer);
-+ pr_debug(" _HPP: enable SERR =0x%x\n", hpp->t0->enable_serr);
-+ pr_debug(" _HPP: enable PERR =0x%x\n", hpp->t0->enable_perr);
-
- free_and_return:
- kfree(string.pointer);
-@@ -188,6 +357,9 @@ acpi_status acpi_get_hp_params_from_firm
- * this pci dev. If we don't find any _HPP, use hardcoded defaults
- */
- while (handle) {
-+ status = acpi_run_hpx(handle, hpp);
-+ if (ACPI_SUCCESS(status))
-+ break;
- status = acpi_run_hpp(handle, hpp);
- if (ACPI_SUCCESS(status))
- break;
---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c
-@@ -287,12 +287,18 @@ static void decode_hpp(struct acpiphp_br
- acpi_status status;
-
- status = acpi_get_hp_params_from_firmware(bridge->pci_bus, &bridge->hpp);
-- if (ACPI_FAILURE(status)) {
-+ if (ACPI_FAILURE(status) ||
-+ !bridge->hpp.t0 || (bridge->hpp.t0->revision > 1)) {
- /* use default numbers */
-- bridge->hpp.cache_line_size = 0x10;
-- bridge->hpp.latency_timer = 0x40;
-- bridge->hpp.enable_serr = 0;
-- bridge->hpp.enable_perr = 0;
-+ printk(KERN_WARNING
-+ "%s: Could not get hotplug parameters. Use defaults\n",
-+ __FUNCTION__);
-+ bridge->hpp.t0 = &bridge->hpp.type0_data;
-+ bridge->hpp.t0->revision = 0;
-+ bridge->hpp.t0->cache_line_size = 0x10;
-+ bridge->hpp.t0->latency_timer = 0x40;
-+ bridge->hpp.t0->enable_serr = 0;
-+ bridge->hpp.t0->enable_perr = 0;
- }
- }
-
-@@ -1206,16 +1212,17 @@ static void program_hpp(struct pci_dev *
- (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
- (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI)))
- return;
-+
- pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE,
-- bridge->hpp.cache_line_size);
-+ bridge->hpp.t0->cache_line_size);
- pci_write_config_byte(dev, PCI_LATENCY_TIMER,
-- bridge->hpp.latency_timer);
-+ bridge->hpp.t0->latency_timer);
- pci_read_config_word(dev, PCI_COMMAND, &pci_cmd);
-- if (bridge->hpp.enable_serr)
-+ if (bridge->hpp.t0->enable_serr)
- pci_cmd |= PCI_COMMAND_SERR;
- else
- pci_cmd &= ~PCI_COMMAND_SERR;
-- if (bridge->hpp.enable_perr)
-+ if (bridge->hpp.t0->enable_perr)
- pci_cmd |= PCI_COMMAND_PARITY;
- else
- pci_cmd &= ~PCI_COMMAND_PARITY;
-@@ -1224,13 +1231,13 @@ static void program_hpp(struct pci_dev *
- /* Program bridge control value and child devices */
- if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
- pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
-- bridge->hpp.latency_timer);
-+ bridge->hpp.t0->latency_timer);
- pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
-- if (bridge->hpp.enable_serr)
-+ if (bridge->hpp.t0->enable_serr)
- pci_bctl |= PCI_BRIDGE_CTL_SERR;
- else
- pci_bctl &= ~PCI_BRIDGE_CTL_SERR;
-- if (bridge->hpp.enable_perr)
-+ if (bridge->hpp.t0->enable_perr)
- pci_bctl |= PCI_BRIDGE_CTL_PARITY;
- else
- pci_bctl &= ~PCI_BRIDGE_CTL_PARITY;
---- gregkh-2.6.orig/drivers/pci/hotplug/pci_hotplug.h
-+++ gregkh-2.6/drivers/pci/hotplug/pci_hotplug.h
-@@ -176,11 +176,51 @@ extern int pci_hp_change_slot_info (stru
- struct hotplug_slot_info *info);
- extern struct subsystem pci_hotplug_slots_subsys;
-
-+/* PCI Setting Record (Type 0) */
-+struct hpp_type0 {
-+ u32 revision;
-+ u8 cache_line_size;
-+ u8 latency_timer;
-+ u8 enable_serr;
-+ u8 enable_perr;
-+};
-+
-+/* PCI-X Setting Record (Type 1) */
-+struct hpp_type1 {
-+ u32 revision;
-+ u8 max_mem_read;
-+ u8 avg_max_split;
-+ u16 tot_max_split;
-+};
-+
-+/* PCI Express Setting Record (Type 2) */
-+struct hpp_type2 {
-+ u32 revision;
-+ u32 unc_err_mask_and;
-+ u32 unc_err_mask_or;
-+ u32 unc_err_sever_and;
-+ u32 unc_err_sever_or;
-+ u32 cor_err_mask_and;
-+ u32 cor_err_mask_or;
-+ u32 adv_err_cap_and;
-+ u32 adv_err_cap_or;
-+ u16 pci_exp_devctl_and;
-+ u16 pci_exp_devctl_or;
-+ u16 pci_exp_lnkctl_and;
-+ u16 pci_exp_lnkctl_or;
-+ u32 sec_unc_err_sever_and;
-+ u32 sec_unc_err_sever_or;
-+ u32 sec_unc_err_mask_and;
-+ u32 sec_unc_err_mask_or;
-+};
-+
- struct hotplug_params {
-- u8 cache_line_size;
-- u8 latency_timer;
-- u8 enable_serr;
-- u8 enable_perr;
-+ struct hpp_type0 *t0; /* Type0: NULL if not available */
-+ struct hpp_type1 *t1; /* Type1: NULL if not available */
-+ struct hpp_type2 *t2; /* Type2: NULL if not available */
-+ struct hpp_type0 type0_data;
-+ struct hpp_type1 type1_data;
-+ struct hpp_type2 type2_data;
- };
-
- #ifdef CONFIG_ACPI
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_pci.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_pci.c
-@@ -47,21 +47,28 @@ static void program_fw_provided_values(s
- return;
-
- /* use default values if we can't get them from firmware */
-- if (get_hp_params_from_firmware(dev, &hpp)) {
-- hpp.cache_line_size = 8;
-- hpp.latency_timer = 0x40;
-- hpp.enable_serr = 0;
-- hpp.enable_perr = 0;
-- }
--
-- pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, hpp.cache_line_size);
-- pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp.latency_timer);
-+ if (get_hp_params_from_firmware(dev, &hpp) ||
-+ !hpp.t0 || (hpp.t0->revision > 1)) {
-+ printk(KERN_WARNING
-+ "%s: Could not get hotplug parameters. Use defaults\n",
-+ __FUNCTION__);
-+ hpp.t0 = &hpp.type0_data;
-+ hpp.t0->revision = 0;
-+ hpp.t0->cache_line_size = 8;
-+ hpp.t0->latency_timer = 0x40;
-+ hpp.t0->enable_serr = 0;
-+ hpp.t0->enable_perr = 0;
-+ }
-+
-+ pci_write_config_byte(dev,
-+ PCI_CACHE_LINE_SIZE, hpp.t0->cache_line_size);
-+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp.t0->latency_timer);
- pci_read_config_word(dev, PCI_COMMAND, &pci_cmd);
-- if (hpp.enable_serr)
-+ if (hpp.t0->enable_serr)
- pci_cmd |= PCI_COMMAND_SERR;
- else
- pci_cmd &= ~PCI_COMMAND_SERR;
-- if (hpp.enable_perr)
-+ if (hpp.t0->enable_perr)
- pci_cmd |= PCI_COMMAND_PARITY;
- else
- pci_cmd &= ~PCI_COMMAND_PARITY;
-@@ -70,13 +77,13 @@ static void program_fw_provided_values(s
- /* Program bridge control value and child devices */
- if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
- pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
-- hpp.latency_timer);
-+ hpp.t0->latency_timer);
- pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
-- if (hpp.enable_serr)
-+ if (hpp.t0->enable_serr)
- pci_bctl |= PCI_BRIDGE_CTL_SERR;
- else
- pci_bctl &= ~PCI_BRIDGE_CTL_SERR;
-- if (hpp.enable_perr)
-+ if (hpp.t0->enable_perr)
- pci_bctl |= PCI_BRIDGE_CTL_PARITY;
- else
- pci_bctl &= ~PCI_BRIDGE_CTL_PARITY;
diff --git a/pci/acpi_pcihp-fix-programming-_hpp-values.patch b/pci/acpi_pcihp-fix-programming-_hpp-values.patch
deleted file mode 100644
index ca212453e04bf..0000000000000
--- a/pci/acpi_pcihp-fix-programming-_hpp-values.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-From pcihpd-discuss-admin@lists.sourceforge.net Mon May 1 18:58:14 2006
-Message-ID: <4456BBEA.2000005@jp.fujitsu.com>
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: gregkh@suse.de, kristen.c.accardi@intel.com
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: acpi_pcihp: Fix programming _HPP values
-Date: Tue, 02 May 2006 10:54:50 +0900
-
-This patch fixes the problem that hotplug parameters are not programed
-when PCI cards are hot-added by ACPIPHP, SHPCHP and PCIEHP driver. The
-pci_dev structure being hot-added is not bound to ACPI handle, so we
-need to trace PCI bus tree to find ACPI handle.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
-
----
- drivers/pci/hotplug/acpi_pcihp.c | 34 ++++++++++++++++++++++++----------
- drivers/pci/hotplug/acpiphp_glue.c | 3 ++-
- drivers/pci/hotplug/pci_hotplug.h | 2 +-
- drivers/pci/hotplug/pciehp.h | 2 +-
- drivers/pci/hotplug/shpchp.h | 2 +-
- 5 files changed, 29 insertions(+), 14 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/acpi_pcihp.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpi_pcihp.c
-@@ -145,14 +145,27 @@ EXPORT_SYMBOL_GPL(acpi_run_oshp);
-
- /* acpi_get_hp_params_from_firmware
- *
-- * @dev - the pci_dev of the newly added device
-+ * @bus - the pci_bus of the bus on which the device is newly added
- * @hpp - allocated by the caller
- */
--acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev,
-+acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
- struct hotplug_params *hpp)
- {
- acpi_status status = AE_NOT_FOUND;
-- struct pci_dev *pdev = dev;
-+ acpi_handle handle, phandle;
-+ struct pci_bus *pbus = bus;
-+ struct pci_dev *pdev;
-+
-+ do {
-+ pdev = pbus->self;
-+ if (!pdev) {
-+ handle = acpi_get_pci_rootbridge_handle(
-+ pci_domain_nr(pbus), pbus->number);
-+ break;
-+ }
-+ handle = DEVICE_ACPI_HANDLE(&(pdev->dev));
-+ pbus = pbus->parent;
-+ } while (!handle);
-
- /*
- * _HPP settings apply to all child buses, until another _HPP is
-@@ -160,15 +173,16 @@ acpi_status acpi_get_hp_params_from_firm
- * look for it in the parent device scope since that would apply to
- * this pci dev. If we don't find any _HPP, use hardcoded defaults
- */
-- while (pdev && (ACPI_FAILURE(status))) {
-- acpi_handle handle = DEVICE_ACPI_HANDLE(&(pdev->dev));
-- if (!handle)
-- break;
-+ while (handle) {
- status = acpi_run_hpp(handle, hpp);
-- if (!(pdev->bus->parent))
-+ if (ACPI_SUCCESS(status))
-+ break;
-+ if (acpi_root_bridge(handle))
-+ break;
-+ status = acpi_get_parent(handle, &phandle);
-+ if (ACPI_FAILURE(status))
- break;
-- /* Check if a parent object supports _HPP */
-- pdev = pdev->bus->parent->self;
-+ handle = phandle;
- }
- return status;
- }
---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c
-@@ -286,7 +286,7 @@ static void decode_hpp(struct acpiphp_br
- {
- acpi_status status;
-
-- status = acpi_get_hp_params_from_firmware(bridge->pci_dev, &bridge->hpp);
-+ status = acpi_get_hp_params_from_firmware(bridge->pci_bus, &bridge->hpp);
- if (ACPI_FAILURE(status)) {
- /* use default numbers */
- bridge->hpp.cache_line_size = 0x10;
-@@ -1250,6 +1250,7 @@ static void acpiphp_set_hpp_values(acpi_
-
- memset(&bridge, 0, sizeof(bridge));
- bridge.handle = handle;
-+ bridge.pci_bus = bus;
- bridge.pci_dev = bus->self;
- decode_hpp(&bridge);
- list_for_each_entry(dev, &bus->devices, bus_list)
---- gregkh-2.6.orig/drivers/pci/hotplug/pci_hotplug.h
-+++ gregkh-2.6/drivers/pci/hotplug/pci_hotplug.h
-@@ -188,7 +188,7 @@ struct hotplug_params {
- #include <acpi/acpi_bus.h>
- #include <acpi/actypes.h>
- extern acpi_status acpi_run_oshp(acpi_handle handle);
--extern acpi_status acpi_get_hp_params_from_firmware(struct pci_dev *dev,
-+extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
- struct hotplug_params *hpp);
- int acpi_root_bridge(acpi_handle handle);
- #endif
---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp.h
-+++ gregkh-2.6/drivers/pci/hotplug/pciehp.h
-@@ -284,7 +284,7 @@ struct hpc_ops {
- static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev,
- struct hotplug_params *hpp)
- {
-- if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev, hpp)))
-+ if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev->bus, hpp)))
- return -ENODEV;
- return 0;
- }
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h
-@@ -196,7 +196,7 @@ extern void queue_pushbutton_work(void *
- static inline int get_hp_params_from_firmware(struct pci_dev *dev,
- struct hotplug_params *hpp)
- {
-- if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev, hpp)))
-+ if (ACPI_FAILURE(acpi_get_hp_params_from_firmware(dev->bus, hpp)))
- return -ENODEV;
- return 0;
- }
diff --git a/pci/acpi_pcihp-remove-improper-error-message-about-oshp.patch b/pci/acpi_pcihp-remove-improper-error-message-about-oshp.patch
deleted file mode 100644
index 2b0c9471a786d..0000000000000
--- a/pci/acpi_pcihp-remove-improper-error-message-about-oshp.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Wed May 10 06:23:17 2006
-Message-ID: <4461E8A2.10809@jp.fujitsu.com>
-Date: Wed, 10 May 2006 22:20:34 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Rajesh Shah <rajesh.shah@intel.com>, gregkh@suse.de, Greg KH <greg@kroah.com>
-Cc: "Accardi, Kristen C" <kristen.c.accardi@intel.com>
-Subject: acpi_pcihp: Remove improper error message about OSHP
-
-
-This patch converts the improper error message about OSHP evaluation
-to debug message which is displayed only when pci_hotplug.ko is loaded
-with debugging mode enabled. To do this, this patch adds a new module
-parameter "debug_acpi" to pci_hotplug.ko for enabling/disabling debug
-messages in acpi_pcihp.c.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/acpi_pcihp.c | 21 +++++++++++++++++++--
- 1 file changed, 19 insertions(+), 2 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/acpi_pcihp.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpi_pcihp.c
-@@ -25,6 +25,7 @@
- */
-
- #include <linux/module.h>
-+#include <linux/moduleparam.h>
- #include <linux/kernel.h>
- #include <linux/types.h>
- #include <linux/pci.h>
-@@ -33,10 +34,19 @@
- #include <acpi/actypes.h>
- #include "pci_hotplug.h"
-
-+#define MY_NAME "acpi_pcihp"
-+
-+#define dbg(fmt, arg...) do { if (debug_acpi) printk(KERN_DEBUG "%s: %s: " fmt , MY_NAME , __FUNCTION__ , ## arg); } while (0)
-+#define err(format, arg...) printk(KERN_ERR "%s: " format , MY_NAME , ## arg)
-+#define info(format, arg...) printk(KERN_INFO "%s: " format , MY_NAME , ## arg)
-+#define warn(format, arg...) printk(KERN_WARNING "%s: " format , MY_NAME , ## arg)
-+
- #define METHOD_NAME__SUN "_SUN"
- #define METHOD_NAME__HPP "_HPP"
- #define METHOD_NAME_OSHP "OSHP"
-
-+static int debug_acpi;
-+
-
- static acpi_status
- acpi_run_hpp(acpi_handle handle, struct hotplug_params *hpp)
-@@ -130,8 +140,12 @@ acpi_status acpi_run_oshp(acpi_handle ha
- /* run OSHP */
- status = acpi_evaluate_object(handle, METHOD_NAME_OSHP, NULL, NULL);
- if (ACPI_FAILURE(status))
-- printk(KERN_ERR "%s:%s OSHP fails=0x%x\n", __FUNCTION__,
-- (char *)string.pointer, status);
-+ if (status != AE_NOT_FOUND)
-+ printk(KERN_ERR "%s:%s OSHP fails=0x%x\n",
-+ __FUNCTION__, (char *)string.pointer, status);
-+ else
-+ dbg("%s:%s OSHP not found\n",
-+ __FUNCTION__, (char *)string.pointer);
- else
- pr_debug("%s:%s OSHP passes\n", __FUNCTION__,
- (char *)string.pointer);
-@@ -223,3 +237,6 @@ int acpi_root_bridge(acpi_handle handle)
- return 0;
- }
- EXPORT_SYMBOL_GPL(acpi_root_bridge);
-+
-+module_param(debug_acpi, bool, 0644);
-+MODULE_PARM_DESC(debug_acpi, "Debugging mode for ACPI enabled or not");
diff --git a/pci/acpiphp-configure-_prt-v3.patch b/pci/acpiphp-configure-_prt-v3.patch
deleted file mode 100644
index 5524b97ef6bcd..0000000000000
--- a/pci/acpiphp-configure-_prt-v3.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From muneda.takahiro@jp.fujitsu.com Tue Mar 21 21:49:23 2006
-Date: Wed, 22 Mar 2006 14:49:09 +0900
-Message-ID: <87lkv3c9m2.wl%muneda.takahiro@jp.fujitsu.com>
-From: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>
-Cc: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-Subject: acpiphp: configure _PRT - V3
-
-Current acpiphp does not free acpi_device structs when the
-PCI devices are removed. When the PCI device is added,
-acpi_bus_add() fails because acpi_device struct has already
-exists. So, _PRT method does not evaluate.
-
-This patch fixes this issue.
-
-Signed-off-by: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/acpiphp_glue.c | 71 +++++++++++++++++--------------------
- 1 file changed, 33 insertions(+), 38 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c
-@@ -797,36 +797,6 @@ static unsigned char acpiphp_max_busnr(s
- }
-
-
--
--/**
-- * get_func - get a pointer to acpiphp_func given a slot, device
-- * @slot: slot to search
-- * @dev: pci_dev struct to match.
-- *
-- * This function will increase the reference count of pci_dev,
-- * so callers should call pci_dev_put when complete.
-- *
-- */
--static struct acpiphp_func *
--get_func(struct acpiphp_slot *slot, struct pci_dev *dev)
--{
-- struct acpiphp_func *func = NULL;
-- struct pci_bus *bus = slot->bridge->pci_bus;
-- struct pci_dev *pdev;
--
-- list_for_each_entry(func, &slot->funcs, sibling) {
-- pdev = pci_get_slot(bus, PCI_DEVFN(slot->device,
-- func->function));
-- if (pdev) {
-- if (pdev == dev)
-- break;
-- pci_dev_put(pdev);
-- }
-- }
-- return func;
--}
--
--
- /**
- * acpiphp_bus_add - add a new bus to acpi subsystem
- * @func: acpiphp_func of the bridge
-@@ -872,6 +842,28 @@ acpiphp_bus_add_out:
- }
-
-
-+/**
-+ * acpiphp_bus_trim - trim a bus from acpi subsystem
-+ * @handle: handle to acpi namespace
-+ *
-+ */
-+int acpiphp_bus_trim(acpi_handle handle)
-+{
-+ struct acpi_device *device;
-+ int retval;
-+
-+ retval = acpi_bus_get_device(handle, &device);
-+ if (retval) {
-+ dbg("acpi_device not found\n");
-+ return retval;
-+ }
-+
-+ retval = acpi_bus_trim(device, 1);
-+ if (retval)
-+ err("cannot remove from acpi list\n");
-+
-+ return retval;
-+}
-
- /**
- * enable_device - enable, configure a slot
-@@ -918,19 +910,17 @@ static int enable_device(struct acpiphp_
- if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
- dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
- max = pci_scan_bridge(bus, dev, max, pass);
-- if (pass && dev->subordinate) {
-+ if (pass && dev->subordinate)
- pci_bus_size_bridges(dev->subordinate);
-- func = get_func(slot, dev);
-- if (func) {
-- acpiphp_bus_add(func);
-- /* side effect of get_func */
-- pci_dev_put(dev);
-- }
-- }
- }
- }
- }
-
-+ list_for_each (l, &slot->funcs) {
-+ func = list_entry(l, struct acpiphp_func, sibling);
-+ acpiphp_bus_add(func);
-+ }
-+
- pci_bus_assign_resources(bus);
- acpiphp_sanitize_bus(bus);
- pci_enable_bridges(bus);
-@@ -967,6 +957,11 @@ static int disable_device(struct acpiphp
-
- list_for_each (l, &slot->funcs) {
- func = list_entry(l, struct acpiphp_func, sibling);
-+
-+ acpiphp_bus_trim(func->handle);
-+ /* try to remove anyway.
-+ * acpiphp_bus_add might have been failed */
-+
- if (!func->pci_dev)
- continue;
-
diff --git a/pci/acpiphp-host-and-p2p-hotplug.patch b/pci/acpiphp-host-and-p2p-hotplug.patch
deleted file mode 100644
index 526cdb3d2122b..0000000000000
--- a/pci/acpiphp-host-and-p2p-hotplug.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From muneda.takahiro@jp.fujitsu.com Tue Mar 21 21:49:45 2006
-Date: Wed, 22 Mar 2006 14:49:27 +0900
-Message-ID: <87irq7c9lk.wl%muneda.takahiro@jp.fujitsu.com>
-From: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>
-Cc: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-Subject: acpiphp: host and p2p hotplug
-
-I encountered the problem that when there are some hotplug
-slots are under the host bridge, the hotplug slots under the
-p2p bridge are not treated as hotpluggable.
-
-This patch fixes this BUG.
-
-Signed-off-by: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/acpiphp_glue.c | 1 -
- 1 file changed, 1 deletion(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c
-@@ -546,7 +546,6 @@ static int add_bridge(acpi_handle handle
- if (detect_ejectable_slots(handle) > 0) {
- dbg("found PCI host-bus bridge with hot-pluggable slots\n");
- add_host_bridge(handle, pci_bus);
-- return 0;
- }
-
- /* search P2P bridges under this host bridge */
diff --git a/pci/acpiphp-hotplug-slot-hotplug.patch b/pci/acpiphp-hotplug-slot-hotplug.patch
deleted file mode 100644
index 9d67d21fba4bd..0000000000000
--- a/pci/acpiphp-hotplug-slot-hotplug.patch
+++ /dev/null
@@ -1,268 +0,0 @@
-From muneda.takahiro@jp.fujitsu.com Tue Mar 21 21:49:43 2006
-Date: Wed, 22 Mar 2006 14:49:20 +0900
-Message-ID: <87k6anc9lr.wl%muneda.takahiro@jp.fujitsu.com>
-From: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>
-Cc: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-Subject: acpiphp: hotplug slot hotplug
-
-o hotplug slots add
- When the hot-added PCI device is p2p bridge, acpiphp calls
- find_p2p_bridge() to add hotplug slots.
-
-o hotplug slots remove
- When the hot-removing PCI device is p2p bridge, acpiphp
- calls cleanup_p2p_bridge() to remove hotplug slots.
-
-o notify handler exchange
- When the p2p bridge is added, acpiphp changes the notify
- hanlder.
- If no bridge device is inserted into the hotpluggable PCI
- slot, acpiphp installs the notify handler for function.
- After the p2p bridge hot-add, acpiphp has to install the
- notify handler for bridge. Because, the role of the
- handlers are not same. The hot-remove case is ditto.
-
-Signed-off-by: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/acpiphp.h | 5 +
- drivers/pci/hotplug/acpiphp_glue.c | 126 ++++++++++++++++++++++++++++++++++---
- 2 files changed, 122 insertions(+), 9 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp.h
-+++ gregkh-2.6/drivers/pci/hotplug/acpiphp.h
-@@ -75,6 +75,10 @@ struct acpiphp_bridge {
- struct list_head list;
- acpi_handle handle;
- struct acpiphp_slot *slots;
-+
-+ /* Ejectable PCI-to-PCI bridge (PCI bridge and PCI function) */
-+ struct acpiphp_func *func;
-+
- int type;
- int nr_slots;
-
-@@ -122,6 +126,7 @@ struct acpiphp_slot {
- */
- struct acpiphp_func {
- struct acpiphp_slot *slot; /* parent */
-+ struct acpiphp_bridge *bridge; /* Ejectable PCI-to-PCI bridge */
-
- struct list_head sibling;
- struct pci_dev *pci_dev;
---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c
-@@ -319,6 +319,13 @@ static void init_bridge_misc(struct acpi
-
- /* install notify handler */
- if (bridge->type != BRIDGE_TYPE_HOST) {
-+ if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func) {
-+ status = acpi_remove_notify_handler(bridge->func->handle,
-+ ACPI_SYSTEM_NOTIFY,
-+ handle_hotplug_event_func);
-+ if (ACPI_FAILURE(status))
-+ err("failed to remove notify handler\n");
-+ }
- status = acpi_install_notify_handler(bridge->handle,
- ACPI_SYSTEM_NOTIFY,
- handle_hotplug_event_bridge,
-@@ -331,6 +338,66 @@ static void init_bridge_misc(struct acpi
- }
-
-
-+/* find acpiphp_func from acpiphp_bridge */
-+static struct acpiphp_func *acpiphp_bridge_handle_to_function(acpi_handle handle)
-+{
-+ struct list_head *node, *l;
-+ struct acpiphp_bridge *bridge;
-+ struct acpiphp_slot *slot;
-+ struct acpiphp_func *func;
-+
-+ list_for_each(node, &bridge_list) {
-+ bridge = list_entry(node, struct acpiphp_bridge, list);
-+ for (slot = bridge->slots; slot; slot = slot->next) {
-+ list_for_each(l, &slot->funcs) {
-+ func = list_entry(l, struct acpiphp_func,
-+ sibling);
-+ if (func->handle == handle)
-+ return func;
-+ }
-+ }
-+ }
-+
-+ return NULL;
-+}
-+
-+
-+static inline void config_p2p_bridge_flags(struct acpiphp_bridge *bridge)
-+{
-+ acpi_handle dummy_handle;
-+
-+ if (ACPI_SUCCESS(acpi_get_handle(bridge->handle,
-+ "_STA", &dummy_handle)))
-+ bridge->flags |= BRIDGE_HAS_STA;
-+
-+ if (ACPI_SUCCESS(acpi_get_handle(bridge->handle,
-+ "_EJ0", &dummy_handle)))
-+ bridge->flags |= BRIDGE_HAS_EJ0;
-+
-+ if (ACPI_SUCCESS(acpi_get_handle(bridge->handle,
-+ "_PS0", &dummy_handle)))
-+ bridge->flags |= BRIDGE_HAS_PS0;
-+
-+ if (ACPI_SUCCESS(acpi_get_handle(bridge->handle,
-+ "_PS3", &dummy_handle)))
-+ bridge->flags |= BRIDGE_HAS_PS3;
-+
-+ /* is this ejectable p2p bridge? */
-+ if (bridge->flags & BRIDGE_HAS_EJ0) {
-+ struct acpiphp_func *func;
-+
-+ dbg("found ejectable p2p bridge\n");
-+
-+ /* make link between PCI bridge and PCI function */
-+ func = acpiphp_bridge_handle_to_function(bridge->handle);
-+ if (!func)
-+ return;
-+ bridge->func = func;
-+ func->bridge = bridge;
-+ }
-+}
-+
-+
- /* allocate and initialize host bridge data structure */
- static void add_host_bridge(acpi_handle *handle, struct pci_bus *pci_bus)
- {
-@@ -364,6 +431,7 @@ static void add_p2p_bridge(acpi_handle *
-
- bridge->type = BRIDGE_TYPE_P2P;
- bridge->handle = handle;
-+ config_p2p_bridge_flags(bridge);
-
- bridge->pci_dev = pci_dev_get(pci_dev);
- bridge->pci_bus = pci_dev->subordinate;
-@@ -423,7 +491,7 @@ find_p2p_bridge(acpi_handle handle, u32
- status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
- find_p2p_bridge, dev->subordinate, NULL);
- if (ACPI_FAILURE(status))
-- warn("find_p2p_bridge faied (error code = 0x%x)\n", status);
-+ warn("find_p2p_bridge failed (error code = 0x%x)\n", status);
-
- out:
- pci_dev_put(dev);
-@@ -486,7 +554,7 @@ static int add_bridge(acpi_handle handle
- find_p2p_bridge, pci_bus, NULL);
-
- if (ACPI_FAILURE(status))
-- warn("find_p2p_bridge faied (error code = 0x%x)\n",status);
-+ warn("find_p2p_bridge failed (error code = 0x%x)\n", status);
-
- return 0;
- }
-@@ -516,6 +584,16 @@ static void cleanup_bridge(struct acpiph
- if (ACPI_FAILURE(status))
- err("failed to remove notify handler\n");
-
-+ if ((bridge->type != BRIDGE_TYPE_HOST) &&
-+ ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func)) {
-+ status = acpi_install_notify_handler(bridge->func->handle,
-+ ACPI_SYSTEM_NOTIFY,
-+ handle_hotplug_event_func,
-+ bridge->func);
-+ if (ACPI_FAILURE(status))
-+ err("failed to install interrupt notify handler\n");
-+ }
-+
- slot = bridge->slots;
- while (slot) {
- struct acpiphp_slot *next = slot->next;
-@@ -549,6 +627,11 @@ cleanup_p2p_bridge(acpi_handle handle, u
- {
- struct acpiphp_bridge *bridge;
-
-+ /* cleanup p2p bridges under this P2P bridge
-+ in a depth-first manner */
-+ acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
-+ cleanup_p2p_bridge, NULL, NULL);
-+
- if (!(bridge = acpiphp_handle_to_bridge(handle)))
- return AE_OK;
- cleanup_bridge(bridge);
-@@ -559,15 +642,14 @@ static void remove_bridge(acpi_handle ha
- {
- struct acpiphp_bridge *bridge;
-
-+ /* cleanup p2p bridges under this host bridge
-+ in a depth-first manner */
-+ acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
-+ (u32)1, cleanup_p2p_bridge, NULL, NULL);
-+
- bridge = acpiphp_handle_to_bridge(handle);
-- if (bridge) {
-+ if (bridge)
- cleanup_bridge(bridge);
-- } else {
-- /* clean-up p2p bridges under this host bridge */
-- acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
-- ACPI_UINT32_MAX, cleanup_p2p_bridge,
-- NULL, NULL);
-- }
- }
-
- static struct pci_dev * get_apic_pci_info(acpi_handle handle)
-@@ -881,6 +963,7 @@ static int enable_device(struct acpiphp_
- struct acpiphp_func *func;
- int retval = 0;
- int num, max, pass;
-+ acpi_status status;
-
- if (slot->flags & SLOT_ENABLED)
- goto err_exit;
-@@ -933,6 +1016,17 @@ static int enable_device(struct acpiphp_
- func = list_entry(l, struct acpiphp_func, sibling);
- func->pci_dev = pci_get_slot(bus, PCI_DEVFN(slot->device,
- func->function));
-+ if (!func->pci_dev)
-+ continue;
-+
-+ if (func->pci_dev->hdr_type != PCI_HEADER_TYPE_BRIDGE &&
-+ func->pci_dev->hdr_type != PCI_HEADER_TYPE_CARDBUS)
-+ continue;
-+
-+ status = find_p2p_bridge(func->handle, (u32)1, bus, NULL);
-+ if (ACPI_FAILURE(status))
-+ warn("find_p2p_bridge failed (error code = 0x%x)\n",
-+ status);
- }
-
- slot->flags |= SLOT_ENABLED;
-@@ -958,6 +1052,13 @@ static int disable_device(struct acpiphp
- list_for_each (l, &slot->funcs) {
- func = list_entry(l, struct acpiphp_func, sibling);
-
-+ if (func->bridge) {
-+ /* cleanup p2p bridges under this P2P bridge */
-+ cleanup_p2p_bridge(func->bridge->handle,
-+ (u32)1, NULL, NULL);
-+ func->bridge = NULL;
-+ }
-+
- acpiphp_bus_trim(func->handle);
- /* try to remove anyway.
- * acpiphp_bus_add might have been failed */
-@@ -1292,6 +1393,13 @@ static void handle_hotplug_event_bridge(
- case ACPI_NOTIFY_EJECT_REQUEST:
- /* request device eject */
- dbg("%s: Device eject notify on %s\n", __FUNCTION__, objname);
-+ if ((bridge->type != BRIDGE_TYPE_HOST) &&
-+ (bridge->flags & BRIDGE_HAS_EJ0)) {
-+ struct acpiphp_slot *slot;
-+ slot = bridge->func->slot;
-+ if (!acpiphp_disable_slot(slot))
-+ acpiphp_eject_slot(slot);
-+ }
- break;
-
- case ACPI_NOTIFY_FREQUENCY_MISMATCH:
diff --git a/pci/acpiphp-turn-off-slot-power-at-error-case.patch b/pci/acpiphp-turn-off-slot-power-at-error-case.patch
deleted file mode 100644
index 1dd792b0fdc2d..0000000000000
--- a/pci/acpiphp-turn-off-slot-power-at-error-case.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From muneda.takahiro@jp.fujitsu.com Tue Mar 21 21:49:53 2006
-Date: Wed, 22 Mar 2006 14:49:33 +0900
-Message-ID: <87hd5rc9le.wl%muneda.takahiro@jp.fujitsu.com>
-From: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>
-Cc: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-Subject: acpiphp: turn off slot power at error case
-
-When acpiphp_enable_slot() is failed, acpiphp does not change
-the slot->flags. Therefore, when user tries to read power
-status, acpiphp_get_power_status() returns the enable status
-whether the slot is not really enabled.
-
-This patch fixes this BUG.
-
-Signed-off-by: MUNEDA Takahiro <muneda.takahiro@jp.fujitsu.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/acpiphp_glue.c | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c
-@@ -1592,9 +1592,15 @@ int acpiphp_enable_slot(struct acpiphp_s
- if (retval)
- goto err_exit;
-
-- if (get_slot_status(slot) == ACPI_STA_ALL)
-+ if (get_slot_status(slot) == ACPI_STA_ALL) {
- /* configure all functions */
- retval = enable_device(slot);
-+ if (retval)
-+ power_off_slot(slot);
-+ } else {
-+ dbg("%s: Slot status is not ACPI_STA_ALL\n", __FUNCTION__);
-+ power_off_slot(slot);
-+ }
-
- err_exit:
- mutex_unlock(&slot->crit_sect);
diff --git a/pci/pci-hotplug-don-t-use-acpi_os_free.patch b/pci/pci-hotplug-don-t-use-acpi_os_free.patch
deleted file mode 100644
index 2a99940c199ef..0000000000000
--- a/pci/pci-hotplug-don-t-use-acpi_os_free.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From kristen.c.accardi@intel.com Tue Apr 18 14:27:56 2006
-Subject: PCI Hotplug: don't use acpi_os_free
-From: Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: <len.brown@intel.com>
-Date: Tue, 18 Apr 2006 14:36:43 -0700
-Message-Id: <1145396204.10783.81.camel@whizzy>
-
-acpi_os_free should not be used by drivers outside
-of acpi/*/*.c. Replace with kfree().
-
-Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/acpi_pcihp.c | 16 ++++++++--------
- drivers/pci/hotplug/acpiphp_glue.c | 2 +-
- drivers/pci/hotplug/pciehp_hpc.c | 4 ++--
- 3 files changed, 11 insertions(+), 11 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/acpi_pcihp.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpi_pcihp.c
-@@ -58,7 +58,7 @@ acpi_run_hpp(acpi_handle handle, struct
- if (!ret_buf.pointer) {
- printk(KERN_ERR "%s:%s alloc for _HPP fail\n",
- __FUNCTION__, (char *)string.pointer);
-- acpi_os_free(string.pointer);
-+ kfree(string.pointer);
- return AE_NO_MEMORY;
- }
- status = acpi_evaluate_object(handle, METHOD_NAME__HPP,
-@@ -69,7 +69,7 @@ acpi_run_hpp(acpi_handle handle, struct
- if (ACPI_FAILURE(status)) {
- pr_debug("%s:%s _HPP fail=0x%x\n", __FUNCTION__,
- (char *)string.pointer, status);
-- acpi_os_free(string.pointer);
-+ kfree(string.pointer);
- return status;
- }
- }
-@@ -109,8 +109,8 @@ acpi_run_hpp(acpi_handle handle, struct
- pr_debug(" _HPP: enable PERR =0x%x\n", hpp->enable_perr);
-
- free_and_return:
-- acpi_os_free(string.pointer);
-- acpi_os_free(ret_buf.pointer);
-+ kfree(string.pointer);
-+ kfree(ret_buf.pointer);
- return status;
- }
-
-@@ -136,7 +136,7 @@ acpi_status acpi_run_oshp(acpi_handle ha
- pr_debug("%s:%s OSHP passes\n", __FUNCTION__,
- (char *)string.pointer);
-
-- acpi_os_free(string.pointer);
-+ kfree(string.pointer);
- return status;
- }
- EXPORT_SYMBOL_GPL(acpi_run_oshp);
-@@ -192,19 +192,19 @@ int acpi_root_bridge(acpi_handle handle)
- if ((info->valid & ACPI_VALID_HID) &&
- !strcmp(PCI_ROOT_HID_STRING,
- info->hardware_id.value)) {
-- acpi_os_free(buffer.pointer);
-+ kfree(buffer.pointer);
- return 1;
- }
- if (info->valid & ACPI_VALID_CID) {
- for (i=0; i < info->compatibility_id.count; i++) {
- if (!strcmp(PCI_ROOT_HID_STRING,
- info->compatibility_id.id[i].value)) {
-- acpi_os_free(buffer.pointer);
-+ kfree(buffer.pointer);
- return 1;
- }
- }
- }
-- acpi_os_free(buffer.pointer);
-+ kfree(buffer.pointer);
- }
- return 0;
- }
---- gregkh-2.6.orig/drivers/pci/hotplug/acpiphp_glue.c
-+++ gregkh-2.6/drivers/pci/hotplug/acpiphp_glue.c
-@@ -715,7 +715,7 @@ static int get_gsi_base(acpi_handle hand
- break;
- }
- out:
-- acpi_os_free(buffer.pointer);
-+ kfree(buffer.pointer);
- return result;
- }
-
---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/pciehp_hpc.c
-@@ -1288,7 +1288,7 @@ int pciehp_acpi_get_hp_hw_control_from_f
- if (ACPI_SUCCESS(status)) {
- dbg("Gained control for hotplug HW for pci %s (%s)\n",
- pci_name(dev), (char *)string.pointer);
-- acpi_os_free(string.pointer);
-+ kfree(string.pointer);
- return 0;
- }
- if (acpi_root_bridge(handle))
-@@ -1302,7 +1302,7 @@ int pciehp_acpi_get_hp_hw_control_from_f
- err("Cannot get control of hotplug hardware for pci %s\n",
- pci_name(dev));
-
-- acpi_os_free(string.pointer);
-+ kfree(string.pointer);
- return -1;
- }
- #endif
diff --git a/pci/pci-hotplug-fake-null-pointer-dereferences-in-ibm-hot-plug-controller-driver.patch b/pci/pci-hotplug-fake-null-pointer-dereferences-in-ibm-hot-plug-controller-driver.patch
deleted file mode 100644
index 050135c1945ad..0000000000000
--- a/pci/pci-hotplug-fake-null-pointer-dereferences-in-ibm-hot-plug-controller-driver.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From snakebyte@gmx.de Thu Jun 1 02:41:47 2006
-From: Eric Sesterhenn <snakebyte@gmx.de>
-Subject: PCI Hotplug: fake NULL pointer dereferences in IBM Hot Plug Controller Driver
-To: Greg KH <gregkh@suse.de>
-Date: Thu, 01 Jun 2006 11:41:44 +0200
-Message-Id: <1149154904.9177.3.camel@alice>
-
-Remove checks for value, since the hotplug core always provides
-a valid value.
-
-Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/ibmphp_core.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/ibmphp_core.c
-+++ gregkh-2.6/drivers/pci/hotplug/ibmphp_core.c
-@@ -285,7 +285,7 @@ static int get_attention_status(struct h
- (ulong) hotplug_slot, (ulong) value);
-
- ibmphp_lock_operations();
-- if (hotplug_slot && value) {
-+ if (hotplug_slot) {
- pslot = hotplug_slot->private;
- if (pslot) {
- memcpy(&myslot, pslot, sizeof(struct slot));
-@@ -315,7 +315,7 @@ static int get_latch_status(struct hotpl
- debug("get_latch_status - Entry hotplug_slot[%lx] pvalue[%lx]\n",
- (ulong) hotplug_slot, (ulong) value);
- ibmphp_lock_operations();
-- if (hotplug_slot && value) {
-+ if (hotplug_slot) {
- pslot = hotplug_slot->private;
- if (pslot) {
- memcpy(&myslot, pslot, sizeof(struct slot));
-@@ -342,7 +342,7 @@ static int get_power_status(struct hotpl
- debug("get_power_status - Entry hotplug_slot[%lx] pvalue[%lx]\n",
- (ulong) hotplug_slot, (ulong) value);
- ibmphp_lock_operations();
-- if (hotplug_slot && value) {
-+ if (hotplug_slot) {
- pslot = hotplug_slot->private;
- if (pslot) {
- memcpy(&myslot, pslot, sizeof(struct slot));
-@@ -369,7 +369,7 @@ static int get_adapter_present(struct ho
- debug("get_adapter_status - Entry hotplug_slot[%lx] pvalue[%lx]\n",
- (ulong) hotplug_slot, (ulong) value);
- ibmphp_lock_operations();
-- if (hotplug_slot && value) {
-+ if (hotplug_slot) {
- pslot = hotplug_slot->private;
- if (pslot) {
- memcpy(&myslot, pslot, sizeof(struct slot));
-@@ -401,7 +401,7 @@ static int get_max_bus_speed(struct hotp
-
- ibmphp_lock_operations();
-
-- if (hotplug_slot && value) {
-+ if (hotplug_slot) {
- pslot = hotplug_slot->private;
- if (pslot) {
- rc = 0;
-@@ -441,7 +441,7 @@ static int get_cur_bus_speed(struct hotp
-
- ibmphp_lock_operations();
-
-- if (hotplug_slot && value) {
-+ if (hotplug_slot) {
- pslot = hotplug_slot->private;
- if (pslot) {
- rc = get_cur_bus_info(&pslot);
diff --git a/pci/pci-hotplug-fix-recovery-path-from-errors-during-pcie_init.patch b/pci/pci-hotplug-fix-recovery-path-from-errors-during-pcie_init.patch
deleted file mode 100644
index 7282db75455fb..0000000000000
--- a/pci/pci-hotplug-fix-recovery-path-from-errors-during-pcie_init.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From akpm@osdl.org Tue May 9 00:53:11 2006
-Message-Id: <200605090753.k497r6pY002386@shell0.pdx.osdl.net>
-From: "Jan Beulich" <jbeulich@novell.com>
-Subject: PCI Hotplug: Fix recovery path from errors during pcie_init()
-To: jbeulich@novell.com, greg@kroah.com, kristen.c.accardi@intel.com
-Date: Tue, 09 May 2006 00:50:31 -0700
-
-From: "Jan Beulich" <jbeulich@novell.com>
-
-Signed-off-by: Jan Beulich <jbeulich@novell.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/pciehp_hpc.c | 25 ++++++++++++++++++++-----
- 1 file changed, 20 insertions(+), 5 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/pciehp_hpc.c
-@@ -1472,7 +1472,7 @@ int pcie_init(struct controller * ctrl,
- rc = hp_register_read_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
- if (rc) {
- err("%s : hp_register_read_word SLOT_CTRL failed\n", __FUNCTION__);
-- goto abort_free_ctlr;
-+ goto abort_free_irq;
- }
-
- intr_enable = intr_enable | PRSN_DETECT_ENABLE;
-@@ -1498,19 +1498,19 @@ int pcie_init(struct controller * ctrl,
- rc = hp_register_write_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
- if (rc) {
- err("%s : hp_register_write_word SLOT_CTRL failed\n", __FUNCTION__);
-- goto abort_free_ctlr;
-+ goto abort_free_irq;
- }
- rc = hp_register_read_word(php_ctlr->pci_dev, SLOT_STATUS(ctrl->cap_base), slot_status);
- if (rc) {
- err("%s : hp_register_read_word SLOT_STATUS failed\n", __FUNCTION__);
-- goto abort_free_ctlr;
-+ goto abort_disable_intr;
- }
-
- temp_word = 0x1F; /* Clear all events */
- rc = hp_register_write_word(php_ctlr->pci_dev, SLOT_STATUS(ctrl->cap_base), temp_word);
- if (rc) {
- err("%s : hp_register_write_word SLOT_STATUS failed\n", __FUNCTION__);
-- goto abort_free_ctlr;
-+ goto abort_disable_intr;
- }
-
- if (pciehp_force) {
-@@ -1519,7 +1519,7 @@ int pcie_init(struct controller * ctrl,
- } else {
- rc = pciehp_get_hp_hw_control_from_firmware(ctrl->pci_dev);
- if (rc)
-- goto abort_free_ctlr;
-+ goto abort_disable_intr;
- }
-
- /* Add this HPC instance into the HPC list */
-@@ -1546,6 +1546,21 @@ int pcie_init(struct controller * ctrl,
- return 0;
-
- /* We end up here for the many possible ways to fail this API. */
-+abort_disable_intr:
-+ rc = hp_register_read_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
-+ if (!rc) {
-+ temp_word &= ~(intr_enable | HP_INTR_ENABLE);
-+ rc = hp_register_write_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
-+ }
-+ if (rc)
-+ err("%s : disabling interrupts failed\n", __FUNCTION__);
-+
-+abort_free_irq:
-+ if (pciehp_poll_mode)
-+ del_timer_sync(&php_ctlr->int_poll_timer);
-+ else
-+ free_irq(php_ctlr->irq, ctrl);
-+
- abort_free_ctlr:
- pcie_cap_base = saved_cap_base;
- kfree(php_ctlr);
diff --git a/pci/pci-hotplug-tollhouse-hp-sgi-hotplug-driver-changes.patch b/pci/pci-hotplug-tollhouse-hp-sgi-hotplug-driver-changes.patch
deleted file mode 100644
index 6c79547130ad1..0000000000000
--- a/pci/pci-hotplug-tollhouse-hp-sgi-hotplug-driver-changes.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From prarit@sgi.com Tue Apr 4 06:26:54 2006
-Date: Tue, 4 Apr 2006 09:26:46 -0400
-From: Prarit Bhargava <prarit@sgi.com>
-To: <edwardsg@sgi.com>
-Cc: Prarit Bhargava <prarit@sgi.com>
-Message-Id: <20060404132641.10912.44536.sendpatchset@prarit.boston.redhat.com>
-Subject: PCI Hotplug: Tollhouse HP: SGI hotplug driver changes
-
-SGI hotplug driver changes required to support Tollhouse system PCI
-hotplug, and implements the PRF_HOTPLUG_SUPPORT feature bit.
-
-Signed-off-by: Prarit Bhargava <prarit@sgi.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/sgi_hotplug.c | 42 +++++++++++++++++++-------------------
- 1 file changed, 21 insertions(+), 21 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/sgi_hotplug.c
-+++ gregkh-2.6/drivers/pci/hotplug/sgi_hotplug.c
-@@ -18,11 +18,13 @@
- #include <linux/mutex.h>
-
- #include <asm/sn/addrs.h>
-+#include <asm/sn/geo.h>
- #include <asm/sn/l1.h>
- #include <asm/sn/module.h>
- #include <asm/sn/pcibr_provider.h>
- #include <asm/sn/pcibus_provider_defs.h>
- #include <asm/sn/pcidev.h>
-+#include <asm/sn/sn_feature_sets.h>
- #include <asm/sn/sn_sal.h>
- #include <asm/sn/types.h>
-
-@@ -102,8 +104,7 @@ static struct hotplug_slot_attribute sn_
- static int sn_pci_slot_valid(struct pci_bus *pci_bus, int device)
- {
- struct pcibus_info *pcibus_info;
-- int bricktype;
-- int bus_num;
-+ u16 busnum, segment, ioboard_type;
-
- pcibus_info = SN_PCIBUS_BUSSOFT_INFO(pci_bus);
-
-@@ -111,12 +112,14 @@ static int sn_pci_slot_valid(struct pci_
- if (!(pcibus_info->pbi_valid_devices & (1 << device)))
- return -EPERM;
-
-- bricktype = MODULE_GET_BTYPE(pcibus_info->pbi_moduleid);
-- bus_num = pcibus_info->pbi_buscommon.bs_persist_busnum & 0xf;
-+ ioboard_type = sn_ioboard_to_pci_bus(pci_bus);
-+ busnum = pcibus_info->pbi_buscommon.bs_persist_busnum;
-+ segment = pci_domain_nr(pci_bus) & 0xf;
-
- /* Do not allow hotplug operations on base I/O cards */
-- if ((bricktype == L1_BRICKTYPE_IX || bricktype == L1_BRICKTYPE_IA) &&
-- (bus_num == 1 && device != 1))
-+ if ((ioboard_type == L1_BRICKTYPE_IX ||
-+ ioboard_type == L1_BRICKTYPE_IA) &&
-+ (segment == 1 && busnum == 0 && device != 1))
- return -EPERM;
-
- return 1;
-@@ -125,23 +128,23 @@ static int sn_pci_slot_valid(struct pci_
- static int sn_pci_bus_valid(struct pci_bus *pci_bus)
- {
- struct pcibus_info *pcibus_info;
-- int asic_type;
-- int bricktype;
--
-- pcibus_info = SN_PCIBUS_BUSSOFT_INFO(pci_bus);
-+ u32 asic_type;
-+ u16 ioboard_type;
-
- /* Don't register slots hanging off the TIOCA bus */
-+ pcibus_info = SN_PCIBUS_BUSSOFT_INFO(pci_bus);
- asic_type = pcibus_info->pbi_buscommon.bs_asic_type;
- if (asic_type == PCIIO_ASIC_TYPE_TIOCA)
- return -EPERM;
-
- /* Only register slots in I/O Bricks that support hotplug */
-- bricktype = MODULE_GET_BTYPE(pcibus_info->pbi_moduleid);
-- switch (bricktype) {
-+ ioboard_type = sn_ioboard_to_pci_bus(pci_bus);
-+ switch (ioboard_type) {
- case L1_BRICKTYPE_IX:
- case L1_BRICKTYPE_PX:
- case L1_BRICKTYPE_IA:
- case L1_BRICKTYPE_PA:
-+ case L1_BOARDTYPE_PCIX3SLOT:
- return 1;
- break;
- default:
-@@ -175,14 +178,11 @@ static int sn_hp_slot_private_alloc(stru
- slot->pci_bus = pci_bus;
- sprintf(bss_hotplug_slot->name, "%04x:%02x:%02x",
- pci_domain_nr(pci_bus),
-- ((int)pcibus_info->pbi_buscommon.bs_persist_busnum) & 0xf,
-+ ((u16)pcibus_info->pbi_buscommon.bs_persist_busnum),
- device + 1);
-- sprintf(slot->physical_path, "module_%c%c%c%c%.2d",
-- '0'+RACK_GET_CLASS(MODULE_GET_RACK(pcibus_info->pbi_moduleid)),
-- '0'+RACK_GET_GROUP(MODULE_GET_RACK(pcibus_info->pbi_moduleid)),
-- '0'+RACK_GET_NUM(MODULE_GET_RACK(pcibus_info->pbi_moduleid)),
-- MODULE_GET_BTCHAR(pcibus_info->pbi_moduleid),
-- MODULE_GET_BPOS(pcibus_info->pbi_moduleid));
-+
-+ sn_generate_path(pci_bus, slot->physical_path);
-+
- slot->hotplug_slot = bss_hotplug_slot;
- list_add(&slot->hp_list, &sn_hp_list);
-
-@@ -553,8 +553,8 @@ static int sn_pci_hotplug_init(void)
- int rc;
- int registered = 0;
-
-- if (sn_sal_rev() < SGI_HOTPLUG_PROM_REV) {
-- printk(KERN_ERR "%s: PROM version must be greater than 4.30\n",
-+ if (!sn_prom_feature_available(PRF_HOTPLUG_SUPPORT)) {
-+ printk(KERN_ERR "%s: PROM version does not support hotplug.\n",
- __FUNCTION__);
- return -EPERM;
- }
diff --git a/pci/pci-pci_ids-add-new-device-ids.patch b/pci/pci-pci_ids-add-new-device-ids.patch
deleted file mode 100644
index 999efbcb99263..0000000000000
--- a/pci/pci-pci_ids-add-new-device-ids.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From akpm@osdl.org Thu May 25 14:43:24 2006
-Message-Id: <200605252143.k4PLh9oT011089@shell0.pdx.osdl.net>
-From: Ayaz Abdulla <aabdulla@nvidia.com>
-Subject: PCI: pci_ids: add new device ids
-To: aabdulla@nvidia.com, greg@kroah.com, jeff@garzik.org
-Date: Thu, 25 May 2006 14:42:40 -0700
-
-From: Ayaz Abdulla <aabdulla@nvidia.com>
-
-Add new device ids for MCP61 and MCP65 chips.
-
-Signed-off-by: Ayaz Abdulla <aabdulla@nvidia.com>
-Cc: Jeff Garzik <jeff@garzik.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- include/linux/pci_ids.h | 1 +
- 1 file changed, 1 insertion(+)
-
---- gregkh-2.6.orig/include/linux/pci_ids.h
-+++ gregkh-2.6/include/linux/pci_ids.h
-@@ -1202,6 +1202,7 @@
- #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452
- #define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453
-
-+
- #define PCI_VENDOR_ID_IMS 0x10e0
- #define PCI_DEVICE_ID_IMS_TT128 0x9128
- #define PCI_DEVICE_ID_IMS_TT3D 0x9135
diff --git a/pci/pciehp-add-missing-pci_dev_put.patch b/pci/pciehp-add-missing-pci_dev_put.patch
deleted file mode 100644
index 945982bf03828..0000000000000
--- a/pci/pciehp-add-missing-pci_dev_put.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Thu May 11 19:26:26 2006
-Message-ID: <4463F1AB.10908@jp.fujitsu.com>
-Date: Fri, 12 May 2006 11:23:39 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>, "Shah, Rajesh" <rajesh.shah@intel.com>
-Subject: pciehp: Add missing pci_dev_put
-
-The PCIEHP driver leaks reference counter of pci_dev structures. This
-patch adds missing pci_dev_put() calls to PCIEHP driver.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/pciehp_pci.c | 2 ++
- 1 file changed, 2 insertions(+)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_pci.c
-+++ gregkh-2.6/drivers/pci/hotplug/pciehp_pci.c
-@@ -225,6 +225,7 @@ int pciehp_configure_device(struct slot
- if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
- err("Cannot hot-add display device %s\n",
- pci_name(dev));
-+ pci_dev_put(dev);
- continue;
- }
- if ((dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) ||
-@@ -232,6 +233,7 @@ int pciehp_configure_device(struct slot
- pciehp_add_bridge(dev);
- }
- program_fw_provided_values(dev);
-+ pci_dev_put(dev);
- }
-
- pci_bus_assign_resources(parent);
diff --git a/pci/pciehp-dont-call-pci_enable_dev.patch b/pci/pciehp-dont-call-pci_enable_dev.patch
deleted file mode 100644
index 51192bf8553c2..0000000000000
--- a/pci/pciehp-dont-call-pci_enable_dev.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From pcihpd-discuss-admin@lists.sourceforge.net Mon Apr 24 15:42:17 2006
-From: Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: greg@kroah.com
-Message-Id: <1145919059.6478.29.camel@whizzy>
-Subject: pciehp: dont call pci_enable_dev
-Date: Mon, 24 Apr 2006 15:50:59 -0700
-
-Don't call pci_enable_device from pciehp because the pcie port service driver
-already does this.
-
-Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/pciehp_hpc.c | 3 ---
- 1 file changed, 3 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/pciehp_hpc.c
-@@ -1405,9 +1405,6 @@ int pcie_init(struct controller * ctrl,
- info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", pdev->vendor, pdev->device,
- pdev->subsystem_vendor, pdev->subsystem_device);
-
-- if (pci_enable_device(pdev))
-- goto abort_free_ctlr;
--
- mutex_init(&ctrl->crit_sect);
- /* setup wait queue */
- init_waitqueue_head(&ctrl->queue);
diff --git a/pci/pciehp-fix-programming-hotplug-parameters.patch b/pci/pciehp-fix-programming-hotplug-parameters.patch
deleted file mode 100644
index 3ccb08f841f81..0000000000000
--- a/pci/pciehp-fix-programming-hotplug-parameters.patch
+++ /dev/null
@@ -1,179 +0,0 @@
-From pcihpd-discuss-admin@lists.sourceforge.net Mon May 8 17:52:40 2006
-Message-ID: <445F1091.5020009@jp.fujitsu.com>
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: gregkh@suse.de
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>, <kristen.c.accardi@intel.com>
-Subject: pciehp: Fix programming hotplug parameters
-Date: Mon, 08 May 2006 18:34:09 +0900
-
-Current PCHEHP driver doesn't have any code to program hotplug
-parameters from firmware. So hotplug parameters are never programed at
-hot-add time. This patch add support for programming hotplug
-parameters to PCIEHP driver.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
-
----
- drivers/pci/hotplug/pciehp_pci.c | 141 ++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 139 insertions(+), 2 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_pci.c
-+++ gregkh-2.6/drivers/pci/hotplug/pciehp_pci.c
-@@ -34,6 +34,144 @@
- #include "../pci.h"
- #include "pciehp.h"
-
-+static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp)
-+{
-+ u16 pci_cmd, pci_bctl;
-+
-+ if (hpp->revision > 1) {
-+ printk(KERN_WARNING "%s: Rev.%d type0 record not supported\n",
-+ __FUNCTION__, hpp->revision);
-+ return;
-+ }
-+
-+ pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, hpp->cache_line_size);
-+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp->latency_timer);
-+ pci_read_config_word(dev, PCI_COMMAND, &pci_cmd);
-+ if (hpp->enable_serr)
-+ pci_cmd |= PCI_COMMAND_SERR;
-+ else
-+ pci_cmd &= ~PCI_COMMAND_SERR;
-+ if (hpp->enable_perr)
-+ pci_cmd |= PCI_COMMAND_PARITY;
-+ else
-+ pci_cmd &= ~PCI_COMMAND_PARITY;
-+ pci_write_config_word(dev, PCI_COMMAND, pci_cmd);
-+
-+ /* Program bridge control value */
-+ if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
-+ pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
-+ hpp->latency_timer);
-+ pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
-+ if (hpp->enable_serr)
-+ pci_bctl |= PCI_BRIDGE_CTL_SERR;
-+ else
-+ pci_bctl &= ~PCI_BRIDGE_CTL_SERR;
-+ if (hpp->enable_perr)
-+ pci_bctl |= PCI_BRIDGE_CTL_PARITY;
-+ else
-+ pci_bctl &= ~PCI_BRIDGE_CTL_PARITY;
-+ pci_write_config_word(dev, PCI_BRIDGE_CONTROL, pci_bctl);
-+ }
-+}
-+
-+static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp)
-+{
-+ int pos;
-+ u16 reg16;
-+ u32 reg32;
-+
-+ if (hpp->revision > 1) {
-+ printk(KERN_WARNING "%s: Rev.%d type2 record not supported\n",
-+ __FUNCTION__, hpp->revision);
-+ return;
-+ }
-+
-+ /* Find PCI Express capability */
-+ pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
-+ if (!pos)
-+ return;
-+
-+ /* Initialize Device Control Register */
-+ pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &reg16);
-+ reg16 = (reg16 & hpp->pci_exp_devctl_and) | hpp->pci_exp_devctl_or;
-+ pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, reg16);
-+
-+ /* Initialize Link Control Register */
-+ if (dev->subordinate) {
-+ pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &reg16);
-+ reg16 = (reg16 & hpp->pci_exp_lnkctl_and)
-+ | hpp->pci_exp_lnkctl_or;
-+ pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, reg16);
-+ }
-+
-+ /* Find Advanced Error Reporting Enhanced Capability */
-+ pos = 256;
-+ do {
-+ pci_read_config_dword(dev, pos, &reg32);
-+ if (PCI_EXT_CAP_ID(reg32) == PCI_EXT_CAP_ID_ERR)
-+ break;
-+ } while ((pos = PCI_EXT_CAP_NEXT(reg32)));
-+ if (!pos)
-+ return;
-+
-+ /* Initialize Uncorrectable Error Mask Register */
-+ pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, &reg32);
-+ reg32 = (reg32 & hpp->unc_err_mask_and) | hpp->unc_err_mask_or;
-+ pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, reg32);
-+
-+ /* Initialize Uncorrectable Error Severity Register */
-+ pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, &reg32);
-+ reg32 = (reg32 & hpp->unc_err_sever_and) | hpp->unc_err_sever_or;
-+ pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, reg32);
-+
-+ /* Initialize Correctable Error Mask Register */
-+ pci_read_config_dword(dev, pos + PCI_ERR_COR_MASK, &reg32);
-+ reg32 = (reg32 & hpp->cor_err_mask_and) | hpp->cor_err_mask_or;
-+ pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, reg32);
-+
-+ /* Initialize Advanced Error Capabilities and Control Register */
-+ pci_read_config_dword(dev, pos + PCI_ERR_CAP, &reg32);
-+ reg32 = (reg32 & hpp->adv_err_cap_and) | hpp->adv_err_cap_or;
-+ pci_write_config_dword(dev, pos + PCI_ERR_CAP, reg32);
-+
-+ /*
-+ * FIXME: The following two registers are not supported yet.
-+ *
-+ * o Secondary Uncorrectable Error Severity Register
-+ * o Secondary Uncorrectable Error Mask Register
-+ */
-+}
-+
-+static void program_fw_provided_values(struct pci_dev *dev)
-+{
-+ struct pci_dev *cdev;
-+ struct hotplug_params hpp;
-+
-+ /* Program hpp values for this device */
-+ if (!(dev->hdr_type == PCI_HEADER_TYPE_NORMAL ||
-+ (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
-+ (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI)))
-+ return;
-+
-+ if (pciehp_get_hp_params_from_firmware(dev, &hpp)) {
-+ printk(KERN_WARNING "%s: Could not get hotplug parameters\n",
-+ __FUNCTION__);
-+ return;
-+ }
-+
-+ if (hpp.t2)
-+ program_hpp_type2(dev, hpp.t2);
-+ if (hpp.t0)
-+ program_hpp_type0(dev, hpp.t0);
-+
-+ /* Program child devices */
-+ if (dev->subordinate) {
-+ list_for_each_entry(cdev, &dev->subordinate->devices,
-+ bus_list)
-+ program_fw_provided_values(cdev);
-+ }
-+}
-+
- static int pciehp_add_bridge(struct pci_dev *dev)
- {
- struct pci_bus *parent = dev->bus;
-@@ -92,8 +230,7 @@ int pciehp_configure_device(struct slot
- (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)) {
- pciehp_add_bridge(dev);
- }
-- /* TBD: program firmware provided _HPP values */
-- /* program_fw_provided_values(dev); */
-+ program_fw_provided_values(dev);
- }
-
- pci_bus_assign_resources(parent);
diff --git a/pci/pciehp-implement-get_address-callback.patch b/pci/pciehp-implement-get_address-callback.patch
deleted file mode 100644
index 0e003a00f1106..0000000000000
--- a/pci/pciehp-implement-get_address-callback.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Thu May 11 21:42:19 2006
-Message-ID: <44641191.9070300@jp.fujitsu.com>
-Date: Fri, 12 May 2006 13:39:45 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>, "Shah, Rajesh" <rajesh.shah@intel.com>
-Subject: pciehp: Implement get_address callback
-
-This patch implements .get_address callback of hotplug_slot_ops for
-PCIEHP driver. With this patch, we can see bus address of hotplug
-slots as follows:
-
- # cat /sys/bus/pci/slots/0010_0000/address
- 0000:0a:00
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
----
- drivers/pci/hotplug/pciehp_core.c | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_core.c
-+++ gregkh-2.6/drivers/pci/hotplug/pciehp_core.c
-@@ -69,6 +69,7 @@ static int get_power_status (struct hotp
- static int get_attention_status (struct hotplug_slot *slot, u8 *value);
- static int get_latch_status (struct hotplug_slot *slot, u8 *value);
- static int get_adapter_status (struct hotplug_slot *slot, u8 *value);
-+static int get_address (struct hotplug_slot *slot, u32 *value);
- static int get_max_bus_speed (struct hotplug_slot *slot, enum pci_bus_speed *value);
- static int get_cur_bus_speed (struct hotplug_slot *slot, enum pci_bus_speed *value);
-
-@@ -81,6 +82,7 @@ static struct hotplug_slot_ops pciehp_ho
- .get_attention_status = get_attention_status,
- .get_latch_status = get_latch_status,
- .get_adapter_status = get_adapter_status,
-+ .get_address = get_address,
- .get_max_bus_speed = get_max_bus_speed,
- .get_cur_bus_speed = get_cur_bus_speed,
- };
-@@ -331,6 +333,18 @@ static int get_adapter_status(struct hot
- return 0;
- }
-
-+static int get_address(struct hotplug_slot *hotplug_slot, u32 *value)
-+{
-+ struct slot *slot = hotplug_slot->private;
-+ struct pci_bus *bus = slot->ctrl->pci_dev->subordinate;
-+
-+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
-+
-+ *value = (pci_domain_nr(bus) << 16) | (slot->bus << 8) | slot->device;
-+
-+ return 0;
-+}
-+
- static int get_max_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value)
- {
- struct slot *slot = hotplug_slot->private;
diff --git a/pci/pciehp-replace-pci_find_slot-with-pci_get_slot.patch b/pci/pciehp-replace-pci_find_slot-with-pci_get_slot.patch
deleted file mode 100644
index 0b1bddbbba482..0000000000000
--- a/pci/pciehp-replace-pci_find_slot-with-pci_get_slot.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Thu May 11 19:25:20 2006
-Message-ID: <4463F160.9040806@jp.fujitsu.com>
-Date: Fri, 12 May 2006 11:22:24 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>, "Shah, Rajesh" <rajesh.shah@intel.com>
-Subject: pciehp: Replace pci_find_slot() with pci_get_slot()
-
-
-This patch replaces pci_find_slot() with pci_get_slot() in PCIEHP
-driver. This patch enables PCI Express Hotplug on the system which has
-multiple PCI domains.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/pciehp_pci.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/pciehp_pci.c
-+++ gregkh-2.6/drivers/pci/hotplug/pciehp_pci.c
-@@ -204,10 +204,11 @@ int pciehp_configure_device(struct slot
- struct pci_bus *parent = p_slot->ctrl->pci_dev->subordinate;
- int num, fn;
-
-- dev = pci_find_slot(p_slot->bus, PCI_DEVFN(p_slot->device, 0));
-+ dev = pci_get_slot(parent, PCI_DEVFN(p_slot->device, 0));
- if (dev) {
- err("Device %s already exists at %x:%x, cannot hot-add\n",
- pci_name(dev), p_slot->bus, p_slot->device);
-+ pci_dev_put(dev);
- return -EINVAL;
- }
-
-@@ -243,18 +244,20 @@ int pciehp_unconfigure_device(struct slo
- int rc = 0;
- int j;
- u8 bctl = 0;
-+ struct pci_bus *parent = p_slot->ctrl->pci_dev->subordinate;
-
- dbg("%s: bus/dev = %x/%x\n", __FUNCTION__, p_slot->bus,
- p_slot->device);
-
- for (j=0; j<8 ; j++) {
-- struct pci_dev* temp = pci_find_slot(p_slot->bus,
-+ struct pci_dev* temp = pci_get_slot(parent,
- (p_slot->device << 3) | j);
- if (!temp)
- continue;
- if ((temp->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
- err("Cannot remove display device %s\n",
- pci_name(temp));
-+ pci_dev_put(temp);
- continue;
- }
- if (temp->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
-@@ -262,10 +265,12 @@ int pciehp_unconfigure_device(struct slo
- if (bctl & PCI_BRIDGE_CTL_VGA) {
- err("Cannot remove display device %s\n",
- pci_name(temp));
-+ pci_dev_put(temp);
- continue;
- }
- }
- pci_remove_bus_device(temp);
-+ pci_dev_put(temp);
- }
- /*
- * Some PCI Express root ports require fixup after hot-plug operation.
diff --git a/pci/sgi-hotplug-incorrect-power-status.patch b/pci/sgi-hotplug-incorrect-power-status.patch
deleted file mode 100644
index 399b3cac426a3..0000000000000
--- a/pci/sgi-hotplug-incorrect-power-status.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From habeck@sgi.com Sat May 6 07:02:11 2006
-Date: Sat, 6 May 2006 09:01:59 -0500 (CDT)
-From: Mike Habeck <habeck@sgi.com>
-Cc: gregkh@suse.de, habeck@sgi.com, Mike Habeck <habeck@sgi.com>
-Message-Id: <20060506140159.10694.57720.75984@attica.americas.sgi.com>
-Subject: SGI Hotplug: Incorrect power status
-
-This is a repost of a patch submitted by Prarit Bhargava on 01-19-06 that
-never got integrated.
-
-The get_power_status function is currently reporting a bitwise mapping of
-the slot if the slot is powered on. It should return 1 if powered on and
-0 if powered off.
-
-Signed-off-by: Mike Habeck <habeck@sgi.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/sgi_hotplug.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/sgi_hotplug.c
-+++ gregkh-2.6/drivers/pci/hotplug/sgi_hotplug.c
-@@ -461,10 +461,12 @@ static inline int get_power_status(struc
- {
- struct slot *slot = bss_hotplug_slot->private;
- struct pcibus_info *pcibus_info;
-+ u32 power;
-
- pcibus_info = SN_PCIBUS_BUSSOFT_INFO(slot->pci_bus);
- mutex_lock(&sn_hotplug_mutex);
-- *value = pcibus_info->pbi_enabled_devices & (1 << slot->device_num);
-+ power = pcibus_info->pbi_enabled_devices & (1 << slot->device_num);
-+ *value = power ? 1 : 0;
- mutex_unlock(&sn_hotplug_mutex);
- return 0;
- }
diff --git a/pci/shpc-cleanup-shpc-logical-slot-register-access.patch b/pci/shpc-cleanup-shpc-logical-slot-register-access.patch
deleted file mode 100644
index c827331718ff2..0000000000000
--- a/pci/shpc-cleanup-shpc-logical-slot-register-access.patch
+++ /dev/null
@@ -1,142 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Mon May 1 19:12:18 2006
-Message-ID: <4456BF66.6090200@jp.fujitsu.com>
-Date: Tue, 02 May 2006 11:09:42 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: SHPC: Cleanup SHPC Logical Slot Register access
-
-This patch cleans up the code to access slot logical registers. This
-patch has no functional changes.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 31 ++++++++++++++++++-------------
- 1 file changed, 18 insertions(+), 13 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -90,6 +90,11 @@
- #define MRLSENSOR 0x40000000
- #define ATTN_BUTTON 0x80000000
-
-+/*
-+ * Logical Slot Register definitions
-+ */
-+#define SLOT_REG(i) (SLOT1 + (4 * i))
-+
- /* Slot Status Field Definitions */
- /* Slot State */
- #define PWR_ONLY 0x0001
-@@ -433,7 +438,7 @@ static int hpc_get_attention_status(stru
- return -1;
- }
-
-- slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- slot_status = (u16) slot_reg;
- atten_led_state = (slot_status & 0x0030) >> 4;
-
-@@ -474,7 +479,7 @@ static int hpc_get_power_status(struct s
- return -1;
- }
-
-- slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- slot_status = (u16) slot_reg;
- slot_state = (slot_status & 0x0003);
-
-@@ -514,7 +519,7 @@ static int hpc_get_latch_status(struct s
- return -1;
- }
-
-- slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- slot_status = (u16)slot_reg;
-
- *status = ((slot_status & 0x0100) == 0) ? 0 : 1; /* 0 -> close; 1 -> open */
-@@ -538,7 +543,7 @@ static int hpc_get_adapter_status(struct
- return -1;
- }
-
-- slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- slot_status = (u16)slot_reg;
- card_state = (u8)((slot_status & 0x0C00) >> 10);
- *status = (card_state != 0x3) ? 1 : 0;
-@@ -568,7 +573,7 @@ static int hpc_get_adapter_speed(struct
- {
- int retval = 0;
- struct controller *ctrl = slot->ctrl;
-- u32 slot_reg = shpc_readl(ctrl, SLOT1 + 4 * slot->hp_slot);
-+ u32 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- u8 pcix_cap = (slot_reg >> 12) & 7;
- u8 m66_cap = (slot_reg >> 9) & 1;
-
-@@ -648,7 +653,7 @@ static int hpc_query_power_fault(struct
- return -1;
- }
-
-- slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- slot_status = (u16) slot_reg;
- pwr_fault_state = (slot_status & 0x0040) >> 7;
- status = (pwr_fault_state == 1) ? 0 : 1;
-@@ -805,7 +810,7 @@ static void hpc_release_ctlr(struct cont
- * Mask all slot event interrupts
- */
- for (i = 0; i < ctrl->num_slots; i++)
-- shpc_writel(ctrl, SLOT1 + (4 * i), 0xffff3fff);
-+ shpc_writel(ctrl, SLOT_REG(i), 0xffff3fff);
-
- cleanup_slots(ctrl);
-
-@@ -1072,7 +1077,7 @@ static irqreturn_t shpc_isr(int IRQ, voi
- for (hp_slot = 0; hp_slot < ctrl->num_slots; hp_slot++) {
- /* To find out which slot has interrupt pending */
- if ((intr_loc >> hp_slot) & 0x01) {
-- temp_dword = shpc_readl(ctrl, SLOT1 + (4*hp_slot));
-+ temp_dword = shpc_readl(ctrl, SLOT_REG(hp_slot));
- dbg("%s: Slot %x with intr, slot register = %x\n",
- __FUNCTION__, hp_slot, temp_dword);
- temp_byte = (temp_dword >> 16) & 0xFF;
-@@ -1091,7 +1096,7 @@ static irqreturn_t shpc_isr(int IRQ, voi
-
- /* Clear all slot events */
- temp_dword = 0xe01f3fff;
-- shpc_writel(ctrl, SLOT1 + (4*hp_slot), temp_dword);
-+ shpc_writel(ctrl, SLOT_REG(hp_slot), temp_dword);
-
- intr_loc2 = shpc_readl(ctrl, INTR_LOC);
- dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2);
-@@ -1379,11 +1384,11 @@ int shpc_init(struct controller * ctrl,
- * Slot SERR-INT Mask & clear all the existing event if any
- */
- for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) {
-- slot_reg = shpc_readl(ctrl, SLOT1 + 4*hp_slot );
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
- dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__,
- hp_slot, slot_reg);
- tempdword = 0xffff3fff;
-- shpc_writel(ctrl, SLOT1 + (4*hp_slot), tempdword);
-+ shpc_writel(ctrl, SLOT_REG(hp_slot), tempdword);
- }
-
- if (shpchp_poll_mode) {/* Install interrupt polling code */
-@@ -1430,11 +1435,11 @@ int shpc_init(struct controller * ctrl,
- ctlr_seq_num++;
-
- for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) {
-- slot_reg = shpc_readl(ctrl, SLOT1 + 4*hp_slot );
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
- dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__,
- hp_slot, slot_reg);
- tempdword = 0xe01f3fff;
-- shpc_writel(ctrl, SLOT1 + (4*hp_slot), tempdword);
-+ shpc_writel(ctrl, SLOT_REG(hp_slot), tempdword);
- }
- if (!shpchp_poll_mode) {
- /* Unmask all general input interrupts and SERR */
diff --git a/pci/shpc-cleanup-shpc-logical-slot-register-bits-access.patch b/pci/shpc-cleanup-shpc-logical-slot-register-bits-access.patch
deleted file mode 100644
index 36d0a499060f6..0000000000000
--- a/pci/shpc-cleanup-shpc-logical-slot-register-bits-access.patch
+++ /dev/null
@@ -1,299 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Mon May 1 19:13:04 2006
-Message-ID: <4456BF9D.6090608@jp.fujitsu.com>
-Date: Tue, 02 May 2006 11:10:37 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: SHPC: Cleanup SHPC Logical Slot Register bits access
-
-This patch cleans up the code to access bits in slot logical
-registers. This patch has no functional change.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 151 ++++++++++++++++-----------------------
- 1 file changed, 64 insertions(+), 87 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -95,43 +95,40 @@
- */
- #define SLOT_REG(i) (SLOT1 + (4 * i))
-
--/* Slot Status Field Definitions */
--/* Slot State */
--#define PWR_ONLY 0x0001
--#define ENABLED 0x0002
--#define DISABLED 0x0003
--
--/* Power Indicator State */
--#define PWR_LED_ON 0x0004
--#define PWR_LED_BLINK 0x0008
--#define PWR_LED_OFF 0x000c
--
--/* Attention Indicator State */
--#define ATTEN_LED_ON 0x0010
--#define ATTEN_LED_BLINK 0x0020
--#define ATTEN_LED_OFF 0x0030
--
--/* Power Fault */
--#define pwr_fault 0x0040
--
--/* Attention Button */
--#define ATTEN_BUTTON 0x0080
--
--/* MRL Sensor */
--#define MRL_SENSOR 0x0100
--
--/* 66 MHz Capable */
--#define IS_66MHZ_CAP 0x0200
--
--/* PRSNT1#/PRSNT2# */
--#define SLOT_EMP 0x0c00
--
--/* PCI-X Capability */
--#define NON_PCIX 0x0000
--#define PCIX_66 0x1000
--#define PCIX_133 0x3000
--#define PCIX_266 0x4000 /* For PI = 2 only */
--#define PCIX_533 0x5000 /* For PI = 2 only */
-+#define SLOT_STATE_SHIFT (0)
-+#define SLOT_STATE_MASK (3 << 0)
-+#define SLOT_STATE_PWRONLY (1)
-+#define SLOT_STATE_ENABLED (2)
-+#define SLOT_STATE_DISABLED (3)
-+#define PWR_LED_STATE_SHIFT (2)
-+#define PWR_LED_STATE_MASK (3 << 2)
-+#define ATN_LED_STATE_SHIFT (4)
-+#define ATN_LED_STATE_MASK (3 << 4)
-+#define ATN_LED_STATE_ON (1)
-+#define ATN_LED_STATE_BLINK (2)
-+#define ATN_LED_STATE_OFF (3)
-+#define POWER_FAULT (1 << 6)
-+#define ATN_BUTTON (1 << 7)
-+#define MRL_SENSOR (1 << 8)
-+#define MHZ66_CAP (1 << 9)
-+#define PRSNT_SHIFT (10)
-+#define PRSNT_MASK (3 << 10)
-+#define PCIX_CAP_SHIFT (12)
-+#define PCIX_CAP_MASK_PI1 (3 << 12)
-+#define PCIX_CAP_MASK_PI2 (7 << 12)
-+#define PRSNT_CHANGE_DETECTED (1 << 16)
-+#define ISO_PFAULT_DETECTED (1 << 17)
-+#define BUTTON_PRESS_DETECTED (1 << 18)
-+#define MRL_CHANGE_DETECTED (1 << 19)
-+#define CON_PFAULT_DETECTED (1 << 20)
-+#define PRSNT_CHANGE_INTR_MASK (1 << 24)
-+#define ISO_PFAULT_INTR_MASK (1 << 25)
-+#define BUTTON_PRESS_INTR_MASK (1 << 26)
-+#define MRL_CHANGE_INTR_MASK (1 << 27)
-+#define CON_PFAULT_INTR_MASK (1 << 28)
-+#define MRL_CHANGE_SERR_MASK (1 << 29)
-+#define CON_PFAULT_SERR_MASK (1 << 30)
-+#define SLOT_REG_RSVDZ_MASK (1 << 15) | (7 << 21)
-
- /* SHPC 'write' operations/commands */
-
-@@ -428,8 +425,7 @@ static int hpc_get_attention_status(stru
- {
- struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
-- u16 slot_status;
-- u8 atten_led_state;
-+ u8 state;
-
- DBG_ENTER_ROUTINE
-
-@@ -439,24 +435,20 @@ static int hpc_get_attention_status(stru
- }
-
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
-- slot_status = (u16) slot_reg;
-- atten_led_state = (slot_status & 0x0030) >> 4;
-+ state = (slot_reg & ATN_LED_STATE_MASK) >> ATN_LED_STATE_SHIFT;
-
-- switch (atten_led_state) {
-- case 0:
-- *status = 0xFF; /* Reserved */
-- break;
-- case 1:
-+ switch (state) {
-+ case ATN_LED_STATE_ON:
- *status = 1; /* On */
- break;
-- case 2:
-+ case ATN_LED_STATE_BLINK:
- *status = 2; /* Blink */
- break;
-- case 3:
-+ case ATN_LED_STATE_OFF:
- *status = 0; /* Off */
- break;
- default:
-- *status = 0xFF;
-+ *status = 0xFF; /* Reserved */
- break;
- }
-
-@@ -468,9 +460,7 @@ static int hpc_get_power_status(struct s
- {
- struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
-- u16 slot_status;
-- u8 slot_state;
-- int retval = 0;
-+ u8 state;
-
- DBG_ENTER_ROUTINE
-
-@@ -480,29 +470,25 @@ static int hpc_get_power_status(struct s
- }
-
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
-- slot_status = (u16) slot_reg;
-- slot_state = (slot_status & 0x0003);
-+ state = (slot_reg & SLOT_STATE_MASK) >> SLOT_STATE_SHIFT;
-
-- switch (slot_state) {
-- case 0:
-- *status = 0xFF;
-- break;
-- case 1:
-+ switch (state) {
-+ case SLOT_STATE_PWRONLY:
- *status = 2; /* Powered only */
- break;
-- case 2:
-+ case SLOT_STATE_ENABLED:
- *status = 1; /* Enabled */
- break;
-- case 3:
-+ case SLOT_STATE_DISABLED:
- *status = 0; /* Disabled */
- break;
- default:
-- *status = 0xFF;
-+ *status = 0xFF; /* Reserved */
- break;
- }
-
- DBG_LEAVE_ROUTINE
-- return retval;
-+ return 0;
- }
-
-
-@@ -510,7 +496,6 @@ static int hpc_get_latch_status(struct s
- {
- struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
-- u16 slot_status;
-
- DBG_ENTER_ROUTINE
-
-@@ -520,10 +505,7 @@ static int hpc_get_latch_status(struct s
- }
-
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
-- slot_status = (u16)slot_reg;
--
-- *status = ((slot_status & 0x0100) == 0) ? 0 : 1; /* 0 -> close; 1 -> open */
--
-+ *status = !!(slot_reg & MRL_SENSOR); /* 0 -> close; 1 -> open */
-
- DBG_LEAVE_ROUTINE
- return 0;
-@@ -533,8 +515,7 @@ static int hpc_get_adapter_status(struct
- {
- struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
-- u16 slot_status;
-- u8 card_state;
-+ u8 state;
-
- DBG_ENTER_ROUTINE
-
-@@ -544,9 +525,8 @@ static int hpc_get_adapter_status(struct
- }
-
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
-- slot_status = (u16)slot_reg;
-- card_state = (u8)((slot_status & 0x0C00) >> 10);
-- *status = (card_state != 0x3) ? 1 : 0;
-+ state = (slot_reg & PRSNT_MASK) >> PRSNT_SHIFT;
-+ *status = (state != 0x3) ? 1 : 0;
-
- DBG_LEAVE_ROUTINE
- return 0;
-@@ -574,8 +554,8 @@ static int hpc_get_adapter_speed(struct
- int retval = 0;
- struct controller *ctrl = slot->ctrl;
- u32 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
-- u8 pcix_cap = (slot_reg >> 12) & 7;
-- u8 m66_cap = (slot_reg >> 9) & 1;
-+ u8 pcix_cap = (slot_reg & PCIX_CAP_MASK_PI2) >> PCIX_CAP_SHIFT;
-+ u8 m66_cap = !!(slot_reg & MHZ66_CAP);
-
- DBG_ENTER_ROUTINE
-
-@@ -643,8 +623,6 @@ static int hpc_query_power_fault(struct
- {
- struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
-- u16 slot_status;
-- u8 pwr_fault_state, status;
-
- DBG_ENTER_ROUTINE
-
-@@ -654,13 +632,10 @@ static int hpc_query_power_fault(struct
- }
-
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
-- slot_status = (u16) slot_reg;
-- pwr_fault_state = (slot_status & 0x0040) >> 7;
-- status = (pwr_fault_state == 1) ? 0 : 1;
-
- DBG_LEAVE_ROUTINE
- /* Note: Logic 0 => fault */
-- return status;
-+ return !(slot_reg & POWER_FAULT);
- }
-
- static int hpc_set_attention_status(struct slot *slot, u8 value)
-@@ -1019,7 +994,6 @@ static irqreturn_t shpc_isr(int IRQ, voi
- struct controller *ctrl = NULL;
- struct php_ctlr_state_s *php_ctlr;
- u8 schedule_flag = 0;
-- u8 temp_byte;
- u32 temp_dword, intr_loc, intr_loc2;
- int hp_slot;
-
-@@ -1080,17 +1054,20 @@ static irqreturn_t shpc_isr(int IRQ, voi
- temp_dword = shpc_readl(ctrl, SLOT_REG(hp_slot));
- dbg("%s: Slot %x with intr, slot register = %x\n",
- __FUNCTION__, hp_slot, temp_dword);
-- temp_byte = (temp_dword >> 16) & 0xFF;
-- if ((php_ctlr->switch_change_callback) && (temp_byte & 0x08))
-+ if ((php_ctlr->switch_change_callback) &&
-+ (temp_dword & MRL_CHANGE_DETECTED))
- schedule_flag += php_ctlr->switch_change_callback(
- hp_slot, php_ctlr->callback_instance_id);
-- if ((php_ctlr->attention_button_callback) && (temp_byte & 0x04))
-+ if ((php_ctlr->attention_button_callback) &&
-+ (temp_dword & BUTTON_PRESS_DETECTED))
- schedule_flag += php_ctlr->attention_button_callback(
- hp_slot, php_ctlr->callback_instance_id);
-- if ((php_ctlr->presence_change_callback) && (temp_byte & 0x01))
-+ if ((php_ctlr->presence_change_callback) &&
-+ (temp_dword & PRSNT_CHANGE_DETECTED))
- schedule_flag += php_ctlr->presence_change_callback(
- hp_slot , php_ctlr->callback_instance_id);
-- if ((php_ctlr->power_fault_callback) && (temp_byte & 0x12))
-+ if ((php_ctlr->power_fault_callback) &&
-+ (temp_dword & (ISO_PFAULT_DETECTED | CON_PFAULT_DETECTED)))
- schedule_flag += php_ctlr->power_fault_callback(
- hp_slot, php_ctlr->callback_instance_id);
-
diff --git a/pci/shpc-cleanup-shpc-register-access.patch b/pci/shpc-cleanup-shpc-register-access.patch
deleted file mode 100644
index e5d200d0c3962..0000000000000
--- a/pci/shpc-cleanup-shpc-register-access.patch
+++ /dev/null
@@ -1,536 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Mon May 1 19:11:17 2006
-Message-ID: <4456BF2A.40304@jp.fujitsu.com>
-Date: Tue, 02 May 2006 11:08:42 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>,
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: SHPC: Cleanup SHPC register access
-
-This patch cleans up the code to access SHPC working register
-sets. This patch has no functional changes.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 192 ++++++++++++++++++++++-----------------
- 1 file changed, 112 insertions(+), 80 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -208,6 +208,49 @@ static irqreturn_t shpc_isr(int IRQ, voi
- static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int seconds);
- static int hpc_check_cmd_status(struct controller *ctrl);
-
-+static inline u8 shpc_readb(struct controller *ctrl, int reg)
-+{
-+ return readb(ctrl->hpc_ctlr_handle->creg + reg);
-+}
-+
-+static inline void shpc_writeb(struct controller *ctrl, int reg, u8 val)
-+{
-+ writeb(val, ctrl->hpc_ctlr_handle->creg + reg);
-+}
-+
-+static inline u16 shpc_readw(struct controller *ctrl, int reg)
-+{
-+ return readw(ctrl->hpc_ctlr_handle->creg + reg);
-+}
-+
-+static inline void shpc_writew(struct controller *ctrl, int reg, u16 val)
-+{
-+ writew(val, ctrl->hpc_ctlr_handle->creg + reg);
-+}
-+
-+static inline u32 shpc_readl(struct controller *ctrl, int reg)
-+{
-+ return readl(ctrl->hpc_ctlr_handle->creg + reg);
-+}
-+
-+static inline void shpc_writel(struct controller *ctrl, int reg, u32 val)
-+{
-+ writel(val, ctrl->hpc_ctlr_handle->creg + reg);
-+}
-+
-+static inline int shpc_indirect_read(struct controller *ctrl, int index,
-+ u32 *value)
-+{
-+ int rc;
-+ u32 cap_offset = ctrl->cap_offset;
-+ struct pci_dev *pdev = ctrl->pci_dev;
-+
-+ rc = pci_write_config_byte(pdev, cap_offset + DWORD_SELECT, index);
-+ if (rc)
-+ return rc;
-+ return pci_read_config_dword(pdev, cap_offset + DWORD_DATA, value);
-+}
-+
- /* This is the interrupt polling timeout function. */
- static void int_poll_timeout(unsigned long lphp_ctlr)
- {
-@@ -273,6 +316,7 @@ static inline int shpc_wait_cmd(struct c
- static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
- {
- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- u16 cmd_status;
- int retval = 0;
- u16 temp_word;
-@@ -289,7 +333,7 @@ static int shpc_write_cmd(struct slot *s
- }
-
- for (i = 0; i < 10; i++) {
-- cmd_status = readw(php_ctlr->creg + CMD_STATUS);
-+ cmd_status = shpc_readw(ctrl, CMD_STATUS);
-
- if (!(cmd_status & 0x1))
- break;
-@@ -297,7 +341,7 @@ static int shpc_write_cmd(struct slot *s
- msleep(100);
- }
-
-- cmd_status = readw(php_ctlr->creg + CMD_STATUS);
-+ cmd_status = shpc_readw(ctrl, CMD_STATUS);
-
- if (cmd_status & 0x1) {
- /* After 1 sec and and the controller is still busy */
-@@ -314,7 +358,7 @@ static int shpc_write_cmd(struct slot *s
- * command.
- */
- slot->ctrl->cmd_busy = 1;
-- writew(temp_word, php_ctlr->creg + CMD);
-+ shpc_writew(ctrl, CMD, temp_word);
-
- /*
- * Wait for command completion.
-@@ -338,7 +382,6 @@ static int shpc_write_cmd(struct slot *s
-
- static int hpc_check_cmd_status(struct controller *ctrl)
- {
-- struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
- u16 cmd_status;
- int retval = 0;
-
-@@ -349,7 +392,7 @@ static int hpc_check_cmd_status(struct c
- return -1;
- }
-
-- cmd_status = readw(php_ctlr->creg + CMD_STATUS) & 0x000F;
-+ cmd_status = shpc_readw(ctrl, CMD_STATUS) & 0x000F;
-
- switch (cmd_status >> 1) {
- case 0:
-@@ -378,7 +421,7 @@ static int hpc_check_cmd_status(struct c
-
- static int hpc_get_attention_status(struct slot *slot, u8 *status)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
- u16 slot_status;
- u8 atten_led_state;
-@@ -390,7 +433,7 @@ static int hpc_get_attention_status(stru
- return -1;
- }
-
-- slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
- slot_status = (u16) slot_reg;
- atten_led_state = (slot_status & 0x0030) >> 4;
-
-@@ -418,7 +461,7 @@ static int hpc_get_attention_status(stru
-
- static int hpc_get_power_status(struct slot * slot, u8 *status)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
- u16 slot_status;
- u8 slot_state;
-@@ -431,7 +474,7 @@ static int hpc_get_power_status(struct s
- return -1;
- }
-
-- slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
- slot_status = (u16) slot_reg;
- slot_state = (slot_status & 0x0003);
-
-@@ -460,7 +503,7 @@ static int hpc_get_power_status(struct s
-
- static int hpc_get_latch_status(struct slot *slot, u8 *status)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
- u16 slot_status;
-
-@@ -471,7 +514,7 @@ static int hpc_get_latch_status(struct s
- return -1;
- }
-
-- slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
- slot_status = (u16)slot_reg;
-
- *status = ((slot_status & 0x0100) == 0) ? 0 : 1; /* 0 -> close; 1 -> open */
-@@ -483,7 +526,7 @@ static int hpc_get_latch_status(struct s
-
- static int hpc_get_adapter_status(struct slot *slot, u8 *status)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
- u16 slot_status;
- u8 card_state;
-@@ -495,7 +538,7 @@ static int hpc_get_adapter_status(struct
- return -1;
- }
-
-- slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
- slot_status = (u16)slot_reg;
- card_state = (u8)((slot_status & 0x0C00) >> 10);
- *status = (card_state != 0x3) ? 1 : 0;
-@@ -506,7 +549,7 @@ static int hpc_get_adapter_status(struct
-
- static int hpc_get_prog_int(struct slot *slot, u8 *prog_int)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
-
- DBG_ENTER_ROUTINE
-
-@@ -515,7 +558,7 @@ static int hpc_get_prog_int(struct slot
- return -1;
- }
-
-- *prog_int = readb(php_ctlr->creg + PROG_INTERFACE);
-+ *prog_int = shpc_readb(ctrl, PROG_INTERFACE);
-
- DBG_LEAVE_ROUTINE
- return 0;
-@@ -524,8 +567,8 @@ static int hpc_get_prog_int(struct slot
- static int hpc_get_adapter_speed(struct slot *slot, enum pci_bus_speed *value)
- {
- int retval = 0;
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-- u32 slot_reg = readl(php_ctlr->creg + SLOT1 + 4 * slot->hp_slot);
-+ struct controller *ctrl = slot->ctrl;
-+ u32 slot_reg = shpc_readl(ctrl, SLOT1 + 4 * slot->hp_slot);
- u8 pcix_cap = (slot_reg >> 12) & 7;
- u8 m66_cap = (slot_reg >> 9) & 1;
-
-@@ -564,7 +607,7 @@ static int hpc_get_adapter_speed(struct
-
- static int hpc_get_mode1_ECC_cap(struct slot *slot, u8 *mode)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- u16 sec_bus_status;
- u8 pi;
- int retval = 0;
-@@ -576,8 +619,8 @@ static int hpc_get_mode1_ECC_cap(struct
- return -1;
- }
-
-- pi = readb(php_ctlr->creg + PROG_INTERFACE);
-- sec_bus_status = readw(php_ctlr->creg + SEC_BUS_CONFIG);
-+ pi = shpc_readb(ctrl, PROG_INTERFACE);
-+ sec_bus_status = shpc_readw(ctrl, SEC_BUS_CONFIG);
-
- if (pi == 2) {
- *mode = (sec_bus_status & 0x0100) >> 8;
-@@ -593,7 +636,7 @@ static int hpc_get_mode1_ECC_cap(struct
-
- static int hpc_query_power_fault(struct slot * slot)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- u32 slot_reg;
- u16 slot_status;
- u8 pwr_fault_state, status;
-@@ -605,7 +648,7 @@ static int hpc_query_power_fault(struct
- return -1;
- }
-
-- slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
-+ slot_reg = shpc_readl(ctrl, SLOT1 + 4*(slot->hp_slot));
- slot_status = (u16) slot_reg;
- pwr_fault_state = (slot_status & 0x0040) >> 7;
- status = (pwr_fault_state == 1) ? 0 : 1;
-@@ -724,7 +767,7 @@ int shpc_get_ctlr_slot_config(struct con
- int *updown, /* physical_slot_num increament: 1 or -1 */
- int *flags)
- {
-- struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
-+ u32 slot_config;
-
- DBG_ENTER_ROUTINE
-
-@@ -733,12 +776,13 @@ int shpc_get_ctlr_slot_config(struct con
- return -1;
- }
-
-- *first_device_num = php_ctlr->slot_device_offset; /* Obtained in shpc_init() */
-- *num_ctlr_slots = php_ctlr->num_slots; /* Obtained in shpc_init() */
-+ slot_config = shpc_readl(ctrl, SLOT_CONFIG);
-+ *first_device_num = (slot_config & FIRST_DEV_NUM) >> 8;
-+ *num_ctlr_slots = slot_config & SLOT_NUM;
-+ *physical_slot_num = (slot_config & PSN) >> 16;
-+ *updown = ((slot_config & UPDOWN) >> 29) ? 1 : -1;
-
-- *physical_slot_num = (readl(php_ctlr->creg + SLOT_CONFIG) & PSN) >> 16;
- dbg("%s: physical_slot_num = %x\n", __FUNCTION__, *physical_slot_num);
-- *updown = ((readl(php_ctlr->creg + SLOT_CONFIG) & UPDOWN ) >> 29) ? 1 : -1;
-
- DBG_LEAVE_ROUTINE
- return 0;
-@@ -761,7 +805,7 @@ static void hpc_release_ctlr(struct cont
- * Mask all slot event interrupts
- */
- for (i = 0; i < ctrl->num_slots; i++)
-- writel(0xffff3fff, php_ctlr->creg + SLOT1 + (4 * i));
-+ shpc_writel(ctrl, SLOT1 + (4 * i), 0xffff3fff);
-
- cleanup_slots(ctrl);
-
-@@ -901,12 +945,12 @@ static int hpc_slot_disable(struct slot
- static int hpc_set_bus_speed_mode(struct slot * slot, enum pci_bus_speed value)
- {
- int retval;
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- u8 pi, cmd;
-
- DBG_ENTER_ROUTINE
-
-- pi = readb(php_ctlr->creg + PROG_INTERFACE);
-+ pi = shpc_readb(ctrl, PROG_INTERFACE);
- if ((pi == 1) && (value > PCI_SPEED_133MHz_PCIX))
- return -EINVAL;
-
-@@ -992,7 +1036,7 @@ static irqreturn_t shpc_isr(int IRQ, voi
- return IRQ_NONE;
-
- /* Check to see if it was our interrupt */
-- intr_loc = readl(php_ctlr->creg + INTR_LOC);
-+ intr_loc = shpc_readl(ctrl, INTR_LOC);
-
- if (!intr_loc)
- return IRQ_NONE;
-@@ -1001,11 +1045,11 @@ static irqreturn_t shpc_isr(int IRQ, voi
- if(!shpchp_poll_mode) {
- /* Mask Global Interrupt Mask - see implementation note on p. 139 */
- /* of SHPC spec rev 1.0*/
-- temp_dword = readl(php_ctlr->creg + SERR_INTR_ENABLE);
-+ temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- temp_dword |= 0x00000001;
-- writel(temp_dword, php_ctlr->creg + SERR_INTR_ENABLE);
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
-
-- intr_loc2 = readl(php_ctlr->creg + INTR_LOC);
-+ intr_loc2 = shpc_readl(ctrl, INTR_LOC);
- dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2);
- }
-
-@@ -1015,9 +1059,9 @@ static irqreturn_t shpc_isr(int IRQ, voi
- * RO only - clear by writing 1 to the Command Completion
- * Detect bit in Controller SERR-INT register
- */
-- temp_dword = readl(php_ctlr->creg + SERR_INTR_ENABLE);
-+ temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- temp_dword &= 0xfffdffff;
-- writel(temp_dword, php_ctlr->creg + SERR_INTR_ENABLE);
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
- ctrl->cmd_busy = 0;
- wake_up_interruptible(&ctrl->queue);
- }
-@@ -1028,7 +1072,7 @@ static irqreturn_t shpc_isr(int IRQ, voi
- for (hp_slot = 0; hp_slot < ctrl->num_slots; hp_slot++) {
- /* To find out which slot has interrupt pending */
- if ((intr_loc >> hp_slot) & 0x01) {
-- temp_dword = readl(php_ctlr->creg + SLOT1 + (4*hp_slot));
-+ temp_dword = shpc_readl(ctrl, SLOT1 + (4*hp_slot));
- dbg("%s: Slot %x with intr, slot register = %x\n",
- __FUNCTION__, hp_slot, temp_dword);
- temp_byte = (temp_dword >> 16) & 0xFF;
-@@ -1047,18 +1091,18 @@ static irqreturn_t shpc_isr(int IRQ, voi
-
- /* Clear all slot events */
- temp_dword = 0xe01f3fff;
-- writel(temp_dword, php_ctlr->creg + SLOT1 + (4*hp_slot));
-+ shpc_writel(ctrl, SLOT1 + (4*hp_slot), temp_dword);
-
-- intr_loc2 = readl(php_ctlr->creg + INTR_LOC);
-+ intr_loc2 = shpc_readl(ctrl, INTR_LOC);
- dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2);
- }
- }
- out:
- if (!shpchp_poll_mode) {
- /* Unmask Global Interrupt Mask */
-- temp_dword = readl(php_ctlr->creg + SERR_INTR_ENABLE);
-+ temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- temp_dword &= 0xfffffffe;
-- writel(temp_dword, php_ctlr->creg + SERR_INTR_ENABLE);
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
- }
-
- return IRQ_HANDLED;
-@@ -1067,11 +1111,11 @@ static irqreturn_t shpc_isr(int IRQ, voi
- static int hpc_get_max_bus_speed (struct slot *slot, enum pci_bus_speed *value)
- {
- int retval = 0;
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN;
-- u8 pi = readb(php_ctlr->creg + PROG_INTERFACE);
-- u32 slot_avail1 = readl(php_ctlr->creg + SLOT_AVAIL1);
-- u32 slot_avail2 = readl(php_ctlr->creg + SLOT_AVAIL2);
-+ u8 pi = shpc_readb(ctrl, PROG_INTERFACE);
-+ u32 slot_avail1 = shpc_readl(ctrl, SLOT_AVAIL1);
-+ u32 slot_avail2 = shpc_readl(ctrl, SLOT_AVAIL2);
-
- DBG_ENTER_ROUTINE
-
-@@ -1114,10 +1158,10 @@ static int hpc_get_max_bus_speed (struct
- static int hpc_get_cur_bus_speed (struct slot *slot, enum pci_bus_speed *value)
- {
- int retval = 0;
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-+ struct controller *ctrl = slot->ctrl;
- enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN;
-- u16 sec_bus_reg = readw(php_ctlr->creg + SEC_BUS_CONFIG);
-- u8 pi = readb(php_ctlr->creg + PROG_INTERFACE);
-+ u16 sec_bus_reg = shpc_readw(ctrl, SEC_BUS_CONFIG);
-+ u8 pi = shpc_readb(ctrl, PROG_INTERFACE);
- u8 speed_mode = (pi == 2) ? (sec_bus_reg & 0xF) : (sec_bus_reg & 0x7);
-
- DBG_ENTER_ROUTINE
-@@ -1206,19 +1250,6 @@ static struct hpc_ops shpchp_hpc_ops = {
- .release_ctlr = hpc_release_ctlr,
- };
-
--inline static int shpc_indirect_creg_read(struct controller *ctrl, int index,
-- u32 *value)
--{
-- int rc;
-- u32 cap_offset = ctrl->cap_offset;
-- struct pci_dev *pdev = ctrl->pci_dev;
--
-- rc = pci_write_config_byte(pdev, cap_offset + DWORD_SELECT, index);
-- if (rc)
-- return rc;
-- return pci_read_config_dword(pdev, cap_offset + DWORD_DATA, value);
--}
--
- int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
- {
- struct php_ctlr_state_s *php_ctlr, *p;
-@@ -1227,7 +1258,7 @@ int shpc_init(struct controller * ctrl,
- u8 hp_slot;
- static int first = 1;
- u32 shpc_base_offset;
-- u32 tempdword, slot_reg;
-+ u32 tempdword, slot_reg, slot_config;
- u8 i;
-
- DBG_ENTER_ROUTINE
-@@ -1257,13 +1288,13 @@ int shpc_init(struct controller * ctrl,
- }
- dbg("%s: cap_offset = %x\n", __FUNCTION__, ctrl->cap_offset);
-
-- rc = shpc_indirect_creg_read(ctrl, 0, &shpc_base_offset);
-+ rc = shpc_indirect_read(ctrl, 0, &shpc_base_offset);
- if (rc) {
- err("%s: cannot read base_offset\n", __FUNCTION__);
- goto abort_free_ctlr;
- }
-
-- rc = shpc_indirect_creg_read(ctrl, 3, &tempdword);
-+ rc = shpc_indirect_read(ctrl, 3, &tempdword);
- if (rc) {
- err("%s: cannot read slot config\n", __FUNCTION__);
- goto abort_free_ctlr;
-@@ -1272,7 +1303,7 @@ int shpc_init(struct controller * ctrl,
- dbg("%s: num_slots (indirect) %x\n", __FUNCTION__, num_slots);
-
- for (i = 0; i < 9 + num_slots; i++) {
-- rc = shpc_indirect_creg_read(ctrl, i, &tempdword);
-+ rc = shpc_indirect_read(ctrl, i, &tempdword);
- if (rc) {
- err("%s: cannot read creg (index = %d)\n",
- __FUNCTION__, i);
-@@ -1326,29 +1357,33 @@ int shpc_init(struct controller * ctrl,
- php_ctlr->power_fault_callback = shpchp_handle_power_fault;
- php_ctlr->callback_instance_id = instance_id;
-
-+ ctrl->hpc_ctlr_handle = php_ctlr;
-+ ctrl->hpc_ops = &shpchp_hpc_ops;
-+
- /* Return PCI Controller Info */
-- php_ctlr->slot_device_offset = (readl(php_ctlr->creg + SLOT_CONFIG) & FIRST_DEV_NUM ) >> 8;
-- php_ctlr->num_slots = readl(php_ctlr->creg + SLOT_CONFIG) & SLOT_NUM;
-+ slot_config = shpc_readl(ctrl, SLOT_CONFIG);
-+ php_ctlr->slot_device_offset = (slot_config & FIRST_DEV_NUM) >> 8;
-+ php_ctlr->num_slots = slot_config & SLOT_NUM;
- dbg("%s: slot_device_offset %x\n", __FUNCTION__, php_ctlr->slot_device_offset);
- dbg("%s: num_slots %x\n", __FUNCTION__, php_ctlr->num_slots);
-
- /* Mask Global Interrupt Mask & Command Complete Interrupt Mask */
-- tempdword = readl(php_ctlr->creg + SERR_INTR_ENABLE);
-+ tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
- tempdword = 0x0003000f;
-- writel(tempdword, php_ctlr->creg + SERR_INTR_ENABLE);
-- tempdword = readl(php_ctlr->creg + SERR_INTR_ENABLE);
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, tempdword);
-+ tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
-
- /* Mask the MRL sensor SERR Mask of individual slot in
- * Slot SERR-INT Mask & clear all the existing event if any
- */
- for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) {
-- slot_reg = readl(php_ctlr->creg + SLOT1 + 4*hp_slot );
-+ slot_reg = shpc_readl(ctrl, SLOT1 + 4*hp_slot );
- dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__,
- hp_slot, slot_reg);
- tempdword = 0xffff3fff;
-- writel(tempdword, php_ctlr->creg + SLOT1 + (4*hp_slot));
-+ shpc_writel(ctrl, SLOT1 + (4*hp_slot), tempdword);
- }
-
- if (shpchp_poll_mode) {/* Install interrupt polling code */
-@@ -1392,24 +1427,21 @@ int shpc_init(struct controller * ctrl,
- }
- spin_unlock(&list_lock);
-
--
- ctlr_seq_num++;
-- ctrl->hpc_ctlr_handle = php_ctlr;
-- ctrl->hpc_ops = &shpchp_hpc_ops;
-
- for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) {
-- slot_reg = readl(php_ctlr->creg + SLOT1 + 4*hp_slot );
-+ slot_reg = shpc_readl(ctrl, SLOT1 + 4*hp_slot );
- dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__,
- hp_slot, slot_reg);
- tempdword = 0xe01f3fff;
-- writel(tempdword, php_ctlr->creg + SLOT1 + (4*hp_slot));
-+ shpc_writel(ctrl, SLOT1 + (4*hp_slot), tempdword);
- }
- if (!shpchp_poll_mode) {
- /* Unmask all general input interrupts and SERR */
-- tempdword = readl(php_ctlr->creg + SERR_INTR_ENABLE);
-+ tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- tempdword = 0x0000000a;
-- writel(tempdword, php_ctlr->creg + SERR_INTR_ENABLE);
-- tempdword = readl(php_ctlr->creg + SERR_INTR_ENABLE);
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, tempdword);
-+ tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
- }
-
diff --git a/pci/shpc-fix-shpc-contoller-serr-int-register-bits-access.patch b/pci/shpc-fix-shpc-contoller-serr-int-register-bits-access.patch
deleted file mode 100644
index 0e17888ae884f..0000000000000
--- a/pci/shpc-fix-shpc-contoller-serr-int-register-bits-access.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Mon May 1 19:15:35 2006
-Message-ID: <4456C015.7080604@jp.fujitsu.com>
-Date: Tue, 02 May 2006 11:12:37 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: SHPC: Fix SHPC Contoller SERR-INT Register bits access
-
-Current SHPCHP driver doesn't take care of RsvdP/RsvdZ[*] bits in
-controller SERR-INT register. This might cause unpredicable
-results. This patch fixes this bug.
-
-[*] RsvdP and RsvdZ are defined in SHPC spec as follows:
-
- RsvdP - Reserved and Preserved. Register bits of this type are
- reserved for future use as R/W bits. The value read is
- undefined. Writes are ignored. Software must follow These rules
- when accessing RsvdP bits:
-
- - Software must ignore RsvdP bits when testing values read
- from these registers.
- - Software must not depend on RsvdP bit's ability to retain
- information when written
- - Software must always write back the value read in the RsvdP
- bits when writing one of these registers.
-
- RsvdZ - Reserved and Zero. Register bits of this type are reserved
- for future use as R/WC bits. The value read is undefined. Writes
- are ignored. Software must follow these rules when accessing RsvdZ
- bits:
-
- - Software must ignore RsvdZ bits when testing values read
- from these registers.
- - Software must not depends on a RsvdZ bit's ability to retain
- information when written.
- - Software must always write 0 to RsvdZ bits when writing one
- of these register.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 25 ++++++++++++++++++++-----
- 1 file changed, 20 insertions(+), 5 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -91,6 +91,17 @@
- #define ATTN_BUTTON 0x80000000
-
- /*
-+ * Controller SERR-INT Register
-+ */
-+#define GLOBAL_INTR_MASK (1 << 0)
-+#define GLOBAL_SERR_MASK (1 << 1)
-+#define COMMAND_INTR_MASK (1 << 2)
-+#define ARBITER_SERR_MASK (1 << 3)
-+#define COMMAND_DETECTED (1 << 16)
-+#define ARBITER_DETECTED (1 << 17)
-+#define SERR_INTR_RSVDZ_MASK 0xfffc0000
-+
-+/*
- * Logical Slot Register definitions
- */
- #define SLOT_REG(i) (SLOT1 + (4 * i))
-@@ -1047,7 +1058,8 @@ static irqreturn_t shpc_isr(int IRQ, voi
- /* Mask Global Interrupt Mask - see implementation note on p. 139 */
- /* of SHPC spec rev 1.0*/
- temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-- temp_dword |= 0x00000001;
-+ temp_dword |= GLOBAL_INTR_MASK;
-+ temp_dword &= ~SERR_INTR_RSVDZ_MASK;
- shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
-
- intr_loc2 = shpc_readl(ctrl, INTR_LOC);
-@@ -1061,7 +1073,7 @@ static irqreturn_t shpc_isr(int IRQ, voi
- * Detect bit in Controller SERR-INT register
- */
- temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-- temp_dword &= 0xfffdffff;
-+ temp_dword &= ~SERR_INTR_RSVDZ_MASK;
- shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
- ctrl->cmd_busy = 0;
- wake_up_interruptible(&ctrl->queue);
-@@ -1105,7 +1117,7 @@ static irqreturn_t shpc_isr(int IRQ, voi
- if (!shpchp_poll_mode) {
- /* Unmask Global Interrupt Mask */
- temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-- temp_dword &= 0xfffffffe;
-+ temp_dword &= ~(GLOBAL_INTR_MASK | SERR_INTR_RSVDZ_MASK);
- shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
- }
-
-@@ -1374,7 +1386,9 @@ int shpc_init(struct controller * ctrl,
- /* Mask Global Interrupt Mask & Command Complete Interrupt Mask */
- tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
-- tempdword = 0x0003000f;
-+ tempdword |= (GLOBAL_INTR_MASK | GLOBAL_SERR_MASK |
-+ COMMAND_INTR_MASK | ARBITER_SERR_MASK);
-+ tempdword &= ~SERR_INTR_RSVDZ_MASK;
- shpc_writel(ctrl, SERR_INTR_ENABLE, tempdword);
- tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
-@@ -1452,7 +1466,8 @@ int shpc_init(struct controller * ctrl,
- if (!shpchp_poll_mode) {
- /* Unmask all general input interrupts and SERR */
- tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-- tempdword = 0x0000000a;
-+ tempdword &= ~(GLOBAL_INTR_MASK | COMMAND_INTR_MASK |
-+ SERR_INTR_RSVDZ_MASK);
- shpc_writel(ctrl, SERR_INTR_ENABLE, tempdword);
- tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
- dbg("%s: SERR_INTR_ENABLE = %x\n", __FUNCTION__, tempdword);
diff --git a/pci/shpc-fix-shpc-logical-slot-register-bits-access.patch b/pci/shpc-fix-shpc-logical-slot-register-bits-access.patch
deleted file mode 100644
index aa00b6717da66..0000000000000
--- a/pci/shpc-fix-shpc-logical-slot-register-bits-access.patch
+++ /dev/null
@@ -1,148 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Mon May 1 19:14:15 2006
-Message-ID: <4456BFEA.4070008@jp.fujitsu.com>
-Date: Tue, 02 May 2006 11:11:54 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: SHPC: Fix SHPC Logical Slot Register bits access
-
-Current SHPCHP driver doesn't take care of RsvdP/RsvdZ[*] bits
-in logical slot registers. This might cause unpredicable results. This
-patch fixes this bug.
-
-[*] RsvdP and RsvdZ are defined in SHPC spec as follows:
-
- RsvdP - Reserved and Preserved. Register bits of this type are
- reserved for future use as R/W bits. The value read is
- undefined. Writes are ignored. Software must follow These rules
- when accessing RsvdP bits:
-
- - Software must ignore RsvdP bits when testing values read
- from these registers.
- - Software must not depend on RsvdP bit's ability to retain
- information when written
- - Software must always write back the value read in the RsvdP
- bits when writing one of these registers.
-
- RsvdZ - Reserved and Zero. Register bits of this type are reserved
- for future use as R/WC bits. The value read is undefined. Writes
- are ignored. Software must follow these rules when accessing RsvdZ
- bits:
-
- - Software must ignore RsvdZ bits when testing values read
- from these registers.
- - Software must not depends on a RsvdZ bit's ability to retain
- information when written.
- - Software must always write 0 to RsvdZ bits when writing one
- of these register.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 49 +++++++++++++++++++++++++++++++--------
- 1 file changed, 40 insertions(+), 9 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -554,11 +554,25 @@ static int hpc_get_adapter_speed(struct
- int retval = 0;
- struct controller *ctrl = slot->ctrl;
- u32 slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
-- u8 pcix_cap = (slot_reg & PCIX_CAP_MASK_PI2) >> PCIX_CAP_SHIFT;
- u8 m66_cap = !!(slot_reg & MHZ66_CAP);
-+ u8 pi, pcix_cap;
-
- DBG_ENTER_ROUTINE
-
-+ if ((retval = hpc_get_prog_int(slot, &pi)))
-+ return retval;
-+
-+ switch (pi) {
-+ case 1:
-+ pcix_cap = (slot_reg & PCIX_CAP_MASK_PI1) >> PCIX_CAP_SHIFT;
-+ break;
-+ case 2:
-+ pcix_cap = (slot_reg & PCIX_CAP_MASK_PI2) >> PCIX_CAP_SHIFT;
-+ break;
-+ default:
-+ return -ENODEV;
-+ }
-+
- dbg("%s: slot_reg = %x, pcix_cap = %x, m66_cap = %x\n",
- __FUNCTION__, slot_reg, pcix_cap, m66_cap);
-
-@@ -773,6 +787,7 @@ static void hpc_release_ctlr(struct cont
- struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
- struct php_ctlr_state_s *p, *p_prev;
- int i;
-+ u32 slot_reg;
-
- DBG_ENTER_ROUTINE
-
-@@ -782,10 +797,17 @@ static void hpc_release_ctlr(struct cont
- }
-
- /*
-- * Mask all slot event interrupts
-+ * Mask event interrupts and SERRs of all slots
- */
-- for (i = 0; i < ctrl->num_slots; i++)
-- shpc_writel(ctrl, SLOT_REG(i), 0xffff3fff);
-+ for (i = 0; i < ctrl->num_slots; i++) {
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(i));
-+ slot_reg |= (PRSNT_CHANGE_INTR_MASK | ISO_PFAULT_INTR_MASK |
-+ BUTTON_PRESS_INTR_MASK | MRL_CHANGE_INTR_MASK |
-+ CON_PFAULT_INTR_MASK | MRL_CHANGE_SERR_MASK |
-+ CON_PFAULT_SERR_MASK);
-+ slot_reg &= ~SLOT_REG_RSVDZ_MASK;
-+ shpc_writel(ctrl, SLOT_REG(i), slot_reg);
-+ }
-
- cleanup_slots(ctrl);
-
-@@ -1072,7 +1094,7 @@ static irqreturn_t shpc_isr(int IRQ, voi
- hp_slot, php_ctlr->callback_instance_id);
-
- /* Clear all slot events */
-- temp_dword = 0xe01f3fff;
-+ temp_dword &= ~SLOT_REG_RSVDZ_MASK;
- shpc_writel(ctrl, SLOT_REG(hp_slot), temp_dword);
-
- intr_loc2 = shpc_readl(ctrl, INTR_LOC);
-@@ -1364,8 +1386,12 @@ int shpc_init(struct controller * ctrl,
- slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
- dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__,
- hp_slot, slot_reg);
-- tempdword = 0xffff3fff;
-- shpc_writel(ctrl, SLOT_REG(hp_slot), tempdword);
-+ slot_reg |= (PRSNT_CHANGE_INTR_MASK | ISO_PFAULT_INTR_MASK |
-+ BUTTON_PRESS_INTR_MASK | MRL_CHANGE_INTR_MASK |
-+ CON_PFAULT_INTR_MASK | MRL_CHANGE_SERR_MASK |
-+ CON_PFAULT_SERR_MASK);
-+ slot_reg &= ~SLOT_REG_RSVDZ_MASK;
-+ shpc_writel(ctrl, SLOT_REG(hp_slot), slot_reg);
- }
-
- if (shpchp_poll_mode) {/* Install interrupt polling code */
-@@ -1411,12 +1437,17 @@ int shpc_init(struct controller * ctrl,
-
- ctlr_seq_num++;
-
-+ /*
-+ * Unmask all event interrupts of all slots
-+ */
- for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) {
- slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
- dbg("%s: Default Logical Slot Register %d value %x\n", __FUNCTION__,
- hp_slot, slot_reg);
-- tempdword = 0xe01f3fff;
-- shpc_writel(ctrl, SLOT_REG(hp_slot), tempdword);
-+ slot_reg &= ~(PRSNT_CHANGE_INTR_MASK | ISO_PFAULT_INTR_MASK |
-+ BUTTON_PRESS_INTR_MASK | MRL_CHANGE_INTR_MASK |
-+ CON_PFAULT_INTR_MASK | SLOT_REG_RSVDZ_MASK);
-+ shpc_writel(ctrl, SLOT_REG(hp_slot), slot_reg);
- }
- if (!shpchp_poll_mode) {
- /* Unmask all general input interrupts and SERR */
diff --git a/pci/shpchp-cleanup-improper-info-messages.patch b/pci/shpchp-cleanup-improper-info-messages.patch
deleted file mode 100644
index 76af0339b403e..0000000000000
--- a/pci/shpchp-cleanup-improper-info-messages.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-From pcihpd-discuss-admin@lists.sourceforge.net Thu May 11 19:17:11 2006
-Message-ID: <4463EF5E.1040502@jp.fujitsu.com>
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: shpchp: Cleanup improper info messages
-Date: Fri, 12 May 2006 11:13:50 +0900
-
-Current SHPCHP driver shows device number of slots in info messages,
-but it is useless and should be replaced with slot name.
-
-This patch replaces the device number shown in the info messages with
-the slot name.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp.h | 6 +++---
- drivers/pci/hotplug/shpchp_ctrl.c | 32 ++++++++++++++++----------------
- 2 files changed, 19 insertions(+), 19 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp.h
-@@ -168,9 +168,9 @@ struct controller {
- * error Messages
- */
- #define msg_initialization_err "Initialization failure, error=%d\n"
--#define msg_button_on "PCI slot #%d - powering on due to button press.\n"
--#define msg_button_off "PCI slot #%d - powering off due to button press.\n"
--#define msg_button_cancel "PCI slot #%d - action canceled due to button press.\n"
-+#define msg_button_on "PCI slot #%s - powering on due to button press.\n"
-+#define msg_button_off "PCI slot #%s - powering off due to button press.\n"
-+#define msg_button_cancel "PCI slot #%s - action canceled due to button press.\n"
-
- /* sysfs functions for the hotplug controller info */
- extern void shpchp_create_ctrl_files (struct controller *ctrl);
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c
-@@ -72,7 +72,7 @@ u8 shpchp_handle_attention_button(u8 hp_
- /*
- * Button pressed - See if need to TAKE ACTION!!!
- */
-- info("Button pressed on Slot(%d)\n", ctrl->first_slot + hp_slot);
-+ info("Button pressed on Slot(%s)\n", p_slot->name);
- event_type = INT_BUTTON_PRESS;
-
- queue_interrupt_event(p_slot, event_type);
-@@ -101,7 +101,7 @@ u8 shpchp_handle_switch_change(u8 hp_slo
- /*
- * Switch opened
- */
-- info("Latch open on Slot(%d)\n", ctrl->first_slot + hp_slot);
-+ info("Latch open on Slot(%s)\n", p_slot->name);
- event_type = INT_SWITCH_OPEN;
- if (p_slot->pwr_save && p_slot->presence_save) {
- event_type = INT_POWER_FAULT;
-@@ -111,7 +111,7 @@ u8 shpchp_handle_switch_change(u8 hp_slo
- /*
- * Switch closed
- */
-- info("Latch close on Slot(%d)\n", ctrl->first_slot + hp_slot);
-+ info("Latch close on Slot(%s)\n", p_slot->name);
- event_type = INT_SWITCH_CLOSE;
- }
-
-@@ -139,13 +139,13 @@ u8 shpchp_handle_presence_change(u8 hp_s
- /*
- * Card Present
- */
-- info("Card present on Slot(%d)\n", ctrl->first_slot + hp_slot);
-+ info("Card present on Slot(%s)\n", p_slot->name);
- event_type = INT_PRESENCE_ON;
- } else {
- /*
- * Not Present
- */
-- info("Card not present on Slot(%d)\n", ctrl->first_slot + hp_slot);
-+ info("Card not present on Slot(%s)\n", p_slot->name);
- event_type = INT_PRESENCE_OFF;
- }
-
-@@ -169,14 +169,14 @@ u8 shpchp_handle_power_fault(u8 hp_slot,
- /*
- * Power fault Cleared
- */
-- info("Power fault cleared on Slot(%d)\n", ctrl->first_slot + hp_slot);
-+ info("Power fault cleared on Slot(%s)\n", p_slot->name);
- p_slot->status = 0x00;
- event_type = INT_POWER_FAULT_CLEAR;
- } else {
- /*
- * Power fault
- */
-- info("Power fault on Slot(%d)\n", ctrl->first_slot + hp_slot);
-+ info("Power fault on Slot(%s)\n", p_slot->name);
- event_type = INT_POWER_FAULT;
- /* set power fault status for this board */
- p_slot->status = 0xFF;
-@@ -496,10 +496,10 @@ static void handle_button_press_event(st
- p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
- if (getstatus) {
- p_slot->state = BLINKINGOFF_STATE;
-- info(msg_button_off, p_slot->number);
-+ info(msg_button_off, p_slot->name);
- } else {
- p_slot->state = BLINKINGON_STATE;
-- info(msg_button_on, p_slot->number);
-+ info(msg_button_on, p_slot->name);
- }
- /* blink green LED and turn off amber */
- p_slot->hpc_ops->green_led_blink(p_slot);
-@@ -522,7 +522,7 @@ static void handle_button_press_event(st
- else
- p_slot->hpc_ops->green_led_off(p_slot);
- p_slot->hpc_ops->set_attention_status(p_slot, 0);
-- info(msg_button_cancel, p_slot->number);
-+ info(msg_button_cancel, p_slot->name);
- p_slot->state = STATIC_STATE;
- break;
- case POWEROFF_STATE:
-@@ -575,17 +575,17 @@ static int shpchp_enable_slot (struct sl
- mutex_lock(&p_slot->ctrl->crit_sect);
- rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
- if (rc || !getstatus) {
-- info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number);
-+ info("No adapter on slot(%s)\n", p_slot->name);
- goto out;
- }
- rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
- if (rc || getstatus) {
-- info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number);
-+ info("Latch open on slot(%s)\n", p_slot->name);
- goto out;
- }
- rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
- if (rc || getstatus) {
-- info("%s: already enabled on slot(%x)\n", __FUNCTION__, p_slot->number);
-+ info("Already enabled on slot(%s)\n", p_slot->name);
- goto out;
- }
-
-@@ -634,17 +634,17 @@ static int shpchp_disable_slot (struct s
-
- rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
- if (rc || !getstatus) {
-- info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number);
-+ info("No adapter on slot(%s)\n", p_slot->name);
- goto out;
- }
- rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
- if (rc || getstatus) {
-- info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number);
-+ info("Latch open on slot(%s)\n", p_slot->name);
- goto out;
- }
- rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
- if (rc || !getstatus) {
-- info("%s: already disabled slot(%x)\n", __FUNCTION__, p_slot->number);
-+ info("Already disabled slot(%s)\n", p_slot->name);
- goto out;
- }
-
diff --git a/pci/shpchp-cleanup-interrupt-handler.patch b/pci/shpchp-cleanup-interrupt-handler.patch
deleted file mode 100644
index 888f6b27e112e..0000000000000
--- a/pci/shpchp-cleanup-interrupt-handler.patch
+++ /dev/null
@@ -1,204 +0,0 @@
-From pcihpd-discuss-admin@lists.sourceforge.net Thu May 11 19:14:09 2006
-Message-ID: <4463EEB0.4050300@jp.fujitsu.com>
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: shpchp: Cleanup interrupt handler
-Date: Fri, 12 May 2006 11:10:56 +0900
-
-This patch cleans up the interrupt handler of shpchp driver. This
-patch has no functional changes.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 123 +++++++++++++++++----------------------
- 1 file changed, 56 insertions(+), 67 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -91,6 +91,12 @@
- #define ATTN_BUTTON 0x80000000
-
- /*
-+ * Interrupt Locator Register definitions
-+ */
-+#define CMD_INTR_PENDING (1 << 0)
-+#define SLOT_INTR_PENDING(i) (1 << (i + 1))
-+
-+/*
- * Controller SERR-INT Register
- */
- #define GLOBAL_INTR_MASK (1 << 0)
-@@ -218,7 +224,7 @@ static spinlock_t list_lock;
-
- static atomic_t shpchp_num_controllers = ATOMIC_INIT(0);
-
--static irqreturn_t shpc_isr(int IRQ, void *dev_id, struct pt_regs *regs);
-+static irqreturn_t shpc_isr(int irq, void *dev_id, struct pt_regs *regs);
-
- static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int seconds);
- static int hpc_check_cmd_status(struct controller *ctrl);
-@@ -279,7 +285,7 @@ static void int_poll_timeout(unsigned lo
- }
-
- /* Poll for interrupt events. regs == NULL => polling */
-- shpc_isr( 0, (void *)php_ctlr, NULL );
-+ shpc_isr(0, php_ctlr->callback_instance_id, NULL );
-
- init_timer(&php_ctlr->int_poll_timer);
- if (!shpchp_poll_time)
-@@ -875,103 +881,86 @@ static int hpc_set_bus_speed_mode(struct
- return retval;
- }
-
--static irqreturn_t shpc_isr(int IRQ, void *dev_id, struct pt_regs *regs)
-+static irqreturn_t shpc_isr(int irq, void *dev_id, struct pt_regs *regs)
- {
-- struct controller *ctrl = NULL;
-- struct php_ctlr_state_s *php_ctlr;
-- u8 schedule_flag = 0;
-- u32 temp_dword, intr_loc, intr_loc2;
-+ struct controller *ctrl = (struct controller *)dev_id;
-+ struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
-+ u32 serr_int, slot_reg, intr_loc, intr_loc2;
- int hp_slot;
-
-- if (!dev_id)
-- return IRQ_NONE;
--
-- if (!shpchp_poll_mode) {
-- ctrl = (struct controller *)dev_id;
-- php_ctlr = ctrl->hpc_ctlr_handle;
-- } else {
-- php_ctlr = (struct php_ctlr_state_s *) dev_id;
-- ctrl = (struct controller *)php_ctlr->callback_instance_id;
-- }
--
-- if (!ctrl)
-- return IRQ_NONE;
--
-- if (!php_ctlr || !php_ctlr->creg)
-- return IRQ_NONE;
--
- /* Check to see if it was our interrupt */
- intr_loc = shpc_readl(ctrl, INTR_LOC);
--
- if (!intr_loc)
- return IRQ_NONE;
-+
- dbg("%s: intr_loc = %x\n",__FUNCTION__, intr_loc);
-
- if(!shpchp_poll_mode) {
-- /* Mask Global Interrupt Mask - see implementation note on p. 139 */
-- /* of SHPC spec rev 1.0*/
-- temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-- temp_dword |= GLOBAL_INTR_MASK;
-- temp_dword &= ~SERR_INTR_RSVDZ_MASK;
-- shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
-+ /*
-+ * Mask Global Interrupt Mask - see implementation
-+ * note on p. 139 of SHPC spec rev 1.0
-+ */
-+ serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
-+ serr_int |= GLOBAL_INTR_MASK;
-+ serr_int &= ~SERR_INTR_RSVDZ_MASK;
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
-
- intr_loc2 = shpc_readl(ctrl, INTR_LOC);
- dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2);
- }
-
-- if (intr_loc & 0x0001) {
-+ if (intr_loc & CMD_INTR_PENDING) {
- /*
- * Command Complete Interrupt Pending
- * RO only - clear by writing 1 to the Command Completion
- * Detect bit in Controller SERR-INT register
- */
-- temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-- temp_dword &= ~SERR_INTR_RSVDZ_MASK;
-- shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
-+ serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
-+ serr_int &= ~SERR_INTR_RSVDZ_MASK;
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
-+
- ctrl->cmd_busy = 0;
- wake_up_interruptible(&ctrl->queue);
- }
-
-- if ((intr_loc = (intr_loc >> 1)) == 0)
-+ if (!(intr_loc & ~CMD_INTR_PENDING))
- goto out;
-
- for (hp_slot = 0; hp_slot < ctrl->num_slots; hp_slot++) {
-- /* To find out which slot has interrupt pending */
-- if ((intr_loc >> hp_slot) & 0x01) {
-- temp_dword = shpc_readl(ctrl, SLOT_REG(hp_slot));
-- dbg("%s: Slot %x with intr, slot register = %x\n",
-- __FUNCTION__, hp_slot, temp_dword);
-- if ((php_ctlr->switch_change_callback) &&
-- (temp_dword & MRL_CHANGE_DETECTED))
-- schedule_flag += php_ctlr->switch_change_callback(
-- hp_slot, php_ctlr->callback_instance_id);
-- if ((php_ctlr->attention_button_callback) &&
-- (temp_dword & BUTTON_PRESS_DETECTED))
-- schedule_flag += php_ctlr->attention_button_callback(
-- hp_slot, php_ctlr->callback_instance_id);
-- if ((php_ctlr->presence_change_callback) &&
-- (temp_dword & PRSNT_CHANGE_DETECTED))
-- schedule_flag += php_ctlr->presence_change_callback(
-- hp_slot , php_ctlr->callback_instance_id);
-- if ((php_ctlr->power_fault_callback) &&
-- (temp_dword & (ISO_PFAULT_DETECTED | CON_PFAULT_DETECTED)))
-- schedule_flag += php_ctlr->power_fault_callback(
-- hp_slot, php_ctlr->callback_instance_id);
--
-- /* Clear all slot events */
-- temp_dword &= ~SLOT_REG_RSVDZ_MASK;
-- shpc_writel(ctrl, SLOT_REG(hp_slot), temp_dword);
-+ /* To find out which slot has interrupt pending */
-+ if (!(intr_loc & SLOT_INTR_PENDING(hp_slot)))
-+ continue;
-
-- intr_loc2 = shpc_readl(ctrl, INTR_LOC);
-- dbg("%s: intr_loc2 = %x\n",__FUNCTION__, intr_loc2);
-- }
-+ slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
-+ dbg("%s: Slot %x with intr, slot register = %x\n",
-+ __FUNCTION__, hp_slot, slot_reg);
-+
-+ if (slot_reg & MRL_CHANGE_DETECTED)
-+ php_ctlr->switch_change_callback(
-+ hp_slot, php_ctlr->callback_instance_id);
-+
-+ if (slot_reg & BUTTON_PRESS_DETECTED)
-+ php_ctlr->attention_button_callback(
-+ hp_slot, php_ctlr->callback_instance_id);
-+
-+ if (slot_reg & PRSNT_CHANGE_DETECTED)
-+ php_ctlr->presence_change_callback(
-+ hp_slot , php_ctlr->callback_instance_id);
-+
-+ if (slot_reg & (ISO_PFAULT_DETECTED | CON_PFAULT_DETECTED))
-+ php_ctlr->power_fault_callback(
-+ hp_slot, php_ctlr->callback_instance_id);
-+
-+ /* Clear all slot events */
-+ slot_reg &= ~SLOT_REG_RSVDZ_MASK;
-+ shpc_writel(ctrl, SLOT_REG(hp_slot), slot_reg);
- }
- out:
- if (!shpchp_poll_mode) {
- /* Unmask Global Interrupt Mask */
-- temp_dword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-- temp_dword &= ~(GLOBAL_INTR_MASK | SERR_INTR_RSVDZ_MASK);
-- shpc_writel(ctrl, SERR_INTR_ENABLE, temp_dword);
-+ serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
-+ serr_int &= ~(GLOBAL_INTR_MASK | SERR_INTR_RSVDZ_MASK);
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
- }
-
- return IRQ_HANDLED;
diff --git a/pci/shpchp-cleanup-interrupt-polling-timer.patch b/pci/shpchp-cleanup-interrupt-polling-timer.patch
deleted file mode 100644
index 24c7e6ce04602..0000000000000
--- a/pci/shpchp-cleanup-interrupt-polling-timer.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Thu May 11 19:15:59 2006
-Message-ID: <4463EF2E.4030906@jp.fujitsu.com>
-Date: Fri, 12 May 2006 11:13:02 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-CC: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: shpchp: Cleanup interrupt polling timer
-
-This patch cleans up the interrupt polling timer code in
-shpchp_hpc.c. This has no functional changes.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 61 +++++++++++++++++----------------------
- 1 file changed, 27 insertions(+), 34 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -221,8 +221,7 @@ static spinlock_t list_lock;
- static atomic_t shpchp_num_controllers = ATOMIC_INIT(0);
-
- static irqreturn_t shpc_isr(int irq, void *dev_id, struct pt_regs *regs);
--
--static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int seconds);
-+static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int sec);
- static int hpc_check_cmd_status(struct controller *ctrl);
-
- static inline u8 shpc_readb(struct controller *ctrl, int reg)
-@@ -268,47 +267,41 @@ static inline int shpc_indirect_read(str
- return pci_read_config_dword(pdev, cap_offset + DWORD_DATA, value);
- }
-
--/* This is the interrupt polling timeout function. */
-+/*
-+ * This is the interrupt polling timeout function.
-+ */
- static void int_poll_timeout(unsigned long lphp_ctlr)
- {
-- struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *)lphp_ctlr;
--
-- DBG_ENTER_ROUTINE
-+ struct php_ctlr_state_s *php_ctlr =
-+ (struct php_ctlr_state_s *)lphp_ctlr;
-
-- if ( !php_ctlr ) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return;
-- }
-+ DBG_ENTER_ROUTINE
-
-- /* Poll for interrupt events. regs == NULL => polling */
-- shpc_isr(0, php_ctlr->callback_instance_id, NULL );
-+ /* Poll for interrupt events. regs == NULL => polling */
-+ shpc_isr(0, php_ctlr->callback_instance_id, NULL);
-
-- init_timer(&php_ctlr->int_poll_timer);
-+ init_timer(&php_ctlr->int_poll_timer);
- if (!shpchp_poll_time)
-- shpchp_poll_time = 2; /* reset timer to poll in 2 secs if user doesn't specify at module installation*/
-+ shpchp_poll_time = 2; /* default polling interval is 2 sec */
-
-- start_int_poll_timer(php_ctlr, shpchp_poll_time);
--
-- return;
--}
-+ start_int_poll_timer(php_ctlr, shpchp_poll_time);
-
--/* This function starts the interrupt polling timer. */
--static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int seconds)
--{
-- if (!php_ctlr) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return;
-- }
--
-- if ( ( seconds <= 0 ) || ( seconds > 60 ) )
-- seconds = 2; /* Clamp to sane value */
--
-- php_ctlr->int_poll_timer.function = &int_poll_timeout;
-- php_ctlr->int_poll_timer.data = (unsigned long)php_ctlr; /* Instance data */
-- php_ctlr->int_poll_timer.expires = jiffies + seconds * HZ;
-- add_timer(&php_ctlr->int_poll_timer);
-+ DBG_LEAVE_ROUTINE
-+}
-
-- return;
-+/*
-+ * This function starts the interrupt polling timer.
-+ */
-+static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int sec)
-+{
-+ /* Clamp to sane value */
-+ if ((sec <= 0) || (sec > 60))
-+ sec = 2;
-+
-+ php_ctlr->int_poll_timer.function = &int_poll_timeout;
-+ php_ctlr->int_poll_timer.data = (unsigned long)php_ctlr;
-+ php_ctlr->int_poll_timer.expires = jiffies + sec * HZ;
-+ add_timer(&php_ctlr->int_poll_timer);
- }
-
- static inline int shpc_wait_cmd(struct controller *ctrl)
diff --git a/pci/shpchp-cleanup-shpc-commands.patch b/pci/shpchp-cleanup-shpc-commands.patch
deleted file mode 100644
index 0f7016c566a29..0000000000000
--- a/pci/shpchp-cleanup-shpc-commands.patch
+++ /dev/null
@@ -1,191 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Thu May 11 19:14:23 2006
-Message-ID: <4463EEE4.7080605@jp.fujitsu.com>
-Date: Fri, 12 May 2006 11:11:48 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-CC: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: shpchp: Cleanup SHPC commands
-
-This patch cleans up the code related to issuing SHPC commands. This
-patch has no functional changes.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 98 +++++++++++++++++++--------------------
- 1 file changed, 48 insertions(+), 50 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -147,39 +147,37 @@
- #define CON_PFAULT_SERR_MASK (1 << 30)
- #define SLOT_REG_RSVDZ_MASK (1 << 15) | (7 << 21)
-
--/* SHPC 'write' operations/commands */
--
--/* Slot operation - 0x00h to 0x3Fh */
--
--#define NO_CHANGE 0x00
--
--/* Slot state - Bits 0 & 1 of controller command register */
--#define SET_SLOT_PWR 0x01
--#define SET_SLOT_ENABLE 0x02
--#define SET_SLOT_DISABLE 0x03
--
--/* Power indicator state - Bits 2 & 3 of controller command register*/
--#define SET_PWR_ON 0x04
--#define SET_PWR_BLINK 0x08
--#define SET_PWR_OFF 0x0C
--
--/* Attention indicator state - Bits 4 & 5 of controller command register*/
--#define SET_ATTN_ON 0x010
--#define SET_ATTN_BLINK 0x020
--#define SET_ATTN_OFF 0x030
--
--/* Set bus speed/mode A - 0x40h to 0x47h */
--#define SETA_PCI_33MHZ 0x40
-+/*
-+ * SHPC Command Code definitnions
-+ *
-+ * Slot Operation 00h - 3Fh
-+ * Set Bus Segment Speed/Mode A 40h - 47h
-+ * Power-Only All Slots 48h
-+ * Enable All Slots 49h
-+ * Set Bus Segment Speed/Mode B (PI=2) 50h - 5Fh
-+ * Reserved Command Codes 60h - BFh
-+ * Vendor Specific Commands C0h - FFh
-+ */
-+#define SET_SLOT_PWR 0x01 /* Slot Operation */
-+#define SET_SLOT_ENABLE 0x02
-+#define SET_SLOT_DISABLE 0x03
-+#define SET_PWR_ON 0x04
-+#define SET_PWR_BLINK 0x08
-+#define SET_PWR_OFF 0x0c
-+#define SET_ATTN_ON 0x10
-+#define SET_ATTN_BLINK 0x20
-+#define SET_ATTN_OFF 0x30
-+#define SETA_PCI_33MHZ 0x40 /* Set Bus Segment Speed/Mode A */
- #define SETA_PCI_66MHZ 0x41
- #define SETA_PCIX_66MHZ 0x42
- #define SETA_PCIX_100MHZ 0x43
- #define SETA_PCIX_133MHZ 0x44
--#define RESERV_1 0x45
--#define RESERV_2 0x46
--#define RESERV_3 0x47
--
--/* Set bus speed/mode B - 0x50h to 0x5fh */
--#define SETB_PCI_33MHZ 0x50
-+#define SETA_RESERVED1 0x45
-+#define SETA_RESERVED2 0x46
-+#define SETA_RESERVED3 0x47
-+#define SET_PWR_ONLY_ALL 0x48 /* Power-Only All Slots */
-+#define SET_ENABLE_ALL 0x49 /* Enable All Slots */
-+#define SETB_PCI_33MHZ 0x50 /* Set Bus Segment Speed/Mode B */
- #define SETB_PCI_66MHZ 0x51
- #define SETB_PCIX_66MHZ_PM 0x52
- #define SETB_PCIX_100MHZ_PM 0x53
-@@ -193,23 +191,21 @@
- #define SETB_PCIX_66MHZ_533 0x5b
- #define SETB_PCIX_100MHZ_533 0x5c
- #define SETB_PCIX_133MHZ_533 0x5d
-+#define SETB_RESERVED1 0x5e
-+#define SETB_RESERVED2 0x5f
-
--
--/* Power-on all slots - 0x48h */
--#define SET_PWR_ON_ALL 0x48
--
--/* Enable all slots - 0x49h */
--#define SET_ENABLE_ALL 0x49
--
--/* SHPC controller command error code */
-+/*
-+ * SHPC controller command error code
-+ */
- #define SWITCH_OPEN 0x1
- #define INVALID_CMD 0x2
- #define INVALID_SPEED_MODE 0x4
-
--/* For accessing SHPC Working Register Set */
-+/*
-+ * For accessing SHPC Working Register Set via PCI Configuration Space
-+ */
- #define DWORD_SELECT 0x2
- #define DWORD_DATA 0x4
--#define BASE_OFFSET 0x0
-
- /* Field Offset in Logical Slot Register - byte boundary */
- #define SLOT_EVENT_LATCH 0x2
-@@ -630,13 +626,13 @@ static int hpc_set_attention_status(stru
-
- switch (value) {
- case 0 :
-- slot_cmd = 0x30; /* OFF */
-+ slot_cmd = SET_ATTN_OFF; /* OFF */
- break;
- case 1:
-- slot_cmd = 0x10; /* ON */
-+ slot_cmd = SET_ATTN_ON; /* ON */
- break;
- case 2:
-- slot_cmd = 0x20; /* BLINK */
-+ slot_cmd = SET_ATTN_BLINK; /* BLINK */
- break;
- default:
- return -1;
-@@ -648,17 +644,17 @@ static int hpc_set_attention_status(stru
-
- static void hpc_set_green_led_on(struct slot *slot)
- {
-- shpc_write_cmd(slot, slot->hp_slot, 0x04);
-+ shpc_write_cmd(slot, slot->hp_slot, SET_PWR_ON);
- }
-
- static void hpc_set_green_led_off(struct slot *slot)
- {
-- shpc_write_cmd(slot, slot->hp_slot, 0x0c);
-+ shpc_write_cmd(slot, slot->hp_slot, SET_PWR_OFF);
- }
-
- static void hpc_set_green_led_blink(struct slot *slot)
- {
-- shpc_write_cmd(slot, slot->hp_slot, 0x08);
-+ shpc_write_cmd(slot, slot->hp_slot, SET_PWR_BLINK);
- }
-
- int shpc_get_ctlr_slot_config(struct controller *ctrl,
-@@ -769,7 +765,7 @@ static int hpc_power_on_slot(struct slot
-
- DBG_ENTER_ROUTINE
-
-- retval = shpc_write_cmd(slot, slot->hp_slot, 0x01);
-+ retval = shpc_write_cmd(slot, slot->hp_slot, SET_SLOT_PWR);
- if (retval) {
- err("%s: Write command failed!\n", __FUNCTION__);
- return retval;
-@@ -786,8 +782,9 @@ static int hpc_slot_enable(struct slot *
-
- DBG_ENTER_ROUTINE
-
-- /* 3A => Slot - Enable, Power Indicator - Blink, Attention Indicator - Off */
-- retval = shpc_write_cmd(slot, slot->hp_slot, 0x3a);
-+ /* Slot - Enable, Power Indicator - Blink, Attention Indicator - Off */
-+ retval = shpc_write_cmd(slot, slot->hp_slot,
-+ SET_SLOT_ENABLE | SET_PWR_BLINK | SET_ATTN_OFF);
- if (retval) {
- err("%s: Write command failed!\n", __FUNCTION__);
- return retval;
-@@ -803,8 +800,9 @@ static int hpc_slot_disable(struct slot
-
- DBG_ENTER_ROUTINE
-
-- /* 1F => Slot - Disable, Power Indicator - Off, Attention Indicator - On */
-- retval = shpc_write_cmd(slot, slot->hp_slot, 0x1f);
-+ /* Slot - Disable, Power Indicator - Off, Attention Indicator - On */
-+ retval = shpc_write_cmd(slot, slot->hp_slot,
-+ SET_SLOT_DISABLE | SET_PWR_OFF | SET_ATTN_ON);
- if (retval) {
- err("%s: Write command failed!\n", __FUNCTION__);
- return retval;
diff --git a/pci/shpchp-create-shpchpd-at-controller-probe-time.patch b/pci/shpchp-create-shpchpd-at-controller-probe-time.patch
deleted file mode 100644
index f6274f97073e2..0000000000000
--- a/pci/shpchp-create-shpchpd-at-controller-probe-time.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Wed May 3 07:45:10 2006
-Message-ID: <4458C13C.9030306@jp.fujitsu.com>
-Date: Wed, 03 May 2006 23:42:04 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>,
- Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: shpchp: Create shpchpd at controller probe time
-
-The workqueue thread of shpchp driver should be created only when SHPC
-based hotplug slots are detected on the system.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_core.c | 8 --------
- drivers/pci/hotplug/shpchp_hpc.c | 19 +++++++++++++++++++
- 2 files changed, 19 insertions(+), 8 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_core.c
-@@ -491,16 +491,9 @@ static int __init shpcd_init(void)
- shpchp_poll_mode = 1;
- #endif
-
-- shpchp_wq = create_singlethread_workqueue("shpchpd");
-- if (!shpchp_wq)
-- return -ENOMEM;
--
- retval = pci_register_driver(&shpc_driver);
- dbg("%s: pci_register_driver = %d\n", __FUNCTION__, retval);
- info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
-- if (retval) {
-- destroy_workqueue(shpchp_wq);
-- }
- return retval;
- }
-
-@@ -508,7 +501,6 @@ static void __exit shpcd_cleanup(void)
- {
- dbg("unload_shpchpd()\n");
- pci_unregister_driver(&shpc_driver);
-- destroy_workqueue(shpchp_wq);
- info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n");
- }
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -216,6 +216,8 @@ static struct php_ctlr_state_s *php_ctlr
- static int ctlr_seq_num = 0; /* Controller sequenc # */
- static spinlock_t list_lock;
-
-+static atomic_t shpchp_num_controllers = ATOMIC_INIT(0);
-+
- static irqreturn_t shpc_isr(int IRQ, void *dev_id, struct pt_regs *regs);
-
- static void start_int_poll_timer(struct php_ctlr_state_s *php_ctlr, int seconds);
-@@ -866,6 +868,13 @@ static void hpc_release_ctlr(struct cont
-
- kfree(php_ctlr);
-
-+ /*
-+ * If this is the last controller to be released, destroy the
-+ * shpchpd work queue
-+ */
-+ if (atomic_dec_and_test(&shpchp_num_controllers))
-+ destroy_workqueue(shpchp_wq);
-+
- DBG_LEAVE_ROUTINE
-
- }
-@@ -1461,6 +1470,16 @@ int shpc_init(struct controller * ctrl,
- ctlr_seq_num++;
-
- /*
-+ * If this is the first controller to be initialized,
-+ * initialize the shpchpd work queue
-+ */
-+ if (atomic_add_return(1, &shpchp_num_controllers) == 1) {
-+ shpchp_wq = create_singlethread_workqueue("shpchpd");
-+ if (!shpchp_wq)
-+ return -ENOMEM;
-+ }
-+
-+ /*
- * Unmask all event interrupts of all slots
- */
- for (hp_slot = 0; hp_slot < php_ctlr->num_slots; hp_slot++) {
diff --git a/pci/shpchp-mask-global-serr-and-intr-at-controller-release-time.patch b/pci/shpchp-mask-global-serr-and-intr-at-controller-release-time.patch
deleted file mode 100644
index 9da22b3746527..0000000000000
--- a/pci/shpchp-mask-global-serr-and-intr-at-controller-release-time.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Wed May 3 07:37:00 2006
-Message-ID: <4458BF69.5000408@jp.fujitsu.com>
-Date: Wed, 03 May 2006 23:34:17 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: shpchp: Mask Global SERR and Intr at controller release time
-
-Global SERR and Interrupt should be masked at shpchp driver unload time.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -798,7 +798,7 @@ static void hpc_release_ctlr(struct cont
- struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
- struct php_ctlr_state_s *p, *p_prev;
- int i;
-- u32 slot_reg;
-+ u32 slot_reg, serr_int;
-
- DBG_ENTER_ROUTINE
-
-@@ -822,6 +822,15 @@ static void hpc_release_ctlr(struct cont
-
- cleanup_slots(ctrl);
-
-+ /*
-+ * Mask SERR and System Interrut generation
-+ */
-+ serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
-+ serr_int |= (GLOBAL_INTR_MASK | GLOBAL_SERR_MASK |
-+ COMMAND_INTR_MASK | ARBITER_SERR_MASK);
-+ serr_int &= ~SERR_INTR_RSVDZ_MASK;
-+ shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
-+
- if (shpchp_poll_mode) {
- del_timer(&php_ctlr->int_poll_timer);
- } else {
diff --git a/pci/shpchp-remove-unnecessary-hpc_ctlr_handle-check.patch b/pci/shpchp-remove-unnecessary-hpc_ctlr_handle-check.patch
deleted file mode 100644
index a10b142111694..0000000000000
--- a/pci/shpchp-remove-unnecessary-hpc_ctlr_handle-check.patch
+++ /dev/null
@@ -1,371 +0,0 @@
-From kaneshige.kenji@jp.fujitsu.com Thu May 11 19:08:56 2006
-Message-ID: <4463ED87.6050108@jp.fujitsu.com>
-Date: Fri, 12 May 2006 11:05:59 +0900
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: shpchp: Remove unnecessary hpc_ctlr_handle check
-
-This patch removes unnecessary error check for hpc_ctlr_handle.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 197 +++------------------------------------
- 1 file changed, 16 insertions(+), 181 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -330,7 +330,6 @@ static inline int shpc_wait_cmd(struct c
-
- static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
- struct controller *ctrl = slot->ctrl;
- u16 cmd_status;
- int retval = 0;
-@@ -341,12 +340,6 @@ static int shpc_write_cmd(struct slot *s
-
- mutex_lock(&slot->ctrl->cmd_lock);
-
-- if (!php_ctlr) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- retval = -EINVAL;
-- goto out;
-- }
--
- for (i = 0; i < 10; i++) {
- cmd_status = shpc_readw(ctrl, CMD_STATUS);
-
-@@ -401,11 +394,6 @@ static int hpc_check_cmd_status(struct c
- int retval = 0;
-
- DBG_ENTER_ROUTINE
--
-- if (!ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
-
- cmd_status = shpc_readw(ctrl, CMD_STATUS) & 0x000F;
-
-@@ -442,11 +430,6 @@ static int hpc_get_attention_status(stru
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- state = (slot_reg & ATN_LED_STATE_MASK) >> ATN_LED_STATE_SHIFT;
-
-@@ -477,11 +460,6 @@ static int hpc_get_power_status(struct s
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- state = (slot_reg & SLOT_STATE_MASK) >> SLOT_STATE_SHIFT;
-
-@@ -512,11 +490,6 @@ static int hpc_get_latch_status(struct s
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- *status = !!(slot_reg & MRL_SENSOR); /* 0 -> close; 1 -> open */
-
-@@ -532,11 +505,6 @@ static int hpc_get_adapter_status(struct
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
- state = (slot_reg & PRSNT_MASK) >> PRSNT_SHIFT;
- *status = (state != 0x3) ? 1 : 0;
-@@ -550,11 +518,6 @@ static int hpc_get_prog_int(struct slot
- struct controller *ctrl = slot->ctrl;
-
- DBG_ENTER_ROUTINE
--
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
-
- *prog_int = shpc_readb(ctrl, PROG_INTERFACE);
-
-@@ -626,11 +589,6 @@ static int hpc_get_mode1_ECC_cap(struct
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
- pi = shpc_readb(ctrl, PROG_INTERFACE);
- sec_bus_status = shpc_readw(ctrl, SEC_BUS_CONFIG);
-
-@@ -653,11 +611,6 @@ static int hpc_query_power_fault(struct
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
- slot_reg = shpc_readl(ctrl, SLOT_REG(slot->hp_slot));
-
- DBG_LEAVE_ROUTINE
-@@ -667,19 +620,7 @@ static int hpc_query_power_fault(struct
-
- static int hpc_set_attention_status(struct slot *slot, u8 value)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
- u8 slot_cmd = 0;
-- int rc = 0;
--
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
-- if (slot->hp_slot >= php_ctlr->num_slots) {
-- err("%s: Invalid HPC slot number!\n", __FUNCTION__);
-- return -1;
-- }
-
- switch (value) {
- case 0 :
-@@ -695,76 +636,23 @@ static int hpc_set_attention_status(stru
- return -1;
- }
-
-- shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
--
-- return rc;
-+ return shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
- }
-
-
- static void hpc_set_green_led_on(struct slot *slot)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-- u8 slot_cmd;
--
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return ;
-- }
--
-- if (slot->hp_slot >= php_ctlr->num_slots) {
-- err("%s: Invalid HPC slot number!\n", __FUNCTION__);
-- return ;
-- }
--
-- slot_cmd = 0x04;
--
-- shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
--
-- return;
-+ shpc_write_cmd(slot, slot->hp_slot, 0x04);
- }
-
- static void hpc_set_green_led_off(struct slot *slot)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-- u8 slot_cmd;
--
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return ;
-- }
--
-- if (slot->hp_slot >= php_ctlr->num_slots) {
-- err("%s: Invalid HPC slot number!\n", __FUNCTION__);
-- return ;
-- }
--
-- slot_cmd = 0x0C;
--
-- shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
--
-- return;
-+ shpc_write_cmd(slot, slot->hp_slot, 0x0c);
- }
-
- static void hpc_set_green_led_blink(struct slot *slot)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-- u8 slot_cmd;
--
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return ;
-- }
--
-- if (slot->hp_slot >= php_ctlr->num_slots) {
-- err("%s: Invalid HPC slot number!\n", __FUNCTION__);
-- return ;
-- }
--
-- slot_cmd = 0x08;
--
-- shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
--
-- return;
-+ shpc_write_cmd(slot, slot->hp_slot, 0x08);
- }
-
- int shpc_get_ctlr_slot_config(struct controller *ctrl,
-@@ -778,11 +666,6 @@ int shpc_get_ctlr_slot_config(struct con
-
- DBG_ENTER_ROUTINE
-
-- if (!ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
- slot_config = shpc_readl(ctrl, SLOT_CONFIG);
- *first_device_num = (slot_config & FIRST_DEV_NUM) >> 8;
- *num_ctlr_slots = slot_config & SLOT_NUM;
-@@ -804,11 +687,6 @@ static void hpc_release_ctlr(struct cont
-
- DBG_ENTER_ROUTINE
-
-- if (!ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return ;
-- }
--
- /*
- * Mask event interrupts and SERRs of all slots
- */
-@@ -881,96 +759,53 @@ DBG_LEAVE_ROUTINE
-
- static int hpc_power_on_slot(struct slot * slot)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-- u8 slot_cmd;
-- int retval = 0;
-+ int retval;
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
-- if (slot->hp_slot >= php_ctlr->num_slots) {
-- err("%s: Invalid HPC slot number!\n", __FUNCTION__);
-- return -1;
-- }
-- slot_cmd = 0x01;
--
-- retval = shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
--
-+ retval = shpc_write_cmd(slot, slot->hp_slot, 0x01);
- if (retval) {
- err("%s: Write command failed!\n", __FUNCTION__);
-- return -1;
-+ return retval;
- }
-
- DBG_LEAVE_ROUTINE
-
-- return retval;
-+ return 0;
- }
-
- static int hpc_slot_enable(struct slot * slot)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-- u8 slot_cmd;
-- int retval = 0;
-+ int retval;
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
-- if (slot->hp_slot >= php_ctlr->num_slots) {
-- err("%s: Invalid HPC slot number!\n", __FUNCTION__);
-- return -1;
-- }
- /* 3A => Slot - Enable, Power Indicator - Blink, Attention Indicator - Off */
-- slot_cmd = 0x3A;
--
-- retval = shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
--
-+ retval = shpc_write_cmd(slot, slot->hp_slot, 0x3a);
- if (retval) {
- err("%s: Write command failed!\n", __FUNCTION__);
-- return -1;
-+ return retval;
- }
-
- DBG_LEAVE_ROUTINE
-- return retval;
-+ return 0;
- }
-
- static int hpc_slot_disable(struct slot * slot)
- {
-- struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
-- u8 slot_cmd;
-- int retval = 0;
-+ int retval;
-
- DBG_ENTER_ROUTINE
-
-- if (!slot->ctrl->hpc_ctlr_handle) {
-- err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-- return -1;
-- }
--
-- if (slot->hp_slot >= php_ctlr->num_slots) {
-- err("%s: Invalid HPC slot number!\n", __FUNCTION__);
-- return -1;
-- }
--
- /* 1F => Slot - Disable, Power Indicator - Off, Attention Indicator - On */
-- slot_cmd = 0x1F;
--
-- retval = shpc_write_cmd(slot, slot->hp_slot, slot_cmd);
--
-+ retval = shpc_write_cmd(slot, slot->hp_slot, 0x1f);
- if (retval) {
- err("%s: Write command failed!\n", __FUNCTION__);
-- return -1;
-+ return retval;
- }
-
- DBG_LEAVE_ROUTINE
-- return retval;
-+ return 0;
- }
-
- static int hpc_set_bus_speed_mode(struct slot * slot, enum pci_bus_speed value)
diff --git a/pci/shpchp-remove-unused-hpc_evelnt_lock.patch b/pci/shpchp-remove-unused-hpc_evelnt_lock.patch
deleted file mode 100644
index 5ee26de82f0c4..0000000000000
--- a/pci/shpchp-remove-unused-hpc_evelnt_lock.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From pcihpd-discuss-admin@lists.sourceforge.net Thu May 11 19:16:08 2006
-Message-ID: <4463EF07.6020904@jp.fujitsu.com>
-From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-To: Greg KH <greg@kroah.com>, Greg KH <gregkh@suse.de>, Kristen Accardi <kristen.c.accardi@intel.com>
-Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Subject: shpchp: Remove Unused hpc_evelnt_lock
-Date: Fri, 12 May 2006 11:12:23 +0900
-
-This patch removes unused hpc_event_lock. This patch has no functional
-change.
-
-Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
-Cc: Kristen Accardi <kristen.c.accardi@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/hotplug/shpchp_hpc.c | 8 --------
- 1 file changed, 8 deletions(-)
-
---- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_hpc.c
-+++ gregkh-2.6/drivers/pci/hotplug/shpchp_hpc.c
-@@ -211,8 +211,6 @@
- #define SLOT_EVENT_LATCH 0x2
- #define SLOT_SERR_INT_MASK 0x3
-
--static spinlock_t hpc_event_lock;
--
- DEFINE_DBG_BUFFER /* Debug string buffer for entire HPC defined here */
- static struct php_ctlr_state_s *php_ctlr_list_head; /* HPC state linked list */
- static int ctlr_seq_num = 0; /* Controller sequenc # */
-@@ -1105,7 +1103,6 @@ int shpc_init(struct controller * ctrl,
- void *instance_id = ctrl;
- int rc, num_slots = 0;
- u8 hp_slot;
-- static int first = 1;
- u32 shpc_base_offset;
- u32 tempdword, slot_reg, slot_config;
- u8 i;
-@@ -1167,11 +1164,6 @@ int shpc_init(struct controller * ctrl,
- ctrl->mmio_size = 0x24 + 0x4 * num_slots;
- }
-
-- if (first) {
-- spin_lock_init(&hpc_event_lock);
-- first = 0;
-- }
--
- info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", pdev->vendor, pdev->device, pdev->subsystem_vendor,
- pdev->subsystem_device);
-