Re: [PATCH 11/15] PCI: pci-epf-test: Use pci_epc_get_features to get EPC features
From: Kishon Vijay Abraham I
Date: Thu Feb 14 2019 - 00:07:36 EST
On 13/02/19 8:06 PM, Lorenzo Pieralisi wrote:
> On Wed, Feb 13, 2019 at 07:08:18PM +0530, Kishon Vijay Abraham I wrote:
>> Hi Lorenzo,
>> On 12/02/19 8:37 PM, Lorenzo Pieralisi wrote:
>>> On Mon, Jan 07, 2019 at 12:11:44PM +0530, Kishon Vijay Abraham I wrote:
>>>> static int pci_epf_test_bind(struct pci_epf *epf)
>>>> int ret;
>>>> struct pci_epf_test *epf_test = epf_get_drvdata(epf);
>>>> struct pci_epf_header *header = epf->header;
>>>> + const struct pci_epc_features *epc_features;
>>>> + enum pci_barno test_reg_bar = BAR_0;
>>>> struct pci_epc *epc = epf->epc;
>>>> struct device *dev = &epf->dev;
>>>> + bool linkup_notifier = false;
>>>> + bool msix_capable = false;
>>>> + bool msi_capable = true;
>>>> if (WARN_ON_ONCE(!epc))
>>>> return -EINVAL;
>>>> - if (epc->features & EPC_FEATURE_NO_LINKUP_NOTIFIER)
>>>> - epf_test->linkup_notifier = false;
>>>> - else
>>>> - epf_test->linkup_notifier = true;
>>>> - epf_test->msix_available = epc->features & EPC_FEATURE_MSIX_AVAILABLE;
>>>> + epc_features = pci_epc_get_features(epc, epf->func_no);
>>> I think it would work out better if struct pci_epc_features was
>>> allocated in the caller (stack) and pci_epc_get_features() take a
>>> pointer parameter to it rather than the callee and the callee would just
>>> have to fill it out, this also removes data in the driver that is not
>>> really useful.
>>> Is there any other reason behind the current design choice ?
>> Some drivers are used by multiple platforms each with different features. In
>> such cases it's cleaner to have separate epc_feature table for each platform.
>> I think the driver should maintain some sort of data to even populate
>> pci_epc_features allocated by EP function driver.
> You mean that every EP controller driver should keep a table of
> pci_epc_features (instead of a single instance) to be matched using DT
> compatible strings to detect the platform variations ?