keystone-srio.txt
11.3 KB
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
This document describes the device tree bindings associated with the KeyStone
Serial RapidIO driver support.
Required properties
-------------------
#address-cells
#size-cells: Should be '1' if the device has sub-nodes with 'reg' property.
reg: Address and length of the register set for the SRIO subsystem
on the SOC.
reg-names: Indicates the name of the various register ranges defined with
the "reg" property above. There are three mandatory ranges of
registers:
- RapidIO registers ("rio")
- boot configuration registers (for JTAGID and K1 SerDes
setup) ("boot_config")
- SerDes configuration registers ("serdes")
clocks: Clock IDs array as required by the controller.
clock-names: Names of clocks corresponding to IDs in the clock property.
compatible: Should be "ti,keystone-rapidio".
interrupts: The two IRQ definitions for:
- RIO special interrupts (doorbells, errors, port-writes in,
...)
- LSU completions
Optional properties
-------------------
dma-coherent: Indicates if DirectIO operations support hw cache-coherency.
On KeyStone platforms it is recommended to set this property
when running on ARM cores.
keystone2-serdes: Indicates that the driver needs to use KeyStone 2 SerDes
initialization. If not specified, it will be KeyStone 1
initialization instead.
baudrate: This the lane baudrate configuration number (from 0 to 3).
If not specified the baudrate configuration 3 will be used
(5 Gbps).
path-mode: This is the SerDes lanes to ports configuration number (from 0
to 4). If not specified the mode 0 will be used (4 ports in
1x).
port-register-timeout:
This is the delay in seconds for waiting the port registration
at startup. if not specified a default 30 seconds value will
be used.
ports: This is the bitfield of RapidIO port(s) to probe at startup.
If not specified, no port will be used.
ports-remote: Allows to explicitly specify the remote port number (of the
link partner) for each local port. There is one value per port
for the 4 ports.
If not specified, the remote ports will be detected at startup
using the peer Switch Port Information CAR register if
available (meaning that the link partner implements such
register).
The remote ports are needed for the software error recovery
process.
dev-id-size: RapidIO common transport system size:
0 - Small size, 8-bit deviceID fields, 256 devices.
1 - Large size, 16-bit deviceID fields, 65536 devices.
If not specified 0 (8-bit) value will be used.
lsu: Start and end indexes of the LSU range that will be used for
DirectIO transfers and maintenance requests. Using multiple
LSUs allows to allocate one for maintenance packets and
different LSUs for each DMA channels used for DirectI/O
transfers increasing the parallelism capabilities.
If not specified LSU 0 will be used for all kind of transfers.
num-dio-channels Number of virtual DMA channels available for DirectI/O
transfers. Note that one is always reserved for doorbells
purpose. Default is 8 if not specified.
rxu-map-range: Define the range (start and end values) of RXU mapping entries
that will be used for MP receive. Range must start from 0 and
end up to 63. If not specified the full range will be used by
Linux(0 to 63).
num-mboxes: Number of receive mailboxes used for MP. If not specified,
only one mailbox will be used.
pkt-forward: This allows to define the routing table for hardware packet
forwarding. There are 8 entries in the table. Each entry
starts with the lower DeviceID boundary, then the upper
DeviceID boundary and the output port to route packets whose
DestID falls within the described range.
For example, '0x3 0x3 1' will forward incoming packets with
DestID 0x3 to port 1.
All the 8 entries must be referenced with the 3 values.
SerDes optional properties
--------------------------
These properties are used to tune the KeyStone 2 SerDes hardware parameters and
coefficients. For more information please refer to KeyStone II Architecture
Serializer/Deserializer (SerDes) User Guide (SPRUHO3) available on www.ti.com.
serdes-1lsb: Allows to set the TX driver 1 lsb pre emphasis setting for
KeyStone 2 SerDes. There is one value per lane. Default value
is 0.
serdes-c1: Allows to override value of TX driver C1 coefficient for
KeyStone 2 SerDes. There is one value per lane. Default value
if not specified is 6 for 3.125Gbps and 4 for other baudrates.
serdes-c2: Allows to override value of TX driver C2 coefficient for
KeyStone 2 SerDes. There is one value per lane. Default value
is 0 if not specified.
serdes-cm: Allows to override value of TX driver CM coefficient for
KeyStone 2 SerDes. There is one value per lane. Default value
is 0.
serdes-att: Allows to set attenuator setting of TX driver for KeyStone 2
SerDes. There is one value per lane. Default value is 12 if
not specified.
serdes-vreg: Allows to set regulator voltage setting for TX driver for
KeyStone 2 SerDes. There is one value per lane. Default value
is 4 if not specified.
serdes-vdreg: Allows to set lane regulator output voltage setting for TX
driver for KeyStone 2. Default value is 1 (VNOM) if not
specified.
serdes-rx-att-start:
Allows to set attenuator start value of RX driver for Keystone
2 SerDes. There is one value per lane. Default value is 3.
serdes-rx-boost-start:
Allows to set attenuator start value of RX driver for Keystone
2 SerDes. There is one value per lane. Default value is 3.
serdes-rx-att: Allows to set attenuator static value of RX driver for
Keystone 2 SerDes. If set to -1, dynamic calibration is used
instead. There is one value per lane. Default value is -1.
serdes-rx-boost: Allows to set attenuator start value of RX driver for Keystone
2 SerDes. If set to -1, dynamic calibration is used instead.
There is one value per lane. Default value is -1.
Sub-nodes
---------
Each mailbox (according to num-mboxes) must be added as subnodes "mbox-%d" with
%d the mailbox number (from 0 to n).
This sub-node has the following properties:
rx-channel: The packet DMA channel associated to this receive mailbox.
This property is mandatory and must refer to a specified
'navigator-dma-names' DMA client resource like specified in
the Documentation/devicetree/bindings/soc/ti/
keystone-navigator-dma.txt file
rx-pool: This mandatory property defines the pool of descriptors that
will be used for the receive mailbox. The first parameter is
the size of descriptor, the second is the region Id where to
get descriptors for receive DMA.
rx-queue: This property defines the hw queue Id used for receive.
If not specified a QPEND queue will be allocated by the
kernel.
rx-queue-depth: This can be at present a maximum of 4 queues per packet DMA
channel. We can specify here the number of descriptors for
each queue.
If not specified only one queue of depth of 128 will be used.
rx-buffer-size: For each receive queue, we can specify the buffer size.
Default is 4096 bytes if not specified.
tx-channel: This is the packet DMA channel name associated with this
mailbox for transmit. This property is mandatory and works
like the rx-channel property.
tx-queue: This mandatory property defines the hw transmit queue Id.
This must be set in accordance to the Packet DMA channel
used in transmit. Check the KeyStone SRIO hw documentation
for more information.
tx-completion-queue:
This property defines the hw queue Id used for transmit
completion. If not specified a QPEND queue will be allocated
by the kernel.
tx-garbage-queue:
This property defines the hw queue Id used for transmit
errors. If not specified a QPEND queue will be allocated
by the kernel.
tx-queue-depth: Number of descriptors for the transmit queue. Default is 128
descriptors if not specified
stream-id: If specified, the mailbox will be mapped to the indicated
stream ID and packet type 9 will be used instead of packet
type 11.
Example
-------
knav_dmas: knav_dmas@0 {
...
dma_srio: dma_srio@0 {
reg = <0x2901000 0x020>,
<0x2901400 0x200>,
<0x2901800 0x200>,
<0x2901c00 0x200>,
<0x2902000 0x280>;
reg-names = "global", "txchan", "rxchan",
"txsched", "rxflow";
};
...
};
rapidio: rapidio@2900000 {
compatible = "ti,keystone-rapidio";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x2900000 0x40000 /* rio regs */
0x2620000 0x1000 /* boot config regs */
0x232c000 0x2000>; /* serdes config regs */
reg-names = "rio", "boot_config", "serdes";
clocks = <&clksrio>;
clock-names = "clk_srio";
dma-coherent;
ti,navigator-dmas = <&dma_srio 18>, /* phandle channel_id */
<&dma_srio 19>,
<&dma_srio 0>,
<&dma_srio 1>;
ti,navigator-dma-names = "riorx0", "riorx1", "riotx0", "riotx1";
keystone2-serdes;
baudrate = <3>; /* 5 Gbps */
path-mode = <4>; /* 1 port in 4x */
port-register-timeout = <30>; /* 30 seconds */
lsu = <0 0>; /* available LSU range (start end) */
num-dio-channels = <8>; /* number of DIO DMA channels */
ports = <0x1>; /* bitfield of port(s) to probe */
ports-remote = <0 1 2 3>; /* remote ports:
* local port 0 is connected to peer port 0,
* local port 1 is connected to peer port 1,
* ...
*/
dev-id-size = <0>; /* RapidIO common transport system
* size.
* 0 - Small size. 8-bit deviceID
* fields. 256 devices.
* 1 - Large size, 16-bit deviceID
* fields. 65536 devices.
*/
interrupts = <0 152 0xf01
0 153 0xf01>; /* RIO and LSU IRQs */
rxu-map-range = <0 15>; /* use only the 16 first RXU mapping entries */
num-mboxes = <2>;
mbox-0 {
rx-channel = "riorx0";
rx-pool = <128 15>; /* size region_id */
rx-queue-depth = <256 0 0 0>;
rx-buffer-size = <4096 0 0 0>;
rx-queue = <8714>;
/*stream-id = <0>;*/
tx-channel = "riotx0";
tx-pool = <128 15>;
tx-queue-depth = <256>;
tx-queue = <672>; /* hw transmit queue for channel/flow 0 */
tx-completion-queue = <8716>;
tx-garbage-queue = <8717>;
};
mbox-1 {
rx-channel = "riorx1";
rx-pool = <128 15>;
rx-queue-depth = <256 0 0 0>;
rx-buffer-size = <4096 0 0 0>;
rx-queue = <8715>;
/*stream-id = <1>;*/
tx-channel = "riotx1";
tx-pool = <128 15>;
tx-queue-depth = <256>;
tx-queue = <673>; /* hw transmit queue for channel/flow 1 */
tx-completion-queue = <8718>;
tx-garbage-queue = <8719>;
};
};