On 2019/1/14 19:14, Kishon Vijay Abraham I wrote:
Hi Lorenzo, The Endpoint controller driver uses features member in 'struct pci_epc' to advertise the list of supported features to the endpoint function driver. There are a few shortcomings with this approach. *) Certain endpoint controllers support fixed size BAR (e.g. TI's AM654 uses Designware configuration with fixed size BAR). The size of each BARs cannot be passed to the endpoint function driver. *) Too many macros for handling EPC features. (EPC_FEATURE_NO_LINKUP_NOTIFIER, EPC_FEATURE_BAR_MASK, EPC_FEATURE_MSIX_AVAILABLE, EPC_FEATURE_SET_BAR, EPC_FEATURE_GET_BAR) *) Endpoint controllers are directly modifying struct pci_epc members. (I have plans to move struct pci_epc to drivers/pci/endpoint so that pci_epc members are referenced only by endpoint core). To overcome the above shortcomings, introduced pci_epc_get_features() API, pci_epc_features structure and a ->get_features() callback. Also added a patch to set BAR flags in pci_epf_alloc_space and remove it from pci-epf-test function driver. Changes from v1: *) Fixed helper function to return '0' (or BAR_0) for any incorrect values in reserved BAR. *) Do not set_bar or alloc space for BARs if the BARs are reserved *) Fix incorrect check of epc_features in pci_epf_test_bind Tested on TI's DRA7xx platform and AM654 platform. Support for PCIe in AM654 platform will be posted shortly.
----8<-----
drivers/pci/controller/pcie-rockchip-ep.c | 16 +++-
Acked-by: Shawn Lin <shawn.lin@xxxxxxxxxxxxxx>