no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
altera_adxcvr.h
Go to the documentation of this file.
1/***************************************************************************/
33#ifndef ALTERA_ADXCVR_H_
34#define ALTERA_ADXCVR_H_
35
36#include <stdint.h>
37#include <stdbool.h>
38
39/* XCVR Registers */
40
41#define XCVR_REG_ARBITRATION 0x000
42#define XCVR_ARBITRATION_MASK 0xFF
43#define XCVR_ARBITRATION_GET_AVMM 0x02
44#define XCVR_ARBITRATION_RELEASE_AVMM_CALIB 0x01
45#define XCVR_ARBITRATION_RELEASE_AVMM 0x03
46
47#define XCVR_REG_CALIB_ATX_PLL_EN 0x100
48#define XCVR_CALIB_ATX_PLL_EN_MASK 0x01
49#define XCVR_CALIB_ATX_PLL_EN 0x01
50
51#define XCVR_REG_CAPAB_ATX_PLL_STAT 0x280
52#define XCVR_CAPAB_ATX_PLL_CAL_BSY_MASK 0x02
53#define XCVR_CAPAB_ATX_PLL_CAL_DONE 0x00
54
55
56#define XCVR_REG_CALIB_PMA_EN 0x100
57#define XCVR_CALIB_TX_TERM_VOD_MASK 0x20
58#define XCVR_CALIB_TX_TERM_VOD_EN 0x20
59#define XCVR_CALIB_CMU_CDR_PLL_EN_MASK 0x02
60#define XCVR_CALIB_CMU_CDR_PLL_EN 0x02
61
62#define XCVR_REG_CAPAB_PMA 0x281
63#define XCVR_CAPAB_RX_CAL_BUSY_EN_MASK 0x20
64#define XCVR_CAPAB_RX_CAL_BUSY_EN 0x20
65#define XCVR_CAPAB_RX_CAL_BUSY_DIS 0x00
66#define XCVR_CAPAB_RX_CAL_BUSY_MASK 0x02
67#define XCVR_CAPAB_RX_CAL_DONE 0x00
68#define XCVR_CAPAB_TX_CAL_BUSY_EN_MASK 0x10
69#define XCVR_CAPAB_TX_CAL_BUSY_EN 0x10
70#define XCVR_CAPAB_TX_CAL_BUSY_DIS 0x00
71#define XCVR_CAPAB_TX_CAL_BUSY_MASK 0x01
72#define XCVR_CAPAB_TX_CAL_DONE 0x00
73
74#define XCVR_REG_RATE_SWITCH_FLAG 0x166
75#define XCVR_RATE_SWITCH_FLAG_MASK 0x80
76#define XCVR_RATE_SWITCH_FLAG_RATE_SWITCH 0x00
77#define XCVR_RATE_SWITCH_FLAG_NO_RATE_SWITCH 0x80
78
79struct adxcvr {
80 const char *name;
81 uint32_t base;
84 uint32_t adxcfg_base[4];
85 uint32_t atx_pll_base;
86 uint32_t reset_counter;
87 uint32_t lane_rate_khz;
90};
91
93 const char *name;
94 uint32_t base;
95 uint32_t adxcfg_base[4];
96 uint32_t atx_pll_base;
97 uint32_t lane_rate_khz;
99};
100
101int32_t adxcvr_init(struct adxcvr **ad_xcvr,
102 const struct adxcvr_init *init);
103int32_t adxcvr_remove(struct adxcvr *xcvr);
104void adxcvr_post_lane_rate_change(struct adxcvr *xcvr,
105 unsigned int lane_rate_khz);
106int32_t adxcvr_round_rate(struct adxcvr *xcvr, uint32_t rate_khz);
107int32_t adxcvr_set_rate(struct adxcvr *xcvr,
108 uint32_t rate_khz);
109uint32_t adxcvr_recalc_rate(struct adxcvr *xcvr);
110
111void adxcvr_pre_lane_rate_change(struct adxcvr *xcvr);
112void adxcvr_post_lane_rate_change(struct adxcvr *xcvr,
113 unsigned int lane_rate);
114
115void atx_pll_acquire_arbitration(struct adxcvr *xcvr);
116void atx_pll_release_arbitration(struct adxcvr *xcvr,
117 bool calibrate);
118int32_t atx_pll_write(struct adxcvr *xcvr, uint32_t reg, uint32_t val);
119int32_t atx_pll_read(struct adxcvr *xcvr, uint32_t reg, uint32_t *val);
120void atx_pll_update(struct adxcvr *xcvr, uint32_t reg,
121 uint32_t mask, uint32_t val);
122int32_t atx_pll_calibration_check(struct adxcvr *xcvr);
123int32_t xcvr_calib_tx(struct adxcvr *xcvr);
124
125void adxcfg_acquire_arbitration(struct adxcvr *xcvr,
126 uint32_t lane);
127void adxcfg_release_arbitration(struct adxcvr *xcvr,
128 uint32_t lane, bool calibrate);
129int32_t adxcfg_write(struct adxcvr *xcvr, uint32_t lane, uint32_t reg,
130 uint32_t val);
131int32_t adxcfg_read(struct adxcvr *xcvr, uint32_t lane,
132 uint32_t reg, uint32_t *val);
133void adxcfg_update(struct adxcvr *xcvr, uint32_t lane,
134 uint32_t reg, uint32_t mask, uint32_t val);
135int32_t adxcfg_calibration_check(struct adxcvr *xcvr, uint32_t lane,
136 bool tx);
137#endif
138
int32_t adxcfg_read(struct adxcvr *xcvr, uint32_t lane, uint32_t reg, uint32_t *val)
adxcfg_read
Definition altera_adxcvr.c:193
void atx_pll_release_arbitration(struct adxcvr *xcvr, bool calibrate)
atx_pll_release_arbitration
Definition altera_adxcvr.c:173
void adxcfg_release_arbitration(struct adxcvr *xcvr, uint32_t lane, bool calibrate)
adxcfg_release_arbitration
Definition altera_adxcvr.c:228
void adxcfg_acquire_arbitration(struct adxcvr *xcvr, uint32_t lane)
adxcfg_acquire_arbitration
Definition altera_adxcvr.c:218
int32_t adxcvr_init(struct adxcvr **ad_xcvr, const struct adxcvr_init *init)
adxcvr_init
Definition altera_adxcvr.c:427
int32_t adxcvr_set_rate(struct adxcvr *xcvr, uint32_t rate_khz)
adxcvr_init
Definition altera_adxcvr.c:404
int32_t adxcfg_write(struct adxcvr *xcvr, uint32_t lane, uint32_t reg, uint32_t val)
adxcfg_write
Definition altera_adxcvr.c:182
int32_t adxcfg_calibration_check(struct adxcvr *xcvr, uint32_t lane, bool tx)
adxcfg_calibration_check
Definition altera_adxcvr.c:264
int32_t adxcvr_remove(struct adxcvr *xcvr)
adxcvr_remove
Definition altera_adxcvr.c:478
void atx_pll_update(struct adxcvr *xcvr, uint32_t reg, uint32_t mask, uint32_t val)
atx_pll_update
Definition altera_adxcvr.c:150
int32_t adxcvr_round_rate(struct adxcvr *xcvr, uint32_t rate_khz)
adxcvr_round_rate
Definition altera_adxcvr.c:393
void atx_pll_acquire_arbitration(struct adxcvr *xcvr)
atx_pll_acquire_arbitration
Definition altera_adxcvr.c:164
void adxcfg_update(struct adxcvr *xcvr, uint32_t lane, uint32_t reg, uint32_t mask, uint32_t val)
adxcfg_update
Definition altera_adxcvr.c:204
int32_t atx_pll_write(struct adxcvr *xcvr, uint32_t reg, uint32_t val)
atx_pll_write
Definition altera_adxcvr.c:130
int32_t atx_pll_read(struct adxcvr *xcvr, uint32_t reg, uint32_t *val)
atx_pll_read
Definition altera_adxcvr.c:140
void adxcvr_post_lane_rate_change(struct adxcvr *xcvr, unsigned int lane_rate_khz)
adxcvr_post_lane_rate_change
Definition altera_adxcvr.c:382
int32_t atx_pll_calibration_check(struct adxcvr *xcvr)
atx_pll_calibration_check
Definition altera_adxcvr.c:237
uint32_t adxcvr_recalc_rate(struct adxcvr *xcvr)
adxcvr_recalc_rate
Definition altera_adxcvr.c:416
void adxcvr_pre_lane_rate_change(struct adxcvr *xcvr)
adxcvr_pre_lane_rate_change
Definition altera_adxcvr.c:334
int32_t xcvr_calib_tx(struct adxcvr *xcvr)
xcvr_calib_tx
Definition altera_adxcvr.c:301
Definition altera_adxcvr.h:92
uint32_t lane_rate_khz
Definition altera_adxcvr.h:97
const char * name
Definition altera_adxcvr.h:93
uint32_t adxcfg_base[4]
Definition altera_adxcvr.h:95
uint32_t base
Definition altera_adxcvr.h:94
uint32_t parent_rate_khz
Definition altera_adxcvr.h:98
uint32_t atx_pll_base
Definition altera_adxcvr.h:96
ADI JESD204B/C AXI_ADXCVR Highspeed Transceiver Device structure.
Definition altera_adxcvr.h:79
const char * name
Definition altera_adxcvr.h:80
uint32_t reset_counter
Definition altera_adxcvr.h:86
bool is_transmit
Definition altera_adxcvr.h:82
uint32_t lane_rate_khz
Definition altera_adxcvr.h:87
uint32_t base
Definition altera_adxcvr.h:81
uint32_t atx_pll_base
Definition altera_adxcvr.h:85
bool initial_recalc
Definition altera_adxcvr.h:89
uint32_t lanes_per_link
Definition altera_adxcvr.h:83
uint32_t parent_rate_khz
Definition altera_adxcvr.h:88
uint32_t adxcfg_base[4]
Definition altera_adxcvr.h:84