mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 22:50:41 +00:00
Merge branch 'pci/hotplug'
- Simplify Attention Button logging (Bjorn Helgaas) - Cancel bringup sequence if card is not present, to keep from blinking Power Indicator indefinitely (Rongguang Wei) - Reassign bridge resources if necessary for ACPI hotplug (Igor Mammedov) * pci/hotplug: PCI: acpiphp: Reassign resources on bridge if necessary PCI: pciehp: Cancel bringup sequence if card is not present PCI: pciehp: Simplify Attention Button logging
This commit is contained in:
commit
db5ccb2eda
@ -498,7 +498,6 @@ static void enable_slot(struct acpiphp_slot *slot, bool bridge)
|
|||||||
acpiphp_native_scan_bridge(dev);
|
acpiphp_native_scan_bridge(dev);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LIST_HEAD(add_list);
|
|
||||||
int max, pass;
|
int max, pass;
|
||||||
|
|
||||||
acpiphp_rescan_slot(slot);
|
acpiphp_rescan_slot(slot);
|
||||||
@ -512,12 +511,10 @@ static void enable_slot(struct acpiphp_slot *slot, bool bridge)
|
|||||||
if (pass && dev->subordinate) {
|
if (pass && dev->subordinate) {
|
||||||
check_hotplug_bridge(slot, dev);
|
check_hotplug_bridge(slot, dev);
|
||||||
pcibios_resource_survey_bus(dev->subordinate);
|
pcibios_resource_survey_bus(dev->subordinate);
|
||||||
__pci_bus_size_bridges(dev->subordinate,
|
|
||||||
&add_list);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
__pci_bus_assign_resources(bus, &add_list, NULL);
|
pci_assign_unassigned_bridge_resources(bus->self);
|
||||||
}
|
}
|
||||||
|
|
||||||
acpiphp_sanitize_bus(bus);
|
acpiphp_sanitize_bus(bus);
|
||||||
|
@ -166,11 +166,11 @@ void pciehp_handle_button_press(struct controller *ctrl)
|
|||||||
case ON_STATE:
|
case ON_STATE:
|
||||||
if (ctrl->state == ON_STATE) {
|
if (ctrl->state == ON_STATE) {
|
||||||
ctrl->state = BLINKINGOFF_STATE;
|
ctrl->state = BLINKINGOFF_STATE;
|
||||||
ctrl_info(ctrl, "Slot(%s): Powering off due to button press\n",
|
ctrl_info(ctrl, "Slot(%s): Button press: will power off in 5 sec\n",
|
||||||
slot_name(ctrl));
|
slot_name(ctrl));
|
||||||
} else {
|
} else {
|
||||||
ctrl->state = BLINKINGON_STATE;
|
ctrl->state = BLINKINGON_STATE;
|
||||||
ctrl_info(ctrl, "Slot(%s) Powering on due to button press\n",
|
ctrl_info(ctrl, "Slot(%s): Button press: will power on in 5 sec\n",
|
||||||
slot_name(ctrl));
|
slot_name(ctrl));
|
||||||
}
|
}
|
||||||
/* blink power indicator and turn off attention */
|
/* blink power indicator and turn off attention */
|
||||||
@ -185,22 +185,23 @@ void pciehp_handle_button_press(struct controller *ctrl)
|
|||||||
* press the attention again before the 5 sec. limit
|
* press the attention again before the 5 sec. limit
|
||||||
* expires to cancel hot-add or hot-remove
|
* expires to cancel hot-add or hot-remove
|
||||||
*/
|
*/
|
||||||
ctrl_info(ctrl, "Slot(%s): Button cancel\n", slot_name(ctrl));
|
|
||||||
cancel_delayed_work(&ctrl->button_work);
|
cancel_delayed_work(&ctrl->button_work);
|
||||||
if (ctrl->state == BLINKINGOFF_STATE) {
|
if (ctrl->state == BLINKINGOFF_STATE) {
|
||||||
ctrl->state = ON_STATE;
|
ctrl->state = ON_STATE;
|
||||||
pciehp_set_indicators(ctrl, PCI_EXP_SLTCTL_PWR_IND_ON,
|
pciehp_set_indicators(ctrl, PCI_EXP_SLTCTL_PWR_IND_ON,
|
||||||
PCI_EXP_SLTCTL_ATTN_IND_OFF);
|
PCI_EXP_SLTCTL_ATTN_IND_OFF);
|
||||||
|
ctrl_info(ctrl, "Slot(%s): Button press: canceling request to power off\n",
|
||||||
|
slot_name(ctrl));
|
||||||
} else {
|
} else {
|
||||||
ctrl->state = OFF_STATE;
|
ctrl->state = OFF_STATE;
|
||||||
pciehp_set_indicators(ctrl, PCI_EXP_SLTCTL_PWR_IND_OFF,
|
pciehp_set_indicators(ctrl, PCI_EXP_SLTCTL_PWR_IND_OFF,
|
||||||
PCI_EXP_SLTCTL_ATTN_IND_OFF);
|
PCI_EXP_SLTCTL_ATTN_IND_OFF);
|
||||||
|
ctrl_info(ctrl, "Slot(%s): Button press: canceling request to power on\n",
|
||||||
|
slot_name(ctrl));
|
||||||
}
|
}
|
||||||
ctrl_info(ctrl, "Slot(%s): Action canceled due to button press\n",
|
|
||||||
slot_name(ctrl));
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ctrl_err(ctrl, "Slot(%s): Ignoring invalid state %#x\n",
|
ctrl_err(ctrl, "Slot(%s): Button press: ignoring invalid state %#x\n",
|
||||||
slot_name(ctrl), ctrl->state);
|
slot_name(ctrl), ctrl->state);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -256,6 +257,14 @@ void pciehp_handle_presence_or_link_change(struct controller *ctrl, u32 events)
|
|||||||
present = pciehp_card_present(ctrl);
|
present = pciehp_card_present(ctrl);
|
||||||
link_active = pciehp_check_link_active(ctrl);
|
link_active = pciehp_check_link_active(ctrl);
|
||||||
if (present <= 0 && link_active <= 0) {
|
if (present <= 0 && link_active <= 0) {
|
||||||
|
if (ctrl->state == BLINKINGON_STATE) {
|
||||||
|
ctrl->state = OFF_STATE;
|
||||||
|
cancel_delayed_work(&ctrl->button_work);
|
||||||
|
pciehp_set_indicators(ctrl, PCI_EXP_SLTCTL_PWR_IND_OFF,
|
||||||
|
INDICATOR_NOOP);
|
||||||
|
ctrl_info(ctrl, "Slot(%s): Card not present\n",
|
||||||
|
slot_name(ctrl));
|
||||||
|
}
|
||||||
mutex_unlock(&ctrl->state_lock);
|
mutex_unlock(&ctrl->state_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -722,11 +722,8 @@ static irqreturn_t pciehp_ist(int irq, void *dev_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check Attention Button Pressed */
|
/* Check Attention Button Pressed */
|
||||||
if (events & PCI_EXP_SLTSTA_ABP) {
|
if (events & PCI_EXP_SLTSTA_ABP)
|
||||||
ctrl_info(ctrl, "Slot(%s): Attention button pressed\n",
|
|
||||||
slot_name(ctrl));
|
|
||||||
pciehp_handle_button_press(ctrl);
|
pciehp_handle_button_press(ctrl);
|
||||||
}
|
|
||||||
|
|
||||||
/* Check Power Fault Detected */
|
/* Check Power Fault Detected */
|
||||||
if (events & PCI_EXP_SLTSTA_PFD) {
|
if (events & PCI_EXP_SLTSTA_PFD) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user