]> CyberLeo.Net >> Repos - FreeBSD/stable/8.git/blob - sys/contrib/octeon-sdk/cvmx-helper-npi.c
Merge MIPS platform support to 8-STABLE.
[FreeBSD/stable/8.git] / sys / contrib / octeon-sdk / cvmx-helper-npi.c
1 /***********************license start***************
2  *  Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights
3  *  reserved.
4  *
5  *
6  *  Redistribution and use in source and binary forms, with or without
7  *  modification, are permitted provided that the following conditions are
8  *  met:
9  *
10  *      * Redistributions of source code must retain the above copyright
11  *        notice, this list of conditions and the following disclaimer.
12  *
13  *      * Redistributions in binary form must reproduce the above
14  *        copyright notice, this list of conditions and the following
15  *        disclaimer in the documentation and/or other materials provided
16  *        with the distribution.
17  *
18  *      * Neither the name of Cavium Networks nor the names of
19  *        its contributors may be used to endorse or promote products
20  *        derived from this software without specific prior written
21  *        permission.
22  *
23  *  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
24  *  AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS
25  *  OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
26  *  RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY
27  *  REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT
28  *  DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES
29  *  OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR
30  *  PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET
31  *  POSSESSION OR CORRESPONDENCE TO DESCRIPTION.  THE ENTIRE RISK ARISING OUT
32  *  OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
33  *
34  *
35  *  For any questions regarding licensing please contact marketing@caviumnetworks.com
36  *
37  ***********************license end**************************************/
38
39
40
41
42
43
44 /**
45  * @file
46  *
47  * Functions for NPI initialization, configuration,
48  * and monitoring.
49  *
50  * <hr>$Revision: 41586 $<hr>
51  */
52 #include "cvmx.h"
53 #include "cvmx-helper.h"
54
55 #ifdef CVMX_ENABLE_PKO_FUNCTIONS
56 /**
57  * @INTERNAL
58  * Probe a NPI interface and determine the number of ports
59  * connected to it. The NPI interface should still be down
60  * after this call.
61  *
62  * @param interface Interface to probe
63  *
64  * @return Number of ports on the interface. Zero to disable.
65  */
66 int __cvmx_helper_npi_probe(int interface)
67 {
68 #if CVMX_PKO_QUEUES_PER_PORT_PCI > 0
69     if (OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))
70         return 4;
71     else if (OCTEON_IS_MODEL(OCTEON_CN56XX) && !OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X))
72         return 4; /* The packet engines didn't exist before pass 2 */
73     else if (OCTEON_IS_MODEL(OCTEON_CN52XX) && !OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X))
74         return 4; /* The packet engines didn't exist before pass 2 */
75 #if 0
76     /* Technically CN30XX, CN31XX, and CN50XX contain packet engines, but
77         nobody ever uses them. Since this is the case, we disable them here */
78     else if (OCTEON_IS_MODEL(OCTEON_CN31XX) || OCTEON_IS_MODEL(OCTEON_CN50XX))
79         return 2;
80     else if (OCTEON_IS_MODEL(OCTEON_CN30XX))
81         return 1;
82 #endif
83 #endif
84     return 0;
85 }
86
87
88 /**
89  * @INTERNAL
90  * Bringup and enable a NPI interface. After this call packet
91  * I/O should be fully functional. This is called with IPD
92  * enabled but PKO disabled.
93  *
94  * @param interface Interface to bring up
95  *
96  * @return Zero on success, negative on failure
97  */
98 int __cvmx_helper_npi_enable(int interface)
99 {
100     /* On CN50XX, CN52XX, and CN56XX we need to disable length checking
101         so packet < 64 bytes and jumbo frames don't get errors */
102     if (!OCTEON_IS_MODEL(OCTEON_CN3XXX) && !OCTEON_IS_MODEL(OCTEON_CN58XX))
103     {
104         int num_ports = cvmx_helper_ports_on_interface(interface);
105         int port;
106         for (port=0; port<num_ports; port++)
107         {
108             cvmx_pip_port_cfg_t port_cfg;
109             int ipd_port = cvmx_helper_get_ipd_port(interface, port);
110             port_cfg.u64 = cvmx_read_csr(CVMX_PIP_PRT_CFGX(ipd_port));
111             port_cfg.s.maxerr_en = 0;
112             port_cfg.s.minerr_en = 0;
113             cvmx_write_csr(CVMX_PIP_PRT_CFGX(ipd_port), port_cfg.u64);
114         }
115     }
116
117     /* Enables are controlled by the remote host, so nothing to do here */
118     return 0;
119 }
120
121 #endif /* CVMX_ENABLE_PKO_FUNCTIONS */
122