[PATCH v4 0/3] PCI: ultrarisc: Add DP1000 PCIe clock support

From: Jia Wang via B4 Relay

Date: Thu Jul 30 2026 - 21:15:40 EST


Add clock handling for the UltraRISC DP1000 DesignWare PCIe host
controller.

The DP1000 PCIe controller depends on three input clocks: core, dbi, and
aux. The driver accesses DBI registers during host initialization, so the
clocks must be enabled before the controller registers are touched.

This series documents the required clocks in the device tree binding,
enables the core, dbi, and aux clocks before DesignWare host
initialization, and keeps them managed across probe failure, detach, and
system suspend/resume. It also switches the driver to
module_platform_driver() so the existing tristate Kconfig option builds
correctly as a module.

Testing:
- Build and module build tested with ARCH=riscv.
- Boot tested on UltraRISC DP1000.
- Validated the PCIe binding with dt_binding_check and dtbs_check.

Signed-off-by: Jia Wang <wangjia@xxxxxxxxxxxxx>
---
Changes in v4:
- Use devm_clk_bulk_get_all() instead of hardcoding clock names in the driver.
- Drop clks_enabled and simplify the clock enable/disable helpers.
- Keep the suspend guard for the failed-resume case without disabling the
clocks again when the guard is hit.
- Keep module_platform_driver(), but drop the .remove callback.
- Link to v3: https://patch.msgid.link/20260714-ultrarisc-pci-clk-v3-0-e72723fc0ef1@xxxxxxxxxxxxx

Changes in v3:
- Track whether the PCIe clocks are enabled and make clock enable/disable
helpers idempotent.
- Skip dw_pcie_suspend_noirq() when the controller is already suspended to
avoid register access with clocks disabled after a failed resume.
- Disable clocks again if dw_pcie_resume_noirq() fails after clocks were
re-enabled.
- Add a remove callback to deinitialize the DesignWare host when the module
build support is added.
- Link to v2: https://patch.msgid.link/20260706-ultrarisc-pci-clk-v2-0-2f3fb6fba66b@xxxxxxxxxxxxx

Changes in v2:
- Add Fixes and Acked-by tags to the binding patch.
- Add a Fixes tag to the driver clock handling patch.
- Fix the suspend/resume clock handling so clocks are disabled only after a
successful suspend and kept enabled on resume failure.
- Add a module build fix by switching to module_platform_driver().
- Link to v1: https://patch.msgid.link/20260629-ultrarisc-pci-clk-v1-0-5ea3308fdab3@xxxxxxxxxxxxx

To: Xincheng Zhang <zhangxincheng@xxxxxxxxxxxxx>
To: Jia Wang <wangjia@xxxxxxxxxxxxx>
To: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
To: Krzysztof Wilczyński <kwilczynski@xxxxxxxxxx>
To: Manivannan Sadhasivam <mani@xxxxxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>
To: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
To: Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>
To: Conor Dooley <conor+dt@xxxxxxxxxx>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxxxxxxxx>
Cc: linux-pci@xxxxxxxxxxxxxxx
Cc: devicetree@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx

---
Jia Wang (3):
dt-bindings: pci: ultrarisc: add required DP1000 PCIe clocks
PCI: ultrarisc: get and enable DP1000 PCIe clocks
PCI: ultrarisc: use module_platform_driver()

.../bindings/pci/ultrarisc,dp1000-pcie.yaml | 16 ++++
drivers/pci/controller/dwc/pcie-ultrarisc.c | 87 ++++++++++++++++++++--
2 files changed, 95 insertions(+), 8 deletions(-)
---
base-commit: a13c140cc289c0b7b3770bce5b3ad42ab35074aa
change-id: 20260617-ultrarisc-pci-clk-ac19047af1ea

Best regards,
--
Jia Wang <wangjia@xxxxxxxxxxxxx>