Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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