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

TOMOYO Linux Cross Reference
Linux/arch/mips/alchemy/common/sleeper.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/mips/alchemy/common/sleeper.S (Architecture alpha) and /arch/ppc/alchemy/common/sleeper.S (Architecture ppc)


  1 /* SPDX-License-Identifier: GPL-2.0-or-later *    
  2 /*                                                
  3  * Copyright 2002 Embedded Edge, LLC              
  4  * Author: dan@embeddededge.com                   
  5  *                                                
  6  * Sleep helper for Au1xxx sleep mode.            
  7  */                                               
  8                                                   
  9 #include <asm/asm.h>                              
 10 #include <asm/mipsregs.h>                         
 11 #include <asm/regdef.h>                           
 12 #include <asm/stackframe.h>                       
 13                                                   
 14         .extern __flush_cache_all                 
 15                                                   
 16         .text                                     
 17         .set noreorder                            
 18         .set noat                                 
 19         .align  5                                 
 20                                                   
 21                                                   
 22 /* preparatory stuff */                           
 23 .macro  SETUP_SLEEP                               
 24         subu    sp, PT_SIZE                       
 25         sw      $1, PT_R1(sp)                     
 26         sw      $2, PT_R2(sp)                     
 27         sw      $3, PT_R3(sp)                     
 28         sw      $4, PT_R4(sp)                     
 29         sw      $5, PT_R5(sp)                     
 30         sw      $6, PT_R6(sp)                     
 31         sw      $7, PT_R7(sp)                     
 32         sw      $16, PT_R16(sp)                   
 33         sw      $17, PT_R17(sp)                   
 34         sw      $18, PT_R18(sp)                   
 35         sw      $19, PT_R19(sp)                   
 36         sw      $20, PT_R20(sp)                   
 37         sw      $21, PT_R21(sp)                   
 38         sw      $22, PT_R22(sp)                   
 39         sw      $23, PT_R23(sp)                   
 40         sw      $26, PT_R26(sp)                   
 41         sw      $27, PT_R27(sp)                   
 42         sw      $28, PT_R28(sp)                   
 43         sw      $30, PT_R30(sp)                   
 44         sw      $31, PT_R31(sp)                   
 45         mfc0    k0, CP0_STATUS                    
 46         sw      k0, 0x20(sp)                      
 47         mfc0    k0, CP0_CONTEXT                   
 48         sw      k0, 0x1c(sp)                      
 49         mfc0    k0, CP0_PAGEMASK                  
 50         sw      k0, 0x18(sp)                      
 51         mfc0    k0, CP0_CONFIG                    
 52         sw      k0, 0x14(sp)                      
 53                                                   
 54         /* flush caches to make sure context i    
 55         la      t1, __flush_cache_all             
 56         lw      t0, 0(t1)                         
 57         jalr    t0                                
 58          nop                                      
 59                                                   
 60         /* Now set up the scratch registers so    
 61          * return to this point upon wakeup.      
 62          * sys_scratch0 : SP                      
 63          * sys_scratch1 : RA                      
 64          */                                       
 65         lui     t3, 0xb190              /* sys    
 66         sw      sp, 0x0018(t3)                    
 67         la      k0, alchemy_sleep_wakeup          
 68         sw      k0, 0x001c(t3)                    
 69 .endm                                             
 70                                                   
 71 .macro  DO_SLEEP                                  
 72         /* put power supply and processor to s    
 73         sw      zero, 0x0078(t3)        /* sys    
 74         sync                                      
 75         sw      zero, 0x007c(t3)        /* sys    
 76         sync                                      
 77         nop                                       
 78         nop                                       
 79         nop                                       
 80         nop                                       
 81         nop                                       
 82         nop                                       
 83         nop                                       
 84         nop                                       
 85 .endm                                             
 86                                                   
 87 /* sleep code for Au1000/Au1100/Au1500 memory     
 88 LEAF(alchemy_sleep_au1000)                        
 89                                                   
 90         SETUP_SLEEP                               
 91                                                   
 92         /* cache following instructions, as me    
 93         la      t0, 1f                            
 94         .set    arch=r4000                        
 95         cache   0x14, 0(t0)                       
 96         cache   0x14, 32(t0)                      
 97         cache   0x14, 64(t0)                      
 98         cache   0x14, 96(t0)                      
 99         .set    mips0                             
100                                                   
101 1:      lui     a0, 0xb400              /* mem    
102         sw      zero, 0x001c(a0)        /* Pre    
103         sync                                      
104         sw      zero, 0x0020(a0)        /* Aut    
105         sync                                      
106         sw      zero, 0x0030(a0)        /* Sle    
107         sync                                      
108                                                   
109         DO_SLEEP                                  
110                                                   
111 END(alchemy_sleep_au1000)                         
112                                                   
113 /* sleep code for Au1550/Au1200 memory control    
114 LEAF(alchemy_sleep_au1550)                        
115                                                   
116         SETUP_SLEEP                               
117                                                   
118         /* cache following instructions, as me    
119         la      t0, 1f                            
120         .set    arch=r4000                        
121         cache   0x14, 0(t0)                       
122         cache   0x14, 32(t0)                      
123         cache   0x14, 64(t0)                      
124         cache   0x14, 96(t0)                      
125         .set    mips0                             
126                                                   
127 1:      lui     a0, 0xb400              /* mem    
128         sw      zero, 0x08c0(a0)        /* Pre    
129         sync                                      
130         sw      zero, 0x08d0(a0)        /* Sel    
131         sync                                      
132                                                   
133         /* wait for sdram to enter self-refres    
134         lui     t0, 0x0100                        
135 2:      lw      t1, 0x0850(a0)          /* mem    
136         and     t2, t1, t0                        
137         beq     t2, zero, 2b                      
138          nop                                      
139                                                   
140         /* disable SDRAM clocks */                
141         lui     t0, 0xcfff                        
142         ori     t0, t0, 0xffff                    
143         lw      t1, 0x0840(a0)          /* mem    
144         and     t1, t0, t1              /* cle    
145         sw      t1, 0x0840(a0)          /* mem    
146         sync                                      
147                                                   
148         DO_SLEEP                                  
149                                                   
150 END(alchemy_sleep_au1550)                         
151                                                   
152 /* sleepcode for Au1300 memory controller type    
153 LEAF(alchemy_sleep_au1300)                        
154                                                   
155         SETUP_SLEEP                               
156                                                   
157         /* cache following instructions, as me    
158         la      t0, 2f                            
159         la      t1, 4f                            
160         subu    t2, t1, t0                        
161                                                   
162         .set    arch=r4000                        
163                                                   
164 1:      cache   0x14, 0(t0)                       
165         subu    t2, t2, 32                        
166         bgez    t2, 1b                            
167          addu   t0, t0, 32                        
168                                                   
169         .set    mips0                             
170                                                   
171 2:      lui     a0, 0xb400              /* mem    
172                                                   
173         /* disable all ports in mem_sdportcfga    
174         sw      zero, 0x868(a0)         /* mem    
175         sync                                      
176                                                   
177         /* disable ODT */                         
178         li      t0, 0x03010000                    
179         sw      t0, 0x08d8(a0)          /* mem    
180         sw      t0, 0x08dc(a0)          /* mem    
181         sync                                      
182                                                   
183         /* precharge */                           
184         li      t0, 0x23000400                    
185         sw      t0, 0x08dc(a0)          /* mem    
186         sw      t0, 0x08d8(a0)          /* mem    
187         sync                                      
188                                                   
189         /* auto refresh */                        
190         sw      zero, 0x08c8(a0)        /* mem    
191         sync                                      
192                                                   
193         /* block access to the DDR */             
194         lw      t0, 0x0848(a0)          /* mem    
195         li      t1, (1 << 7 | 0x3F)               
196         or      t0, t0, t1                        
197         sw      t0, 0x0848(a0)          /* mem    
198         sync                                      
199                                                   
200         /* issue the Self Refresh command */      
201         li      t0, 0x10000000                    
202         sw      t0, 0x08dc(a0)          /* mem    
203         sw      t0, 0x08d8(a0)          /* mem    
204         sync                                      
205                                                   
206         /* wait for sdram to enter self-refres    
207         lui     t0, 0x0300                        
208 3:      lw      t1, 0x0850(a0)          /* mem    
209         and     t2, t1, t0                        
210         bne     t2, t0, 3b                        
211          nop                                      
212                                                   
213         /* disable SDRAM clocks */                
214         li      t0, ~(3<<28)                      
215         lw      t1, 0x0840(a0)          /* mem    
216         and     t1, t1, t0              /* cle    
217         sw      t1, 0x0840(a0)          /* mem    
218         sync                                      
219                                                   
220         DO_SLEEP                                  
221 4:                                                
222                                                   
223 END(alchemy_sleep_au1300)                         
224                                                   
225                                                   
226         /* This is where we return upon wakeup    
227          * Reload all of the registers and ret    
228          */                                       
229 LEAF(alchemy_sleep_wakeup)                        
230         lw      k0, 0x20(sp)                      
231         mtc0    k0, CP0_STATUS                    
232         lw      k0, 0x1c(sp)                      
233         mtc0    k0, CP0_CONTEXT                   
234         lw      k0, 0x18(sp)                      
235         mtc0    k0, CP0_PAGEMASK                  
236         lw      k0, 0x14(sp)                      
237         mtc0    k0, CP0_CONFIG                    
238                                                   
239         /* We need to catch the early Alchemy     
240          * the write-only Config[OD] bit and s    
241          */                                       
242         jal     au1x00_fixup_config_od            
243          nop                                      
244         lw      $1, PT_R1(sp)                     
245         lw      $2, PT_R2(sp)                     
246         lw      $3, PT_R3(sp)                     
247         lw      $4, PT_R4(sp)                     
248         lw      $5, PT_R5(sp)                     
249         lw      $6, PT_R6(sp)                     
250         lw      $7, PT_R7(sp)                     
251         lw      $16, PT_R16(sp)                   
252         lw      $17, PT_R17(sp)                   
253         lw      $18, PT_R18(sp)                   
254         lw      $19, PT_R19(sp)                   
255         lw      $20, PT_R20(sp)                   
256         lw      $21, PT_R21(sp)                   
257         lw      $22, PT_R22(sp)                   
258         lw      $23, PT_R23(sp)                   
259         lw      $26, PT_R26(sp)                   
260         lw      $27, PT_R27(sp)                   
261         lw      $28, PT_R28(sp)                   
262         lw      $30, PT_R30(sp)                   
263         lw      $31, PT_R31(sp)                   
264         jr      ra                                
265          addiu  sp, PT_SIZE                       
266 END(alchemy_sleep_wakeup)                         
                                                      

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