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

TOMOYO Linux Cross Reference
Linux/arch/xtensa/boot/boot-redboot/bootstrap.S

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/xtensa/boot/boot-redboot/bootstrap.S (Version linux-6.12-rc7) and /arch/i386/boot/boot-redboot/bootstrap.S (Version linux-4.16.18)


  1 /* SPDX-License-Identifier: GPL-2.0 */            
  2 #include <asm/core.h>                             
  3 #include <asm/regs.h>                             
  4 #include <asm/asmmacro.h>                         
  5 #include <asm/cacheasm.h>                         
  6 #include <asm/processor.h>                        
  7         /*                                        
  8          * RB-Data: RedBoot data/bss              
  9          * P:       Boot-Parameters               
 10          * L:       Kernel-Loader                 
 11          *                                        
 12          * The Linux-Kernel image including th    
 13          * to a position so that the kernel an    
 14          * can fit in the space before the loa    
 15          *  __________________________________    
 16          * |_RB-Data_|_P_|__________|_L_|___Li    
 17          *                          ^             
 18          *                          ^ Load add    
 19          *  __________________________________    
 20          * |___Linux-Kernel___|_P_|_L_|_______    
 21          *                                        
 22          * The loader copies the parameter to     
 23          * be the end of the kernel and itself    
 24          * parameter list.                        
 25          */                                       
 26                                                   
 27 /* Make sure we have enough space for the 'unc    
 28                                                   
 29 #define STACK_SIZE 32768                          
 30 #define HEAP_SIZE (131072*4)                      
 31                                                   
 32         # a2: Parameter list                      
 33         # a3: Size of parameter list              
 34                                                   
 35         .section .start, "ax"                     
 36                                                   
 37         .globl __start                            
 38         /* this must be the first byte of the     
 39 __start:                                          
 40         abi_entry(32)           # we do not in    
 41         _call0  _start                            
 42 __start_a0:                                       
 43         .align 4                                  
 44                                                   
 45         .section .text, "ax"                      
 46         .literal_position                         
 47         .begin literal_prefix .text               
 48                                                   
 49         /* put literals in here! */               
 50                                                   
 51         .globl _start                             
 52 _start:                                           
 53                                                   
 54         /* 'reset' window registers */            
 55                                                   
 56         movi    a4, 1                             
 57         wsr     a4, ps                            
 58         rsync                                     
 59 #if XCHAL_HAVE_WINDOWED                           
 60         rsr     a5, windowbase                    
 61         ssl     a5                                
 62         sll     a4, a4                            
 63         wsr     a4, windowstart                   
 64         rsync                                     
 65 #endif                                            
 66         movi    a4, KERNEL_PS_WOE_MASK            
 67         wsr     a4, ps                            
 68         rsync                                     
 69                                                   
 70 KABI_C0 mov     abi_saved0, abi_arg0              
 71                                                   
 72         /* copy the loader to its address         
 73          * Note: The loader itself is a very s    
 74          *       don't partially overlap. We a    
 75          *       that the kernel image is out     
 76          *       load address of this image is    
 77          *       but aligned to some 10K's we     
 78          */                                       
 79                                                   
 80         /* Note: The assembler cannot relax "a    
 81            l32r, so we load to a4 first. */       
 82                                                   
 83         # addi  a4, a0, __start - __start_a0      
 84         # mov   a0, a4                            
 85                                                   
 86         movi    a4, __start                       
 87         movi    a5, __start_a0                    
 88         add     a4, a0, a4                        
 89         sub     a0, a4, a5                        
 90                                                   
 91         movi    a4, __start                       
 92         movi    a5, __reloc_end                   
 93                                                   
 94         # a0: address where this code has been    
 95         # a4: compiled address of __start         
 96         # a5: compiled end address                
 97                                                   
 98         mov.n   a7, a0                            
 99         mov.n   a8, a4                            
