mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
PCI: pnv_php: Enable third attention indicator state
The PCIe specification allows three attention indicator states, on, off,
and blink. Enable all three states instead of basic on / off control.
This changes the userspace API (writes to the sysfs "attention" file) to
match the behavior of pciehp. Here's the comparison of previous and new
indicator behavior:
Value Previous New Behavior
----- -------- ------------------------
0 off (reserved, so undefined)
1 on on
2 on blink
3 on off
Signed-off-by: Timothy Pearson <tpearson@raptorengineering.com>
[bhelgaas: add specifics of behavior change]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/1210309411.1359866.1752615582001.JavaMail.zimbra@raptorengineeringinc.com
This commit is contained in:
committed by
Madhavan Srinivasan
parent
a2a2a6fc24
commit
a8f2b96ca9
@@ -441,10 +441,23 @@ static int pnv_php_get_adapter_state(struct hotplug_slot *slot, u8 *state)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int pnv_php_get_raw_indicator_status(struct hotplug_slot *slot, u8 *state)
|
||||
{
|
||||
struct pnv_php_slot *php_slot = to_pnv_php_slot(slot);
|
||||
struct pci_dev *bridge = php_slot->pdev;
|
||||
u16 status;
|
||||
|
||||
pcie_capability_read_word(bridge, PCI_EXP_SLTCTL, &status);
|
||||
*state = (status & (PCI_EXP_SLTCTL_AIC | PCI_EXP_SLTCTL_PIC)) >> 6;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int pnv_php_get_attention_state(struct hotplug_slot *slot, u8 *state)
|
||||
{
|
||||
struct pnv_php_slot *php_slot = to_pnv_php_slot(slot);
|
||||
|
||||
pnv_php_get_raw_indicator_status(slot, &php_slot->attention_state);
|
||||
*state = php_slot->attention_state;
|
||||
return 0;
|
||||
}
|
||||
@@ -462,7 +475,7 @@ static int pnv_php_set_attention_state(struct hotplug_slot *slot, u8 state)
|
||||
mask = PCI_EXP_SLTCTL_AIC;
|
||||
|
||||
if (state)
|
||||
new = PCI_EXP_SLTCTL_ATTN_IND_ON;
|
||||
new = FIELD_PREP(PCI_EXP_SLTCTL_AIC, state);
|
||||
else
|
||||
new = PCI_EXP_SLTCTL_ATTN_IND_OFF;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user