hc
2023-10-25 6c2073b7aa40e29d0eca7d571dd7bc590c7ecaa7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
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.