| # SPDX-License-Identifier: GPL-2.0 |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/pci/snps,dw-pcie.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Synopsys DesignWare PCIe interface |
| |
| maintainers: |
| - Jingoo Han <jingoohan1@gmail.com> |
| - Gustavo Pimentel <gustavo.pimentel@synopsys.com> |
| |
| description: | |
| Synopsys DesignWare PCIe host controller |
| |
| # Please create a separate DT-schema for your DWC PCIe Root Port controller |
| # and make sure it's assigned with the vendor-specific compatible string. |
| select: |
| properties: |
| compatible: |
| const: snps,dw-pcie |
| required: |
| - compatible |
| |
| allOf: |
| - $ref: /schemas/pci/pci-host-bridge.yaml# |
| - $ref: /schemas/pci/snps,dw-pcie-common.yaml# |
| - if: |
| not: |
| required: |
| - msi-map |
| then: |
| properties: |
| interrupt-names: |
| contains: |
| const: msi |
| |
| properties: |
| reg: |
| description: |
| At least DBI reg-space and peripheral devices CFG-space outbound window |
| are required for the normal controller work. iATU memory IO region is |
| also required if the space is unrolled (IP-core version >= 4.80a). |
| minItems: 2 |
| maxItems: 7 |
| |
| reg-names: |
| minItems: 2 |
| maxItems: 7 |
| items: |
| oneOf: |
| - description: |
| Basic DWC PCIe controller configuration-space accessible over |
| the DBI interface. This memory space is either activated with |
| CDM/ELBI = 0 and CS2 = 0 or is a contiguous memory region |
| with all spaces. Note iATU/eDMA CSRs are indirectly accessible |
| via the PL viewports on the DWC PCIe controllers older than |
| v4.80a. |
| const: dbi |
| - description: |
| Shadow DWC PCIe config-space registers. This space is selected |
| by setting CDM/ELBI = 0 and CS2 = 1. This is an intermix of |
| the PCI-SIG PCIe CFG-space with the shadow registers for some |
| PCI Header space, PCI Standard and Extended Structures. It's |
| mainly relevant for the end-point controller configuration, |
| but still there are some shadow registers available for the |
| Root Port mode too. |
| const: dbi2 |
| - description: |
| External Local Bus registers. It's an application-dependent |
| registers normally defined by the platform engineers. The space |
| can be selected by setting CDM/ELBI = 1 and CS2 = 0 wires or can |
| be accessed over some platform-specific means (for instance |
| as a part of a system controller). |
| enum: [ elbi, app ] |
| - description: |
| iATU/eDMA registers common for all device functions. It's an |
| unrolled memory space with the internal Address Translation |
| Unit and Enhanced DMA, which is selected by setting CDM/ELBI = 1 |
| and CS2 = 1. For IP-core releases prior v4.80a, these registers |
| have been programmed via an indirect addressing scheme using a |
| set of viewport CSRs mapped into the PL space. Note iATU is |
| normally mapped to the 0x0 address of this region, while eDMA |
| is available at 0x80000 base address. |
| const: atu |
| - description: |
| Platform-specific eDMA registers. Some platforms may have eDMA |
| CSRs mapped in a non-standard base address. The registers offset |
| can be changed or the MS/LS-bits of the address can be attached |
| in an additional RTL block before the MEM-IO transactions reach |
| the DW PCIe slave interface. |
| const: dma |
| - description: |
| PHY/PCS configuration registers. Some platforms can have the |
| PCS and PHY CSRs accessible over a dedicated memory mapped |
| region, but mainly these registers are indirectly accessible |
| either by means of the embedded PHY viewport schema or by some |
| platform-specific method. |
| const: phy |
| - description: |
| Outbound iATU-capable memory-region which will be used to access |
| the peripheral PCIe devices configuration space. |
| const: config |
| - description: |
| Vendor-specific CSR names. Consider using the generic names above |
| for new bindings. |
| oneOf: |
| - description: See native 'elbi/app' CSR region for details. |
| enum: [ apb, mgmt, link, ulreg, appl ] |
| - description: See native 'atu' CSR region for details. |
| enum: [ atu_dma ] |
| - description: Syscon-related CSR regions. |
| enum: [ smu, mpu ] |
| - description: Tegra234 aperture |
| enum: [ ecam ] |
| allOf: |
| - contains: |
| const: dbi |
| - contains: |
| const: config |
| |
| interrupts: |
| description: |
| DWC PCIe Root Port/Complex specific IRQ signals. At least MSI interrupt |
| signal is supposed to be specified for the host controller. |
| minItems: 1 |
| maxItems: 26 |
| |
| interrupt-names: |
| minItems: 1 |
| maxItems: 26 |
| items: |
| oneOf: |
| - description: |
| Controller request to read or write virtual product data |
| from/to the VPD capability registers. |
| const: vpd |
| - description: |
| Link Equalization Request flag is set in the Link Status 2 |
| register (applicable if the corresponding IRQ is enabled in |
| the Link Control 3 register). |
| const: l_eq |
| - description: |
| Indicates that the eDMA Tx/Rx transfer is complete or that an |
| error has occurred on the corresponding channel. eDMA can have |
| eight Tx (Write) and Rx (Read) eDMA channels thus supporting up |
| to 16 IRQ signals all together. Write eDMA channels shall go |
| first in the ordered row as per default edma_int[*] bus setup. |
| pattern: '^dma([0-9]|1[0-5])?$' |
| - description: |
| PCIe protocol correctable error or a Data Path protection |
| correctable error is detected by the automotive/safety |
| feature. |
| const: sft_ce |
| - description: |
| Indicates that the internal safety mechanism has detected an |
| uncorrectable error. |
| const: sft_ue |
| - description: |
| Application-specific IRQ raised depending on the vendor-specific |
| events basis. |
| const: app |
| - description: |
| DSP AXI MSI Interrupt detected. It gets de-asserted when there is |
| no more MSI interrupt pending. The interrupt is relevant to the |
| iMSI-RX - Integrated MSI Receiver (AXI bridge). |
| const: msi |
| - description: |
| Legacy A/B/C/D interrupt signal. Basically it's triggered by |
| receiving a Assert_INT{A,B,C,D}/Desassert_INT{A,B,C,D} message |
| from the downstream device. |
| pattern: "^int(a|b|c|d)$" |
| - description: |
| Error condition detected and a flag is set in the Root Error Status |
| register of the AER capability. It's asserted when the RC |
| internally generated an error or an error message is received by |
| the RC. |
| const: aer |
| - description: |
| PME message is received by the port. That means having the PME |
| status bit set in the Root Status register (the event is |
| supposed to be unmasked in the Root Control register). |
| const: pme |
| - description: |
| Hot-plug event is detected. That is a bit has been set in the |
| Slot Status register and the corresponding event is enabled in |
| the Slot Control register. |
| const: hp |
| - description: |
| Link Autonomous Bandwidth Status flag has been set in the Link |
| Status register (the event is supposed to be unmasked in the |
| Link Control register). |
| const: bw_au |
| - description: |
| Bandwidth Management Status flag has been set in the Link |
| Status register (the event is supposed to be unmasked in the |
| Link Control register). |
| const: bw_mg |
| - description: |
| Combined Legacy A/B/C/D interrupt signal. See "^int(a|b|c|d)$" for |
| details. |
| const: legacy |
| - description: |
| Vendor-specific IRQ names. Consider using the generic names above |
| for new bindings. |
| oneOf: |
| - description: See native "app" IRQ for details |
| enum: [ intr, sys, pmc, msg, err ] |
| |
| additionalProperties: true |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| |
| examples: |
| - | |
| pcie@dfc00000 { |
| compatible = "snps,dw-pcie"; |
| device_type = "pci"; |
| reg = <0xdfc00000 0x0001000>, /* IP registers */ |
| <0xd0000000 0x0002000>; /* Configuration space */ |
| reg-names = "dbi", "config"; |
| #address-cells = <3>; |
| #size-cells = <2>; |
| ranges = <0x81000000 0 0x00000000 0xde000000 0 0x00010000>, |
| <0x82000000 0 0xd0400000 0xd0400000 0 0x0d000000>; |
| bus-range = <0x0 0xff>; |
| |
| interrupts = <25>, <24>; |
| interrupt-names = "msi", "hp"; |
| #interrupt-cells = <1>; |
| |
| reset-gpios = <&port0 0 1>; |
| |
| phys = <&pcie_phy>; |
| phy-names = "pcie"; |
| |
| num-lanes = <1>; |
| max-link-speed = <3>; |
| }; |