]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PCI: j721e: Add config guards for Cadence Host and Endpoint library APIs
authorSiddharth Vadapalli <s-vadapalli@ti.com>
Mon, 17 Nov 2025 11:32:06 +0000 (17:02 +0530)
committerManivannan Sadhasivam <mani@kernel.org>
Thu, 18 Dec 2025 07:56:11 +0000 (13:26 +0530)
Commit under Fixes enabled loadable module support for the driver under
the assumption that it shall be the sole user of the Cadence Host and
Endpoint library APIs. This assumption guarantees that we won't end up
in a case where the driver is built-in and the library support is built
as a loadable module.

With the introduction of [1], this assumption is no longer valid. The
SG2042 driver could be built as a loadable module, implying that the
Cadence Host library is also selected as a loadable module. However, the
pci-j721e.c driver could be built-in as indicated by CONFIG_PCI_J721E=y
due to which the Cadence Endpoint library is built-in. Despite the
library drivers being built as specified by their respective consumers,
since the 'pci-j721e.c' driver has references to the Cadence Host
library APIs as well, we run into a build error as reported at [0].

Fix this by adding config guards as a temporary workaround. The proper
fix is to split the 'pci-j721e.c' driver into independent Host and
Endpoint drivers as aligned at [2].

[0]: https://lore.kernel.org/r/202511111705.MZ7ls8Hm-lkp@intel.com/
[1]: commit 1c72774df028 ("PCI: sg2042: Add Sophgo SG2042 PCIe driver")
[2]: https://lore.kernel.org/r/37f6f8ce-12b2-44ee-a94c-f21b29c98821@app.fastmail.com/

Fixes: a2790bf81f0f ("PCI: j721e: Add support to build as a loadable module")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202511111705.MZ7ls8Hm-lkp@intel.com/
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20251117113246.1460644-1-s-vadapalli@ti.com
drivers/pci/controller/cadence/pci-j721e.c

index ecd1b03124006326a422bd5d6d27393aeb664508..6f2501479c70196fc8ca848e3d61cccc55d42607 100644 (file)
@@ -620,9 +620,11 @@ static int j721e_pcie_probe(struct platform_device *pdev)
                        gpiod_set_value_cansleep(pcie->reset_gpio, 1);
                }
 
-               ret = cdns_pcie_host_setup(rc);
-               if (ret < 0)
-                       goto err_pcie_setup;
+               if (IS_ENABLED(CONFIG_PCI_J721E_HOST)) {
+                       ret = cdns_pcie_host_setup(rc);
+                       if (ret < 0)
+                               goto err_pcie_setup;
+               }
 
                break;
        case PCI_MODE_EP:
@@ -632,9 +634,11 @@ static int j721e_pcie_probe(struct platform_device *pdev)
                        goto err_get_sync;
                }
 
-               ret = cdns_pcie_ep_setup(ep);
-               if (ret < 0)
-                       goto err_pcie_setup;
+               if (IS_ENABLED(CONFIG_PCI_J721E_EP)) {
+                       ret = cdns_pcie_ep_setup(ep);
+                       if (ret < 0)
+                               goto err_pcie_setup;
+               }
 
                break;
        }
@@ -659,10 +663,11 @@ static void j721e_pcie_remove(struct platform_device *pdev)
        struct cdns_pcie_ep *ep;
        struct cdns_pcie_rc *rc;
 
-       if (pcie->mode == PCI_MODE_RC) {
+       if (IS_ENABLED(CONFIG_PCI_J721E_HOST) &&
+           pcie->mode == PCI_MODE_RC) {
                rc = container_of(cdns_pcie, struct cdns_pcie_rc, pcie);
                cdns_pcie_host_disable(rc);
-       } else {
+       } else if (IS_ENABLED(CONFIG_PCI_J721E_EP)) {
                ep = container_of(cdns_pcie, struct cdns_pcie_ep, pcie);
                cdns_pcie_ep_disable(ep);
        }
@@ -728,10 +733,12 @@ static int j721e_pcie_resume_noirq(struct device *dev)
                        gpiod_set_value_cansleep(pcie->reset_gpio, 1);
                }
 
-               ret = cdns_pcie_host_link_setup(rc);
-               if (ret < 0) {
-                       clk_disable_unprepare(pcie->refclk);
-                       return ret;
+               if (IS_ENABLED(CONFIG_PCI_J721E_HOST)) {
+                       ret = cdns_pcie_host_link_setup(rc);
+                       if (ret < 0) {
+                               clk_disable_unprepare(pcie->refclk);
+                               return ret;
+                       }
                }
 
                /*
@@ -741,10 +748,12 @@ static int j721e_pcie_resume_noirq(struct device *dev)
                for (enum cdns_pcie_rp_bar bar = RP_BAR0; bar <= RP_NO_BAR; bar++)
                        rc->avail_ib_bar[bar] = true;
 
-               ret = cdns_pcie_host_init(rc);
-               if (ret) {
-                       clk_disable_unprepare(pcie->refclk);
-                       return ret;
+               if (IS_ENABLED(CONFIG_PCI_J721E_HOST)) {
+                       ret = cdns_pcie_host_init(rc);
+                       if (ret) {
+                               clk_disable_unprepare(pcie->refclk);
+                               return ret;
+                       }
                }
        }