File Index
Files and directories
Sign in
FILE

cvmx-helper-npi.c

File preview with syntax highlighting.

linux-6.19.14/arch/mips/cavium-octeon/executive/cvmx-helper-npi.c C
  1/***********************license start***************
  2 * Author: Cavium Networks
  3 *
  4 * Contact: support@caviumnetworks.com
  5 * This file is part of the OCTEON SDK
  6 *
  7 * Copyright (c) 2003-2008 Cavium Networks
  8 *
  9 * This file is free software; you can redistribute it and/or modify
 10 * it under the terms of the GNU General Public License, Version 2, as
 11 * published by the Free Software Foundation.
 12 *
 13 * This file is distributed in the hope that it will be useful, but
 14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
 15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
 16 * NONINFRINGEMENT.  See the GNU General Public License for more
 17 * details.
 18 *
 19 * You should have received a copy of the GNU General Public License
 20 * along with this file; if not, write to the Free Software
 21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 22 * or visit http://www.gnu.org/licenses/.
 23 *
 24 * This file may also be available under a different license from Cavium.
 25 * Contact Cavium Networks for more information
 26 ***********************license end**************************************/
 27
 28/*
 29 * Functions for NPI initialization, configuration,
 30 * and monitoring.
 31 */
 32#include <asm/octeon/octeon.h>
 33
 34#include <asm/octeon/cvmx-config.h>
 35
 36#include <asm/octeon/cvmx-helper.h>
 37
 38#include <asm/octeon/cvmx-pip-defs.h>
 39
 40/**
 41 * Probe a NPI interface and determine the number of ports
 42 * connected to it. The NPI interface should still be down
 43 * after this call.
 44 *
 45 * @interface: Interface to probe
 46 *
 47 * Returns Number of ports on the interface. Zero to disable.
 48 */
 49int __cvmx_helper_npi_probe(int interface)
 50{
 51#if CVMX_PKO_QUEUES_PER_PORT_PCI > 0
 52	if (OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))
 53		return 4;
 54	else if (OCTEON_IS_MODEL(OCTEON_CN56XX)
 55		 && !OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X))
 56		/* The packet engines didn't exist before pass 2 */
 57		return 4;
 58	else if (OCTEON_IS_MODEL(OCTEON_CN52XX)
 59		 && !OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X))
 60		/* The packet engines didn't exist before pass 2 */
 61		return 4;
 62#endif
 63	return 0;
 64}
 65
 66/**
 67 * Bringup and enable a NPI interface. After this call packet
 68 * I/O should be fully functional. This is called with IPD
 69 * enabled but PKO disabled.
 70 *
 71 * @interface: Interface to bring up
 72 *
 73 * Returns Zero on success, negative on failure
 74 */
 75int __cvmx_helper_npi_enable(int interface)
 76{
 77	/*
 78	 * On CN50XX, CN52XX, and CN56XX we need to disable length
 79	 * checking so packet < 64 bytes and jumbo frames don't get
 80	 * errors.
 81	 */
 82	if (!OCTEON_IS_MODEL(OCTEON_CN3XXX) &&
 83	    !OCTEON_IS_MODEL(OCTEON_CN58XX)) {
 84		int num_ports = cvmx_helper_ports_on_interface(interface);
 85		int port;
 86		for (port = 0; port < num_ports; port++) {
 87			union cvmx_pip_prt_cfgx port_cfg;
 88			int ipd_port =
 89			    cvmx_helper_get_ipd_port(interface, port);
 90			port_cfg.u64 =
 91			    cvmx_read_csr(CVMX_PIP_PRT_CFGX(ipd_port));
 92			port_cfg.s.maxerr_en = 0;
 93			port_cfg.s.minerr_en = 0;
 94			cvmx_write_csr(CVMX_PIP_PRT_CFGX(ipd_port),
 95				       port_cfg.u64);
 96		}
 97	}
 98
 99	/* Enables are controlled by the remote host, so nothing to do here */
100	return 0;
101}
~/ Read-only file preview.