mirror of
https://github.com/torvalds/linux.git
synced 2024-12-21 18:42:44 +00:00
20b3f7d700
The documentation of skew values for the KSZ9021 PHY was misleading because the driver implementation followed the erroneous information given in the original KSZ9021 datasheet before it was corrected in revision 1.2 (Feb 2014). It is probably too late to correct the driver now because of the many existing device trees, so instead this just corrects the documentation to explain that what you actually get is not what you might think when looking at the device tree. Signed-off-by: James Byrne <james.byrne@origamienergy.com> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
136 lines
4.8 KiB
Plaintext
136 lines
4.8 KiB
Plaintext
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.
|
|
|
|
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:
|
|
|
|
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:
|
|
|
|
mdio {
|
|
phy0: ethernet-phy@0 {
|
|
rxc-skew-ps = <3000>;
|
|
rxdv-skew-ps = <0>;
|
|
txc-skew-ps = <3000>;
|
|
txen-skew-ps = <0>;
|
|
reg = <0>;
|
|
};
|
|
};
|
|
ethernet@70000 {
|
|
phy = <&phy0>;
|
|
phy-mode = "rgmii-id";
|
|
};
|