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.