no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
xilinx_transceiver.h
Go to the documentation of this file.
1/***************************************************************************/
34#ifndef XILINX_TRANSCEIVER_H_
35#define XILINX_TRANSCEIVER_H_
36
37#include <stdint.h>
38#include <stdbool.h>
39
40#define AXI_PCORE_VER(major, minor, letter) ((major << 16) | (minor << 8) | letter)
41#define AXI_PCORE_VER_MAJOR(version) (((version) >> 16) & 0xff)
42#define AXI_PCORE_VER_MINOR(version) ((version >> 8) & 0xff)
43#define AXI_PCORE_VER_LETTER(version) (version & 0xff)
44
45#define AXI_REG_VERSION 0x0000
46#define AXI_VERSION(x) (((x) & 0xffffffff) << 0)
47#define AXI_VERSION_IS(x, y, z) ((x) << 16 | (y) << 8 | (z))
48#define AXI_VERSION_MAJOR(x) ((x) >> 16)
49
50#define AXI_REG_FPGA_INFO 0x001C
51#define AXI_REG_FPGA_VOLTAGE 0x0140
52
53#define AXI_INFO_FPGA_TECH(info) ((info) >> 24)
54#define AXI_INFO_FPGA_FAMILY(info) (((info) >> 16) & 0xff)
55#define AXI_INFO_FPGA_SPEED_GRADE(info) (((info) >> 8) & 0xff)
56#define AXI_INFO_FPGA_DEV_PACKAGE(info) ((info) & 0xff)
57#define AXI_INFO_FPGA_VOLTAGE(val) ((val) & 0xffff)
58
69
80
90
101
113
130
155
163 uint32_t encoding;
165 uint32_t version;
170 uint32_t voltage;
171
172 // CPLL / QPLL nominal operating ranges
173 uint32_t vco0_min; // kHz
174 uint32_t vco0_max; // kHz
175 uint32_t vco1_min; // kHz
176 uint32_t vco1_max; // kHz
177};
178
180 int (*write)(struct adxcvr *xcvr, unsigned int drp_port,
181 unsigned int reg, unsigned int val);
182 int (*read)(struct adxcvr *xcvr, unsigned int drp_port,
183 unsigned int reg, unsigned int *val);
184};
185
226struct clk_ops {
227 int (*enable)(struct adxcvr *xcvr);
228 int (*disable)(struct adxcvr *xcvr);
229 unsigned long (*recalc_rate)(struct adxcvr *xcvr,
230 unsigned long parent_rate);
231 long (*round_rate)(struct adxcvr *xcvr,
232 unsigned long rate,
233 unsigned long parent_rate);
234 int (*set_rate)(struct adxcvr *xcvr,
235 unsigned long rate,
236 unsigned long parent_rate);
237};
238
244 uint32_t refclk_div;
245 uint32_t fb_div_N1;
246 uint32_t fb_div_N2;
247};
248
254 uint32_t refclk_div;
255 uint32_t fb_div;
256 uint32_t band;
258};
259
260/* Encoding */
261#define ENC_8B10B 810
262#define ENC_66B64B 6664
263
266 uint32_t drp_port, uint32_t lane_rate, uint32_t out_div,
267 bool lpm_enable);
270 uint32_t drp_port, bool lpm);
271
272
275 uint32_t refclk_khz, uint32_t lane_rate_khz,
276 struct xilinx_xcvr_cpll_config *conf, uint32_t *out_div);
279 uint32_t drp_port, struct xilinx_xcvr_cpll_config *conf);
282 uint32_t drp_port, const struct xilinx_xcvr_cpll_config *conf);
285 uint32_t refclk_hz, const struct xilinx_xcvr_cpll_config *conf,
286 uint32_t out_div);
287
289int xilinx_xcvr_calc_qpll_config(struct xilinx_xcvr *xcvr, uint32_t sys_clk_sel,
290 uint32_t refclk_khz, uint32_t lane_rate_khz,
291 struct xilinx_xcvr_qpll_config *conf, uint32_t *out_div);
294 uint32_t drp_port, uint32_t sys_clk_sel, struct xilinx_xcvr_qpll_config *conf);
297 uint32_t sys_clk_sel, uint32_t drp_port,
298 const struct xilinx_xcvr_qpll_config *conf);
301 uint32_t refclk_hz, const struct xilinx_xcvr_qpll_config *conf,
302 uint32_t out_div);
303
305int xilinx_xcvr_read_out_div(struct xilinx_xcvr *xcvr, uint32_t drp_port,
306 uint32_t *rx_out_div, uint32_t *tx_out_div);
308int xilinx_xcvr_write_out_div(struct xilinx_xcvr *xcvr, uint32_t drp_port,
309 int32_t rx_out_div, int32_t tx_out_div);
310
313 uint32_t drp_port, uint32_t div);
316 uint32_t drp_port, uint32_t div);
317
320 uint32_t prbs, bool reverse_lu);
321
324 uint32_t drp_port, uint32_t *cnt);
325
328 uint32_t drp_port, int32_t rx_rate, int32_t tx_rate);
329
332 uint32_t drp_port, int32_t rx_prog_div, int32_t tx_prog_div);
333
336 uint32_t drp_port, bool en);
337
338#endif
axi_fpga_speed_grade
Definition clk_axi_clkgen.c:134
@ AXI_FPGA_SPEED_1HV
Definition clk_axi_clkgen.c:139
@ AXI_FPGA_SPEED_1H
Definition clk_axi_clkgen.c:138
@ AXI_FPGA_SPEED_UNKNOWN
Definition clk_axi_clkgen.c:135
@ AXI_FPGA_SPEED_1L
Definition clk_axi_clkgen.c:137
@ AXI_FPGA_SPEED_2
Definition clk_axi_clkgen.c:141
@ AXI_FPGA_SPEED_2L
Definition clk_axi_clkgen.c:142
@ AXI_FPGA_SPEED_3
Definition clk_axi_clkgen.c:144
@ AXI_FPGA_SPEED_1LV
Definition clk_axi_clkgen.c:140
@ AXI_FPGA_SPEED_2LV
Definition clk_axi_clkgen.c:143
@ AXI_FPGA_SPEED_1
Definition clk_axi_clkgen.c:136
axi_fpga_family
Definition clk_axi_clkgen.c:126
@ AXI_FPGA_FAMILY_VIRTEX
Definition clk_axi_clkgen.c:130
@ AXI_FPGA_FAMILY_UNKNOWN
Definition clk_axi_clkgen.c:127
@ AXI_FPGA_FAMILY_ZYNQ
Definition clk_axi_clkgen.c:131
@ AXI_FPGA_FAMILY_ARTIX
Definition clk_axi_clkgen.c:128
@ AXI_FPGA_FAMILY_KINTEX
Definition clk_axi_clkgen.c:129
axi_fgpa_technology
Definition clk_axi_clkgen.c:119
@ AXI_FPGA_TECH_UNKNOWN
Definition clk_axi_clkgen.c:120
@ AXI_FPGA_TECH_ULTRASCALE_PLUS
Definition clk_axi_clkgen.c:123
@ AXI_FPGA_TECH_ULTRASCALE
Definition clk_axi_clkgen.c:122
@ AXI_FPGA_TECH_SERIES7
Definition clk_axi_clkgen.c:121
ADI JESD204B/C AXI_ADXCVR Highspeed Transceiver Device structure.
Definition altera_adxcvr.h:79
Definition xilinx_transceiver.h:226
int(* disable)(struct adxcvr *xcvr)
Definition xilinx_transceiver.h:228
long(* round_rate)(struct adxcvr *xcvr, unsigned long rate, unsigned long parent_rate)
Definition xilinx_transceiver.h:231
int(* enable)(struct adxcvr *xcvr)
Definition xilinx_transceiver.h:227
int(* set_rate)(struct adxcvr *xcvr, unsigned long rate, unsigned long parent_rate)
Definition xilinx_transceiver.h:234
unsigned long(* recalc_rate)(struct adxcvr *xcvr, unsigned long parent_rate)
Definition xilinx_transceiver.h:229
Structure holding CPLL configuration.
Definition xilinx_transceiver.h:243
uint32_t fb_div_N2
Definition xilinx_transceiver.h:246
uint32_t refclk_div
Definition xilinx_transceiver.h:244
uint32_t fb_div_N1
Definition xilinx_transceiver.h:245
Definition xilinx_transceiver.h:179
int(* read)(struct adxcvr *xcvr, unsigned int drp_port, unsigned int reg, unsigned int *val)
Definition xilinx_transceiver.h:182
int(* write)(struct adxcvr *xcvr, unsigned int drp_port, unsigned int reg, unsigned int val)
Definition xilinx_transceiver.h:180
Structure holding QPLL configuration.
Definition xilinx_transceiver.h:253
uint32_t refclk_div
Definition xilinx_transceiver.h:254
uint32_t band
Definition xilinx_transceiver.h:256
uint32_t qty4_full_rate
Definition xilinx_transceiver.h:257
uint32_t fb_div
Definition xilinx_transceiver.h:255
xilinx_xcvr parameters structure.
Definition xilinx_transceiver.h:160
enum axi_fpga_family family
Definition xilinx_transceiver.h:167
uint32_t encoding
Definition xilinx_transceiver.h:163
uint32_t version
Definition xilinx_transceiver.h:165
enum axi_fpga_speed_grade speed_grade
Definition xilinx_transceiver.h:168
enum xilinx_xcvr_type type
Definition xilinx_transceiver.h:161
struct adxcvr * ad_xcvr
Definition xilinx_transceiver.h:164
uint32_t vco1_max
Definition xilinx_transceiver.h:176
uint32_t vco1_min
Definition xilinx_transceiver.h:175
enum axi_fgpa_technology tech
Definition xilinx_transceiver.h:166
uint32_t vco0_min
Definition xilinx_transceiver.h:173
enum xilinx_xcvr_refclk_ppm refclk_ppm
Definition xilinx_transceiver.h:162
enum axi_fpga_dev_pack dev_package
Definition xilinx_transceiver.h:169
uint32_t vco0_max
Definition xilinx_transceiver.h:174
uint32_t voltage
Definition xilinx_transceiver.h:170
axi_fpga_dev_pack
Enum for device package.
Definition xilinx_transceiver.h:135
@ AXI_FPGA_DEV_FF
Definition xilinx_transceiver.h:139
@ AXI_FPGA_DEV_SF
Definition xilinx_transceiver.h:151
@ AXI_FPGA_DEV_FH
Definition xilinx_transceiver.h:142
@ AXI_FPGA_DEV_HC
Definition xilinx_transceiver.h:141
@ AXI_FPGA_DEV_CS
Definition xilinx_transceiver.h:143
@ AXI_FPGA_DEV_RB
Definition xilinx_transceiver.h:148
@ AXI_FPGA_DEV_CP
Definition xilinx_transceiver.h:144
@ AXI_FPGA_DEV_FB
Definition xilinx_transceiver.h:140
@ AXI_FPGA_DEV_UNKNOWN
Definition xilinx_transceiver.h:136
@ AXI_FPGA_DEV_FT
Definition xilinx_transceiver.h:145
@ AXI_FPGA_DEV_RS
Definition xilinx_transceiver.h:149
@ AXI_FPGA_DEV_SB
Definition xilinx_transceiver.h:147
@ AXI_FPGA_DEV_FA
Definition xilinx_transceiver.h:153
@ AXI_FPGA_DEV_BA
Definition xilinx_transceiver.h:152
@ AXI_FPGA_DEV_CL
Definition xilinx_transceiver.h:150
@ AXI_FPGA_DEV_RF
Definition xilinx_transceiver.h:137
@ AXI_FPGA_DEV_FL
Definition xilinx_transceiver.h:138
@ AXI_FPGA_DEV_FG
Definition xilinx_transceiver.h:146
int xilinx_xcvr_write_out_div(struct xilinx_xcvr *xcvr, uint32_t drp_port, int32_t rx_out_div, int32_t tx_out_div)
Definition xilinx_transceiver.c:1667
int xilinx_xcvr_write_rx_clk25_div(struct xilinx_xcvr *xcvr, uint32_t drp_port, uint32_t div)
Definition xilinx_transceiver.c:2007
xilinx_xcvr_legacy_type
Enum for legacy GT type.
Definition xilinx_transceiver.h:74
@ XILINX_XCVR_LEGACY_TYPE_US_GTH4
Definition xilinx_transceiver.h:77
@ XILINX_XCVR_LEGACY_TYPE_US_GTH3
Definition xilinx_transceiver.h:76
@ XILINX_XCVR_LEGACY_TYPE_US_GTY4
Definition xilinx_transceiver.h:78
@ XILINX_XCVR_LEGACY_TYPE_S7_GTX2
Definition xilinx_transceiver.h:75
int xilinx_xcvr_cpll_read_config(struct xilinx_xcvr *xcvr, uint32_t drp_port, struct xilinx_xcvr_cpll_config *conf)
Definition xilinx_transceiver.c:909
int xilinx_xcvr_write_async_gearbox_en(struct xilinx_xcvr *xcvr, uint32_t drp_port, bool en)
Definition xilinx_transceiver.c:1979
int xilinx_xcvr_qpll_write_config(struct xilinx_xcvr *xcvr, uint32_t sys_clk_sel, uint32_t drp_port, const struct xilinx_xcvr_qpll_config *conf)
Definition xilinx_transceiver.c:1436
axi_fpga_speed_grade
Enum for FPGA's speed-grade.
Definition xilinx_transceiver.h:118
int xilinx_xcvr_write_prog_div_rate(struct xilinx_xcvr *xcvr, uint32_t drp_port, int32_t rx_rate, int32_t tx_rate)
Definition xilinx_transceiver.c:1936
xilinx_xcvr_refclk_ppm
Enum for reference clock ppm.
Definition xilinx_transceiver.h:85
@ PM_200
Definition xilinx_transceiver.h:86
@ PM_1250
Definition xilinx_transceiver.h:88
@ PM_700
Definition xilinx_transceiver.h:87
int xilinx_xcvr_write_prog_div(struct xilinx_xcvr *xcvr, uint32_t drp_port, int32_t rx_prog_div, int32_t tx_prog_div)
Definition xilinx_transceiver.c:1857
int xilinx_xcvr_read_out_div(struct xilinx_xcvr *xcvr, uint32_t drp_port, uint32_t *rx_out_div, uint32_t *tx_out_div)
Definition xilinx_transceiver.c:1554
int xilinx_xcvr_configure_lpm_dfe_mode(struct xilinx_xcvr *xcvr, uint32_t drp_port, bool lpm)
Definition xilinx_transceiver.c:378
int xilinx_xcvr_cpll_write_config(struct xilinx_xcvr *xcvr, uint32_t drp_port, const struct xilinx_xcvr_cpll_config *conf)
Definition xilinx_transceiver.c:1064
int xilinx_xcvr_write_tx_clk25_div(struct xilinx_xcvr *xcvr, uint32_t drp_port, uint32_t div)
Definition xilinx_transceiver.c:2049
int xilinx_xcvr_cpll_calc_lane_rate(struct xilinx_xcvr *xcvr, uint32_t refclk_hz, const struct xilinx_xcvr_cpll_config *conf, uint32_t out_div)
Definition xilinx_transceiver.c:1090
xilinx_xcvr_type
Enum for GT type.
Definition xilinx_transceiver.h:63
@ XILINX_XCVR_TYPE_US_GTH3
Definition xilinx_transceiver.h:65
@ XILINX_XCVR_TYPE_S7_GTX2
Definition xilinx_transceiver.h:64
@ XILINX_XCVR_TYPE_US_GTY4
Definition xilinx_transceiver.h:67
@ XILINX_XCVR_TYPE_US_GTH4
Definition xilinx_transceiver.h:66
axi_fpga_family
Enum for family variant of the FPGA device.
Definition xilinx_transceiver.h:106
int xilinx_xcvr_calc_cpll_config(struct xilinx_xcvr *xcvr, uint32_t refclk_khz, uint32_t lane_rate_khz, struct xilinx_xcvr_cpll_config *conf, uint32_t *out_div)
Definition xilinx_transceiver.c:533
axi_fgpa_technology
Enum for technology/generation of the FPGA device.
Definition xilinx_transceiver.h:95
int xilinx_xcvr_prbsel_enc_get(struct xilinx_xcvr *xcvr, uint32_t prbs, bool reverse_lu)
Definition xilinx_transceiver.c:2088
int xilinx_xcvr_qpll_read_config(struct xilinx_xcvr *xcvr, uint32_t drp_port, uint32_t sys_clk_sel, struct xilinx_xcvr_qpll_config *conf)
Definition xilinx_transceiver.c:1254
int xilinx_xcvr_configure_cdr(struct xilinx_xcvr *xcvr, uint32_t drp_port, uint32_t lane_rate, uint32_t out_div, bool lpm_enable)
Definition xilinx_transceiver.c:351
int xilinx_xcvr_prbs_err_cnt_get(struct xilinx_xcvr *xcvr, uint32_t drp_port, uint32_t *cnt)
Definition xilinx_transceiver.c:2132
int xilinx_xcvr_calc_qpll_config(struct xilinx_xcvr *xcvr, uint32_t sys_clk_sel, uint32_t refclk_khz, uint32_t lane_rate_khz, struct xilinx_xcvr_qpll_config *conf, uint32_t *out_div)
Definition xilinx_transceiver.c:662
int xilinx_xcvr_qpll_calc_lane_rate(struct xilinx_xcvr *xcvr, uint32_t refclk_hz, const struct xilinx_xcvr_qpll_config *conf, uint32_t out_div)
Definition xilinx_transceiver.c:1464