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

TOMOYO Linux Cross Reference
Linux/arch/parisc/kernel/head.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/parisc/kernel/head.S (Architecture i386) and /arch/mips/kernel/head.S (Architecture mips)


  1 /* This file is subject to the terms and condi !!   1 /*
                                                   >>   2  * This file is subject to the terms and conditions of the GNU General Public
  2  * License.  See the file "COPYING" in the mai      3  * License.  See the file "COPYING" in the main directory of this archive
  3  * for more details.                                4  * for more details.
  4  *                                                  5  *
  5  * Copyright (C) 1999-2007 by Helge Deller <del !!   6  * Copyright (C) 1994, 1995 Waldorf Electronics
  6  * Copyright 1999 SuSE GmbH (Philipp Rumpf)    !!   7  * Written by Ralf Baechle and Andreas Busse
  7  * Copyright 1999 Philipp Rumpf (prumpf@tux.or !!   8  * Copyright (C) 1994 - 99, 2003, 06 Ralf Baechle
  8  * Copyright 2000 Hewlett Packard (Paul Bame,  !!   9  * Copyright (C) 1996 Paul M. Antoine
  9  * Copyright (C) 2001 Grant Grundler (Hewlett  !!  10  * Modified for DECStation and hence R3000 support by Paul M. Antoine
 10  * Copyright (C) 2004 Kyle McMartin <kyle@debia !!  11  * Further modifications by David S. Miller and Harald Koerfgen
 11  *                                             !!  12  * Copyright (C) 1999 Silicon Graphics, Inc.
 12  * Initial Version 04-23-1999 by Helge Deller < !!  13  * Kevin Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
                                                   >>  14  * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved.
 13  */                                                15  */
 14                                                << 
 15 #include <asm/asm-offsets.h>                   << 
 16 #include <asm/psw.h>                           << 
 17 #include <asm/pdc.h>                           << 
 18                                                << 
 19 #include <asm/assembly.h>                      << 
 20                                                << 
 21 #include <linux/linkage.h>                     << 
 22 #include <linux/init.h>                            16 #include <linux/init.h>
 23 #include <linux/pgtable.h>                     !!  17 #include <linux/threads.h>
 24                                                << 
 25         .level  1.1                            << 
 26                                                << 
 27         __INITDATA                             << 
 28 ENTRY(boot_args)                               << 
 29         .word 0 /* arg0 */                     << 
 30         .word 0 /* arg1 */                     << 
 31         .word 0 /* arg2 */                     << 
 32         .word 0 /* arg3 */                     << 
 33 END(boot_args)                                 << 
 34                                                << 
 35         __HEAD                                 << 
 36                                                << 
 37         .align  4                              << 
 38         .import init_task,data                 << 
 39         .import init_stack,data                << 
 40         .import fault_vector_20,code    /* IVA << 
 41 #ifndef CONFIG_64BIT                           << 
 42         .import fault_vector_11,code    /* IVA << 
 43         .import $global$                /* for << 
 44 #endif /*!CONFIG_64BIT*/                       << 
 45 ENTRY(parisc_kernel_start)                     << 
 46         .proc                                  << 
 47         .callinfo                              << 
 48                                                << 
 49         /* Make sure sr4-sr7 are set to zero f << 
 50         mtsp    %r0,%sr4                       << 
 51         mtsp    %r0,%sr5                       << 
 52         mtsp    %r0,%sr6                       << 
 53         mtsp    %r0,%sr7                       << 
 54                                                << 
 55         /* Clear BSS (shouldn't the boot loade << 
 56                                                << 
 57         .import __bss_start,data               << 
 58         .import __bss_stop,data                << 
 59                                                << 
 60         load32          PA(__bss_start),%r3    << 
 61         load32          PA(__bss_stop),%r4     << 
 62 $bss_loop:                                     << 
 63         cmpb,<<,n       %r3,%r4,$bss_loop      << 
 64         stw,ma          %r0,4(%r3)             << 
 65                                                << 
 66         /* Save away the arguments the boot lo << 
 67         load32          PA(boot_args),%r1      << 
 68         stw,ma          %arg0,4(%r1)           << 
 69         stw,ma          %arg1,4(%r1)           << 
 70         stw,ma          %arg2,4(%r1)           << 
 71         stw,ma          %arg3,4(%r1)           << 
 72                                                << 
 73 #if defined(CONFIG_PA20)                       << 
 74         /* check for 64-bit capable CPU as req << 
 75         ldi             32,%r10                << 
 76         mtctl           %r10,%cr11             << 
 77         .level 2.0                             << 
 78         mfctl,w         %cr11,%r10             << 
 79         .level 1.1                             << 
 80         comib,<>,n      0,%r10,$cpu_ok         << 
 81                                                << 
 82         load32          PA(msg1),%arg0         << 
 83         ldi             msg1_end-msg1,%arg1    << 
 84 $iodc_panic:                                   << 
 85         copy            %arg0, %r10            << 
 86         copy            %arg1, %r11            << 
 87         load32          PA(init_stack),%sp     << 
 88 #define MEM_CONS 0x3A0                         << 
 89         ldw             MEM_CONS+32(%r0),%arg0 << 
 90         ldi             ENTRY_IO_COUT,%arg1    << 
 91         ldw             MEM_CONS+36(%r0),%arg2 << 
 92         ldw             MEM_CONS+8(%r0),%arg3  << 
 93         load32          PA(__bss_start),%r1    << 
 94         stw             %r1,-52(%sp)           << 
 95         stw             %r0,-56(%sp)           << 
 96         stw             %r10,-60(%sp)          << 
 97         stw             %r11,-64(%sp)          << 
 98         stw             %r0,-68(%sp)           << 
 99         load32          PA(.iodc_panic_ret), % << 
100         ldw             MEM_CONS+40(%r0),%r1   << 
101         bv,n            (%r1)                  << 
102 .iodc_panic_ret:                               << 
103         b .                             /* wai << 
104         or              %r10,%r10,%r10  /* qem << 
105 msg1:   .ascii "Can't boot kernel which was bu << 
106 msg1_end:                                      << 
107                                                << 
108 $cpu_ok:                                       << 
109 #endif                                         << 
110                                                << 
111         .level  PA_ASM_LEVEL                   << 
112                                                    18 
113         /* Initialize startup VM. Just map fir !!  19 #include <asm/addrspace.h>
114         load32          PA(swapper_pg_dir),%r4 !!  20 #include <asm/asm.h>
115         mtctl           %r4,%cr24       /* Ini !!  21 #include <asm/asmmacro.h>
116         mtctl           %r4,%cr25       /* Ini !!  22 #include <asm/irqflags.h>
117                                                !!  23 #include <asm/regdef.h>
118 #if CONFIG_PGTABLE_LEVELS == 3                 !!  24 #include <asm/mipsregs.h>
119         /* Set pmd in pgd */                   !!  25 #include <asm/stackframe.h>
120         load32          PA(pmd0),%r5           << 
121         shrd            %r5,PxD_VALUE_SHIFT,%r << 
122         ldo             (PxD_FLAG_PRESENT+PxD_ << 
123         stw             %r3,ASM_PGD_ENTRY*ASM_ << 
124         ldo             ASM_PMD_ENTRY*ASM_PMD_ << 
125 #else                                          << 
126         /* 2-level page table, so pmd == pgd * << 
127         ldo             ASM_PGD_ENTRY*ASM_PGD_ << 
128 #endif                                         << 
129                                                    26 
130         /* Fill in pmd with enough pte directo !!  27 #include <kernel-entry-init.h>
131         load32          PA(pg0),%r1            << 
132         SHRREG          %r1,PxD_VALUE_SHIFT,%r << 
133         ldo             (PxD_FLAG_PRESENT+PxD_ << 
134                                                    28 
135         ldi             ASM_PT_INITIAL,%r1     !!  29         /*
                                                   >>  30          * For the moment disable interrupts, mark the kernel mode and
                                                   >>  31          * set ST0_KX so that the CPU does not spit fire when using
                                                   >>  32          * 64-bit addresses.  A full initialization of the CPU's status
                                                   >>  33          * register is done later in per_cpu_trap_init().
                                                   >>  34          */
                                                   >>  35         .macro  setup_c0_status set clr
                                                   >>  36         .set    push
                                                   >>  37         mfc0    t0, CP0_STATUS
                                                   >>  38         or      t0, ST0_KERNEL_CUMASK|\set|0x1f|\clr
                                                   >>  39         xor     t0, 0x1f|\clr
                                                   >>  40         mtc0    t0, CP0_STATUS
                                                   >>  41         .set    noreorder
                                                   >>  42         sll     zero,3                          # ehb
                                                   >>  43         .set    pop
                                                   >>  44         .endm
136                                                    45 
137 1:                                             !!  46         .macro  setup_c0_status_pri
138         stw             %r3,0(%r4)             !!  47 #ifdef CONFIG_64BIT
139         ldo             (PAGE_SIZE >> PxD_VALU !!  48         setup_c0_status ST0_KX 0
140         addib,>         -1,%r1,1b              << 
141 #if CONFIG_PGTABLE_LEVELS == 3                 << 
142         ldo             ASM_PMD_ENTRY_SIZE(%r4 << 
143 #else                                              49 #else
144         ldo             ASM_PGD_ENTRY_SIZE(%r4 !!  50         setup_c0_status 0 0
145 #endif                                         << 
146                                                << 
147                                                << 
148         /* Now initialize the PTEs themselves. << 
149          * everything ... it will get remapped << 
150         ldo             0+_PAGE_KERNEL_RWX(%r0 << 
151         load32          (1<<(KERNEL_INITIAL_OR << 
152         load32          PA(pg0),%r1            << 
153                                                << 
154 $pgt_fill_loop:                                << 
155         STREGM          %r3,ASM_PTE_ENTRY_SIZE << 
156         ldo             (1<<PFN_PTE_SHIFT)(%r3 << 
157         addib,>         -1,%r11,$pgt_fill_loop << 
158         nop                                    << 
159                                                << 
160         /* Load the return address...er...cras << 
161         copy            %r0,%r2                << 
162                                                << 
163         /* And the RFI Target address too */   << 
164         load32          start_parisc,%r11      << 
165                                                << 
166         /* And the initial task pointer */     << 
167         load32          init_task,%r6          << 
168         mtctl           %r6,%cr30              << 
169                                                << 
170         /* And the stack pointer too */        << 
171         load32          init_stack,%sp         << 
172         tophys_r1       %sp                    << 
173 #if defined(CONFIG_64BIT) && defined(CONFIG_FU << 
174         .import _mcount,data                   << 
175         /* initialize mcount FPTR */           << 
176         /* Get the global data pointer */      << 
177         loadgp                                 << 
178         load32          PA(_mcount), %r10      << 
179         std             %dp,0x18(%r10)         << 
180 #endif                                             51 #endif
                                                   >>  52         .endm
181                                                    53 
182 #define MEM_PDC_LO 0x388                       !!  54         .macro  setup_c0_status_sec
183 #define MEM_PDC_HI 0x35C                       << 
184 #ifdef CONFIG_64BIT                                55 #ifdef CONFIG_64BIT
185         /* Get PDCE_PROC for monarch CPU. */   !!  56         setup_c0_status ST0_KX ST0_BEV
186         ldw             MEM_PDC_LO(%r0),%r3    !!  57 #else
187         ldw             MEM_PDC_HI(%r0),%r10   !!  58         setup_c0_status 0 ST0_BEV
188         depd            %r10, 31, 32, %r3      << 
189 #endif                                         << 
190                                                << 
191                                                << 
192 #ifdef CONFIG_SMP                              << 
193         /* Set the smp rendezvous address into << 
194         ** It would be safer to do this in ini << 
195         ** it's just way easier to deal with h << 
196         ** of 64-bit function ptrs and the add << 
197         */                                     << 
198         load32          PA(smp_slave_stext),%r << 
199         stw             %r10,0x10(%r0)  /* MEM << 
200         stw             %r0,0x28(%r0)   /* MEM << 
201                                                << 
202         /* FALLTHROUGH */                      << 
203         .procend                               << 
204                                                << 
205 #ifdef CONFIG_HOTPLUG_CPU                      << 
206         /* common_stext is far away in another << 
207         load32          PA(common_stext), %rp  << 
208         bv,n            (%rp)                  << 
209                                                << 
210         /* common_stext and smp_slave_stext ne << 
211         .text                                  << 
212 #endif                                             59 #endif
                                                   >>  60         .endm
213                                                    61 
                                                   >>  62 #ifndef CONFIG_NO_EXCEPT_FILL
214         /*                                         63         /*
215         ** Code Common to both Monarch and Sla !!  64          * Reserved space for exception handlers.
216         ** Entry:                              !!  65          * Necessary for machines which link their kernels at KSEG0.
217         **                                     !!  66          */
218         **  1.1:                               !!  67         .fill   0x400
219         **    %r11 must contain RFI target add << 
220         **    %r25/%r26 args to pass to target << 
221         **    %r2  in case rfi target decides  << 
222         **                                     << 
223         **  2.0w:                              << 
224         **    %r3  PDCE_PROC address           << 
225         **    %r11 RFI target address          << 
226         **                                     << 
227         ** Caller must init: SR4-7, %sp, %r10, << 
228         */                                     << 
229 common_stext:                                  << 
230         .proc                                  << 
231         .callinfo                              << 
232 #else                                          << 
233         /* Clear PDC entry point - we won't us << 
234         stw             %r0,0x10(%r0)   /* MEM << 
235         stw             %r0,0x28(%r0)   /* MEM << 
236 #endif /*CONFIG_SMP*/                          << 
237                                                << 
238 #ifdef CONFIG_64BIT                            << 
239         mfctl           %cr30,%r6              << 
240         tophys_r1       %r6                    << 
241                                                << 
242         /* Save the rfi target address */      << 
243         STREG           %r11,  TASK_PT_GR11(%r << 
244         /* Switch to wide mode Superdome doesn << 
245         ** calls.                              << 
246         */                                     << 
247 1:      mfia            %rp             /* cle << 
248         ldo             2f-1b(%rp),%rp         << 
249         depdi           0,31,32,%rp            << 
250         bv              (%rp)                  << 
251         ssm             PSW_SM_W,%r0           << 
252                                                << 
253         /* Set Wide mode as the "Default" (eg  << 
254         ** First trap occurs *right* after (or << 
255         ** Someday, palo might not do this for << 
256         */                                     << 
257 2:                                             << 
258                                                << 
259         ldo             PDC_PSW(%r0),%arg0     << 
260         ldo             PDC_PSW_SET_DEFAULTS(% << 
261         ldo             PDC_PSW_WIDE_BIT(%r0), << 
262         load32          PA(stext_pdc_ret), %rp << 
263         bv              (%r3)                  << 
264         copy            %r0,%arg3              << 
265                                                << 
266 stext_pdc_ret:                                 << 
267         LDREG           TASK_PT_GR11(%r6), %r1 << 
268         tovirt_r1       %r6                    << 
269         mtctl           %r6,%cr30              << 
270 #endif                                             68 #endif
271                                                    69 
272 #ifndef CONFIG_64BIT                           !!  70 EXPORT(_stext)
273         /* clear all BTLBs */                  << 
274         ldi             PDC_BLOCK_TLB,%arg0    << 
275         load32          PA(stext_pdc_btlb_ret) << 
276         ldw             MEM_PDC_LO(%r0),%r3    << 
277         bv              (%r3)                  << 
278         ldi             PDC_BTLB_PURGE_ALL,%ar << 
279 stext_pdc_btlb_ret:                            << 
280 #endif                                         << 
281                                                    71 
282         /* PARANOID: clear user scratch/user s !!  72 #ifdef CONFIG_BOOT_RAW
283         mtsp    %r0,%sr0                       !!  73         /*
284         mtsp    %r0,%sr1                       !!  74          * Give us a fighting chance of running if execution beings at the
285         mtsp    %r0,%sr2                       !!  75          * kernel load address.  This is needed because this platform does
286         mtsp    %r0,%sr3                       !!  76          * not have a ELF loader yet.
287                                                << 
288         /* Initialize Protection Registers */  << 
289         mtctl   %r0,%cr8                       << 
290         mtctl   %r0,%cr9                       << 
291         mtctl   %r0,%cr12                      << 
292         mtctl   %r0,%cr13                      << 
293                                                << 
294         /* Initialize the global data pointer  << 
295         loadgp                                 << 
296                                                << 
297         /* Set up our interrupt table.  HPMCs  << 
298          *                                     << 
299          * We need to install the correct iva  << 
300          * following short sequence of instruc << 
301          * (without being illegal on a PA1.1 m << 
302          */                                        77          */
303 #ifndef CONFIG_64BIT                           !!  78 FEXPORT(__kernel_entry)
304         ldi             32,%r10                !!  79         j       kernel_entry
305         mtctl           %r10,%cr11             !!  80 #endif /* CONFIG_BOOT_RAW */
306         .level 2.0                             << 
307         mfctl,w         %cr11,%r10             << 
308         .level 1.1                             << 
309         comib,<>,n      0,%r10,$is_pa20        << 
310         ldil            L%PA(fault_vector_11), << 
311         b               $install_iva           << 
312         ldo             R%PA(fault_vector_11)( << 
313                                                << 
314 $is_pa20:                                      << 
315         .level          PA_ASM_LEVEL /* restor << 
316 #endif /*!CONFIG_64BIT*/                       << 
317         load32          PA(fault_vector_20),%r << 
318                                                << 
319 $install_iva:                                  << 
320         mtctl           %r10,%cr14             << 
321                                                << 
322         b               aligned_rfi  /* Prepar << 
323         nop                                    << 
324                                                << 
325         .align 128                             << 
326 aligned_rfi:                                   << 
327         pcxt_ssm_bug                           << 
328                                                << 
329         copy            %r3, %arg0      /* PDC << 
330                                                << 
331         rsm             PSW_SM_QUIET,%r0       << 
332         /* Don't need NOPs, have 8 compliant i << 
333                                                << 
334         mtctl           %r0,%cr17       /* Cle << 
335         mtctl           %r0,%cr17       /* Cle << 
336                                                << 
337         /* Load RFI target into PC queue */    << 
338         mtctl           %r11,%cr18      /* IIA << 
339         ldo             4(%r11),%r11           << 
340         mtctl           %r11,%cr18      /* IIA << 
341                                                << 
342         load32          KERNEL_PSW,%r10        << 
343         mtctl           %r10,%ipsw             << 
344                                                << 
345         tovirt_r1       %sp                    << 
346                                                << 
347         /* Jump through hyperspace to Virt Mod << 
348         rfi                                    << 
349         nop                                    << 
350                                                    81 
351         .procend                               !!  82         __REF
352                                                    83 
353 #ifdef CONFIG_SMP                              !!  84 NESTED(kernel_entry, 16, sp)                    # kernel entry point
354                                                    85 
355         .import smp_init_current_idle_task,dat !!  86         kernel_entry_setup                      # cpu specific setup
356         .import smp_callin,code                << 
357                                                    87 
358 #ifndef CONFIG_64BIT                           !!  88         setup_c0_status_pri
359 smp_callin_rtn:                                << 
360         .proc                                  << 
361         .callinfo                              << 
362         break   1,1             /*  Break if r << 
363         nop                                    << 
364         nop                                    << 
365         .procend                               << 
366 #endif /*!CONFIG_64BIT*/                       << 
367                                                << 
368 /********************************************* << 
369 * smp_slave_stext is executed by all non-monar << 
370 * pokes the slave CPUs in smp.c:smp_boot_cpus( << 
371 *                                              << 
372 * Once here, registers values are initialized  << 
373 * mode. Once all available/eligible CPUs are i << 
374 * released and start out by executing their ow << 
375 ********************************************** << 
376 smp_slave_stext:                               << 
377         .proc                                  << 
378         .callinfo                              << 
379                                                    89 
380         /*                                     !!  90         /* We might not get launched at the address the kernel is linked to,
381         ** Initialize Space registers          !!  91            so we jump there.  */
382         */                                     !!  92         PTR_LA  t0, 0f
383         mtsp       %r0,%sr4                    !!  93         jr      t0
384         mtsp       %r0,%sr5                    !!  94 0:
385         mtsp       %r0,%sr6                    << 
386         mtsp       %r0,%sr7                    << 
387                                                    95 
388 #ifdef CONFIG_64BIT                            !!  96         PTR_LA          t0, __bss_start         # clear .bss
389         /*                                     !!  97         LONG_S          zero, (t0)
390          *  Enable Wide mode early, in case th !!  98         PTR_LA          t1, __bss_stop - LONGSIZE
391          *  task in smp_init_current_idle_task !!  99 1:
392          */                                    !! 100         PTR_ADDIU       t0, LONGSIZE
393 1:      mfia            %rp             /* cle !! 101         LONG_S          zero, (t0)
394         ldo             2f-1b(%rp),%rp         !! 102         bne             t0, t1, 1b
395         depdi           0,31,32,%rp            !! 103 
396         bv              (%rp)                  !! 104         LONG_S          a0, fw_arg0             # firmware arguments
397         ssm             PSW_SM_W,%r0           !! 105         LONG_S          a1, fw_arg1
398 2:                                             !! 106         LONG_S          a2, fw_arg2
399 #endif                                         !! 107         LONG_S          a3, fw_arg3
400                                                << 
401         /*  Initialize the SP - monarch sets u << 
402         load32          PA(smp_init_current_id << 
403         LDREG           0(%r6),%r6             << 
404         mtctl           %r6,%cr30              << 
405         tophys_r1       %r6                    << 
406         LDREG           TASK_STACK(%r6),%sp    << 
407         tophys_r1       %sp                    << 
408         ldo             FRAME_SIZE(%sp),%sp    << 
409                                                << 
410         /* point CPU to kernel page tables */  << 
411         load32          PA(swapper_pg_dir),%r4 << 
412         mtctl           %r4,%cr24       /* Ini << 
413         mtctl           %r4,%cr25       /* Ini << 
414                                                   108 
                                                   >> 109         MTC0            zero, CP0_CONTEXT       # clear context register
415 #ifdef CONFIG_64BIT                               110 #ifdef CONFIG_64BIT
416         /* Setup PDCE_PROC entry */            !! 111         MTC0            zero, CP0_XCONTEXT
417         copy            %arg0,%r3              << 
418 #else                                          << 
419         /* Load RFI *return* address in case s << 
420         load32          smp_callin_rtn,%r2     << 
421 #endif                                            112 #endif
422                                                !! 113         PTR_LA          $28, init_thread_union
423         /* Load RFI target address.  */        !! 114         /* Set the SP after an empty pt_regs.  */
424         load32          smp_callin,%r11        !! 115         PTR_LI          sp, _THREAD_SIZE - 32 - PT_SIZE
425                                                !! 116         PTR_ADDU        sp, $28
426         /* ok...common code can handle the res !! 117         back_to_back_c0_hazard
427         b               common_stext           !! 118         set_saved_sp    sp, t0, t1
428         nop                                    !! 119         PTR_SUBU        sp, 4 * SZREG           # init stack pointer
429                                                !! 120 
430         .procend                               !! 121 #ifdef CONFIG_RELOCATABLE
431 #endif /* CONFIG_SMP */                        !! 122         /* Copy kernel and apply the relocations */
432                                                !! 123         jal             relocate_kernel
433 #ifndef CONFIG_64BIT                           !! 124 
434         .section .data..ro_after_init          !! 125         /* Repoint the sp into the new kernel image */
                                                   >> 126         PTR_LI          sp, _THREAD_SIZE - 32 - PT_SIZE
                                                   >> 127         PTR_ADDU        sp, $28
                                                   >> 128         set_saved_sp    sp, t0, t1
                                                   >> 129         PTR_SUBU        sp, 4 * SZREG           # init stack pointer
435                                                   130 
436         .align  4                              !! 131         /*
437         .export $global$,data                  !! 132          * relocate_kernel returns the entry point either
                                                   >> 133          * in the relocated kernel or the original if for
                                                   >> 134          * some reason relocation failed - jump there now
                                                   >> 135          * with instruction hazard barrier because of the
                                                   >> 136          * newly sync'd icache.
                                                   >> 137          */
                                                   >> 138         jr.hb           v0
                                                   >> 139 #else  /* !CONFIG_RELOCATABLE */
                                                   >> 140         j               start_kernel
                                                   >> 141 #endif /* !CONFIG_RELOCATABLE */
                                                   >> 142         END(kernel_entry)
438                                                   143 
439         .type   $global$,@object               !! 144 #ifdef CONFIG_SMP
440         .size   $global$,4                     !! 145 /*
441 $global$:                                      !! 146  * SMP slave cpus entry point.  Board specific code for bootstrap calls this
442         .word 0                                !! 147  * function after setting up the stack and gp registers.
443 #endif /*!CONFIG_64BIT*/                       !! 148  */
                                                   >> 149 NESTED(smp_bootstrap, 16, sp)
                                                   >> 150         smp_slave_setup
                                                   >> 151         setup_c0_status_sec
                                                   >> 152         j       start_secondary
                                                   >> 153         END(smp_bootstrap)
                                                   >> 154 #endif /* CONFIG_SMP */
                                                      

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