100                                                   
101 1:                                                
102         l32i    a10, a7, 0                        
103         l32i    a11, a7, 4                        
104         s32i    a10, a8, 0                        
105         s32i    a11, a8, 4                        
106         l32i    a10, a7, 8                        
107         l32i    a11, a7, 12                       
108         s32i    a10, a8, 8                        
109         s32i    a11, a8, 12                       
110         addi    a8, a8, 16                        
111         addi    a7, a7, 16                        
112         blt     a8, a5, 1b                        
113                                                   
114                                                   
115         /* We have to flush and invalidate the    
116                                                   
117 #if XCHAL_DCACHE_IS_WRITEBACK                     
118                                                   
119         ___flush_dcache_all a5 a6                 
120                                                   
121 #endif                                            
122                                                   
123         ___invalidate_icache_all a5 a6            
124         isync                                     
125                                                   
126         movi    a11, _reloc                       
127         jx      a11                               
128                                                   
129         .globl _reloc                             
130 _reloc:                                           
131                                                   
132         /* RedBoot is now at the end of the me    
133          * to copy the parameter list. Keep th    
134          * we need it again. */                   
135 #if 0                                             
136         # a0: load address                        
137         # a2: start address of parameter list     
138         # a3: length of parameter list            
139         # a4: __start                             
140                                                   
141         /* copy the parameter list out of the     
142                                                   
143         movi    a6, _param_start                  
144         add     a3, a2, a3                        
145 2:                                                
146         l32i    a8, a2, 0                         
147         s32i    a8, a6, 0                         
148         addi    a2, a2, 4                         
149         addi    a6, a6, 4                         
150         blt     a2, a3, 2b                        
151 #endif                                            
152                                                   
153         /* clear BSS section */                   
154         movi    a6, __bss_start                   
155         movi    a7, __bss_end                     
156         movi.n  a5, 0                             
157 3:                                                
158         s32i    a5, a6, 0                         
159         addi    a6, a6, 4                         
160         blt     a6, a7, 3b                        
161                                                   
162         movi    a5, -16                           
163         movi    a1, _stack + STACK_SIZE           
164         and     a1, a1, a5                        
165                                                   
166         /* Uncompress the kernel */               
167                                                   
168         # a0: load address                        
169         # a2: boot parameter                      
170         # a4: __start                             
171                                                   
172         movi    a3, __image_load                  
173         sub     a4, a3, a4                        
174         add     abi_arg2, a0, a4                  
175                                                   
176         # a1  Stack                               
177         # a8(a4)  Load address of the image       
178                                                   
179         movi    abi_arg0, _image_start            
180         movi    abi_arg4, _image_end              
181         movi    abi_arg1, 0x1000000               
182         sub     abi_tmp0, abi_arg4, abi_arg0      
183         movi    abi_arg3, complen                 
184         s32i    abi_tmp0, abi_arg3, 0             
185                                                   
186         movi    a0, 0                             
187                                                   
188         # abi_arg0 destination                    
189         # abi_arg1 maximum size of destination    
190         # abi_arg2 source                         
191         # abi_arg3 ptr to length                  
192                                                   
193         .extern gunzip                            
194         movi    abi_tmp0, gunzip                  
195         beqz    abi_tmp0, 1f                      
196                                                   
197         abi_callx       abi_tmp0                  
198                                                   
199         j       2f                                
200                                                   
201                                                   
202         # abi_arg0 destination start              
203         # abi_arg1 maximum size of destination    
204         # abi_arg2 source start                   
205         # abi_arg3 ptr to length                  
206         # abi_arg4 destination end                
207                                                   
208 1:                                                
209         l32i    abi_tmp0, abi_arg2, 0             
210         l32i    abi_tmp1, abi_arg2, 4             
211         s32i    abi_tmp0, abi_arg0, 0             
212         s32i    abi_tmp1, abi_arg0, 4             
213         l32i    abi_tmp0, abi_arg2, 8             
214         l32i    abi_tmp1, abi_arg2, 12            
215         s32i    abi_tmp0, abi_arg0, 8             
216         s32i    abi_tmp1, abi_arg0, 12            
217         addi    abi_arg0, abi_arg0, 16            
218         addi    abi_arg2, abi_arg2, 16            
219         blt     abi_arg0, abi_arg4, 1b            
220                                                   
221                                                   
222         /* jump to the kernel */                  
223 2:                                                
224 #if XCHAL_DCACHE_IS_WRITEBACK                     
225                                                   
226         ___flush_dcache_all a5 a6                 
227                                                   
228 #endif                                            
229                                                   
230         ___invalidate_icache_all a5 a6            
231                                                   
232         isync                                     
233                                                   
234         # a2  Boot parameter list                 
235                                                   
236 KABI_C0 mov     abi_arg0, abi_saved0              
237         movi    a0, _image_start                  
238         jx      a0                                
239                                                   
240         .align 16                                 
241         .data                                     
242         .globl avail_ram                          
243 avail_ram:                                        
244         .long   _heap                             
245         .globl end_avail                          
246 end_avail:                                        
247         .long   _heap + HEAP_SIZE                 
248                                                   
249         .comm _stack, STACK_SIZE                  
250         .comm _heap, HEAP_SIZE                    
251                                                   
252         .globl end_avail                          
253         .comm complen, 4                          
254                                                   
255         .end    literal_prefix                    
                                                      

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