pci-hotplug/pnv_php: Add attention indicator support
authorOliver O'Halloran <oohall@gmail.com>
Tue, 3 Sep 2019 10:16:01 +0000 (20:16 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 5 Sep 2019 04:22:39 +0000 (14:22 +1000)
pnv_php is generally used with PCIe bridges which provide a native
interface for setting the attention and power indicator LEDs. Wire up
those interfaces even if firmware does not have support for them (yet...)

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190903101605.2890-11-oohall@gmail.com
drivers/pci/hotplug/pnv_php.c

index 6fdf8b7..d7b2b47 100644 (file)
@@ -419,9 +419,21 @@ static int pnv_php_get_attention_state(struct hotplug_slot *slot, u8 *state)
 static int pnv_php_set_attention_state(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 new, mask;
 
-       /* FIXME: Make it real once firmware supports it */
        php_slot->attention_state = state;
+       if (!bridge)
+               return 0;
+
+       mask = PCI_EXP_SLTCTL_AIC;
+
+       if (state)
+               new = PCI_EXP_SLTCTL_ATTN_IND_ON;
+       else
+               new = PCI_EXP_SLTCTL_ATTN_IND_OFF;
+
+       pcie_capability_clear_and_set_word(bridge, PCI_EXP_SLTCTL, mask, new);
 
        return 0;
 }