Re: [PATCH v3 3/4] dt-bindings: PCI: mediatek-gen3: Split Airoha schema and document 2-lanes
From: Manivannan Sadhasivam
Date: Tue Jun 30 2026 - 11:03:28 EST
On Sat, Jun 27, 2026 at 02:14:44PM +0200, Christian Marangi wrote:
> To permit proper documentation of required property to support PCIe
> configured for 2-lanes mode, split the Airoha schema part from the
> mediatek-gen3 schema to a dedicated schema.
>
> A PCIe configured for 2-lanes mode require an additional reg for the
> secondary PCIe to be configured and the airoha,scu phandle to correctly
> configure the PCIe MUX.
>
> Rework the mediatek-gen3 schema to drop any redundant constraint previsouly
> introduced for Airoha PCIe properties.
>
> Signed-off-by: Christian Marangi <ansuelsmth@xxxxxxxxx>
> ---
> .../bindings/pci/airoha,en7581-pcie.yaml | 251 ++++++++++++++++++
> .../bindings/pci/mediatek-pcie-gen3.yaml | 77 +-----
> 2 files changed, 256 insertions(+), 72 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/pci/airoha,en7581-pcie.yaml
>
> diff --git a/Documentation/devicetree/bindings/pci/airoha,en7581-pcie.yaml b/Documentation/devicetree/bindings/pci/airoha,en7581-pcie.yaml
> new file mode 100644
> index 000000000000..c690ba7f207c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pci/airoha,en7581-pcie.yaml
> @@ -0,0 +1,251 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/pci/airoha,en7581-pcie.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Gen3 PCIe controller on Airoha SoCs
> +
> +maintainers:
> + - Christian Marangi <ansuelsmth@xxxxxxxxx>
> +
> +description: |+
> + PCIe Gen3 MAC controller for Airoha SoCs, it supports Gen3 speed
> + and compatible with Gen2, Gen1 speed.
> +
> + This PCIe controller supports up to 256 MSI vectors, the MSI hardware
> + block diagram is as follows:
> +
> + +-----+
> + | GIC |
> + +-----+
> + ^
> + |
> + port->irq
> + |
> + +-+-+-+-+-+-+-+-+
> + |0|1|2|3|4|5|6|7| (PCIe intc)
> + +-+-+-+-+-+-+-+-+
> + ^ ^ ^
> + | | ... |
> + +-------+ +------+ +-----------+
> + | | |
> + +-+-+---+--+--+ +-+-+---+--+--+ +-+-+---+--+--+
> + |0|1|...|30|31| |0|1|...|30|31| |0|1|...|30|31| (MSI sets)
> + +-+-+---+--+--+ +-+-+---+--+--+ +-+-+---+--+--+
> + ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
> + | | | | | | | | | | | | (MSI vectors)
> + | | | | | | | | | | | |
> +
> + (MSI SET0) (MSI SET1) ... (MSI SET7)
> +
> + With 256 MSI vectors supported, the MSI vectors are composed of 8 sets,
> + each set has its own address for MSI message, and supports 32 MSI vectors
> + to generate interrupt.
> +
> +properties:
> + compatible:
> + const: airoha,en7581-pcie
> +
> + reg:
> + minItems: 1
> + maxItems: 2
> +
> + reg-names:
> + minItems: 1
> + maxItems: 2
> +
> + interrupts:
> + maxItems: 1
> +
> + ranges:
> + minItems: 1
> + maxItems: 8
8 entries? Really?
> +
> + iommu-map:
> + maxItems: 1
> +
> + iommu-map-mask:
> + const: 0
Why these iommu properties are not present in the example?
> +
> + resets:
> + minItems: 1
> + maxItems: 4
> +
> + reset-names:
> + minItems: 1
> + maxItems: 4
> +
> + clocks:
> + maxItems: 1
> +
> + clock-names:
> + items:
> + - const: sys-ck
sys-clk?
> +
> + phys:
> + maxItems: 1
> +
> + phy-names:
> + items:
> + - const: pcie-phy
If there is going to be only one PHY, then I think you can drop the phy-names
property.
> +
> + num-lanes:
> + enum: [1, 2]
> +
> + mediatek,pbus-csr:
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + items:
> + - items:
> + - description: phandle to pbus-csr syscon
> + - description: offset of pbus-csr base address register
> + - description: offset of pbus-csr base address mask register
> + description:
> + Phandle with two arguments to the syscon node used to detect if
> + a given address is accessible on PCIe controller.
> +
> + airoha,scu:
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + items:
> + - items:
> + - description: phandle to airoha SCU syscon
> + description:
> + Phandle to SCU syscon to configure PCIe MUX for 2 lines support.
> +
> + '#interrupt-cells':
> + const: 1
> +
> + interrupt-controller:
> + description: Interrupt controller node for handling legacy PCI interrupts.
s/legacy/INTx
> + type: object
> + properties:
> + '#address-cells':
> + const: 0
> + '#interrupt-cells':
> + const: 1
> + interrupt-controller: true
> +
> + required:
> + - '#address-cells'
> + - '#interrupt-cells'
> + - interrupt-controller
> +
> + additionalProperties: false
> +
> +required:
> + - compatible
> + - reg
> + - reg-names
> + - interrupts
> + - ranges
> + - clocks
> + - clock-names
> + - '#interrupt-cells'
> + - interrupt-controller
> +
> +allOf:
> + - $ref: /schemas/pci/pci-host-bridge.yaml#
> + - if:
> + properties:
> + num-lanes:
> + const: 2
> + then:
> + properties:
> + reg:
> + minItems: 2
> +
> + reg-names:
> + items:
> + - const: pcie-mac
> + - const: sec-pcie-mac
> +
> + resets:
> + minItems: 4
> +
> + reset-names:
> + items:
> + - const: phy-lane0
> + - const: phy-lane1
> + - const: perstout
> + - const: sec-perstout
> +
> + required:
> + - airoha,scu
> +
> + else:
> + properties:
> + reg:
> + maxItems: 1
> +
> + reg-names:
> + items:
> + - const: pcie-mac
> +
> + resets:
> + minItems: 2
> + maxItems: 3
> +
> + reset-names:
> + minItems: 2
> + items:
> + - enum: [ phy-lane0, phy-lane1, phy-lane2 ]
> + - enum: [ phy-lane1, perstout ]
> + - const: phy-lane2
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/interrupt-controller/irq.h>
> +
> + bus {
> + #address-cells = <2>;
> + #size-cells = <2>;
> +
You can drop bus node.
- Mani
--
மணிவண்ணன் சதாசிவம்