Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  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
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
/*-
*******************************************************************************
Copyright (C) 2015 Annapurna Labs Ltd.

This file may be licensed under the terms of the Annapurna Labs Commercial
License Agreement.

Alternatively, this file can be distributed under the terms of the GNU General
Public License V2 as published by the Free Software Foundation and can be
found at http://www.gnu.org/licenses/gpl-2.0.html

Alternatively, redistribution and use in source and binary forms, with or
without modification, are permitted provided that the following conditions are
met:

    *     Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.

    *     Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*******************************************************************************/

/**
 *  @{
 * @file   al_hal_serdes_regs.h
 *
 * @brief ... registers
 *
 */

#ifndef __AL_HAL_SERDES_REGS_H__
#define __AL_HAL_SERDES_REGS_H__

#include "al_hal_plat_types.h"

#ifdef __cplusplus
extern "C" {
#endif
/*
* Unit Registers
*/

struct serdes_gen {
	/* [0x0] SerDes Registers Version */
	uint32_t version;
	uint32_t rsrvd_0[3];
	/* [0x10] SerDes register file address */
	uint32_t reg_addr;
	/* [0x14] SerDes register file data */
	uint32_t reg_data;
	uint32_t rsrvd_1[2];
	/* [0x20] SerDes control */
	uint32_t ictl_multi_bist;
	/* [0x24] SerDes control */
	uint32_t ictl_pcs;
	/* [0x28] SerDes control */
	uint32_t ictl_pma;
	uint32_t rsrvd_2;
	/* [0x30] SerDes control */
	uint32_t ipd_multi_synth;
	/* [0x34] SerDes control */
	uint32_t irst;
	/* [0x38] SerDes control */
	uint32_t octl_multi_synthready;
	/* [0x3c] SerDes control */
	uint32_t octl_multi_synthstatus;
	/* [0x40] SerDes control */
	uint32_t clk_out;
	uint32_t rsrvd[47];
};
struct serdes_lane {
	uint32_t rsrvd1[4];
	/* [0x10] SerDes status */
	uint32_t octl_pma;
	/* [0x14] SerDes control */
	uint32_t ictl_multi_andme;
	/* [0x18] SerDes control */
	uint32_t ictl_multi_lb;
	/* [0x1c] SerDes control */
	uint32_t ictl_multi_rxbist;
	/* [0x20] SerDes control */
	uint32_t ictl_multi_txbist;
	/* [0x24] SerDes control */
	uint32_t ictl_multi;
	/* [0x28] SerDes control */
	uint32_t ictl_multi_rxeq;
	/* [0x2c] SerDes control */
	uint32_t ictl_multi_rxeq_l_low;
	/* [0x30] SerDes control */
	uint32_t ictl_multi_rxeq_l_high;
	/* [0x34] SerDes control */
	uint32_t ictl_multi_rxeyediag;
	/* [0x38] SerDes control */
	uint32_t ictl_multi_txdeemph;
	/* [0x3c] SerDes control */
	uint32_t ictl_multi_txmargin;
	/* [0x40] SerDes control */
	uint32_t ictl_multi_txswing;
	/* [0x44] SerDes control */
	uint32_t idat_multi;
	/* [0x48] SerDes control */
	uint32_t ipd_multi;
	/* [0x4c] SerDes control */
	uint32_t octl_multi_rxbist;
	/* [0x50] SerDes control */
	uint32_t octl_multi;
	/* [0x54] SerDes control */
	uint32_t octl_multi_rxeyediag;
	/* [0x58] SerDes control */
	uint32_t odat_multi_rxbist;
	/* [0x5c] SerDes control */
	uint32_t odat_multi_rxeq;
	/* [0x60] SerDes control */
	uint32_t multi_rx_dvalid;
	/* [0x64] SerDes control */
	uint32_t reserved;
	uint32_t rsrvd[6];
};

struct al_serdes_regs {
	uint32_t rsrvd_0[64];
	struct serdes_gen gen;                               /* [0x100] */
	struct serdes_lane lane[4];                          /* [0x200] */
};


/*
* Registers Fields
*/


/**** version register ****/
/*  Revision number (Minor) */
#define SERDES_GEN_VERSION_RELEASE_NUM_MINOR_MASK 0x000000FF
#define SERDES_GEN_VERSION_RELEASE_NUM_MINOR_SHIFT 0
/*  Revision number (Major) */
#define SERDES_GEN_VERSION_RELEASE_NUM_MAJOR_MASK 0x0000FF00
#define SERDES_GEN_VERSION_RELEASE_NUM_MAJOR_SHIFT 8
/*  Date of release */
#define SERDES_GEN_VERSION_DATE_DAY_MASK 0x001F0000
#define SERDES_GEN_VERSION_DATE_DAY_SHIFT 16
/*  Month of release */
#define SERDES_GEN_VERSION_DATA_MONTH_MASK 0x01E00000
#define SERDES_GEN_VERSION_DATA_MONTH_SHIFT 21
/* Year of release (starting from 2000) */
#define SERDES_GEN_VERSION_DATE_YEAR_MASK 0x3E000000
#define SERDES_GEN_VERSION_DATE_YEAR_SHIFT 25
/*  Reserved */
#define SERDES_GEN_VERSION_RESERVED_MASK 0xC0000000
#define SERDES_GEN_VERSION_RESERVED_SHIFT 30

/**** reg_addr register ****/
/* Address value */
#define SERDES_GEN_REG_ADDR_VAL_MASK     0x0000FFFF
#define SERDES_GEN_REG_ADDR_VAL_SHIFT    0

/**** reg_data register ****/
/* Data value */
#define SERDES_GEN_REG_DATA_VAL_MASK     0x000000FF
#define SERDES_GEN_REG_DATA_VAL_SHIFT    0

/**** ICTL_MULTI_BIST register ****/

#define SERDES_GEN_ICTL_MULTI_BIST_MODESEL_NT_MASK 0x00000007
#define SERDES_GEN_ICTL_MULTI_BIST_MODESEL_NT_SHIFT 0

/**** ICTL_PCS register ****/

#define SERDES_GEN_ICTL_PCS_EN_NT        (1 << 0)

/**** ICTL_PMA register ****/

#define SERDES_GEN_ICTL_PMA_REF_SEL_NT_MASK 0x00000007
#define SERDES_GEN_ICTL_PMA_REF_SEL_NT_SHIFT 0

#define SERDES_GEN_ICTL_PMA_REF_SEL_NT_REF \
	(0 << (SERDES_GEN_ICTL_PMA_REF_SEL_NT_SHIFT))
#define SERDES_GEN_ICTL_PMA_REF_SEL_NT_R2L \
	(3 << (SERDES_GEN_ICTL_PMA_REF_SEL_NT_SHIFT))
#define SERDES_GEN_ICTL_PMA_REF_SEL_NT_L2R \
	(4 << (SERDES_GEN_ICTL_PMA_REF_SEL_NT_SHIFT))

#define SERDES_GEN_ICTL_PMA_REFBUSRIGHT2LEFT_MODE_NT_MASK 0x00000070
#define SERDES_GEN_ICTL_PMA_REFBUSRIGHT2LEFT_MODE_NT_SHIFT 4

#define SERDES_GEN_ICTL_PMA_REFBUSRIGHT2LEFT_MODE_NT_0 \
	(0 << (SERDES_GEN_ICTL_PMA_REFBUSRIGHT2LEFT_MODE_NT_SHIFT))
#define SERDES_GEN_ICTL_PMA_REFBUSRIGHT2LEFT_MODE_NT_REF \
	(2 << (SERDES_GEN_ICTL_PMA_REFBUSRIGHT2LEFT_MODE_NT_SHIFT))
#define SERDES_GEN_ICTL_PMA_REFBUSRIGHT2LEFT_MODE_NT_R2L \
	(3 << (SERDES_GEN_ICTL_PMA_REFBUSRIGHT2LEFT_MODE_NT_SHIFT))

#define SERDES_GEN_ICTL_PMA_REFBUSLEFT2RIGHT_MODE_NT_MASK 0x00000700
#define SERDES_GEN_ICTL_PMA_REFBUSLEFT2RIGHT_MODE_NT_SHIFT 8

#define SERDES_GEN_ICTL_PMA_REFBUSLEFT2RIGHT_MODE_NT_0 \
	(0 << (SERDES_GEN_ICTL_PMA_REFBUSLEFT2RIGHT_MODE_NT_SHIFT))
#define SERDES_GEN_ICTL_PMA_REFBUSLEFT2RIGHT_MODE_NT_REF \
	(2 << (SERDES_GEN_ICTL_PMA_REFBUSLEFT2RIGHT_MODE_NT_SHIFT))
#define SERDES_GEN_ICTL_PMA_REFBUSLEFT2RIGHT_MODE_NT_L2R \
	(3 << (SERDES_GEN_ICTL_PMA_REFBUSLEFT2RIGHT_MODE_NT_SHIFT))

#define SERDES_GEN_ICTL_PMA_TXENABLE_A_SRC		(1 << 11)
#define SERDES_GEN_ICTL_PMA_TXENABLE_A_SRC_THIS		(0 << 11)
#define SERDES_GEN_ICTL_PMA_TXENABLE_A_SRC_MASTER	(1 << 11)

#define SERDES_GEN_ICTL_PMA_TXENABLE_A   (1 << 12)

#define SERDES_GEN_ICTL_PMA_SYNTHCKBYPASSEN_NT (1 << 13)

/**** IPD_MULTI_SYNTH register ****/

#define SERDES_GEN_IPD_MULTI_SYNTH_B     (1 << 0)

/**** IRST register ****/

#define SERDES_GEN_IRST_PIPE_RST_L3_B_A  (1 << 0)

#define SERDES_GEN_IRST_PIPE_RST_L2_B_A  (1 << 1)

#define SERDES_GEN_IRST_PIPE_RST_L1_B_A  (1 << 2)

#define SERDES_GEN_IRST_PIPE_RST_L0_B_A  (1 << 3)

#define SERDES_GEN_IRST_MULTI_HARD_TXRX_L3_B_A (1 << 4)

#define SERDES_GEN_IRST_MULTI_HARD_TXRX_L2_B_A (1 << 5)

#define SERDES_GEN_IRST_MULTI_HARD_TXRX_L1_B_A (1 << 6)

#define SERDES_GEN_IRST_MULTI_HARD_TXRX_L0_B_A (1 << 7)

#define SERDES_GEN_IRST_MULTI_HARD_SYNTH_B_A (1 << 8)

#define SERDES_GEN_IRST_POR_B_A          (1 << 12)

#define SERDES_GEN_IRST_PIPE_RST_L3_B_A_SEL (1 << 16)

#define SERDES_GEN_IRST_PIPE_RST_L2_B_A_SEL (1 << 17)

#define SERDES_GEN_IRST_PIPE_RST_L1_B_A_SEL (1 << 18)

#define SERDES_GEN_IRST_PIPE_RST_L0_B_A_SEL (1 << 19)

#define SERDES_GEN_IRST_MULTI_HARD_TXRX_L3_B_A_SEL (1 << 20)

#define SERDES_GEN_IRST_MULTI_HARD_TXRX_L2_B_A_SEL (1 << 21)

#define SERDES_GEN_IRST_MULTI_HARD_TXRX_L1_B_A_SEL (1 << 22)

#define SERDES_GEN_IRST_MULTI_HARD_TXRX_L0_B_A_SEL (1 << 23)

/**** OCTL_MULTI_SYNTHREADY register ****/

#define SERDES_GEN_OCTL_MULTI_SYNTHREADY_A (1 << 0)

/**** OCTL_MULTI_SYNTHSTATUS register ****/

#define SERDES_GEN_OCTL_MULTI_SYNTHSTATUS_A (1 << 0)

/**** clk_out register ****/

#define SERDES_GEN_CLK_OUT_SEL_MASK      0x0000003F
#define SERDES_GEN_CLK_OUT_SEL_SHIFT     0

/**** OCTL_PMA register ****/

#define SERDES_LANE_OCTL_PMA_TXSTATUS_L_A (1 << 0)

/**** ICTL_MULTI_ANDME register ****/

#define SERDES_LANE_ICTL_MULTI_ANDME_EN_L_A (1 << 0)

#define SERDES_LANE_ICTL_MULTI_ANDME_EN_L_A_SEL (1 << 1)

/**** ICTL_MULTI_LB register ****/

#define SERDES_LANE_ICTL_MULTI_LB_TX2RXIOTIMEDEN_L_NT (1 << 0)

#define SERDES_LANE_ICTL_MULTI_LB_TX2RXBUFTIMEDEN_L_NT (1 << 1)

#define SERDES_LANE_ICTL_MULTI_LB_RX2TXUNTIMEDEN_L_NT (1 << 2)

#define SERDES_LANE_ICTL_MULTI_LB_PARRX2TXTIMEDEN_L_NT (1 << 3)

#define SERDES_LANE_ICTL_MULTI_LB_CDRCLK2TXEN_L_NT (1 << 4)

#define SERDES_LANE_ICTL_MULTI_LB_TX2RXBUFTIMEDEN_L_NT_SEL (1 << 8)

#define SERDES_LANE_ICTL_MULTI_LB_RX2TXUNTIMEDEN_L_NT_SEL (1 << 9)

/**** ICTL_MULTI_RXBIST register ****/

#define SERDES_LANE_ICTL_MULTI_RXBIST_EN_L_A (1 << 0)

/**** ICTL_MULTI_TXBIST register ****/

#define SERDES_LANE_ICTL_MULTI_TXBIST_EN_L_A (1 << 0)

/**** ICTL_MULTI register ****/

#define SERDES_LANE_ICTL_MULTI_PSTATE_L_MASK 0x00000003
#define SERDES_LANE_ICTL_MULTI_PSTATE_L_SHIFT 0

#define SERDES_LANE_ICTL_MULTI_PSTATE_L_SEL (1 << 2)

#define SERDES_LANE_ICTL_MULTI_RXDATAWIDTH_L_MASK 0x00000070
#define SERDES_LANE_ICTL_MULTI_RXDATAWIDTH_L_SHIFT 4

#define SERDES_LANE_ICTL_MULTI_RXOVRCDRLOCK2DATAEN_L_A (1 << 8)

#define SERDES_LANE_ICTL_MULTI_RXOVRCDRLOCK2DATA_L_A (1 << 9)

#define SERDES_LANE_ICTL_MULTI_TXBEACON_L_A (1 << 12)

#define SERDES_LANE_ICTL_MULTI_TXDETECTRXREQ_L_A (1 << 13)

#define SERDES_LANE_ICTL_MULTI_RXRATE_L_MASK 0x00070000
#define SERDES_LANE_ICTL_MULTI_RXRATE_L_SHIFT 16

#define SERDES_LANE_ICTL_MULTI_RXRATE_L_SEL (1 << 19)

#define SERDES_LANE_ICTL_MULTI_TXRATE_L_MASK 0x00700000
#define SERDES_LANE_ICTL_MULTI_TXRATE_L_SHIFT 20

#define SERDES_LANE_ICTL_MULTI_TXRATE_L_SEL (1 << 23)

#define SERDES_LANE_ICTL_MULTI_TXAMP_L_MASK 0x07000000
#define SERDES_LANE_ICTL_MULTI_TXAMP_L_SHIFT 24

#define SERDES_LANE_ICTL_MULTI_TXAMP_EN_L (1 << 27)

#define SERDES_LANE_ICTL_MULTI_TXDATAWIDTH_L_MASK 0x70000000
#define SERDES_LANE_ICTL_MULTI_TXDATAWIDTH_L_SHIFT 28

/**** ICTL_MULTI_RXEQ register ****/

#define SERDES_LANE_ICTL_MULTI_RXEQ_EN_L (1 << 0)

#define SERDES_LANE_ICTL_MULTI_RXEQ_START_L_A (1 << 1)

#define SERDES_LANE_ICTL_MULTI_RXEQ_PRECAL_CODE_SEL_MASK 0x00000070
#define SERDES_LANE_ICTL_MULTI_RXEQ_PRECAL_CODE_SEL_SHIFT 4

/**** ICTL_MULTI_RXEQ_L_high register ****/

#define SERDES_LANE_ICTL_MULTI_RXEQ_L_HIGH_VAL (1 << 0)

/**** ICTL_MULTI_RXEYEDIAG register ****/

#define SERDES_LANE_ICTL_MULTI_RXEYEDIAG_START_L_A (1 << 0)

/**** ICTL_MULTI_TXDEEMPH register ****/

#define SERDES_LANE_ICTL_MULTI_TXDEEMPH_L_MASK 0x0003FFFF
#define SERDES_LANE_ICTL_MULTI_TXDEEMPH_L_SHIFT 0

#define SERDES_LANE_ICTL_MULTI_TXDEEMPH_C_ZERO_MASK	0x7c0
#define SERDES_LANE_ICTL_MULTI_TXDEEMPH_C_ZERO_SHIFT	6
#define SERDES_LANE_ICTL_MULTI_TXDEEMPH_C_PLUS_MASK	0xf000
#define SERDES_LANE_ICTL_MULTI_TXDEEMPH_C_PLUS_SHIFT	12
#define SERDES_LANE_ICTL_MULTI_TXDEEMPH_C_MINUS_MASK	0x7
#define SERDES_LANE_ICTL_MULTI_TXDEEMPH_C_MINUS_SHIFT	0

/**** ICTL_MULTI_TXMARGIN register ****/

#define SERDES_LANE_ICTL_MULTI_TXMARGIN_L_MASK 0x00000007
#define SERDES_LANE_ICTL_MULTI_TXMARGIN_L_SHIFT 0

/**** ICTL_MULTI_TXSWING register ****/

#define SERDES_LANE_ICTL_MULTI_TXSWING_L (1 << 0)

/**** IDAT_MULTI register ****/

#define SERDES_LANE_IDAT_MULTI_TXELECIDLE_L_MASK 0x0000000F
#define SERDES_LANE_IDAT_MULTI_TXELECIDLE_L_SHIFT 0

#define SERDES_LANE_IDAT_MULTI_TXELECIDLE_L_SEL (1 << 4)

/**** IPD_MULTI register ****/

#define SERDES_LANE_IPD_MULTI_TX_L_B     (1 << 0)

#define SERDES_LANE_IPD_MULTI_RX_L_B     (1 << 1)

/**** OCTL_MULTI_RXBIST register ****/

#define SERDES_LANE_OCTL_MULTI_RXBIST_DONE_L_A (1 << 0)

#define SERDES_LANE_OCTL_MULTI_RXBIST_RXLOCKED_L_A (1 << 1)

/**** OCTL_MULTI register ****/

#define SERDES_LANE_OCTL_MULTI_RXCDRLOCK2DATA_L_A (1 << 0)

#define SERDES_LANE_OCTL_MULTI_RXEQ_DONE_L_A (1 << 1)

#define SERDES_LANE_OCTL_MULTI_RXREADY_L_A (1 << 2)

#define SERDES_LANE_OCTL_MULTI_RXSTATUS_L_A (1 << 3)

#define SERDES_LANE_OCTL_MULTI_TXREADY_L_A (1 << 4)

#define SERDES_LANE_OCTL_MULTI_TXDETECTRXSTAT_L_A (1 << 5)

#define SERDES_LANE_OCTL_MULTI_TXDETECTRXACK_L_A (1 << 6)

#define SERDES_LANE_OCTL_MULTI_RXSIGNALDETECT_L_A (1 << 7)

/**** OCTL_MULTI_RXEYEDIAG register ****/

#define SERDES_LANE_OCTL_MULTI_RXEYEDIAG_STAT_L_A_MASK 0x00003FFF
#define SERDES_LANE_OCTL_MULTI_RXEYEDIAG_STAT_L_A_SHIFT 0

#define SERDES_LANE_OCTL_MULTI_RXEYEDIAG_DONE_L_A (1 << 16)

#define SERDES_LANE_OCTL_MULTI_RXEYEDIAG_ERR_L_A (1 << 17)

/**** ODAT_MULTI_RXBIST register ****/

#define SERDES_LANE_ODAT_MULTI_RXBIST_ERRCOUNT_L_A_MASK 0x0000FFFF
#define SERDES_LANE_ODAT_MULTI_RXBIST_ERRCOUNT_L_A_SHIFT 0

#define SERDES_LANE_ODAT_MULTI_RXBIST_ERRCOUNT_OVERFLOW_L_A (1 << 16)

/**** ODAT_MULTI_RXEQ register ****/

#define SERDES_LANE_ODAT_MULTI_RXEQ_BEST_EYE_VAL_L_A_MASK 0x00003FFF
#define SERDES_LANE_ODAT_MULTI_RXEQ_BEST_EYE_VAL_L_A_SHIFT 0

/**** MULTI_RX_DVALID register ****/

#define SERDES_LANE_MULTI_RX_DVALID_MASK_CDR_LOCK (1 << 0)

#define SERDES_LANE_MULTI_RX_DVALID_MASK_SIGNALDETECT (1 << 1)

#define SERDES_LANE_MULTI_RX_DVALID_MASK_TX_READY (1 << 2)

#define SERDES_LANE_MULTI_RX_DVALID_MASK_RX_READY (1 << 3)

#define SERDES_LANE_MULTI_RX_DVALID_MASK_SYNT_READY (1 << 4)

#define SERDES_LANE_MULTI_RX_DVALID_MASK_RX_ELECIDLE (1 << 5)

#define SERDES_LANE_MULTI_RX_DVALID_MUX_SEL_MASK 0x00FF0000
#define SERDES_LANE_MULTI_RX_DVALID_MUX_SEL_SHIFT 16

#define SERDES_LANE_MULTI_RX_DVALID_PS_00_SEL (1 << 24)

#define SERDES_LANE_MULTI_RX_DVALID_PS_00_VAL (1 << 25)

#define SERDES_LANE_MULTI_RX_DVALID_PS_01_SEL (1 << 26)

#define SERDES_LANE_MULTI_RX_DVALID_PS_01_VAL (1 << 27)

#define SERDES_LANE_MULTI_RX_DVALID_PS_10_SEL (1 << 28)

#define SERDES_LANE_MULTI_RX_DVALID_PS_10_VAL (1 << 29)

#define SERDES_LANE_MULTI_RX_DVALID_PS_11_SEL (1 << 30)

#define SERDES_LANE_MULTI_RX_DVALID_PS_11_VAL (1 << 31)

/**** reserved register ****/

#define SERDES_LANE_RESERVED_OUT_MASK    0x000000FF
#define SERDES_LANE_RESERVED_OUT_SHIFT   0

#define SERDES_LANE_RESERVED_IN_MASK     0x00FF0000
#define SERDES_LANE_RESERVED_IN_SHIFT    16

#ifdef __cplusplus
}
#endif

#endif /* __AL_HAL_serdes_REGS_H__ */

/** @} end of ... group */