mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
afc9595ea4
Rockchip's RC produces a 100MHz reference clock but there are two methods for the PHY to generate it: (1) Use the system PLL to generate a 100MHz clock. The PHY will relock it, filter signal noise, and output the reference clock. ASPM L0s works correctly, but circuit noise issues make it difficult to pass the TX compatibility test. (2) Share the SoC's 24MHZ crystal oscillator with the PHY and force the PHY's PLL to generate 100MHz internally. In this case, exit from ASPM L0s sometimes fails due to a design error in the RC receiver circuit. Even if we use extended-synch, the PHY sometimes fails to relock the bits from FTS, which will hang the system. We want the flexibility to use both clocking methods, so add a DT property, "aspm-no-l0s". If that's present, disable L0s to avoid the issues with case (2). [bhelgaas: changelog] Reported-by: Jeffy Chen <jeffy.chen@rock-chips.com> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Brian Norris <briannorris@chromium.org> Acked-by: Rob Herring <robh@kernel.org>
114 lines
4.1 KiB
Plaintext
114 lines
4.1 KiB
Plaintext
* Rockchip AXI PCIe Root Port Bridge DT description
|
|
|
|
Required properties:
|
|
- #address-cells: Address representation for root ports, set to <3>
|
|
- #size-cells: Size representation for root ports, set to <2>
|
|
- #interrupt-cells: specifies the number of cells needed to encode an
|
|
interrupt source. The value must be 1.
|
|
- compatible: Should contain "rockchip,rk3399-pcie"
|
|
- reg: Two register ranges as listed in the reg-names property
|
|
- reg-names: Must include the following names
|
|
- "axi-base"
|
|
- "apb-base"
|
|
- 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:
|
|
- "aclk"
|
|
- "aclk-perf"
|
|
- "hclk"
|
|
- "pm"
|
|
- msi-map: Maps a Requester ID to an MSI controller and associated
|
|
msi-specifier data. See ./pci-msi.txt
|
|
- phys: From PHY bindings: Phandle for the Generic PHY for PCIe.
|
|
- phy-names: MUST be "pcie-phy".
|
|
- interrupts: Three interrupt entries must be specified.
|
|
- interrupt-names: Must include the following names
|
|
- "sys"
|
|
- "legacy"
|
|
- "client"
|
|
- resets: Must contain seven entries for each entry in reset-names.
|
|
See ../reset/reset.txt for details.
|
|
- reset-names: Must include the following names
|
|
- "core"
|
|
- "mgmt"
|
|
- "mgmt-sticky"
|
|
- "pipe"
|
|
- "pm"
|
|
- "aclk"
|
|
- "pclk"
|
|
- pinctrl-names : The pin control state names
|
|
- pinctrl-0: The "default" pinctrl state
|
|
- #interrupt-cells: specifies the number of cells needed to encode an
|
|
interrupt source. The value must be 1.
|
|
- interrupt-map-mask and interrupt-map: standard PCI properties
|
|
|
|
Optional Property:
|
|
- aspm-no-l0s: RC won't support ASPM L0s. This property is needed if
|
|
using 24MHz OSC for RC's PHY.
|
|
- ep-gpios: contain the entry for pre-reset gpio
|
|
- num-lanes: number of lanes to use
|
|
- vpcie3v3-supply: The phandle to the 3.3v regulator to use for PCIe.
|
|
- vpcie1v8-supply: The phandle to the 1.8v regulator to use for PCIe.
|
|
- vpcie0v9-supply: The phandle to the 0.9v regulator to use for PCIe.
|
|
|
|
*Interrupt controller child node*
|
|
The core controller provides a single interrupt for legacy INTx. The PCIe node
|
|
should contain an interrupt controller node as a target for the PCI
|
|
'interrupt-map' property. This node represents the domain at which the four
|
|
INTx interrupts are decoded and routed.
|
|
|
|
|
|
Required properties for Interrupt controller child node:
|
|
- interrupt-controller: identifies the node as an interrupt controller
|
|
- #address-cells: specifies the number of cells needed to encode an
|
|
address. The value must be 0.
|
|
- #interrupt-cells: specifies the number of cells needed to encode an
|
|
interrupt source. The value must be 1.
|
|
|
|
Example:
|
|
|
|
pcie0: pcie@f8000000 {
|
|
compatible = "rockchip,rk3399-pcie";
|
|
#address-cells = <3>;
|
|
#size-cells = <2>;
|
|
clocks = <&cru ACLK_PCIE>, <&cru ACLK_PERF_PCIE>,
|
|
<&cru PCLK_PCIE>, <&cru SCLK_PCIE_PM>;
|
|
clock-names = "aclk", "aclk-perf",
|
|
"hclk", "pm";
|
|
bus-range = <0x0 0x1>;
|
|
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH 0>,
|
|
<GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH 0>,
|
|
<GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH 0>;
|
|
interrupt-names = "sys", "legacy", "client";
|
|
assigned-clocks = <&cru SCLK_PCIEPHY_REF>;
|
|
assigned-clock-parents = <&cru SCLK_PCIEPHY_REF100M>;
|
|
assigned-clock-rates = <100000000>;
|
|
ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
|
|
ranges = <0x83000000 0x0 0xfa000000 0x0 0xfa000000 0x0 0x600000
|
|
0x81000000 0x0 0xfa600000 0x0 0xfa600000 0x0 0x100000>;
|
|
num-lanes = <4>;
|
|
msi-map = <0x0 &its 0x0 0x1000>;
|
|
reg = <0x0 0xf8000000 0x0 0x2000000>, <0x0 0xfd000000 0x0 0x1000000>;
|
|
reg-names = "axi-base", "apb-base";
|
|
resets = <&cru SRST_PCIE_CORE>, <&cru SRST_PCIE_MGMT>,
|
|
<&cru SRST_PCIE_MGMT_STICKY>, <&cru SRST_PCIE_PIPE> ,
|
|
<&cru SRST_PCIE_PM>, <&cru SRST_P_PCIE>, <&cru SRST_A_PCIE>;
|
|
reset-names = "core", "mgmt", "mgmt-sticky", "pipe",
|
|
"pm", "pclk", "aclk";
|
|
phys = <&pcie_phy>;
|
|
phy-names = "pcie-phy";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pcie_clkreq>;
|
|
#interrupt-cells = <1>;
|
|
interrupt-map-mask = <0 0 0 7>;
|
|
interrupt-map = <0 0 0 1 &pcie0_intc 0>,
|
|
<0 0 0 2 &pcie0_intc 1>,
|
|
<0 0 0 3 &pcie0_intc 2>,
|
|
<0 0 0 4 &pcie0_intc 3>;
|
|
pcie0_intc: interrupt-controller {
|
|
interrupt-controller;
|
|
#address-cells = <0>;
|
|
#interrupt-cells = <1>;
|
|
};
|
|
};
|