cvmx-helper-npi.c revision 210311
1210284Sjmallett/***********************license start*************** 2210284Sjmallett * Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights 3210284Sjmallett * reserved. 4210284Sjmallett * 5210284Sjmallett * 6210284Sjmallett * Redistribution and use in source and binary forms, with or without 7210284Sjmallett * modification, are permitted provided that the following conditions are 8210284Sjmallett * met: 9210284Sjmallett * 10210284Sjmallett * * Redistributions of source code must retain the above copyright 11210284Sjmallett * notice, this list of conditions and the following disclaimer. 12210284Sjmallett * 13210284Sjmallett * * Redistributions in binary form must reproduce the above 14210284Sjmallett * copyright notice, this list of conditions and the following 15210284Sjmallett * disclaimer in the documentation and/or other materials provided 16210284Sjmallett * with the distribution. 17210284Sjmallett * 18210284Sjmallett * * Neither the name of Cavium Networks nor the names of 19210284Sjmallett * its contributors may be used to endorse or promote products 20210284Sjmallett * derived from this software without specific prior written 21210284Sjmallett * permission. 22210284Sjmallett * 23210284Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 24210284Sjmallett * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS 25210284Sjmallett * OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH 26210284Sjmallett * RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY 27210284Sjmallett * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT 28210284Sjmallett * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES 29210284Sjmallett * OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR 30210284Sjmallett * PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET 31210284Sjmallett * POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT 32210284Sjmallett * OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 33210284Sjmallett * 34210284Sjmallett * 35210284Sjmallett * For any questions regarding licensing please contact marketing@caviumnetworks.com 36210284Sjmallett * 37210284Sjmallett ***********************license end**************************************/ 38210284Sjmallett 39210284Sjmallett 40210284Sjmallett 41210284Sjmallett 42210284Sjmallett 43210284Sjmallett 44210284Sjmallett/** 45210284Sjmallett * @file 46210284Sjmallett * 47210284Sjmallett * Functions for NPI initialization, configuration, 48210284Sjmallett * and monitoring. 49210284Sjmallett * 50210284Sjmallett * <hr>$Revision: 41586 $<hr> 51210284Sjmallett */ 52210284Sjmallett#include "cvmx.h" 53210284Sjmallett#include "cvmx-helper.h" 54210284Sjmallett 55210311Sjmallett#ifdef CVMX_ENABLE_PKO_FUNCTIONS 56210284Sjmallett/** 57210284Sjmallett * @INTERNAL 58210284Sjmallett * Probe a NPI interface and determine the number of ports 59210284Sjmallett * connected to it. The NPI interface should still be down 60210284Sjmallett * after this call. 61210284Sjmallett * 62210284Sjmallett * @param interface Interface to probe 63210284Sjmallett * 64210284Sjmallett * @return Number of ports on the interface. Zero to disable. 65210284Sjmallett */ 66210284Sjmallettint __cvmx_helper_npi_probe(int interface) 67210284Sjmallett{ 68210284Sjmallett#if CVMX_PKO_QUEUES_PER_PORT_PCI > 0 69210284Sjmallett if (OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN58XX)) 70210284Sjmallett return 4; 71210284Sjmallett else if (OCTEON_IS_MODEL(OCTEON_CN56XX) && !OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X)) 72210284Sjmallett return 4; /* The packet engines didn't exist before pass 2 */ 73210284Sjmallett else if (OCTEON_IS_MODEL(OCTEON_CN52XX) && !OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X)) 74210284Sjmallett return 4; /* The packet engines didn't exist before pass 2 */ 75210284Sjmallett#if 0 76210284Sjmallett /* Technically CN30XX, CN31XX, and CN50XX contain packet engines, but 77210284Sjmallett nobody ever uses them. Since this is the case, we disable them here */ 78210284Sjmallett else if (OCTEON_IS_MODEL(OCTEON_CN31XX) || OCTEON_IS_MODEL(OCTEON_CN50XX)) 79210284Sjmallett return 2; 80210284Sjmallett else if (OCTEON_IS_MODEL(OCTEON_CN30XX)) 81210284Sjmallett return 1; 82210284Sjmallett#endif 83210284Sjmallett#endif 84210284Sjmallett return 0; 85210284Sjmallett} 86210284Sjmallett 87210284Sjmallett 88210284Sjmallett/** 89210284Sjmallett * @INTERNAL 90210284Sjmallett * Bringup and enable a NPI interface. After this call packet 91210284Sjmallett * I/O should be fully functional. This is called with IPD 92210284Sjmallett * enabled but PKO disabled. 93210284Sjmallett * 94210284Sjmallett * @param interface Interface to bring up 95210284Sjmallett * 96210284Sjmallett * @return Zero on success, negative on failure 97210284Sjmallett */ 98210284Sjmallettint __cvmx_helper_npi_enable(int interface) 99210284Sjmallett{ 100210284Sjmallett /* On CN50XX, CN52XX, and CN56XX we need to disable length checking 101210284Sjmallett so packet < 64 bytes and jumbo frames don't get errors */ 102210284Sjmallett if (!OCTEON_IS_MODEL(OCTEON_CN3XXX) && !OCTEON_IS_MODEL(OCTEON_CN58XX)) 103210284Sjmallett { 104210284Sjmallett int num_ports = cvmx_helper_ports_on_interface(interface); 105210284Sjmallett int port; 106210284Sjmallett for (port=0; port<num_ports; port++) 107210284Sjmallett { 108210284Sjmallett cvmx_pip_port_cfg_t port_cfg; 109210284Sjmallett int ipd_port = cvmx_helper_get_ipd_port(interface, port); 110210284Sjmallett port_cfg.u64 = cvmx_read_csr(CVMX_PIP_PRT_CFGX(ipd_port)); 111210284Sjmallett port_cfg.s.maxerr_en = 0; 112210284Sjmallett port_cfg.s.minerr_en = 0; 113210284Sjmallett cvmx_write_csr(CVMX_PIP_PRT_CFGX(ipd_port), port_cfg.u64); 114210284Sjmallett } 115210284Sjmallett } 116210284Sjmallett 117210284Sjmallett /* Enables are controlled by the remote host, so nothing to do here */ 118210284Sjmallett return 0; 119210284Sjmallett} 120210284Sjmallett 121210284Sjmallett#endif /* CVMX_ENABLE_PKO_FUNCTIONS */ 122210284Sjmallett 123