| # SPDX-License-Identifier: GPL-2.0 |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/pci/snps,dw-pcie-ep.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Synopsys DesignWare PCIe endpoint interface |
| |
| maintainers: |
| - Jingoo Han <jingoohan1@gmail.com> |
| - Gustavo Pimentel <gustavo.pimentel@synopsys.com> |
| |
| description: | |
| Synopsys DesignWare PCIe host controller endpoint |
| |
| # Please create a separate DT-schema for your DWC PCIe Endpoint controller |
| # and make sure it's assigned with the vendor-specific compatible string. |
| select: |
| properties: |
| compatible: |
| const: snps,dw-pcie-ep |
| required: |
| - compatible |
| |
| allOf: |
| - $ref: /schemas/pci/pci-ep.yaml# |
| - $ref: /schemas/pci/snps,dw-pcie-common.yaml# |
| |
| properties: |
| reg: |
| description: |
| DBI, DBI2 reg-spaces and outbound memory window are required for the |
| normal controller functioning. iATU memory IO region is also required |
| if the space is unrolled (IP-core version >= 4.80a). |
| minItems: 2 |
| maxItems: 5 |
| |
| reg-names: |
| minItems: 2 |
| maxItems: 5 |
| 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 |
| generate various application-specific traffic on the PCIe bus |
| hierarchy. It's usage scenario depends on the endpoint |
| functionality, for instance it can be used to create MSI(X) |
| messages. |
| const: addr_space |
| - 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: [ link, appl ] |
| - description: See native 'atu' CSR region for details. |
| enum: [ atu_dma ] |
| allOf: |
| - contains: |
| const: dbi |
| - contains: |
| const: addr_space |
| |
| interrupts: |
| description: |
| There is no mandatory IRQ signals for the normal controller functioning, |
| but in addition to the native set the platforms may have a link- or |
| PM-related IRQs specified. |
| minItems: 1 |
| maxItems: 20 |
| |
| interrupt-names: |
| minItems: 1 |
| maxItems: 20 |
| 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: |
| Vendor-specific IRQ names. Consider using the generic names above |
| for new bindings. |
| oneOf: |
| - description: See native "app" IRQ for details |
| enum: [ intr ] |
| |
| max-functions: |
| maximum: 32 |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| |
| additionalProperties: true |
| |
| examples: |
| - | |
| pcie-ep@dfd00000 { |
| compatible = "snps,dw-pcie-ep"; |
| reg = <0xdfc00000 0x0001000>, /* IP registers 1 */ |
| <0xdfc01000 0x0001000>, /* IP registers 2 */ |
| <0xd0000000 0x2000000>; /* Configuration space */ |
| reg-names = "dbi", "dbi2", "addr_space"; |
| |
| interrupts = <23>, <24>; |
| interrupt-names = "dma0", "dma1"; |
| |
| clocks = <&sys_clk 12>, <&sys_clk 24>; |
| clock-names = "dbi", "ref"; |
| |
| resets = <&sys_rst 12>, <&sys_rst 24>; |
| reset-names = "dbi", "phy"; |
| |
| phys = <&pcie_phy0>, <&pcie_phy1>, <&pcie_phy2>, <&pcie_phy3>; |
| phy-names = "pcie0", "pcie1", "pcie2", "pcie3"; |
| |
| max-link-speed = <3>; |
| max-functions = /bits/ 8 <4>; |
| }; |