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