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

TOMOYO Linux Cross Reference
Linux/arch/arm/mach-omap2/sram.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/arm/mach-omap2/sram.c (Version linux-6.12-rc7) and /arch/ppc/mach-omap2/sram.c (Version linux-6.7.12)


  1 // SPDX-License-Identifier: GPL-2.0-only            1 
  2 /*                                                
  3  *                                                
  4  * OMAP SRAM detection and management             
  5  *                                                
  6  * Copyright (C) 2005 Nokia Corporation           
  7  * Written by Tony Lindgren <tony@atomide.com>    
  8  *                                                
  9  * Copyright (C) 2009-2012 Texas Instruments      
 10  * Added OMAP4/5 support - Santosh Shilimkar <    
 11  */                                               
 12                                                   
 13 #include <linux/module.h>                         
 14 #include <linux/kernel.h>                         
 15 #include <linux/init.h>                           
 16 #include <linux/io.h>                             
 17 #include <linux/set_memory.h>                     
 18                                                   
 19 #include <asm/fncpy.h>                            
 20 #include <asm/tlb.h>                              
 21 #include <asm/cacheflush.h>                       
 22                                                   
 23 #include <asm/mach/map.h>                         
 24                                                   
 25 #include "soc.h"                                  
 26 #include "iomap.h"                                
 27 #include "prm2xxx_3xxx.h"                         
 28 #include "sdrc.h"                                 
 29 #include "sram.h"                                 
 30                                                   
 31 #define OMAP2_SRAM_PUB_PA       (OMAP2_SRAM_PA    
 32 #define OMAP3_SRAM_PUB_PA       (OMAP3_SRAM_PA    
 33                                                   
 34 #define SRAM_BOOTLOADER_SZ      0x00              
 35                                                   
 36 #define OMAP24XX_VA_REQINFOPERM0        OMAP2_    
 37 #define OMAP24XX_VA_READPERM0           OMAP2_    
 38 #define OMAP24XX_VA_WRITEPERM0          OMAP2_    
 39                                                   
 40 #define OMAP34XX_VA_REQINFOPERM0        OMAP2_    
 41 #define OMAP34XX_VA_READPERM0           OMAP2_    
 42 #define OMAP34XX_VA_WRITEPERM0          OMAP2_    
 43 #define OMAP34XX_VA_ADDR_MATCH2         OMAP2_    
 44 #define OMAP34XX_VA_SMS_RG_ATT0         OMAP2_    
 45                                                   
 46 #define GP_DEVICE               0x300             
 47                                                   
 48 #define ROUND_DOWN(value, boundary)     ((valu    
 49                                                   
 50 static unsigned long omap_sram_start;             
 51 static unsigned long omap_sram_size;              
 52 static void __iomem *omap_sram_base;              
 53 static unsigned long omap_sram_skip;              
 54 static void __iomem *omap_sram_ceil;              
 55                                                   
 56 /*                                                
 57  * Memory allocator for SRAM: calculates the n    
 58  * for pushing a function using the fncpy API.    
 59  *                                                
 60  * Note that fncpy requires the returned addre    
 61  * to an 8-byte boundary.                         
 62  */                                               
 63 static void *omap_sram_push_address(unsigned l    
 64 {                                                 
 65         unsigned long available, new_ceil = (u    
 66                                                   
 67         available = omap_sram_ceil - (omap_sra    
 68                                                   
 69         if (size > available) {                   
 70                 pr_err("Not enough space in SR    
 71                 return NULL;                      
 72         }                                         
 73                                                   
 74         new_ceil -= size;                         
 75         new_ceil = ROUND_DOWN(new_ceil, FNCPY_    
 76         omap_sram_ceil = IOMEM(new_ceil);         
 77                                                   
 78         return (void __force *)omap_sram_ceil;    
 79 }                                                 
 80                                                   
 81 void *omap_sram_push(void *funcp, unsigned lon    
 82 {                                                 
 83         void *sram;                               
 84         unsigned long base;                       
 85         int pages;                                
 86         void *dst = NULL;                         
 87                                                   
 88         sram = omap_sram_push_address(size);      
 89         if (!sram)                                
 90                 return NULL;                      
 91                                                   
 92         base = (unsigned long)sram & PAGE_MASK    
 93         pages = PAGE_ALIGN(size) / PAGE_SIZE;     
 94                                                   
 95         set_memory_rw(base, pages);               
 96                                                   
 97         dst = fncpy(sram, funcp, size);           
 98                                                   
 99         set_memory_rox(base, pages);              
100                                                   
101         return dst;                               
102 }                                                 
103                                                   
104 /*                                                
105  * The SRAM context is lost during off-idle an    
106  * needs to be reset.                             
107  */                                               
108 static void omap_sram_reset(void)                 
109 {                                                 
110         omap_sram_ceil = omap_sram_base + omap    
111 }                                                 
112                                                   
113 /*                                                
114  * Depending on the target RAMFS firewall setu    
115  * SRAM varies.  The default accessible size f    
116  * device allows ARM11 but not other initiator    
117  * functionality seems ok until some nice secu    
118  */                                               
119 static int is_sram_locked(void)                   
120 {                                                 
121         if (omap_type() == OMAP2_DEVICE_TYPE_G    
122                 /* RAMFW: R/W access to all in    
123                 if (cpu_is_omap242x()) {          
124                         writel_relaxed(0xFF, O    
125                         writel_relaxed(0xCFDE,    
126                         writel_relaxed(0xCFDE,    
127                 }                                 
128                 if (cpu_is_omap34xx()) {          
129                         writel_relaxed(0xFFFF,    
130                         writel_relaxed(0xFFFF,    
131                         writel_relaxed(0xFFFF,    
132                         writel_relaxed(0x0, OM    
133                         writel_relaxed(0xFFFFF    
134                 }                                 
135                 return 0;                         
136         } else                                    
137                 return 1; /* assume locked wit    
138 }                                                 
139                                                   
140 /*                                                
141  * The amount of SRAM depends on the core type    
142  * Note that we cannot try to test for SRAM he    
143  * to secure SRAM will hang the system. Also t    
144  * yet mapped at this point.                      
145  */                                               
146 static void __init omap_detect_sram(void)         
147 {                                                 
148         omap_sram_skip = SRAM_BOOTLOADER_SZ;      
149         if (is_sram_locked()) {                   
150                 if (cpu_is_omap34xx()) {          
151                         omap_sram_start = OMAP    
152                         if ((omap_type() == OM    
153                             (omap_type() == OM    
154                                 omap_sram_size    
155                                 omap_sram_skip    
156                         } else {                  
157                                 omap_sram_size    
158                         }                         
159                 } else {                          
160                         omap_sram_start = OMAP    
161                         omap_sram_size = 0x800    
162                 }                                 
163         } else {                                  
164                 if (cpu_is_omap34xx()) {          
165                         omap_sram_start = OMAP    
166                         omap_sram_size = 0x100    
167                 } else {                          
168                         omap_sram_start = OMAP    
169                         if (cpu_is_omap242x())    
170                                 omap_sram_size    
171                         else if (cpu_is_omap24    
172                                 omap_sram_size    
173                 }                                 
174         }                                         
175 }                                                 
176                                                   
177 /*                                                
178  * Note that we cannot use ioremap for SRAM, a    
179  */                                               
180 static void __init omap2_map_sram(void)           
181 {                                                 
182         unsigned long base;                       
183         int pages;                                
184         int cached = 1;                           
185                                                   
186         if (cpu_is_omap34xx()) {                  
187                 /*                                
188                  * SRAM must be marked as non-    
189                  * CORE DPLL M2 divider change    
190                  * SDRAM controller disabled,     
191                  * the ARM may attempt to writ    
192                  * which will cause the system    
193                  */                               
194                 cached = 0;                       
195         }                                         
196                                                   
197         if (omap_sram_size == 0)                  
198                 return;                           
199                                                   
200         omap_sram_start = ROUND_DOWN(omap_sram    
201         omap_sram_base = __arm_ioremap_exec(om    
202         if (!omap_sram_base) {                    
203                 pr_err("SRAM: Could not map\n"    
204                 return;                           
205         }                                         
206                                                   
207         omap_sram_reset();                        
208                                                   
209         /*                                        
210          * Looks like we need to preserve some    
211          * beginning of SRAM for jumping to fl    
212          */                                       
213         memset_io(omap_sram_base + omap_sram_s    
214                   omap_sram_size - omap_sram_s    
215                                                   
216         base = (unsigned long)omap_sram_base;     
217         pages = PAGE_ALIGN(omap_sram_size) / P    
218                                                   
219         set_memory_rox(base, pages);              
220 }                                                 
221                                                   
222 static void (*_omap2_sram_ddr_init)(u32 *slow_    
223                               u32 base_cs, u32    
224                                                   
225 void omap2_sram_ddr_init(u32 *slow_dll_ctrl, u    
226                    u32 base_cs, u32 force_unlo    
227 {                                                 
228         BUG_ON(!_omap2_sram_ddr_init);            
229         _omap2_sram_ddr_init(slow_dll_ctrl, fa    
230                              base_cs, force_un    
231 }                                                 
232                                                   
233 static void (*_omap2_sram_reprogram_sdrc)(u32     
234                                           u32     
235                                                   
236 void omap2_sram_reprogram_sdrc(u32 perf_level,    
237 {                                                 
238         BUG_ON(!_omap2_sram_reprogram_sdrc);      
239         _omap2_sram_reprogram_sdrc(perf_level,    
240 }                                                 
241                                                   
242 static u32 (*_omap2_set_prcm)(u32 dpll_ctrl_va    
243                                                   
244 u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc    
245 {                                                 
246         BUG_ON(!_omap2_set_prcm);                 
247         return _omap2_set_prcm(dpll_ctrl_val,     
248 }                                                 
249                                                   
250 #ifdef CONFIG_SOC_OMAP2420                        
251 static int __init omap242x_sram_init(void)        
252 {                                                 
253         _omap2_sram_ddr_init = omap_sram_push(    
254                                         omap24    
255                                                   
256         _omap2_sram_reprogram_sdrc = omap_sram    
257                                             om    
258                                                   
259         _omap2_set_prcm = omap_sram_push(omap2    
260                                          omap2    
261                                                   
262         return 0;                                 
263 }                                                 
264 #else                                             
265 static inline int omap242x_sram_init(void)        
266 {                                                 
267         return 0;                                 
268 }                                                 
269 #endif                                            
270                                                   
271 #ifdef CONFIG_SOC_OMAP2430                        
272 static int __init omap243x_sram_init(void)        
273 {                                                 
274         _omap2_sram_ddr_init = omap_sram_push(    
275                                         omap24    
276                                                   
277         _omap2_sram_reprogram_sdrc = omap_sram    
278                                             om    
279                                                   
280         _omap2_set_prcm = omap_sram_push(omap2    
281                                          omap2    
282                                                   
283         return 0;                                 
284 }                                                 
285 #else                                             
286 static inline int omap243x_sram_init(void)        
287 {                                                 
288         return 0;                                 
289 }                                                 
290 #endif                                            
291                                                   
292 #ifdef CONFIG_ARCH_OMAP3                          
293                                                   
294 void omap3_sram_restore_context(void)             
295 {                                                 
296         omap_sram_reset();                        
297                                                   
298         omap_push_sram_idle();                    
299 }                                                 
300                                                   
301 static inline int omap34xx_sram_init(void)        
302 {                                                 
303         omap3_sram_restore_context();             
304         return 0;                                 
305 }                                                 
306 #else                                             
307 static inline int omap34xx_sram_init(void)        
308 {                                                 
309         return 0;                                 
310 }                                                 
311 #endif /* CONFIG_ARCH_OMAP3 */                    
312                                                   
313 int __init omap_sram_init(void)                   
314 {                                                 
315         omap_detect_sram();                       
316         omap2_map_sram();                         
317                                                   
318         if (cpu_is_omap242x())                    
319                 omap242x_sram_init();             
320         else if (cpu_is_omap2430())               
321                 omap243x_sram_init();             
322         else if (cpu_is_omap34xx())               
323                 omap34xx_sram_init();             
324                                                   
325         return 0;                                 
326 }                                                 
327                                                   

~ [ 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