2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00
linux/drivers/pci/controller/dwc
Niklas Cassel 3a3d4cabe6
PCI: dwc: ep: Allow EPF drivers to configure the size of Resizable BARs
The DWC databook specifies three different BARn_SIZING_SCHEME_N as:

  - Fixed Mask (0)
  - Programmable Mask (1)
  - Resizable BAR (2)

Each of these sizing schemes have different instructions for how to
initialize the BAR.

The DWC driver currently does not support resizable BARs.

Instead, in order to somewhat support resizable BARs, the DWC EP driver
currently has an ugly hack that force sets a resizable BAR to 1 MB, if
such a BAR is detected.

Additionally, this hack only works if the DWC glue driver also has lied
in their EPC features, and claimed that the resizable BAR is a 1 MB fixed
size BAR.

This is unintuitive (as you somehow need to know that you need to lie in
your EPC features), but other than that it is overly restrictive, since a
resizable BAR is capable of supporting sizes different than 1 MB.

Add proper support for resizable BARs in the DWC EP driver.

Note that the pci_epc_set_bar() API takes a struct pci_epf_bar which tells
the EPC driver how it wants to configure the BAR.

struct pci_epf_bar only has a single size struct member.

This means that an EPC driver will only be able to set a single supported
size. This is perfectly fine, as we do not need the complexity of allowing
a host to change the size of the BAR. If someone ever wants to support
resizing a resizable BAR, the pci_epc_set_bar() API can be extended in the
future.

With these changes, we allow an EPF driver to configure the size of
Resizable BARs, rather than forcing them to a 1 MB size.

This means that an EPC driver does not need to lie in EPC features, and an
EPF driver will be able to set an arbitrary size (not be forced to a 1 MB
size), just like BAR_PROGRAMMABLE.

Signed-off-by: Niklas Cassel <cassel@kernel.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/20250131182949.465530-13-cassel@kernel.org
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
[kwilczynski: commit log]
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
2025-03-08 14:43:08 +00:00
..
Kconfig PCI: qcom: Add equalization settings for 16.0 GT/s 2024-09-13 14:44:57 +00:00
Makefile PCI: qcom: Add equalization settings for 16.0 GT/s 2024-09-13 14:44:57 +00:00
pci-dra7xx.c PCI: dra7xx: Use syscon_regmap_lookup_by_phandle_args 2025-01-16 14:38:53 -06:00
pci-exynos.c PCI: exynos: Switch to devm_clk_bulk_get_all_enabled() 2024-12-23 12:53:52 -08:00
pci-imx6.c Merge branch 'pci/controller/imx6' 2025-01-23 13:05:03 -06:00
pci-keystone.c Merge branch 'pci/controller/keystone' 2024-11-25 13:40:58 -06:00
pci-layerscape-ep.c PCI: layerscape-ep: Use the generic dw_pcie_ep_linkdown() API to handle Link Down event 2024-07-09 18:21:11 -05:00
pci-layerscape.c PCI: layerscape: Use syscon_regmap_lookup_by_phandle_args 2025-01-16 14:38:36 -06:00
pci-meson.c PCI: dwc: Remove unused of_gpio.h inclusion 2024-05-28 11:15:08 -05:00
pcie-al.c PCI: al: Check IORESOURCE_BUS existence during probe 2024-05-28 11:14:24 -05:00
pcie-armada8k.c PCI: dwc: Drop host prefix from struct dw_pcie_host_ops members 2024-01-06 07:51:08 +00:00
pcie-artpec6.c PCI: artpec6: Implement dw_pcie_ep operation get_features 2024-12-18 21:51:47 +00:00
pcie-bt1.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-designware-ep.c PCI: dwc: ep: Allow EPF drivers to configure the size of Resizable BARs 2025-03-08 14:43:08 +00:00
pcie-designware-host.c PCI: dwc: Simplify config resource lookup 2025-01-20 12:39:38 -06:00
pcie-designware-plat.c PCI: dwc: ep: Remove dw_pcie_ep_init_notify() wrapper 2024-07-09 18:20:21 -05:00
pcie-designware.c Merge branch 'pci/controller/dwc' 2025-01-23 13:04:59 -06:00
pcie-designware.h Merge branch 'pci/controller/dwc' 2025-01-23 13:04:59 -06:00
pcie-dw-rockchip.c PCI: dw-rockchip: Don't wait for link since we can detect Link Up 2025-01-18 11:35:25 -06:00
pcie-fu740.c PCI: dwc: Drop host prefix from struct dw_pcie_host_ops members 2024-01-06 07:51:08 +00:00
pcie-hisi.c PCI: hisi: Avoid invalid address space conversions 2022-01-03 15:05:28 -06:00
pcie-histb.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-intel-gw.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-keembay.c PCI: dwc: ep: Remove dw_pcie_ep_init_notify() wrapper 2024-07-09 18:20:21 -05:00
pcie-kirin.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-qcom-common.c PCI: qcom: Add RX lane margining settings for 16.0 GT/s 2024-09-13 14:44:59 +00:00
pcie-qcom-common.h PCI: qcom: Add RX lane margining settings for 16.0 GT/s 2024-09-13 14:44:59 +00:00
pcie-qcom-ep.c Merge branch 'pci/controller/qcom' 2024-11-25 13:40:59 -06:00
pcie-qcom.c PCI: qcom: Update ICC and OPP values after Link Up event 2025-01-18 11:35:18 -06:00
pcie-rcar-gen4.c PCI: controller: Switch back to struct platform_driver::remove() 2024-10-03 16:44:49 -05:00
pcie-spear13xx.c PCI: dwc: Rename 'dw_pcie::link_gen' to 'dw_pcie::max_link_speed' 2024-09-13 14:44:43 +00:00
pcie-tegra194-acpi.c PCI: dwc: Simplify in/outbound iATU setup methods 2022-08-01 15:15:09 -05:00
pcie-tegra194.c Merge branch 'pci/controller/tegra194' 2024-11-25 13:41:00 -06:00
pcie-uniphier-ep.c PCI: dwc: ep: Remove dw_pcie_ep_init_notify() wrapper 2024-07-09 18:20:21 -05:00
pcie-uniphier.c Merge branch 'pci/irq-clean-up' 2024-01-15 12:10:40 -06:00
pcie-visconti.c PCI: dwc: Drop host prefix from struct dw_pcie_host_ops members 2024-01-06 07:51:08 +00:00