Message ID | 20241114110326.1891331-6-cassel@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Krzysztof WilczyĆski |
Headers | show |
Series | PCI endpoint additional pci_epc_set_bar() checks | expand |
On Thu, Nov 14, 2024 at 12:03:27PM +0100, Niklas Cassel wrote: > All non-DWC EPC drivers implement (struct pci_epc *)->ops->get_features(). > All DWC EPC drivers implement (struct dw_pcie_ep *)->ops->get_features(), > except for pcie-artpec6.c. > > epc_features has been required in pci-epf-test.c since commit 6613bc2301ba > ("PCI: endpoint: Fix NULL pointer dereference for ->get_features()"). > > A follow-up commit will make further use of epc_features in EPC core code. > > Implement epc_features in the only EPC driver where it is currently not > implemented. > > Signed-off-by: Niklas Cassel <cassel@kernel.org> Reviewed-by: Frank Li <Frank.Li@nxp.com> > --- > drivers/pci/controller/dwc/pcie-artpec6.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/pci/controller/dwc/pcie-artpec6.c b/drivers/pci/controller/dwc/pcie-artpec6.c > index f8e7283dacd47..234c8cbcae3af 100644 > --- a/drivers/pci/controller/dwc/pcie-artpec6.c > +++ b/drivers/pci/controller/dwc/pcie-artpec6.c > @@ -369,9 +369,22 @@ static int artpec6_pcie_raise_irq(struct dw_pcie_ep *ep, u8 func_no, > return 0; > } > > +static const struct pci_epc_features artpec6_pcie_epc_features = { > + .linkup_notifier = false, > + .msi_capable = true, > + .msix_capable = false, > +}; > + > +static const struct pci_epc_features * > +artpec6_pcie_get_features(struct dw_pcie_ep *ep) > +{ > + return &artpec6_pcie_epc_features; > +} > + > static const struct dw_pcie_ep_ops pcie_ep_ops = { > .init = artpec6_pcie_ep_init, > .raise_irq = artpec6_pcie_raise_irq, > + .get_features = artpec6_pcie_get_features, > }; > > static int artpec6_pcie_probe(struct platform_device *pdev) > -- > 2.47.0 >
diff --git a/drivers/pci/controller/dwc/pcie-artpec6.c b/drivers/pci/controller/dwc/pcie-artpec6.c index f8e7283dacd47..234c8cbcae3af 100644 --- a/drivers/pci/controller/dwc/pcie-artpec6.c +++ b/drivers/pci/controller/dwc/pcie-artpec6.c @@ -369,9 +369,22 @@ static int artpec6_pcie_raise_irq(struct dw_pcie_ep *ep, u8 func_no, return 0; } +static const struct pci_epc_features artpec6_pcie_epc_features = { + .linkup_notifier = false, + .msi_capable = true, + .msix_capable = false, +}; + +static const struct pci_epc_features * +artpec6_pcie_get_features(struct dw_pcie_ep *ep) +{ + return &artpec6_pcie_epc_features; +} + static const struct dw_pcie_ep_ops pcie_ep_ops = { .init = artpec6_pcie_ep_init, .raise_irq = artpec6_pcie_raise_irq, + .get_features = artpec6_pcie_get_features, }; static int artpec6_pcie_probe(struct platform_device *pdev)
All non-DWC EPC drivers implement (struct pci_epc *)->ops->get_features(). All DWC EPC drivers implement (struct dw_pcie_ep *)->ops->get_features(), except for pcie-artpec6.c. epc_features has been required in pci-epf-test.c since commit 6613bc2301ba ("PCI: endpoint: Fix NULL pointer dereference for ->get_features()"). A follow-up commit will make further use of epc_features in EPC core code. Implement epc_features in the only EPC driver where it is currently not implemented. Signed-off-by: Niklas Cassel <cassel@kernel.org> --- drivers/pci/controller/dwc/pcie-artpec6.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)