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