Add the Device Tree binding for the PCIe root complex found on the
SpacemiT K1 SoC. This device is derived from the Synopsys Designware
PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2
link speeds (5 GT/sec). One of the ports uses a combo PHY, which is
typically used to support a USB 3 port.
Signed-off-by: Alex Elder <elder@riscstar.com>
---
v2: - Renamed the binding, using "host controller"
- Added '>' to the description, and reworded it a bit
- Added reference to /schemas/pci/snps,dw-pcie.yaml
- Fixed and renamed the compatible string
- Renamed the PMU property, and fixed its description
- Consistently omit the period at the end of descriptions
- Renamed the "global" clock to be "phy"
- Use interrupts rather than interrupts-extended, and name the
one interrupt "msi" to make clear its purpose
- Added a vpcie3v3-supply property
- Dropped the max-link-speed property
- Changed additionalProperties to unevaluatedProperties
- Dropped the label and status property from the example
.../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++
1 file changed, 156 insertions(+)
create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml
diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml
new file mode 100644
index 0000000000000..87745d49c53a1
--- /dev/null
+++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml
@@ -0,0 +1,156 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: SpacemiT K1 PCI Express Host Controller
+
+maintainers:
+ - Alex Elder <elder@riscstar.com>
+
+description: >
+ The SpacemiT K1 SoC PCIe host controller is based on the Synopsys
+ DesignWare PCIe IP. The controller uses the DesignWare built-in
+ MSI interrupt controller, and supports 256 MSIs.
+
+allOf:
+ - $ref: /schemas/pci/snps,dw-pcie.yaml#
+
+properties:
+ compatible:
+ const: spacemit,k1-pcie
+
+ reg:
+ items:
+ - description: DesignWare PCIe registers
+ - description: ATU address space
+ - description: PCIe configuration space
+ - description: Link control registers
+
+ reg-names:
+ items:
+ - const: dbi
+ - const: atu
+ - const: config
+ - const: link
+
+ spacemit,apmu:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description:
+ A phandle that refers to the APMU system controller, whose
+ regmap is used in managing resets and link state, along with
+ and offset of its reset control register.
+ items:
+ - items:
+ - description: phandle to APMU system controller
+ - description: register offset
+
+ clocks:
+ items:
+ - description: DWC PCIe Data Bus Interface (DBI) clock
+ - description: DWC PCIe application AXI-bus master interface clock
+ - description: DWC PCIe application AXI-bus slave interface clock
+
+ clock-names:
+ items:
+ - const: dbi
+ - const: mstr
+ - const: slv
+
+ resets:
+ items:
+ - description: DWC PCIe Data Bus Interface (DBI) reset
+ - description: DWC PCIe application AXI-bus master interface reset
+ - description: DWC PCIe application AXI-bus slave interface reset
+ - description: Global reset; must be deasserted for PHY to function
+
+ reset-names:
+ items:
+ - const: dbi
+ - const: mstr
+ - const: slv
+ - const: phy
+
+ interrupts:
+ items:
+ - description: Interrupt used for MSIs
+
+ interrupt-names:
+ const: msi
+
+ phys:
+ maxItems: 1
+
+ vpcie3v3-supply:
+ description:
+ A phandle for 3.3v regulator to use for PCIe
+
+ device_type:
+ const: pci
+
+ num-viewport:
+ const: 8
+
+required:
+ - compatible
+ - reg
+ - reg-names
+ - spacemit,apmu
+ - "#address-cells"
+ - "#size-cells"
+ - ranges
+ - clocks
+ - clock-names
+ - resets
+ - reset-names
+ - interrupts
+ - interrupt-names
+ - phys
+ - vpcie3v3-supply
+ - device_type
+ - num-viewport
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/spacemit,k1-syscon.h>
+ pcie@ca400000 {
+ compatible = "spacemit,k1-pcie";
+ reg = <0xca400000 0x00001000>,
+ <0xca700000 0x0001ff24>,
+ <0x9f000000 0x00002000>,
+ <0xc0c20000 0x00001000>;
+ reg-names = "dbi",
+ "atu",
+ "config",
+ "link";
+ #address-cells = <3>;
+ #size-cells = <2>;
+ ranges = <0x01000000 0x0 0x00000000 0x9f002000 0x0 0x00100000>,
+ <0x02000000 0x0 0x90000000 0x90000000 0x0 0x0f000000>;
+ interrupts = <142>;
+ interrupt-names = "msi";
+ clocks = <&syscon_apmu CLK_PCIE1_DBI>,
+ <&syscon_apmu CLK_PCIE1_MASTER>,
+ <&syscon_apmu CLK_PCIE1_SLAVE>;
+ clock-names = "dbi",
+ "mstr",
+ "slv";
+ resets = <&syscon_apmu RESET_PCIE1_DBI>,
+ <&syscon_apmu RESET_PCIE1_MASTER>,
+ <&syscon_apmu RESET_PCIE1_SLAVE>,
+ <&syscon_apmu RESET_PCIE1_GLOBAL>;
+ reset-names = "dbi",
+ "mstr",
+ "slv",
+ "phy";
+ phys = <&pcie1_phy>;
+ vpcie3v3-supply = <&pcie_vcc_3v3>;
+ device_type = "pci";
+ num-viewport = <8>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie1_3_cfg>;
+ spacemit,apmu = <&syscon_apmu 0x3d4>;
+ };
--
2.48.1
On Mon, Oct 13, 2025 at 10:35:20AM -0500, Alex Elder wrote: > Add the Device Tree binding for the PCIe root complex found on the > SpacemiT K1 SoC. This device is derived from the Synopsys Designware > PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2 > link speeds (5 GT/sec). One of the ports uses a combo PHY, which is > typically used to support a USB 3 port. > > Signed-off-by: Alex Elder <elder@riscstar.com> > --- > v2: - Renamed the binding, using "host controller" > - Added '>' to the description, and reworded it a bit > - Added reference to /schemas/pci/snps,dw-pcie.yaml > - Fixed and renamed the compatible string > - Renamed the PMU property, and fixed its description > - Consistently omit the period at the end of descriptions > - Renamed the "global" clock to be "phy" > - Use interrupts rather than interrupts-extended, and name the > one interrupt "msi" to make clear its purpose > - Added a vpcie3v3-supply property > - Dropped the max-link-speed property > - Changed additionalProperties to unevaluatedProperties > - Dropped the label and status property from the example > > .../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++ > 1 file changed, 156 insertions(+) > create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > > diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > new file mode 100644 > index 0000000000000..87745d49c53a1 > --- /dev/null > +++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > @@ -0,0 +1,156 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: SpacemiT K1 PCI Express Host Controller > + > +maintainers: > + - Alex Elder <elder@riscstar.com> > + > +description: > > + The SpacemiT K1 SoC PCIe host controller is based on the Synopsys > + DesignWare PCIe IP. The controller uses the DesignWare built-in > + MSI interrupt controller, and supports 256 MSIs. > + > +allOf: > + - $ref: /schemas/pci/snps,dw-pcie.yaml# > + > +properties: > + compatible: > + const: spacemit,k1-pcie > + > + reg: > + items: > + - description: DesignWare PCIe registers > + - description: ATU address space > + - description: PCIe configuration space > + - description: Link control registers > + > + reg-names: > + items: > + - const: dbi > + - const: atu > + - const: config > + - const: link > + > + spacemit,apmu: > + $ref: /schemas/types.yaml#/definitions/phandle-array > + description: > + A phandle that refers to the APMU system controller, whose > + regmap is used in managing resets and link state, along with > + and offset of its reset control register. > + items: > + - items: > + - description: phandle to APMU system controller > + - description: register offset > + > + clocks: > + items: > + - description: DWC PCIe Data Bus Interface (DBI) clock > + - description: DWC PCIe application AXI-bus master interface clock > + - description: DWC PCIe application AXI-bus slave interface clock > + > + clock-names: > + items: > + - const: dbi > + - const: mstr > + - const: slv > + > + resets: > + items: > + - description: DWC PCIe Data Bus Interface (DBI) reset > + - description: DWC PCIe application AXI-bus master interface reset > + - description: DWC PCIe application AXI-bus slave interface reset > + - description: Global reset; must be deasserted for PHY to function > + > + reset-names: > + items: > + - const: dbi > + - const: mstr > + - const: slv > + - const: phy > + > + interrupts: > + items: > + - description: Interrupt used for MSIs > + > + interrupt-names: > + const: msi > + > + phys: > + maxItems: 1 > + > + vpcie3v3-supply: > + description: > + A phandle for 3.3v regulator to use for PCIe Could you please move these Root Port specific properties (phy, vpcie3v3-supply) to the Root Port node? Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pci/st,stm32-pcie-host.yaml For handling the 'vpcie3v3-supply', you can rely on PCI_PWRCTRL_SLOT driver. > + > + device_type: > + const: pci > + This is part of the PCI bus schema itself. > + num-viewport: > + const: 8 > + This property has been deprecated in favor of driver auto-detecting the iATU regions. - Mani -- மணிவண்ணன் சதாசிவம்
On 10/26/25 11:38 AM, Manivannan Sadhasivam wrote: > On Mon, Oct 13, 2025 at 10:35:20AM -0500, Alex Elder wrote: >> Add the Device Tree binding for the PCIe root complex found on the >> SpacemiT K1 SoC. This device is derived from the Synopsys Designware >> PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2 >> link speeds (5 GT/sec). One of the ports uses a combo PHY, which is >> typically used to support a USB 3 port. >> >> Signed-off-by: Alex Elder <elder@riscstar.com> >> --- >> v2: - Renamed the binding, using "host controller" >> - Added '>' to the description, and reworded it a bit >> - Added reference to /schemas/pci/snps,dw-pcie.yaml >> - Fixed and renamed the compatible string >> - Renamed the PMU property, and fixed its description >> - Consistently omit the period at the end of descriptions >> - Renamed the "global" clock to be "phy" >> - Use interrupts rather than interrupts-extended, and name the >> one interrupt "msi" to make clear its purpose >> - Added a vpcie3v3-supply property >> - Dropped the max-link-speed property >> - Changed additionalProperties to unevaluatedProperties >> - Dropped the label and status property from the example >> >> .../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++ >> 1 file changed, 156 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> >> diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> new file mode 100644 >> index 0000000000000..87745d49c53a1 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> @@ -0,0 +1,156 @@ >> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: SpacemiT K1 PCI Express Host Controller >> + >> +maintainers: >> + - Alex Elder <elder@riscstar.com> >> + >> +description: > >> + The SpacemiT K1 SoC PCIe host controller is based on the Synopsys >> + DesignWare PCIe IP. The controller uses the DesignWare built-in >> + MSI interrupt controller, and supports 256 MSIs. >> + >> +allOf: >> + - $ref: /schemas/pci/snps,dw-pcie.yaml# >> + >> +properties: >> + compatible: >> + const: spacemit,k1-pcie >> + >> + reg: >> + items: >> + - description: DesignWare PCIe registers >> + - description: ATU address space >> + - description: PCIe configuration space >> + - description: Link control registers >> + >> + reg-names: >> + items: >> + - const: dbi >> + - const: atu >> + - const: config >> + - const: link >> + >> + spacemit,apmu: >> + $ref: /schemas/types.yaml#/definitions/phandle-array >> + description: >> + A phandle that refers to the APMU system controller, whose >> + regmap is used in managing resets and link state, along with >> + and offset of its reset control register. >> + items: >> + - items: >> + - description: phandle to APMU system controller >> + - description: register offset >> + >> + clocks: >> + items: >> + - description: DWC PCIe Data Bus Interface (DBI) clock >> + - description: DWC PCIe application AXI-bus master interface clock >> + - description: DWC PCIe application AXI-bus slave interface clock >> + >> + clock-names: >> + items: >> + - const: dbi >> + - const: mstr >> + - const: slv >> + >> + resets: >> + items: >> + - description: DWC PCIe Data Bus Interface (DBI) reset >> + - description: DWC PCIe application AXI-bus master interface reset >> + - description: DWC PCIe application AXI-bus slave interface reset >> + - description: Global reset; must be deasserted for PHY to function >> + >> + reset-names: >> + items: >> + - const: dbi >> + - const: mstr >> + - const: slv >> + - const: phy >> + >> + interrupts: >> + items: >> + - description: Interrupt used for MSIs >> + >> + interrupt-names: >> + const: msi >> + >> + phys: >> + maxItems: 1 >> + >> + vpcie3v3-supply: >> + description: >> + A phandle for 3.3v regulator to use for PCIe > > Could you please move these Root Port specific properties (phy, vpcie3v3-supply) > to the Root Port node? > > Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pci/st,stm32-pcie-host.yaml OK, I'll try to follow what that ST binding does (and the matching driver). > For handling the 'vpcie3v3-supply', you can rely on PCI_PWRCTRL_SLOT driver. I looked at the code under pci/pwrctrl. But is there some other documentation I should be looking at for this? It looks like it involves creating a new node compatible with "pciclass,0604". And that the purpose of that driver was to ensure certain resources are enabled before the "real" PCI device gets probed. I see two arm64 DTS files using it: x1e80100.dtsi and r8a779g0.dtsi. Both define this node inside the main PCIe controller node. Will this model (with the parent pwrctrl node and child PCI controller node) be used for all PCI controllers from here on? Or are you saying this properly represents the relationship of the supply with the PCIe port in this SpacemiT case? >> + >> + device_type: >> + const: pci >> + > > This is part of the PCI bus schema itself. That means I don't have to specify it here. I'll remove it. I will also remove it from the list of required properties. >> + num-viewport: >> + const: 8 >> + > > This property has been deprecated in favor of driver auto-detecting the iATU > regions. Yes, that got removed in v3 of the series. Thanks. -Alex > > - Mani >
On Mon, Oct 27, 2025 at 05:24:33PM -0500, Alex Elder wrote: > On 10/26/25 11:38 AM, Manivannan Sadhasivam wrote: > > On Mon, Oct 13, 2025 at 10:35:20AM -0500, Alex Elder wrote: > > > Add the Device Tree binding for the PCIe root complex found on the > > > SpacemiT K1 SoC. This device is derived from the Synopsys Designware > > > PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2 > > > link speeds (5 GT/sec). One of the ports uses a combo PHY, which is > > > typically used to support a USB 3 port. > > > > > > Signed-off-by: Alex Elder <elder@riscstar.com> > > > --- > > > v2: - Renamed the binding, using "host controller" > > > - Added '>' to the description, and reworded it a bit > > > - Added reference to /schemas/pci/snps,dw-pcie.yaml > > > - Fixed and renamed the compatible string > > > - Renamed the PMU property, and fixed its description > > > - Consistently omit the period at the end of descriptions > > > - Renamed the "global" clock to be "phy" > > > - Use interrupts rather than interrupts-extended, and name the > > > one interrupt "msi" to make clear its purpose > > > - Added a vpcie3v3-supply property > > > - Dropped the max-link-speed property > > > - Changed additionalProperties to unevaluatedProperties > > > - Dropped the label and status property from the example > > > > > > .../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++ > > > 1 file changed, 156 insertions(+) > > > create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > > > > > > diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > > > new file mode 100644 > > > index 0000000000000..87745d49c53a1 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > > > @@ -0,0 +1,156 @@ > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > > +%YAML 1.2 > > > +--- > > > +$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml# > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > + > > > +title: SpacemiT K1 PCI Express Host Controller > > > + > > > +maintainers: > > > + - Alex Elder <elder@riscstar.com> > > > + > > > +description: > > > > + The SpacemiT K1 SoC PCIe host controller is based on the Synopsys > > > + DesignWare PCIe IP. The controller uses the DesignWare built-in > > > + MSI interrupt controller, and supports 256 MSIs. > > > + > > > +allOf: > > > + - $ref: /schemas/pci/snps,dw-pcie.yaml# > > > + > > > +properties: > > > + compatible: > > > + const: spacemit,k1-pcie > > > + > > > + reg: > > > + items: > > > + - description: DesignWare PCIe registers > > > + - description: ATU address space > > > + - description: PCIe configuration space > > > + - description: Link control registers > > > + > > > + reg-names: > > > + items: > > > + - const: dbi > > > + - const: atu > > > + - const: config > > > + - const: link > > > + > > > + spacemit,apmu: > > > + $ref: /schemas/types.yaml#/definitions/phandle-array > > > + description: > > > + A phandle that refers to the APMU system controller, whose > > > + regmap is used in managing resets and link state, along with > > > + and offset of its reset control register. > > > + items: > > > + - items: > > > + - description: phandle to APMU system controller > > > + - description: register offset > > > + > > > + clocks: > > > + items: > > > + - description: DWC PCIe Data Bus Interface (DBI) clock > > > + - description: DWC PCIe application AXI-bus master interface clock > > > + - description: DWC PCIe application AXI-bus slave interface clock > > > + > > > + clock-names: > > > + items: > > > + - const: dbi > > > + - const: mstr > > > + - const: slv > > > + > > > + resets: > > > + items: > > > + - description: DWC PCIe Data Bus Interface (DBI) reset > > > + - description: DWC PCIe application AXI-bus master interface reset > > > + - description: DWC PCIe application AXI-bus slave interface reset > > > + - description: Global reset; must be deasserted for PHY to function > > > + > > > + reset-names: > > > + items: > > > + - const: dbi > > > + - const: mstr > > > + - const: slv > > > + - const: phy > > > + > > > + interrupts: > > > + items: > > > + - description: Interrupt used for MSIs > > > + > > > + interrupt-names: > > > + const: msi > > > + > > > + phys: > > > + maxItems: 1 > > > + > > > + vpcie3v3-supply: > > > + description: > > > + A phandle for 3.3v regulator to use for PCIe > > > > Could you please move these Root Port specific properties (phy, vpcie3v3-supply) > > to the Root Port node? > > > > Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pci/st,stm32-pcie-host.yaml > > OK, I'll try to follow what that ST binding does (and the > matching driver). > > > For handling the 'vpcie3v3-supply', you can rely on PCI_PWRCTRL_SLOT driver. > I looked at the code under pci/pwrctrl. But is there some other > documentation I should be looking at for this? > Sorry, nothing available atm. But I will create one, once we fix some core issues with pwrctrl so that it becomes useable for all (more in the driver patch). > It looks like it involves creating a new node compatible with > "pciclass,0604". And that the purpose of that driver was to > ensure certain resources are enabled before the "real" PCI > device gets probed. > > I see two arm64 DTS files using it: x1e80100.dtsi and r8a779g0.dtsi. > Both define this node inside the main PCIe controller node. > > Will this model (with the parent pwrctrl node and child PCI > controller node) be used for all PCI controllers from here on? > The PCI controller (host bridge) node is the parent and the Root Port node (which gets bind to pwrctrl slot driver) will be the child. > Or are you saying this properly represents the relationship of > the supply with the PCIe port in this SpacemiT case? > We want to use this for all the new platforms and also try to convert the old ones too gradually. - Mani -- மணிவண்ணன் சதாசிவம்
On 10/28/25 12:58 AM, Manivannan Sadhasivam wrote: > On Mon, Oct 27, 2025 at 05:24:33PM -0500, Alex Elder wrote: >> On 10/26/25 11:38 AM, Manivannan Sadhasivam wrote: >>> On Mon, Oct 13, 2025 at 10:35:20AM -0500, Alex Elder wrote: >>>> Add the Device Tree binding for the PCIe root complex found on the >>>> SpacemiT K1 SoC. This device is derived from the Synopsys Designware >>>> PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2 >>>> link speeds (5 GT/sec). One of the ports uses a combo PHY, which is >>>> typically used to support a USB 3 port. >>>> >>>> Signed-off-by: Alex Elder <elder@riscstar.com> >>>> --- >>>> v2: - Renamed the binding, using "host controller" >>>> - Added '>' to the description, and reworded it a bit >>>> - Added reference to /schemas/pci/snps,dw-pcie.yaml >>>> - Fixed and renamed the compatible string >>>> - Renamed the PMU property, and fixed its description >>>> - Consistently omit the period at the end of descriptions >>>> - Renamed the "global" clock to be "phy" >>>> - Use interrupts rather than interrupts-extended, and name the >>>> one interrupt "msi" to make clear its purpose >>>> - Added a vpcie3v3-supply property >>>> - Dropped the max-link-speed property >>>> - Changed additionalProperties to unevaluatedProperties >>>> - Dropped the label and status property from the example >>>> >>>> .../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++ >>>> 1 file changed, 156 insertions(+) >>>> create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >>>> >>>> diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >>>> new file mode 100644 >>>> index 0000000000000..87745d49c53a1 >>>> --- /dev/null >>>> +++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >>>> @@ -0,0 +1,156 @@ >>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) >>>> +%YAML 1.2 >>>> +--- >>>> +$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml# >>>> +$schema: http://devicetree.org/meta-schemas/core.yaml# >>>> + >>>> +title: SpacemiT K1 PCI Express Host Controller . . . >>>> + interrupt-names: >>>> + const: msi >>>> + >>>> + phys: >>>> + maxItems: 1 >>>> + >>>> + vpcie3v3-supply: >>>> + description: >>>> + A phandle for 3.3v regulator to use for PCIe >>> >>> Could you please move these Root Port specific properties (phy, vpcie3v3-supply) >>> to the Root Port node? >>> >>> Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pci/st,stm32-pcie-host.yaml >> >> OK, I'll try to follow what that ST binding does (and the >> matching driver). >> >>> For handling the 'vpcie3v3-supply', you can rely on PCI_PWRCTRL_SLOT driver. >> I looked at the code under pci/pwrctrl. But is there some other >> documentation I should be looking at for this? >> > > Sorry, nothing available atm. But I will create one, once we fix some core > issues with pwrctrl so that it becomes useable for all (more in the driver > patch). Sounds good, I think it's necessary. I might not get it completely right on the next try but I trust you'll help me understand what I need to do. >> It looks like it involves creating a new node compatible with >> "pciclass,0604". And that the purpose of that driver was to >> ensure certain resources are enabled before the "real" PCI >> device gets probed. >> >> I see two arm64 DTS files using it: x1e80100.dtsi and r8a779g0.dtsi. >> Both define this node inside the main PCIe controller node. >> >> Will this model (with the parent pwrctrl node and child PCI >> controller node) be used for all PCI controllers from here on? >> > > The PCI controller (host bridge) node is the parent and the Root Port node > (which gets bind to pwrctrl slot driver) will be the child. That makes sense to me. >> Or are you saying this properly represents the relationship of >> the supply with the PCIe port in this SpacemiT case? >> > > We want to use this for all the new platforms and also try to convert the old > ones too gradually. OK, understood. Thank you. -Alex > > - Mani >
On Mon, Oct 13, 2025 at 10:35:20AM -0500, Alex Elder wrote: > Add the Device Tree binding for the PCIe root complex found on the > SpacemiT K1 SoC. This device is derived from the Synopsys Designware > PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2 > link speeds (5 GT/sec). One of the ports uses a combo PHY, which is > typically used to support a USB 3 port. > > Signed-off-by: Alex Elder <elder@riscstar.com> > --- > v2: - Renamed the binding, using "host controller" > - Added '>' to the description, and reworded it a bit > - Added reference to /schemas/pci/snps,dw-pcie.yaml > - Fixed and renamed the compatible string > - Renamed the PMU property, and fixed its description > - Consistently omit the period at the end of descriptions > - Renamed the "global" clock to be "phy" > - Use interrupts rather than interrupts-extended, and name the > one interrupt "msi" to make clear its purpose > - Added a vpcie3v3-supply property > - Dropped the max-link-speed property > - Changed additionalProperties to unevaluatedProperties > - Dropped the label and status property from the example > > .../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++ > 1 file changed, 156 insertions(+) > create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > > diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > new file mode 100644 > index 0000000000000..87745d49c53a1 > --- /dev/null > +++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > @@ -0,0 +1,156 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: SpacemiT K1 PCI Express Host Controller > + > +maintainers: > + - Alex Elder <elder@riscstar.com> > + > +description: > > + The SpacemiT K1 SoC PCIe host controller is based on the Synopsys > + DesignWare PCIe IP. The controller uses the DesignWare built-in > + MSI interrupt controller, and supports 256 MSIs. > + > +allOf: > + - $ref: /schemas/pci/snps,dw-pcie.yaml# > + > +properties: > + compatible: > + const: spacemit,k1-pcie > + > + reg: > + items: > + - description: DesignWare PCIe registers > + - description: ATU address space > + - description: PCIe configuration space > + - description: Link control registers > + > + reg-names: > + items: > + - const: dbi > + - const: atu > + - const: config > + - const: link > + > + spacemit,apmu: > + $ref: /schemas/types.yaml#/definitions/phandle-array > + description: > + A phandle that refers to the APMU system controller, whose > + regmap is used in managing resets and link state, along with > + and offset of its reset control register. > + items: > + - items: > + - description: phandle to APMU system controller > + - description: register offset > + > + clocks: > + items: > + - description: DWC PCIe Data Bus Interface (DBI) clock > + - description: DWC PCIe application AXI-bus master interface clock > + - description: DWC PCIe application AXI-bus slave interface clock > + > + clock-names: > + items: > + - const: dbi > + - const: mstr > + - const: slv > + > + resets: > + items: > + - description: DWC PCIe Data Bus Interface (DBI) reset > + - description: DWC PCIe application AXI-bus master interface reset > + - description: DWC PCIe application AXI-bus slave interface reset > + - description: Global reset; must be deasserted for PHY to function > + > + reset-names: > + items: > + - const: dbi > + - const: mstr > + - const: slv > + - const: phy You expect/need the phy driver and PCIe driver to both reset the PHY? You should do that indirectly with the PHY API when you reset the controller. Rob
On 10/15/25 11:47 AM, Rob Herring wrote: > On Mon, Oct 13, 2025 at 10:35:20AM -0500, Alex Elder wrote: >> Add the Device Tree binding for the PCIe root complex found on the >> SpacemiT K1 SoC. This device is derived from the Synopsys Designware >> PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2 >> link speeds (5 GT/sec). One of the ports uses a combo PHY, which is >> typically used to support a USB 3 port. >> >> Signed-off-by: Alex Elder <elder@riscstar.com> >> --- >> v2: - Renamed the binding, using "host controller" >> - Added '>' to the description, and reworded it a bit >> - Added reference to /schemas/pci/snps,dw-pcie.yaml >> - Fixed and renamed the compatible string >> - Renamed the PMU property, and fixed its description >> - Consistently omit the period at the end of descriptions >> - Renamed the "global" clock to be "phy" >> - Use interrupts rather than interrupts-extended, and name the >> one interrupt "msi" to make clear its purpose >> - Added a vpcie3v3-supply property >> - Dropped the max-link-speed property >> - Changed additionalProperties to unevaluatedProperties >> - Dropped the label and status property from the example >> >> .../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++ >> 1 file changed, 156 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> >> diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> new file mode 100644 >> index 0000000000000..87745d49c53a1 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> @@ -0,0 +1,156 @@ >> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: SpacemiT K1 PCI Express Host Controller >> + >> +maintainers: >> + - Alex Elder <elder@riscstar.com> >> + >> +description: > >> + The SpacemiT K1 SoC PCIe host controller is based on the Synopsys >> + DesignWare PCIe IP. The controller uses the DesignWare built-in >> + MSI interrupt controller, and supports 256 MSIs. >> + >> +allOf: >> + - $ref: /schemas/pci/snps,dw-pcie.yaml# >> + >> +properties: >> + compatible: >> + const: spacemit,k1-pcie >> + >> + reg: >> + items: >> + - description: DesignWare PCIe registers >> + - description: ATU address space >> + - description: PCIe configuration space >> + - description: Link control registers >> + >> + reg-names: >> + items: >> + - const: dbi >> + - const: atu >> + - const: config >> + - const: link >> + >> + spacemit,apmu: >> + $ref: /schemas/types.yaml#/definitions/phandle-array >> + description: >> + A phandle that refers to the APMU system controller, whose >> + regmap is used in managing resets and link state, along with >> + and offset of its reset control register. >> + items: >> + - items: >> + - description: phandle to APMU system controller >> + - description: register offset >> + >> + clocks: >> + items: >> + - description: DWC PCIe Data Bus Interface (DBI) clock >> + - description: DWC PCIe application AXI-bus master interface clock >> + - description: DWC PCIe application AXI-bus slave interface clock >> + >> + clock-names: >> + items: >> + - const: dbi >> + - const: mstr >> + - const: slv >> + >> + resets: >> + items: >> + - description: DWC PCIe Data Bus Interface (DBI) reset >> + - description: DWC PCIe application AXI-bus master interface reset >> + - description: DWC PCIe application AXI-bus slave interface reset >> + - description: Global reset; must be deasserted for PHY to function >> + >> + reset-names: >> + items: >> + - const: dbi >> + - const: mstr >> + - const: slv >> + - const: phy > > You expect/need the phy driver and PCIe driver to both reset the PHY? > You should do that indirectly with the PHY API when you reset the > controller. This was previously called the "global" reset, and I renamed it to align with one of the existing DWC "app" resets. I put it here because I had the impression that it was required to be deasserted for both PCIe and the PHY to function. Currently only the combo PHY gets and deasserts the PHY reset (for the benefit of USB). Instead, I'll require this global/phy reset for both the combo PHY and the PCIe PHYs. I will get it (deasserted) during probe for all of them. Then I'll remove it from the list of resets required/managed for PCIe ports. I'm going to keep your Reviewed-by on patch 2, even though I'll be adding "reset" and "reset-names" as required properties. Please tell me if you'd like me not to do that. Thanks for the review. -Alex > Rob
On Mon, Oct 13, 2025 at 10:35:20AM -0500, Alex Elder wrote: > Add the Device Tree binding for the PCIe root complex found on the > SpacemiT K1 SoC. This device is derived from the Synopsys Designware > PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2 > link speeds (5 GT/sec). One of the ports uses a combo PHY, which is > typically used to support a USB 3 port. > > Signed-off-by: Alex Elder <elder@riscstar.com> > --- > v2: - Renamed the binding, using "host controller" > - Added '>' to the description, and reworded it a bit > - Added reference to /schemas/pci/snps,dw-pcie.yaml > - Fixed and renamed the compatible string > - Renamed the PMU property, and fixed its description > - Consistently omit the period at the end of descriptions > - Renamed the "global" clock to be "phy" > - Use interrupts rather than interrupts-extended, and name the > one interrupt "msi" to make clear its purpose > - Added a vpcie3v3-supply property > - Dropped the max-link-speed property > - Changed additionalProperties to unevaluatedProperties > - Dropped the label and status property from the example > > .../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++ > 1 file changed, 156 insertions(+) > create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > > diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > new file mode 100644 > index 0000000000000..87745d49c53a1 > --- /dev/null > +++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml > @@ -0,0 +1,156 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: SpacemiT K1 PCI Express Host Controller > + > +maintainers: > + - Alex Elder <elder@riscstar.com> > + > +description: > > + The SpacemiT K1 SoC PCIe host controller is based on the Synopsys > + DesignWare PCIe IP. The controller uses the DesignWare built-in > + MSI interrupt controller, and supports 256 MSIs. > + > +allOf: > + - $ref: /schemas/pci/snps,dw-pcie.yaml# > + > +properties: ... > + num-viewport: > + const: 8 This property has been deprecated for a long time, and the driver now detects viewports at runtime since commit 281f1f99cf3a (PCI: dwc: Detect number of iATU windows, 2020-11-05), IOW, it makes no effect with the current mainline DWC PCIe driver. Is it really necessary? Best regards, Yao Zi
On 10/13/25 8:55 PM, Yao Zi wrote: > On Mon, Oct 13, 2025 at 10:35:20AM -0500, Alex Elder wrote: >> Add the Device Tree binding for the PCIe root complex found on the >> SpacemiT K1 SoC. This device is derived from the Synopsys Designware >> PCIe IP. It supports up to three PCIe ports operating at PCIe gen 2 >> link speeds (5 GT/sec). One of the ports uses a combo PHY, which is >> typically used to support a USB 3 port. >> >> Signed-off-by: Alex Elder <elder@riscstar.com> >> --- >> v2: - Renamed the binding, using "host controller" >> - Added '>' to the description, and reworded it a bit >> - Added reference to /schemas/pci/snps,dw-pcie.yaml >> - Fixed and renamed the compatible string >> - Renamed the PMU property, and fixed its description >> - Consistently omit the period at the end of descriptions >> - Renamed the "global" clock to be "phy" >> - Use interrupts rather than interrupts-extended, and name the >> one interrupt "msi" to make clear its purpose >> - Added a vpcie3v3-supply property >> - Dropped the max-link-speed property >> - Changed additionalProperties to unevaluatedProperties >> - Dropped the label and status property from the example >> >> .../bindings/pci/spacemit,k1-pcie-host.yaml | 156 ++++++++++++++++++ >> 1 file changed, 156 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> >> diff --git a/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> new file mode 100644 >> index 0000000000000..87745d49c53a1 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml >> @@ -0,0 +1,156 @@ >> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: SpacemiT K1 PCI Express Host Controller >> + >> +maintainers: >> + - Alex Elder <elder@riscstar.com> >> + >> +description: > >> + The SpacemiT K1 SoC PCIe host controller is based on the Synopsys >> + DesignWare PCIe IP. The controller uses the DesignWare built-in >> + MSI interrupt controller, and supports 256 MSIs. >> + >> +allOf: >> + - $ref: /schemas/pci/snps,dw-pcie.yaml# >> + >> +properties: > > ... > >> + num-viewport: >> + const: 8 > > This property has been deprecated for a long time, and the driver now > detects viewports at runtime since commit 281f1f99cf3a (PCI: dwc: Detect > number of iATU windows, 2020-11-05), IOW, it makes no effect with the > current mainline DWC PCIe driver. Is it really necessary? Based on what you say, the answer is "no" and I'll gladly remove it. Thanks. -Alex > Best regards, > Yao Zi
© 2016 - 2025 Red Hat, Inc.