[PATCH v3 3/3] PCI: ultrarisc: allow DP1000 driver to build as module
From: Jia Wang via B4 Relay
Date: Mon Jul 13 2026 - 21:11:43 EST
From: Jia Wang <wangjia@xxxxxxxxxxxxx>
CONFIG_PCIE_ULTRARISC is a tristate option, so the driver can be selected
as a module when COMPILE_TEST or platform configuration allows it. Using
builtin_platform_driver() leaves the module build without the module
init/exit plumbing and causes modpost failures for the generated .ko.
Use module_platform_driver() so the driver works for both module and
built-in builds while keeping the existing tristate Kconfig entry.
Add a remove callback and call dw_pcie_host_deinit() during removal so the
root bus is torn down before devres releases the controller data.
Fixes: 5fc35740c3b3 ("PCI: ultrarisc: Add UltraRISC DP1000 PCIe Root Complex driver")
Signed-off-by: Jia Wang <wangjia@xxxxxxxxxxxxx>
---
drivers/pci/controller/dwc/pcie-ultrarisc.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/controller/dwc/pcie-ultrarisc.c b/drivers/pci/controller/dwc/pcie-ultrarisc.c
index 72ba5840b62d..9bee522a20e9 100644
--- a/drivers/pci/controller/dwc/pcie-ultrarisc.c
+++ b/drivers/pci/controller/dwc/pcie-ultrarisc.c
@@ -193,6 +193,13 @@ static int ultrarisc_pcie_probe(struct platform_device *pdev)
return 0;
}
+static void ultrarisc_pcie_remove(struct platform_device *pdev)
+{
+ struct ultrarisc_pcie *ultra = platform_get_drvdata(pdev);
+
+ dw_pcie_host_deinit(&ultra->pci.pp);
+}
+
static int ultrarisc_pcie_suspend_noirq(struct device *dev)
{
struct ultrarisc_pcie *ultra = dev_get_drvdata(dev);
@@ -256,8 +263,9 @@ static struct platform_driver ultrarisc_pcie_driver = {
.pm = &ultrarisc_pcie_pm_ops,
},
.probe = ultrarisc_pcie_probe,
+ .remove = ultrarisc_pcie_remove,
};
-builtin_platform_driver(ultrarisc_pcie_driver);
+module_platform_driver(ultrarisc_pcie_driver);
MODULE_DESCRIPTION("UltraRISC DP1000 DWC PCIe host controller");
MODULE_LICENSE("GPL");
--
2.34.1