diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-22 10:18:46 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-22 10:18:46 -0700 |
commit | c16d033288d8409b168cccfdfa12a9b413466c57 (patch) | |
tree | d544f98b7cbfe44c4a16454361ebaee2b4e8d8bc /pci | |
parent | 2c24f77edd13d12fdbcc341e5cf1cb63e0fcde25 (diff) | |
download | patches-c16d033288d8409b168cccfdfa12a9b413466c57.tar.gz |
remove pci patches that made it into mainline
Diffstat (limited to 'pci')
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, ®16); -+ 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, ®16); -+ 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, ®32); -+ 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, ®32); -+ 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, ®32); -+ 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, ®32); -+ 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, ®32); -+ 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); - |