| Micrel KSZ9021/KSZ9031 Gigabit Ethernet PHY |
| |
| Some boards require special tuning values, particularly when it comes to |
| clock delays. You can specify clock delay values by adding |
| micrel-specific properties to an Ethernet OF device node. |
| |
| Note that these settings are applied after any phy-specific fixup from |
| phy_fixup_list (see phy_init_hw() from drivers/net/phy/phy_device.c), |
| and therefore may overwrite them. |
| |
| KSZ9021: |
| |
| All skew control options are specified in picoseconds. The minimum |
| value is 0, the maximum value is 1800, and it is incremented by 120ps |
| steps. |
| |
| Optional properties: |
| |
| - rxc-skew-ps : Skew control of RXC pad |
| - rxdv-skew-ps : Skew control of RX CTL pad |
| - txc-skew-ps : Skew control of TXC pad |
| - txen-skew-ps : Skew control of TX CTL pad |
| - rxd0-skew-ps : Skew control of RX data 0 pad |
| - rxd1-skew-ps : Skew control of RX data 1 pad |
| - rxd2-skew-ps : Skew control of RX data 2 pad |
| - rxd3-skew-ps : Skew control of RX data 3 pad |
| - txd0-skew-ps : Skew control of TX data 0 pad |
| - txd1-skew-ps : Skew control of TX data 1 pad |
| - txd2-skew-ps : Skew control of TX data 2 pad |
| - txd3-skew-ps : Skew control of TX data 3 pad |
| |
| KSZ9031: |
| |
| All skew control options are specified in picoseconds. The minimum |
| value is 0, and the maximum is property-dependent. The increment |
| step is 60ps. |
| |
| The KSZ9031 hardware supports a range of skew values from negative to |
| positive, where the specific range is property dependent. All values |
| specified in the devicetree are offset by the minimum value so they |
| can be represented as positive integers in the devicetree since it's |
| difficult to represent a negative number in the devictree. |
| |
| The following 5-bit values table apply to rxc-skew-ps and txc-skew-ps. |
| |
| Pad Skew Value Delay (ps) Devicetree Value |
| ------------------------------------------------------ |
| 0_0000 -900ps 0 |
| 0_0001 -840ps 60 |
| 0_0010 -780ps 120 |
| 0_0011 -720ps 180 |
| 0_0100 -660ps 240 |
| 0_0101 -600ps 300 |
| 0_0110 -540ps 360 |
| 0_0111 -480ps 420 |
| 0_1000 -420ps 480 |
| 0_1001 -360ps 540 |
| 0_1010 -300ps 600 |
| 0_1011 -240ps 660 |
| 0_1100 -180ps 720 |
| 0_1101 -120ps 780 |
| 0_1110 -60ps 840 |
| 0_1111 0ps 900 |
| 1_0000 60ps 960 |
| 1_0001 120ps 1020 |
| 1_0010 180ps 1080 |
| 1_0011 240ps 1140 |
| 1_0100 300ps 1200 |
| 1_0101 360ps 1260 |
| 1_0110 420ps 1320 |
| 1_0111 480ps 1380 |
| 1_1000 540ps 1440 |
| 1_1001 600ps 1500 |
| 1_1010 660ps 1560 |
| 1_1011 720ps 1620 |
| 1_1100 780ps 1680 |
| 1_1101 840ps 1740 |
| 1_1110 900ps 1800 |
| 1_1111 960ps 1860 |
| |
| The following 4-bit values table apply to the txdX-skew-ps, rxdX-skew-ps |
| data pads, and the rxdv-skew-ps, txen-skew-ps control pads. |
| |
| Pad Skew Value Delay (ps) Devicetree Value |
| ------------------------------------------------------ |
| 0000 -420ps 0 |
| 0001 -360ps 60 |
| 0010 -300ps 120 |
| 0011 -240ps 180 |
| 0100 -180ps 240 |
| 0101 -120ps 300 |
| 0110 -60ps 360 |
| 0111 0ps 420 |
| 1000 60ps 480 |
| 1001 120ps 540 |
| 1010 180ps 600 |
| 1011 240ps 660 |
| 1100 300ps 720 |
| 1101 360ps 780 |
| 1110 420ps 840 |
| 1111 480ps 900 |
| |
| Optional properties: |
| |
| Maximum value of 1860: |
| |
| - rxc-skew-ps : Skew control of RX clock pad |
| - txc-skew-ps : Skew control of TX clock pad |
| |
| Maximum value of 900: |
| |
| - rxdv-skew-ps : Skew control of RX CTL pad |
| - txen-skew-ps : Skew control of TX CTL pad |
| - rxd0-skew-ps : Skew control of RX data 0 pad |
| - rxd1-skew-ps : Skew control of RX data 1 pad |
| - rxd2-skew-ps : Skew control of RX data 2 pad |
| - rxd3-skew-ps : Skew control of RX data 3 pad |
| - txd0-skew-ps : Skew control of TX data 0 pad |
| - txd1-skew-ps : Skew control of TX data 1 pad |
| - txd2-skew-ps : Skew control of TX data 2 pad |
| - txd3-skew-ps : Skew control of TX data 3 pad |
| |
| Examples: |
| |
| /* Attach to an Ethernet device with autodetected PHY */ |
| &enet { |
| rxc-skew-ps = <1800>; |
| rxdv-skew-ps = <0>; |
| txc-skew-ps = <1800>; |
| txen-skew-ps = <0>; |
| status = "okay"; |
| }; |
| |
| /* Attach to an explicitly-specified PHY */ |
| mdio { |
| phy0: ethernet-phy@0 { |
| rxc-skew-ps = <1800>; |
| rxdv-skew-ps = <0>; |
| txc-skew-ps = <1800>; |
| txen-skew-ps = <0>; |
| reg = <0>; |
| }; |
| }; |
| ethernet@70000 { |
| status = "okay"; |
| phy = <&phy0>; |
| phy-mode = "rgmii-id"; |
| }; |
| |
| References |
| |
| Micrel ksz9021rl/rn Data Sheet, Revision 1.2. Dated 2/13/2014. |
| http://www.micrel.com/_PDF/Ethernet/datasheets/ksz9021rl-rn_ds.pdf |
| |
| Micrel ksz9031rnx Data Sheet, Revision 2.1. Dated 11/20/2014. |
| http://www.micrel.com/_PDF/Ethernet/datasheets/KSZ9031RNX.pdf |
| |
| Notes: |
| |
| Note that a previous version of the Micrel ksz9021rl/rn Data Sheet |
| was missing extended register 106 (transmit data pad skews), and |
| incorrectly specified the ps per step as 200ps/step instead of |
| 120ps/step. The latest update to this document reflects the latest |
| revision of the Micrel specification even though usage in the kernel |
| still reflects that incorrect document. |