~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/mips/cavium-octeon/executive/cvmx-helper-spi.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/mips/cavium-octeon/executive/cvmx-helper-spi.c (Architecture m68k) and /arch/alpha/cavium-octeon/executive/cvmx-helper-spi.c (Architecture alpha)


  1 /***********************license start*********      1 
  2  * Author: Cavium Networks                        
  3  *                                                
  4  * Contact: support@caviumnetworks.com            
  5  * This file is part of the OCTEON SDK            
  6  *                                                
  7  * Copyright (C) 2003-2018 Cavium, Inc.           
  8  *                                                
  9  * This file is free software; you can redistr    
 10  * it under the terms of the GNU General Publi    
 11  * published by the Free Software Foundation.     
 12  *                                                
 13  * This file is distributed in the hope that i    
 14  * AS-IS and WITHOUT ANY WARRANTY; without eve    
 15  * of MERCHANTABILITY or FITNESS FOR A PARTICU    
 16  * NONINFRINGEMENT.  See the GNU General Publi    
 17  * details.                                       
 18  *                                                
 19  * You should have received a copy of the GNU     
 20  * along with this file; if not, write to the     
 21  * Foundation, Inc., 51 Franklin St, Fifth Flo    
 22  * or visit http://www.gnu.org/licenses/.         
 23  *                                                
 24  * This file may also be available under a dif    
 25  * Contact Cavium Networks for more informatio    
 26  ***********************license end***********    
 27                                                   
 28 /*                                                
 29  * Functions for SPI initialization, configura    
 30  * and monitoring.                                
 31  */                                               
 32 #include <asm/octeon/octeon.h>                    
 33                                                   
 34 #include <asm/octeon/cvmx-config.h>               
 35 #include <asm/octeon/cvmx-spi.h>                  
 36 #include <asm/octeon/cvmx-helper.h>               
 37                                                   
 38 #include <asm/octeon/cvmx-pip-defs.h>             
 39 #include <asm/octeon/cvmx-pko-defs.h>             
 40 #include <asm/octeon/cvmx-spxx-defs.h>            
 41 #include <asm/octeon/cvmx-stxx-defs.h>            
 42                                                   
 43 /*                                                
 44  * CVMX_HELPER_SPI_TIMEOUT is used to determin    
 45  * initialization routines wait for SPI traini    
 46  * value using executive-config.h if necessary    
 47  */                                               
 48 #ifndef CVMX_HELPER_SPI_TIMEOUT                   
 49 #define CVMX_HELPER_SPI_TIMEOUT 10                
 50 #endif                                            
 51                                                   
 52 int __cvmx_helper_spi_enumerate(int interface)    
 53 {                                                 
 54         if ((cvmx_sysinfo_get()->board_type !=    
 55             cvmx_spi4000_is_present(interface)    
 56                 return 10;                        
 57         } else {                                  
 58                 return 16;                        
 59         }                                         
 60 }                                                 
 61                                                   
 62 /**                                               
 63  * Probe a SPI interface and determine the num    
 64  * connected to it. The SPI interface should s    
 65  * this call.                                     
 66  *                                                
 67  * @interface: Interface to probe                 
 68  *                                                
 69  * Returns Number of ports on the interface. Z    
 70  */                                               
 71 int __cvmx_helper_spi_probe(int interface)        
 72 {                                                 
 73         int num_ports = 0;                        
 74                                                   
 75         if ((cvmx_sysinfo_get()->board_type !=    
 76             cvmx_spi4000_is_present(interface)    
 77                 num_ports = 10;                   
 78         } else {                                  
 79                 union cvmx_pko_reg_crc_enable     
 80                 num_ports = 16;                   
 81                 /*                                
 82                  * Unlike the SPI4000, most SP    
 83                  * automatically put on the L2    
 84                  * except for the SPI4000 have    
 85                  * to the packet.                 
 86                  */                               
 87                 enable.u64 = cvmx_read_csr(CVM    
 88                 enable.s.enable |= 0xffff << (    
 89                 cvmx_write_csr(CVMX_PKO_REG_CR    
 90         }                                         
 91         __cvmx_helper_setup_gmx(interface, num    
 92         return num_ports;                         
 93 }                                                 
 94                                                   
 95 /**                                               
 96  * Bringup and enable a SPI interface. After t    
 97  * should be fully functional. This is called     
 98  * PKO disabled.                                  
 99  *                                                
100  * @interface: Interface to bring up              
101  *                                                
102  * Returns Zero on success, negative on failur    
103  */                                               
104 int __cvmx_helper_spi_enable(int interface)       
105 {                                                 
106         /*                                        
107          * Normally the ethernet L2 CRC is che    
108          * GMX block.  When you are using SPI,    
109          * IPD needs to check the L2 CRC.         
110          */                                       
111         int num_ports = cvmx_helper_ports_on_i    
112         int ipd_port;                             
113         for (ipd_port = interface * 16; ipd_po    
114              ipd_port++) {                        
115                 union cvmx_pip_prt_cfgx port_c    
116                 port_config.u64 = cvmx_read_cs    
117                 port_config.s.crc_en = 1;         
118                 cvmx_write_csr(CVMX_PIP_PRT_CF    
119         }                                         
120                                                   
121         if (cvmx_sysinfo_get()->board_type !=     
122                 cvmx_spi_start_interface(inter    
123                                          CVMX_    
124                 if (cvmx_spi4000_is_present(in    
125                         cvmx_spi4000_initializ    
126         }                                         
127         __cvmx_interrupt_spxx_int_msk_enable(i    
128         __cvmx_interrupt_stxx_int_msk_enable(i    
129         __cvmx_interrupt_gmxx_enable(interface    
130         return 0;                                 
131 }                                                 
132                                                   
133 /**                                               
134  * Return the link state of an IPD/PKO port as    
135  * auto negotiation. The result of this functi    
136  * Octeon's link config if auto negotiation ha    
137  * the last call to cvmx_helper_link_set().       
138  *                                                
139  * @ipd_port: IPD/PKO port to query               
140  *                                                
141  * Returns Link state                             
142  */                                               
143 union cvmx_helper_link_info __cvmx_helper_spi_    
144 {                                                 
145         union cvmx_helper_link_info result;       
146         int interface = cvmx_helper_get_interf    
147         int index = cvmx_helper_get_interface_    
148         result.u64 = 0;                           
149                                                   
150         if (cvmx_sysinfo_get()->board_type ==     
151                 /* The simulator gives you a s    
152                 result.s.link_up = 1;             
153                 result.s.full_duplex = 1;         
154                 result.s.speed = 10000;           
155         } else if (cvmx_spi4000_is_present(int    
156                 union cvmx_gmxx_rxx_rx_inbnd i    
157                     cvmx_spi4000_check_speed(i    
158                 result.s.link_up = inband.s.st    
159                 result.s.full_duplex = inband.    
160                 switch (inband.s.speed) {         
161                 case 0: /* 10 Mbps */             
162                         result.s.speed = 10;      
163                         break;                    
164                 case 1: /* 100 Mbps */            
165                         result.s.speed = 100;     
166                         break;                    
167                 case 2: /* 1 Gbps */              
168                         result.s.speed = 1000;    
169                         break;                    
170                 case 3: /* Illegal */             
171                         result.s.speed = 0;       
172                         result.s.link_up = 0;     
173                         break;                    
174                 }                                 
175         } else {                                  
176                 /* For generic SPI we can't de    
177                    sane results */                
178                 result.s.link_up = 1;             
179                 result.s.full_duplex = 1;         
180                 result.s.speed = 10000;           
181         }                                         
182         return result;                            
183 }                                                 
184                                                   
185 /**                                               
186  * Configure an IPD/PKO port for the specified    
187  * function does not influence auto negotiatio    
188  * The passed link state must always match the    
189  * by cvmx_helper_link_get().                     
190  *                                                
191  * @ipd_port:  IPD/PKO port to configure          
192  * @link_info: The new link state                 
193  *                                                
194  * Returns Zero on success, negative on failur    
195  */                                               
196 int __cvmx_helper_spi_link_set(int ipd_port, u    
197 {                                                 
198         /* Nothing to do. If we have a SPI4000    
199            by cvmx_spi4000_check_speed(). If n    
200            info */                                
201         return 0;                                 
202 }                                                 
203                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php