Commit 3c05e884 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Bjorn Helgaas
Browse files

PCI: j721e: Fix host/endpoint dependencies



The j721e driver has a single platform driver that can be built-in or a
loadable module, but it calls two separate backend drivers depending on
whether it is a host or endpoint.

If the two modes are not the same, we can end up with a situation where the
built-in pci-j721e driver tries to call the modular host or endpoint
driver, which causes a link failure:

  ld.lld-21: error: undefined symbol: cdns_pcie_ep_setup
  >>> referenced by pci-j721e.c
  >>>               drivers/pci/controller/cadence/pci-j721e.o:(j721e_pcie_probe) in archive vmlinux.a

  ld.lld-21: error: undefined symbol: cdns_pcie_host_setup
  >>> referenced by pci-j721e.c
  >>>               drivers/pci/controller/cadence/pci-j721e.o:(j721e_pcie_probe) in archive vmlinux.a

Rework the dependencies so that the 'select' is done by the common Kconfig
symbol, based on which of the two are enabled. Effectively this means that
having one built-in makes the other either built-in or disabled, but all
configurations will now build.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: default avatarSiddharth Vadapalli <s-vadapalli@ti.com>
Link: https://patch.msgid.link/20250423162523.2060405-1-arnd@kernel.org
parent a2790bf8
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -44,12 +44,13 @@ config PCIE_CADENCE_PLAT_EP

config PCI_J721E
	tristate
	select PCIE_CADENCE_HOST if PCI_J721E_HOST != n
	select PCIE_CADENCE_EP if PCI_J721E_EP != n

config PCI_J721E_HOST
	tristate "TI J721E PCIe controller (host mode)"
	depends on ARCH_K3 || COMPILE_TEST
	depends on OF
	select PCIE_CADENCE_HOST
	select PCI_J721E
	help
	  Say Y here if you want to support the TI J721E PCIe platform
@@ -61,7 +62,6 @@ config PCI_J721E_EP
	depends on ARCH_K3 || COMPILE_TEST
	depends on OF
	depends on PCI_ENDPOINT
	select PCIE_CADENCE_EP
	select PCI_J721E
	help
	  Say Y here if you want to support the TI J721E PCIe platform
+2 −2
Original line number Diff line number Diff line
@@ -475,7 +475,7 @@ static int j721e_pcie_probe(struct platform_device *pdev)

	switch (mode) {
	case PCI_MODE_RC:
		if (!IS_ENABLED(CONFIG_PCIE_CADENCE_HOST))
		if (!IS_ENABLED(CONFIG_PCI_J721E_HOST))
			return -ENODEV;

		bridge = devm_pci_alloc_host_bridge(dev, sizeof(*rc));
@@ -494,7 +494,7 @@ static int j721e_pcie_probe(struct platform_device *pdev)
		pcie->cdns_pcie = cdns_pcie;
		break;
	case PCI_MODE_EP:
		if (!IS_ENABLED(CONFIG_PCIE_CADENCE_EP))
		if (!IS_ENABLED(CONFIG_PCI_J721E_EP))
			return -ENODEV;

		ep = devm_kzalloc(dev, sizeof(*ep), GFP_KERNEL);