1232809Sjmallett/***********************license start***************
2232809Sjmallett * Copyright (c) 2011  Cavium Inc. (support@cavium.com). All rights
3232809Sjmallett * reserved.
4232809Sjmallett *
5232809Sjmallett *
6232809Sjmallett * Redistribution and use in source and binary forms, with or without
7232809Sjmallett * modification, are permitted provided that the following conditions are
8232809Sjmallett * met:
9232809Sjmallett *
10232809Sjmallett *   * Redistributions of source code must retain the above copyright
11232809Sjmallett *     notice, this list of conditions and the following disclaimer.
12232809Sjmallett *
13232809Sjmallett *   * Redistributions in binary form must reproduce the above
14232809Sjmallett *     copyright notice, this list of conditions and the following
15232809Sjmallett *     disclaimer in the documentation and/or other materials provided
16232809Sjmallett *     with the distribution.
17232809Sjmallett
18232809Sjmallett *   * Neither the name of Cavium Inc. nor the names of
19232809Sjmallett *     its contributors may be used to endorse or promote products
20232809Sjmallett *     derived from this software without specific prior written
21232809Sjmallett *     permission.
22232809Sjmallett
23232809Sjmallett * This Software, including technical data, may be subject to U.S. export  control
24232809Sjmallett * laws, including the U.S. Export Administration Act and its  associated
25232809Sjmallett * regulations, and may be subject to export or import  regulations in other
26232809Sjmallett * countries.
27232809Sjmallett
28232809Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
29232809Sjmallett * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
30232809Sjmallett * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
31232809Sjmallett * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
32232809Sjmallett * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
33232809Sjmallett * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
34232809Sjmallett * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
35232809Sjmallett * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
36232809Sjmallett * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
37232809Sjmallett * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
38232809Sjmallett ***********************license end**************************************/
39232809Sjmallett
40232809Sjmallett
41232809Sjmallett/**
42232809Sjmallett * @file
43232809Sjmallett *
44232809Sjmallett * Helper utilities for qlm.
45232809Sjmallett *
46232809Sjmallett * <hr>$Revision: 70030 $<hr>
47232809Sjmallett */
48232809Sjmallett
49232809Sjmallett
50232809Sjmallett#ifndef __CVMX_QLM_H__
51232809Sjmallett#define __CVMX_QLM_H__
52232809Sjmallett
53232809Sjmallett#include "cvmx.h"
54232809Sjmallett
55232809Sjmalletttypedef struct
56232809Sjmallett{
57232809Sjmallett    const char *name;
58232809Sjmallett    int stop_bit;
59232809Sjmallett    int start_bit;
60232809Sjmallett} __cvmx_qlm_jtag_field_t;
61232809Sjmallett
62232809Sjmallett/**
63232809Sjmallett * Return the number of QLMs supported by the chip
64232809Sjmallett *
65232809Sjmallett * @return  Number of QLMs
66232809Sjmallett */
67232809Sjmallettextern int cvmx_qlm_get_num(void);
68232809Sjmallett
69232809Sjmallett/**
70232809Sjmallett * Return the qlm number based on the interface
71232809Sjmallett *
72232809Sjmallett * @param interface  Interface to look up
73232809Sjmallett */
74232809Sjmallettextern int cvmx_qlm_interface(int interface);
75232809Sjmallett
76232809Sjmallett/**
77232809Sjmallett * Return number of lanes for a given qlm
78232809Sjmallett *
79232809Sjmallett * @return  Number of lanes
80232809Sjmallett */
81232809Sjmallettextern int cvmx_qlm_get_lanes(int qlm);
82232809Sjmallett
83232809Sjmallett/**
84232809Sjmallett * Get the QLM JTAG fields based on Octeon model on the supported chips.
85232809Sjmallett *
86232809Sjmallett * @return  qlm_jtag_field_t structure
87232809Sjmallett */
88232809Sjmallettextern const __cvmx_qlm_jtag_field_t *cvmx_qlm_jtag_get_field(void);
89232809Sjmallett
90232809Sjmallett/**
91232809Sjmallett * Get the QLM JTAG length by going through qlm_jtag_field for each
92232809Sjmallett * Octeon model that is supported
93232809Sjmallett *
94232809Sjmallett * @return return the length.
95232809Sjmallett */
96232809Sjmallettextern int cvmx_qlm_jtag_get_length(void);
97232809Sjmallett
98232809Sjmallett/**
99232809Sjmallett * Initialize the QLM layer
100232809Sjmallett */
101232809Sjmallettextern void cvmx_qlm_init(void);
102232809Sjmallett
103232809Sjmallett/**
104232809Sjmallett * Get a field in a QLM JTAG chain
105232809Sjmallett *
106232809Sjmallett * @param qlm    QLM to get
107232809Sjmallett * @param lane   Lane in QLM to get
108232809Sjmallett * @param name   String name of field
109232809Sjmallett *
110232809Sjmallett * @return JTAG field value
111232809Sjmallett */
112232809Sjmallettextern uint64_t cvmx_qlm_jtag_get(int qlm, int lane, const char *name);
113232809Sjmallett
114232809Sjmallett/**
115232809Sjmallett * Set a field in a QLM JTAG chain
116232809Sjmallett *
117232809Sjmallett * @param qlm    QLM to set
118232809Sjmallett * @param lane   Lane in QLM to set, or -1 for all lanes
119232809Sjmallett * @param name   String name of field
120232809Sjmallett * @param value  Value of the field
121232809Sjmallett */
122232809Sjmallettextern void cvmx_qlm_jtag_set(int qlm, int lane, const char *name, uint64_t value);
123232809Sjmallett
124232809Sjmallett/**
125232809Sjmallett * Errata G-16094: QLM Gen2 Equalizer Default Setting Change.
126232809Sjmallett * CN68XX pass 1.x and CN66XX pass 1.x QLM tweak. This function tweaks the
127232809Sjmallett * JTAG setting for a QLMs to run better at 5 and 6.25Ghz.
128232809Sjmallett */
129232809Sjmallettextern void __cvmx_qlm_speed_tweak(void);
130232809Sjmallett
131232809Sjmallett/**
132232809Sjmallett * Errata G-16174: QLM Gen2 PCIe IDLE DAC change.
133232809Sjmallett * CN68XX pass 1.x, CN66XX pass 1.x and CN63XX pass 1.0-2.2 QLM tweak.
134232809Sjmallett * This function tweaks the JTAG setting for a QLMs for PCIe to run better.
135232809Sjmallett */
136232809Sjmallettextern void __cvmx_qlm_pcie_idle_dac_tweak(void);
137232809Sjmallett
138232809Sjmallett#ifndef CVMX_BUILD_FOR_LINUX_HOST
139232809Sjmallett/**
140232809Sjmallett * Get the speed (Gbaud) of the QLM in Mhz.
141232809Sjmallett *
142232809Sjmallett * @param qlm    QLM to examine
143232809Sjmallett *
144232809Sjmallett * @return Speed in Mhz
145232809Sjmallett */
146232809Sjmallettextern int cvmx_qlm_get_gbaud_mhz(int qlm);
147232809Sjmallett#endif
148232809Sjmallett
149232809Sjmallett/*
150232809Sjmallett * Read QLM and return status based on CN66XX.
151232809Sjmallett * @return  Return 1 if QLM is SGMII
152232809Sjmallett *                 2 if QLM is XAUI
153232809Sjmallett *                 3 if QLM is PCIe gen2 / gen1
154232809Sjmallett *                 4 if QLM is SRIO 1x4 short / long
155232809Sjmallett *                 5 if QLM is SRIO 2x2 short / long
156232809Sjmallett *                 6 is reserved
157232809Sjmallett *                 7 if QLM is PCIe 1x2 gen2 / gen1
158232809Sjmallett *                 8 if QLM is PCIe 2x1 gen2 / gen1
159232809Sjmallett *                 9 if QLM is ILK
160232809Sjmallett *                 10 if QLM is RXAUI
161232809Sjmallett *                 -1 otherwise
162232809Sjmallett */
163232809Sjmallettextern int cvmx_qlm_get_status(int qlm);
164232809Sjmallett
165232809Sjmallett#endif /* __CVMX_QLM_H__ */
166