TI PHY: DT DOCUMENTATION FOR PHYs in TI PLATFORMs OMAP CONTROL PHY Required properties: - compatible: Should be one of "ti,control-phy-otghs" - if it has otghs_control mailbox register as on OMAP4. "ti,control-phy-usb2" - if it has Power down bit in control_dev_conf register e.g. USB2_PHY on OMAP5. "ti,control-phy-pipe3" - if it has DPLL and individual Rx & Tx power control e.g. USB3 PHY and SATA PHY on OMAP5. "ti,control-phy-pcie" - for pcie to support external clock for pcie and to set PCS delay value. e.g. PCIE PHY in DRA7x "ti,control-phy-usb2-dra7" - if it has power down register like USB2 PHY on DRA7 platform. "ti,control-phy-usb2-am437" - if it has power down register like USB2 PHY on AM437 platform. - reg : register ranges as listed in the reg-names property - reg-names: "otghs_control" for control-phy-otghs "power", "pcie_pcs" and "control_sma" for control-phy-pcie "power" for all other types omap_control_usb: omap-control-usb@4a002300 { compatible = "ti,control-phy-otghs"; reg = <0x4a00233c 0x4>; reg-names = "otghs_control"; }; OMAP USB2 PHY Required properties: - compatible: Should be "ti,omap-usb2" Should be "ti,dra7x-usb2" for the 1st instance of USB2 PHY on DRA7x Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY in DRA7x - reg : Address and length of the register set for the device. - #phy-cells: determine the number of cells that should be given in the phandle while referencing this phy. - clocks: a list of phandles and clock-specifier pairs, one for each entry in clock-names. - clock-names: should include: * "wkupclk" - wakeup clock. * "refclk" - reference clock (optional). Deprecated properties: - ctrl-module : phandle of the control module used by PHY driver to power on the PHY. Recommended properies: - syscon-phy-power : phandle/offset pair. Phandle to the system control module and the register offset to power on/off the PHY. This is usually a subnode of ocp2scp to which it is connected. usb2phy@4a0ad080 { compatible = "ti,omap-usb2"; reg = <0x4a0ad080 0x58>; ctrl-module = <&omap_control_usb>; #phy-cells = <0>; clocks = <&usb_phy_cm_clk32k>, <&usb_otg_ss_refclk960m>; clock-names = "wkupclk", "refclk"; }; TI PIPE3 PHY Required properties: - compatible: Should be "ti,phy-usb3", "ti,phy-pipe3-sata" or "ti,phy-pipe3-pcie. "ti,omap-usb3" is deprecated. - reg : Address and length of the register set for the device. - reg-names: The names of the register addresses corresponding to the registers filled in "reg". - #phy-cells: determine the number of cells that should be given in the phandle while referencing this phy. - clocks: a list of phandles and clock-specifier pairs, one for each entry in clock-names. - clock-names: should include: * "wkupclk" - wakeup clock. * "sysclk" - system clock. * "refclk" - reference clock. * "dpll_ref" - external dpll ref clk * "dpll_ref_m2" - external dpll ref clk * "phy-div" - divider for apll * "div-clk" - apll clock Optional properties: - id: If there are multiple instance of the same type, in order to differentiate between each instance "id" can be used (e.g., multi-lane PCIe PHY). If "id" is not provided, it is set to default value of '1'. - syscon-pllreset: Handle to system control region that contains the CTRL_CORE_SMA_SW_0 register and register offset to the CTRL_CORE_SMA_SW_0 register that contains the SATA_PLL_SOFT_RESET bit. Only valid for sata_phy. - syscon-pcs : phandle/offset pair. Phandle to the system control module and the register offset to write the PCS delay value. Deprecated properties: - ctrl-module : phandle of the control module used by PHY driver to power on the PHY. Recommended properies: - syscon-phy-power : phandle/offset pair. Phandle to the system control module and the register offset to power on/off the PHY. This is usually a subnode of ocp2scp to which it is connected. usb3phy@4a084400 { compatible = "ti,phy-usb3"; reg = <0x4a084400 0x80>, <0x4a084800 0x64>, <0x4a084c00 0x40>; reg-names = "phy_rx", "phy_tx", "pll_ctrl"; ctrl-module = <&omap_control_usb>; #phy-cells = <0>; clocks = <&usb_phy_cm_clk32k>, <&sys_clkin>, <&usb_otg_ss_refclk960m>; clock-names = "wkupclk", "sysclk", "refclk"; }; sata_phy: phy@4A096000 { compatible = "ti,phy-pipe3-sata"; reg = <0x4A096000 0x80>, /* phy_rx */ <0x4A096400 0x64>, /* phy_tx */ <0x4A096800 0x40>; /* pll_ctrl */ reg-names = "phy_rx", "phy_tx", "pll_ctrl"; ctrl-module = <&omap_control_sata>; clocks = <&sys_clkin1>, <&sata_ref_clk>; clock-names = "sysclk", "refclk"; syscon-pllreset = <&scm_conf 0x3fc>; #phy-cells = <0>; TI Keystone SerDes PHY ====================== Required properties: - compatible: should be one of * "ti,keystone-serdes-gbe" * "ti,keystone-serdes-xgbe" * "ti,keystone-serdes-pcie" - reg: * base address and length of the SerDes register set - #phy-cells: * From the generic phy bindings, must be 0; - num-lanes: * Number of lanes in SerDes. Optional properties: - syscon-peripheral: * Handle to the subsystem register region of the peripheral inside which the SerDes exists. Required for 10gbe. - syscon-link: * Handle to the Link register region of the peripheral inside which the SerDes exists. Example: it is the PCSR register region in the case of 10gbe. Required for 10gbe. - rx-force-enable: * Include this property if receiver attenuation and boost are to be configured with specific values defined in rx-force. - link-rate-kbps: * SerDes link rate to be configured, in kbps. For gbe and 10gbe SerDes, it is optional to represent each lane as a sub-node, which can be enabled or disabled individually using the "status" property. If a lane is not represented by a node, the lane is disabled. Required properties (lane sub-node): - reg: * lane number Optional properties (lane sub-node): - control-rate: * Lane control rate 0: full rate 1: half rate 2: quarter rate - rx-start: * Initial lane rx equalizer attenuation and boost configurations. * Must be array of 2 integers. - rx-force: * Forced lane rx equalizer attenuation and boost configurations. * Must be array of 2 integers. - tx-coeff: * Lane c1, c2, cm, attenuation and regulator output voltage configurations. * Must be array of 5 integers. - loopback: * Include this property to enable loopback at the SerDes lane level. Example for Keystone K2E GBE: ----------------------------- gbe_serdes0: phy@232a000 { #phy-cells = <0>; compatible = "ti,keystone-serdes-gbe"; reg = <0x0232a000 0x2000>; link-rate-kbps = <1250000>; num-lanes = <4>; lanes { #address-cells = <1>; #size-cells = <0>; lane@0 { /*loopback;*/ reg = <0>; control-rate = <2>; /* quart */ rx-start = <7 5>; rx-force = <1 1>; tx-coeff = <0 0 0 12 4>; /* c1 c2 cm att vreg */ }; lane@1 { /*loopback;*/ reg = <1>; control-rate = <2>; /* quart */ rx-start = <7 5>; rx-force = <1 1>; tx-coeff = <0 0 0 12 4>; /* c1 c2 cm att vreg */ }; }; }; gbe_serdes1: phy@2324000 { #phy-cells = <0>; compatible = "ti,keystone-serdes-gbe"; reg = <0x02324000 0x2000>; link-rate-kbps = <1250000>; num-lanes = <4>; lanes { #address-cells = <1>; #size-cells = <0>; lane@0 { /*loopback;*/ reg = <0>; control-rate = <2>; /* quart */ rx-start = <7 5>; rx-force = <1 1>; tx-coeff = <0 0 0 12 4>; /* c1 c2 cm att vreg */ }; lane@1 { /*loopback;*/ reg = <1>; control-rate = <2>; /* quart */ rx-start = <7 5>; rx-force = <1 1>; tx-coeff = <0 0 0 12 4>; /* c1 c2 cm att vreg */ }; }; }; netcp: netcp@24000000 { ... netcp-devices { ... gbe@200000 { /* ETHSS */ ... phys = <&gbe_serdes0>, <&gbe_serdes1>; ... }; ... }; }; Example for Keystone PCIE: -------------------------- pcie0_phy: phy@2320000 { #phy-cells = <0>; compatible = "ti,keystone-serdes-pcie"; reg = <0x02320000 0x4000>; link-rate-kbps = <5000000>; num-lanes = <2>; }; Then the PHY can be used in PCIe controller node as pcie0: pcie@21800000 { ... phys = <&pcie0_phy>; } Example for K2E 10GBE: ---------------------- Define the syscon regmaps for 10gbe subsystem: xgbe_subsys: subsys@2f00000 { status = "ok"; compatible = "syscon"; reg = <0x02f00000 0x100>; }; Define the syscon regmaps for 10gbe pcsr: xgbe_pcsr: pcsr@2f00000 { status = "ok"; compatible = "syscon"; reg = <0x02f00600 0x100>; }; Define the 10gbe SerDes node: xgbe_serdes: phy@231e000 { status = "ok"; #phy-cells = <0>; compatible = "ti,keystone-serdes-xgbe"; reg = <0x0231e000 0x2000>; link-rate-kbps = <10312500>; num-lanes = <2>; syscon-peripheral = <&xgbe_subsys>; syscon-link = <&xgbe_pcsr>; lanes { #address-cells = <1>; #size-cells = <0>; lane@0 { /*loopback;*/ reg = <0>; control-rate = <0>; /* full */ rx-start = <7 5>; rx-force = <1 1>; tx-coeff = <2 0 0 12 4>; /* c1 c2 cm att vreg */ }; lane@1 { /*loopback;*/ reg = <1>; control-rate = <0>; /* full */ rx-start = <7 5>; rx-force = <1 1>; tx-coeff = <2 0 0 12 4>; /* c1 c2 cm att vreg */ }; }; }; Then the 10gbe SerDes PHY can be used in the 10gbe switch node: netcpx: netcpx@2f00000 { ... netcp-devices { ... xgbe@2f00000 { ... syscon-subsys = <&xgbe_subsys>; syscon-pcsr = <&xgbe_pcsr>; phys = <&xgbe_serdes>; ... }; }; ... };