]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PCI: j721e: Fix host/endpoint dependencies
authorArnd Bergmann <arnd@arndb.de>
Wed, 23 Apr 2025 16:25:16 +0000 (18:25 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 2 Jun 2025 21:02:37 +0000 (16:02 -0500)
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: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Link: https://patch.msgid.link/20250423162523.2060405-1-arnd@kernel.org
drivers/pci/controller/cadence/Kconfig
drivers/pci/controller/cadence/pci-j721e.c

index 72d7d264d6c3ea0b7f19b7e11fabde3bda4a3640..666e16b6367f1447bed7024013d099b4443e5948 100644 (file)
@@ -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
index b87bc26bbf0698af37a4f81365448931ac162c22..f0051805f9e9d8fcf59ee7e70d0470ba3e05191b 100644 (file)
@@ -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);