Skip to content

Commit a6a6933

Browse files
author
Myron Stowe
committed
PCI: pciehp: Retain Power Indicator bits for userspace indicators
JIRA: https://issues.redhat.com/browse/RHEL-41181 Upstream Status: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/log/?h=for-linus commit e8c0bc041bd69a1c7506e875846dc44285ced153 (pci/for-linus) Author: Blazej Kucman <blazej.kucman@intel.com> Date: Mon Jul 22 16:14:40 2024 +0200 PCI: pciehp: Retain Power Indicator bits for userspace indicators The sysfs "attention" file normally controls the Slot Control Attention Indicator with 0 (off), 1 (on), 2 (blink) settings. 576243b ("PCI: pciehp: Allow exclusive userspace control of indicators") added pciehp_set_raw_indicator_status() to allow userspace to directly control all four bits in both the Attention Indicator and the Power Indicator fields via the "attention" file. This is used on Intel VMD bridges so utilities like "ledmon" can use sysfs "attention" to control up to 16 indicators for NVMe device RAID status. abaaac4 ("PCI: hotplug: Use FIELD_GET/PREP()") broke this by masking the sysfs data with PCI_EXP_SLTCTL_AIC, which discards the upper two bits intended for the Power Indicator Control field (PCI_EXP_SLTCTL_PIC). For NVMe devices behind an Intel VMD, ledmon settings that use the PCI_EXP_SLTCTL_PIC bits, i.e., ATTENTION_REBUILD (0x5), ATTENTION_LOCATE (0x7), ATTENTION_FAILURE (0xD), ATTENTION_OFF (0xF), no longer worked correctly. Mask with PCI_EXP_SLTCTL_AIC | PCI_EXP_SLTCTL_PIC to retain both the Attention Indicator and the Power Indicator bits. Fixes: abaaac4 ("PCI: hotplug: Use FIELD_GET/PREP()") Link: https://lore.kernel.org/r/20240722141440.7210-1-blazej.kucman@intel.com Signed-off-by: Blazej Kucman <blazej.kucman@intel.com> [bhelgaas: commit log] Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Cc: stable@vger.kernel.org # v6.7+ Signed-off-by: Myron Stowe <mstowe@redhat.com>
1 parent eeeb721 commit a6a6933

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

drivers/pci/hotplug/pciehp_hpc.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,9 @@ int pciehp_set_raw_indicator_status(struct hotplug_slot *hotplug_slot,
485485
struct pci_dev *pdev = ctrl_dev(ctrl);
486486

487487
pci_config_pm_runtime_get(pdev);
488-
pcie_write_cmd_nowait(ctrl, FIELD_PREP(PCI_EXP_SLTCTL_AIC, status),
488+
489+
/* Attention and Power Indicator Control bits are supported */
490+
pcie_write_cmd_nowait(ctrl, FIELD_PREP(PCI_EXP_SLTCTL_AIC | PCI_EXP_SLTCTL_PIC, status),
489491
PCI_EXP_SLTCTL_AIC | PCI_EXP_SLTCTL_PIC);
490492
pci_config_pm_runtime_put(pdev);
491493
return 0;

0 commit comments

Comments
 (0)