| Micrel KSZ9021/KSZ9031/KSZ9131 Gigabit Ethernet PHY |
| |
| Some boards require special tuning values, particularly when it comes |
| to clock delays. You can specify clock delay values in the PHY OF |
| device node. Deprecated, but still supported, these properties can |
| also be added 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 3000, and it can be specified in 200ps |
| steps, *but* these values are in not fact what you get because this chip's |
| skew values actually increase in 120ps steps, starting from -840ps. The |
| incorrect values came from an error in the original KSZ9021 datasheet |
| before it was corrected in revision 1.2 (Feb 2014), but it is too late to |
| change the driver now because of the many existing device trees that have |
| been created using values that go up in increments of 200. |
| |
| The following table shows the actual skew delay you will get for each of the |
| possible devicetree values, and the number that will be programmed into the |
| corresponding pad skew register: |
| |
| Device Tree Value Delay Pad Skew Register Value |
| ----------------------------------------------------- |
| 0 -840ps 0000 |
| 200 -720ps 0001 |
| 400 -600ps 0010 |
| 600 -480ps 0011 |
| 800 -360ps 0100 |
| 1000 -240ps 0101 |
| 1200 -120ps 0110 |
| 1400 0ps 0111 |
| 1600 120ps 1000 |
| 1800 240ps 1001 |
| 2000 360ps 1010 |
| 2200 480ps 1011 |
| 2400 600ps 1100 |
| 2600 720ps 1101 |
| 2800 840ps 1110 |
| 3000 960ps 1111 |
| |
| 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 default value is the neutral setting, so setting |
| rxc-skew-ps=<0> actually results in -900 picoseconds adjustment. |
| |
| 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, default value 900: |
| |
| - rxc-skew-ps : Skew control of RX clock pad |
| - txc-skew-ps : Skew control of TX clock pad |
| |
| Maximum value of 900, default value 420: |
| |
| - 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 |
| |
| - micrel,force-master: |
| Boolean, force phy to master mode. Only set this option if the phy |
| reference clock provided at CLK125_NDO pin is used as MAC reference |
| clock because the clock jitter in slave mode is to high (errata#2). |
| Attention: The link partner must be configurable as slave otherwise |
| no link will be established. |
| |
| KSZ9131: |
| LAN8841: |
| |
| All skew control options are specified in picoseconds. The increment |
| step is 100ps. Unlike KSZ9031, the values represent picoseccond delays. |
| A negative value can be assigned as rxc-skew-psec = <(-100)>;. |
| |
| Optional properties: |
| |
| Range of the value -700 to 2400, default value 0: |
| |
| - rxc-skew-psec : Skew control of RX clock pad |
| - txc-skew-psec : Skew control of TX clock pad |
| |
| Range of the value -700 to 800, default value 0: |
| |
| - rxdv-skew-psec : Skew control of RX CTL pad |
| - txen-skew-psec : Skew control of TX CTL pad |
| - rxd0-skew-psec : Skew control of RX data 0 pad |
| - rxd1-skew-psec : Skew control of RX data 1 pad |
| - rxd2-skew-psec : Skew control of RX data 2 pad |
| - rxd3-skew-psec : Skew control of RX data 3 pad |
| - txd0-skew-psec : Skew control of TX data 0 pad |
| - txd1-skew-psec : Skew control of TX data 1 pad |
| - txd2-skew-psec : Skew control of TX data 2 pad |
| - txd3-skew-psec : 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 { |
| 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. |