
On Wed, Mar 30, 2022 at 12:59 AM Andrew Scull ascull@google.com wrote:
Add a config to control whether Enhanced Allocation is supported by the driver.
Signed-off-by: Andrew Scull ascull@google.com
drivers/pci/Kconfig | 7 +++++++ drivers/pci/pci-uclass.c | 25 +++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig index 47cd074aa1..fd2203420c 100644 --- a/drivers/pci/Kconfig +++ b/drivers/pci/Kconfig @@ -67,6 +67,13 @@ config PCI_SRIOV if available on a PCI Physical Function device and probe for applicable drivers.
+config PCI_ENHANCED_ALLOCATION
bool "Enable support for Enhanced Allocation of resources"
default y
help
Enable support for Enhanced Allocation which can be used by supported
devices in place of traditional BARS for allocation of resources.
Why do we need a config option for EA as it can be figured out in the run time?
config PCI_ARID bool "Enable Alternate Routing-ID support for PCI" help diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c index 8bbeb62f2e..719656eb3a 100644 --- a/drivers/pci/pci-uclass.c +++ b/drivers/pci/pci-uclass.c @@ -645,7 +645,11 @@ int dm_pci_hose_probe_bus(struct udevice *bus) return log_msg_ret("probe", -EINVAL); }
ea_pos = dm_pci_find_capability(bus, PCI_CAP_ID_EA);
if (IS_ENABLED(CONFIG_PCI_ENHANCED_ALLOCATION))
ea_pos = dm_pci_find_capability(bus, PCI_CAP_ID_EA);
else
ea_pos = 0;
if (ea_pos) { dm_pci_read_config8(bus, ea_pos + sizeof(u32) + sizeof(u8), ®);
@@ -1600,15 +1604,16 @@ void *dm_pci_map_bar(struct udevice *dev, int bar, unsigned long flags) udev = pdata->pfdev; }
/*
* if the function supports Enhanced Allocation use that instead of
* BARs
* Incase of virtual functions, pdata will help read VF BEI
* and EA entry size.
*/
ea_off = dm_pci_find_capability(udev, PCI_CAP_ID_EA);
if (ea_off)
return dm_pci_map_ea_bar(udev, bar, ea_off, pdata);
if (IS_ENABLED(CONFIG_PCI_ENHANCED_ALLOCATION)) {
/*
* If the function supports Enhanced Allocation use that
* instead of BARs. Incase of virtual functions, pdata will
* help read VF BEI and EA entry size.
*/
ea_off = dm_pci_find_capability(udev, PCI_CAP_ID_EA);
if (ea_off)
return dm_pci_map_ea_bar(udev, bar, ea_off, pdata);
} /* read BAR address */ dm_pci_read_config32(udev, bar, &bar_response);
--
Regards, Bin