[PATCH v2 09/18] pci: Add config for Enhanced Allocation

Bin Meng bmeng.cn at gmail.com
Wed Apr 13 15:14:04 CEST 2022


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


More information about the U-Boot mailing list