]>
Commit | Line | Data |
---|---|---|
80ff0fd3 DD |
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 "cvmx-config.h" | |
35 | ||
36 | #include "cvmx-helper.h" | |
37 | ||
38 | #include "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 | */ | |
49 | int __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 | #if 0 | |
63 | /* | |
64 | * Technically CN30XX, CN31XX, and CN50XX contain packet | |
65 | * engines, but nobody ever uses them. Since this is the case, | |
66 | * we disable them here. | |
67 | */ | |
68 | else if (OCTEON_IS_MODEL(OCTEON_CN31XX) | |
69 | || OCTEON_IS_MODEL(OCTEON_CN50XX)) | |
70 | return 2; | |
71 | else if (OCTEON_IS_MODEL(OCTEON_CN30XX)) | |
72 | return 1; | |
73 | #endif | |
74 | #endif | |
75 | return 0; | |
76 | } | |
77 | ||
78 | /** | |
79 | * Bringup and enable a NPI interface. After this call packet | |
80 | * I/O should be fully functional. This is called with IPD | |
81 | * enabled but PKO disabled. | |
82 | * | |
83 | * @interface: Interface to bring up | |
84 | * | |
85 | * Returns Zero on success, negative on failure | |
86 | */ | |
87 | int __cvmx_helper_npi_enable(int interface) | |
88 | { | |
89 | /* | |
90 | * On CN50XX, CN52XX, and CN56XX we need to disable length | |
91 | * checking so packet < 64 bytes and jumbo frames don't get | |
92 | * errors. | |
93 | */ | |
94 | if (!OCTEON_IS_MODEL(OCTEON_CN3XXX) && | |
95 | !OCTEON_IS_MODEL(OCTEON_CN58XX)) { | |
96 | int num_ports = cvmx_helper_ports_on_interface(interface); | |
97 | int port; | |
98 | for (port = 0; port < num_ports; port++) { | |
99 | union cvmx_pip_prt_cfgx port_cfg; | |
100 | int ipd_port = | |
101 | cvmx_helper_get_ipd_port(interface, port); | |
102 | port_cfg.u64 = | |
103 | cvmx_read_csr(CVMX_PIP_PRT_CFGX(ipd_port)); | |
104 | port_cfg.s.maxerr_en = 0; | |
105 | port_cfg.s.minerr_en = 0; | |
106 | cvmx_write_csr(CVMX_PIP_PRT_CFGX(ipd_port), | |
107 | port_cfg.u64); | |
108 | } | |
109 | } | |
110 | ||
111 | /* Enables are controlled by the remote host, so nothing to do here */ | |
112 | return 0; | |
113 | } |