Skip to content

Commit cfc2d4c

Browse files
Mani-Sadhasivambjorn-helgaas
authored andcommitted
PCI: endpoint: pci-epf-test: Handle Link Down event
Per PCIe r6.0, sec 5.2, a Link Down event can happen under any of the following circumstances: 1. Fundamental/Hot reset 2. Link disable transmission by upstream component 3. Moving from L2/L3 to L0 When the event happens, the EPC driver capable of detecting it may pass the notification to the EPF driver through link_down() callback in 'struct pci_epc_event_ops'. While the PCIe spec has not defined the actual behavior of the endpoint when the Link Down event happens, we may assume that at least the ongoing transactions need to be stopped as the link won't be active, so cancel the command handler work in the callback implementation pci_epf_test_link_down(). The work will be started again in pci_epf_test_link_up() once the link comes back again. Link: https://lore.kernel.org/linux-pci/[email protected] Tested-by: Niklas Cassel <[email protected]> Signed-off-by: Manivannan Sadhasivam <[email protected]> Signed-off-by: Krzysztof Wilczyński <[email protected]> [bhelgaas: update spec citation] Signed-off-by: Bjorn Helgaas <[email protected]> Reviewed-by: Niklas Cassel <[email protected]>
1 parent 60bd3e0 commit cfc2d4c

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

drivers/pci/endpoint/functions/pci-epf-test.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,9 +792,19 @@ static int pci_epf_test_link_up(struct pci_epf *epf)
792792
return 0;
793793
}
794794

795+
static int pci_epf_test_link_down(struct pci_epf *epf)
796+
{
797+
struct pci_epf_test *epf_test = epf_get_drvdata(epf);
798+
799+
cancel_delayed_work_sync(&epf_test->cmd_handler);
800+
801+
return 0;
802+
}
803+
795804
static const struct pci_epc_event_ops pci_epf_test_event_ops = {
796805
.epc_init = pci_epf_test_epc_init,
797806
.link_up = pci_epf_test_link_up,
807+
.link_down = pci_epf_test_link_down,
798808
};
799809

800810
static int pci_epf_test_alloc_space(struct pci_epf *epf)

0 commit comments

Comments
 (0)