217 lines
8.6 KiB
Plaintext
217 lines
8.6 KiB
Plaintext
|
NVIDIA Tegra PCIe controller (Synopsys DesignWare Core based)
|
||
|
|
||
|
This PCIe host controller is based on the Synopsis Designware PCIe IP
|
||
|
and thus inherits all the common properties defined in designware-pcie.txt.
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: For Tegra19x, must contain "nvidia,tegra194-pcie".
|
||
|
- device_type: Must be "pci"
|
||
|
- reg: A list of physical base address and length for each set of controller
|
||
|
registers. Must contain an entry for each entry in the reg-names property.
|
||
|
- reg-names: Must include the following entries:
|
||
|
"appl": Controller's application logic registers
|
||
|
"config": configuration space region
|
||
|
"atu_dma": iATU and DMA register
|
||
|
- interrupts: A list of interrupt outputs of the controller. Must contain an
|
||
|
entry for each entry in the interrupt-names property.
|
||
|
- interrupt-names: Must include the following entries:
|
||
|
"intr": The Tegra interrupt that is asserted for controller interrupts
|
||
|
"msi": The Tegra interrupt that is asserted when an MSI is received
|
||
|
- bus-range: Range of bus numbers associated with this controller
|
||
|
- #address-cells: Address representation for root ports (must be 3)
|
||
|
- cell 0 specifies the bus and device numbers of the root port:
|
||
|
[23:16]: bus number
|
||
|
[15:11]: device number
|
||
|
- cell 1 denotes the upper 32 address bits and should be 0
|
||
|
- cell 2 contains the lower 32 address bits and is used to translate to the
|
||
|
CPU address space
|
||
|
- #size-cells: Size representation for root ports (must be 2)
|
||
|
- ranges: Describes the translation of addresses for root ports and standard
|
||
|
PCI regions. The entries must be 6 cells each, where the first three cells
|
||
|
correspond to the address as described for the #address-cells property
|
||
|
above, the fourth cell is the physical CPU address to translate to and the
|
||
|
fifth and six cells are as described for the #size-cells property above.
|
||
|
- Entries setup the mapping for the standard I/O, memory and
|
||
|
prefetchable PCI regions. The first cell determines the type of region
|
||
|
that is setup:
|
||
|
- 0x81000000: I/O memory region
|
||
|
- 0x82000000: non-prefetchable memory region
|
||
|
- 0xc2000000: prefetchable memory region
|
||
|
Please refer to the standard PCI bus binding document for a more detailed
|
||
|
explanation.
|
||
|
- #interrupt-cells: Size representation for interrupts (must be 1)
|
||
|
- interrupt-map-mask and interrupt-map: Standard PCI IRQ mapping properties
|
||
|
Please refer to the standard PCI bus binding document for a more detailed
|
||
|
explanation.
|
||
|
- clocks: Must contain an entry for each entry in clock-names.
|
||
|
See ../clocks/clock-bindings.txt for details.
|
||
|
- clock-names: Must include the following entries:
|
||
|
- core_clk
|
||
|
- resets: Must contain an entry for each entry in reset-names.
|
||
|
See ../reset/reset.txt for details.
|
||
|
- reset-names: Must include the following entries:
|
||
|
- core_apb_rst
|
||
|
- core_rst
|
||
|
- phys: Must contain a phandle to P2U PHY for each entry in phy-names.
|
||
|
- phy-names: Must include an entry for each active lane. Note that the number
|
||
|
of entries does not have to (though usually will) be equal to the specified
|
||
|
number of lanes in XBAR configuration. Entries are of the form
|
||
|
"pcie-p2u-N": where N ranges from 0 to the value specified in xbar config
|
||
|
- Controller dependent register offsets
|
||
|
- nvidia,cfg-link-cap-l1sub: L1SUB_CAP_L1SUB reg offset
|
||
|
0x154 - FPGA
|
||
|
0x194 - C1, C2 and C3
|
||
|
0x1b0 - C4
|
||
|
0x1c4 - C0 and C5
|
||
|
- nvidia,cap-pl16g-status: PL16G_CAP_PL16G_STATUS reg offset
|
||
|
0x164 - C1, C2 and C3
|
||
|
0x174 - C4
|
||
|
0x174 - C0 and C5
|
||
|
- nvidia,event-cntr-ctrl: EVENT_COUNTER_CONTROL reg offset
|
||
|
0x168 - FPGA
|
||
|
0x1a8 - C1, C2 and C3
|
||
|
0x1c4 - C4
|
||
|
0x1d8 - C0 and C5
|
||
|
- nvidia,event-cntr-data: EVENT_COUNTER_DATA reg offset
|
||
|
0x16c - FPGA
|
||
|
0x1ac - C1, C2 and C3
|
||
|
0x1c8 - C4
|
||
|
0x1dc - C0 and C5
|
||
|
- nvidia,cap_pl16g_cap_off: CAP_PL16G_CAP_OFF reg offset
|
||
|
0x178 - C1, C2 and C3
|
||
|
0x188 - C4
|
||
|
0x188 - C0 and C5
|
||
|
- nvidia,margin-port-cap: MARGIN_PORT_CAP_STATUS reg offset
|
||
|
0x180 - C1, C2 and C3
|
||
|
0x190 - C4
|
||
|
0x194 - C0 and C5
|
||
|
- nvidia,margin-lane-cntrl: MARGIN_LANE_CNTRL_STATUS reg offset
|
||
|
0x184 - C1, C2 and C3
|
||
|
0x194 - C4
|
||
|
0x198 - C0 and C5
|
||
|
- nvidia,dl-feature-cap: DATA_LINK_FEATURE_CAP reg offset
|
||
|
0x2dc - C1, C2 and C3
|
||
|
0x2f8 - C4
|
||
|
0x30c - C5
|
||
|
- nvidia,controller-id : Controller specific ID
|
||
|
0x0 - C0
|
||
|
0x1 - C1
|
||
|
0x2 - C2
|
||
|
0x3 - C3
|
||
|
0x4 - C4
|
||
|
0x5 - C5
|
||
|
- vddio-pex-ctl-supply: Regulator supply for PCIe side band signals
|
||
|
|
||
|
Optional properties:
|
||
|
- iommus: A reference to the IOMMU. See ../iommu/iommu.txt for details.
|
||
|
- dma-coherent: Indicates that the hardware IP block can ensure the coherency
|
||
|
of the data transferred from/to the IP block. This can avoid the software
|
||
|
cache flush/invalid actions, and improve the performance significantly.
|
||
|
- nvidia,max-speed: limits controllers max speed to this value.
|
||
|
1 - Gen-1
|
||
|
2 - Gen-2
|
||
|
3 - Gen-3
|
||
|
4 - Gen-4
|
||
|
- nvidia,init-speed: limits controllers init speed to this value.
|
||
|
1 - Gen-1
|
||
|
2 - Gen-2
|
||
|
3 - Gen-3
|
||
|
4 - Gen-4
|
||
|
- nvidia,disable-aspm-states : controls advertisement of ASPM states
|
||
|
bit-0 to '1' : disables advertisement of ASPM-L0s
|
||
|
bit-1 to '1' : disables advertisement of ASPM-L1. This also disables
|
||
|
advertisement of ASPM-L1.1 and ASPM-L1.2
|
||
|
bit-2 to '1' : disables advertisement of ASPM-L1.1
|
||
|
bit-3 to '1' : disables advertisement of ASPM-L1.2
|
||
|
- nvidia,disable-clock-request : gives a hint to driver that there is no
|
||
|
CLKREQ signal routing on board
|
||
|
- nvidia,enable-fmon : gives a hint to driver that this a safety enabled
|
||
|
platform
|
||
|
- nvidia,update_fc_fixup : needs it to improve perf when a platform is designed
|
||
|
in such a way that it satisfies at least one of the following conditions
|
||
|
1. If C0/C4/C5 run at x1/x2 link widths (irrespective of speed and MPS)
|
||
|
2. If C0/C1/C2/C3/C4/C5 operate at their respective max link widths and
|
||
|
a) speed is Gen-2 and MPS is 256B
|
||
|
b) speed is >= Gen-3 with any MPS
|
||
|
- nvidia,cdm_check : Enables CDM checking. For more information, refer synopsis
|
||
|
data book
|
||
|
- nvidia,enable-power-down : Enables power down of respective controller and
|
||
|
corresponding PLLs if they are not shared by any other entity
|
||
|
- "nvidia,pex-wake" : Add PEX_WAKE gpio number to provide wake support.
|
||
|
- "nvidia,tsa-config" : Add TSA configuration register address to configure MC
|
||
|
with production settings for PCIe. Note:- this is applicable only for C5
|
||
|
- "nvidia,dma-poll" : Add this property to do polling instead of interrupt
|
||
|
mechanism during DMA operation. DMA polling will give accurate perf
|
||
|
numbers
|
||
|
- "nvidia,dma-size" : Add this property to provide DMA size input, size will
|
||
|
set to 1 MB if this property is missing
|
||
|
- "nvidia,disable-l1-cpm" : Add this property to disable ASPM L1-CPM for the
|
||
|
immediate end point
|
||
|
- "nvidia,plat-gpios" : Add gpio number that needs to be configured before
|
||
|
system goes for enumeration
|
||
|
- nvidia,enable-srns: This property needs to be present if the platform has SRNS
|
||
|
(Separate Reference clocks with No Spread-spectrum clocking) configuration
|
||
|
implemented. This property disables REFCLK supply to EP.
|
||
|
|
||
|
Power supplies for Tegra194:
|
||
|
//TODO
|
||
|
|
||
|
|
||
|
Examples:
|
||
|
=========
|
||
|
|
||
|
Tegra194:
|
||
|
--------
|
||
|
|
||
|
SoC DTSI:
|
||
|
|
||
|
pcie_c1_rp {
|
||
|
compatible = "nvidia,tegra194-pcie", "snps,dw-pcie";
|
||
|
reg = <0x00 0x14100000 0x0 0x00020000 /* appl registers (128K) */
|
||
|
0x00 0x30000000 0x0 0x00040000 /* configuration space (256K) */
|
||
|
0x00 0x30040000 0x0 0x00040000>; /* iATU_DMA reg space (256K) */
|
||
|
reg-names = "appl", "config", "atu_dma";
|
||
|
|
||
|
status = "disabled";
|
||
|
|
||
|
#address-cells = <3>;
|
||
|
#size-cells = <2>;
|
||
|
device_type = "pci";
|
||
|
num-lanes = <1>;
|
||
|
|
||
|
clocks = <&bpmp_clks TEGRA194_CLK_PEX0_CORE_1>;
|
||
|
clock-names = "core_clk";
|
||
|
|
||
|
resets = <&bpmp_resets TEGRA194_RESET_PEX0_CORE_1_APB>,
|
||
|
<&bpmp_resets TEGRA194_RESET_PEX0_CORE_1>;
|
||
|
reset-names = "core_apb_rst", "core_rst";
|
||
|
|
||
|
interrupts = <0 45 0x04>, /* controller interrupt */
|
||
|
<0 46 0x04>; /* MSI interrupt */
|
||
|
interrupt-names = "intr", "msi";
|
||
|
|
||
|
iommus = <&smmu TEGRA_SID_PCIE1>;
|
||
|
dma-coherent;
|
||
|
|
||
|
#interrupt-cells = <1>;
|
||
|
interrupt-map-mask = <0 0 0 0>;
|
||
|
interrupt-map = <0 0 0 0 &intc 0 45 0x04>;
|
||
|
|
||
|
nvidia,max-speed = <2>;
|
||
|
nvidia,disable-aspm-states = <0x0>;
|
||
|
|
||
|
bus-range = <0x0 0xff>;
|
||
|
ranges = <0x81000000 0x0 0x30100000 0x0 0x30100000 0x0 0x00100000 /* downstream I/O (1MB) */
|
||
|
0x82000000 0x0 0x30200000 0x0 0x30200000 0x0 0x01E00000 /* non-prefetchable memory (30MB) */
|
||
|
0xc2000000 0x12 0x00000000 0x12 0x00000000 0x0 0x40000000>; /* prefetchable memory (1GB) */
|
||
|
|
||
|
nvidia,cfg-link-cap-l1sub = <0x1c4>;
|
||
|
nvidia,cap-pl16g-status = <0x174>;
|
||
|
nvidia,event-cntr-ctrl = <0x1d8>;
|
||
|
nvidia,event-cntr-data = <0x1dc>;
|
||
|
};
|
||
|
|
||
|
Board DTS:
|
||
|
|
||
|
//TODO
|