On Wed, Mar 30, 2022 at 12:59 AM Andrew Scull <asc...@google.com> wrote: > > Add a config to control whether Enhanced Allocation is supported by the > driver. > > Signed-off-by: Andrew Scull <asc...@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