source: rtems/bsps/powerpc/qoriq/start/start.S @ 511dc4b

5
Last change on this file since 511dc4b was 511dc4b, checked in by Sebastian Huber <sebastian.huber@…>, on 06/19/18 at 07:09:51

Rework initialization and interrupt stack support

Statically initialize the interrupt stack area
(_Configuration_Interrupt_stack_area_begin,
_Configuration_Interrupt_stack_area_end, and
_Configuration_Interrupt_stack_size) via <rtems/confdefs.h>. Place the
interrupt stack area in a special section ".rtemsstack.interrupt". Let
BSPs define the optimal placement of this section in their linker
command files (e.g. in a fast on-chip memory).

This change makes makes the CPU_HAS_SOFTWARE_INTERRUPT_STACK and
CPU_HAS_HARDWARE_INTERRUPT_STACK CPU port defines superfluous, since the
low level initialization code has all information available via global
symbols.

This change makes the CPU_ALLOCATE_INTERRUPT_STACK CPU port define
superfluous, since the interrupt stacks are allocated by confdefs.h for
all architectures. There is no need for BSP-specific linker command
file magic (except the section placement), see previous ARM linker
command file as a bad example.

Remove _CPU_Install_interrupt_stack(). Initialize the hardware
interrupt stack in _CPU_Initialize() if necessary (e.g.
m68k_install_interrupt_stack()).

The optional _CPU_Interrupt_stack_setup() is still useful to customize
the registration of the interrupt stack area in the per-CPU information.

The initialization stack can reuse the interrupt stack, since

  • interrupts are disabled during the sequential system initialization, and
  • the boot_card() function does not return.

This stack resuse saves memory.

Changes per architecture:

arm:

  • Mostly replace the linker symbol based configuration of stacks with the standard <rtems/confdefs.h> configuration via CONFIGURE_INTERRUPT_STACK_SIZE. The size of the FIQ, ABT and UND mode stack is still defined via linker symbols. These modes are rarely used in applications and the default values provided by the BSP should be sufficient in most cases.
  • Remove the bsp_processor_count linker symbol hack used for the SMP support. This is possible since the interrupt stack area is now allocated by the linker and not allocated from the heap. This makes some configure.ac stuff obsolete. Remove the now superfluous BSP variants altcycv_devkit_smp and realview_pbx_a9_qemu_smp.

bfin:

  • Remove unused magic linker command file allocation of initialization stack. Maybe a previous linker command file copy and paste problem? In the start.S the initialization stack is set to a hard coded value.

lm32, m32c, mips, nios2, riscv, sh, v850:

  • Remove magic linker command file allocation of initialization stack. Reuse interrupt stack for initialization stack.

m68k:

  • Remove magic linker command file allocation of initialization stack. Reuse interrupt stack for initialization stack.

powerpc:

  • Remove magic linker command file allocation of initialization stack. Reuse interrupt stack for initialization stack.
  • Used dedicated memory region (REGION_RTEMSSTACK) for the interrupt stack on BSPs using the shared linkcmds.base (replacement for REGION_RWEXTRA).

sparc:

  • Remove the hard coded initialization stack. Use the interrupt stack for the initialization stack on the boot processor. This saves 16KiB of RAM.

Update #3459.

  • Property mode set to 100644
File size: 12.4 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup qoriq
5 *
6 * @brief BSP start.
7 */
8
9/*
10 * Copyright (c) 2010, 2017 embedded brains GmbH.  All rights reserved.
11 *
12 *  embedded brains GmbH
13 *  Dornierstr. 4
14 *  82178 Puchheim
15 *  Germany
16 *  <rtems@embedded-brains.de>
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.org/license/LICENSE.
21 */
22
23#include <rtems/score/percpu.h>
24
25#include <bsp.h>
26
27#include <libcpu/powerpc-utility.h>
28
29#include <bsp/vectors.h>
30
31#if (QORIQ_INITIAL_MSR & MSR_FP) != 0
32#define INITIALIZE_FPU
33#endif
34
35#define FIRST_TLB 0
36#define SCRATCH_TLB QORIQ_TLB1_ENTRY_COUNT - 1
37#define INITIAL_MSR r14
38#define START_STACK r15
39#define SAVED_LINK_REGISTER r16
40#define FDT_REGISTER r17
41
42        .globl _start
43#ifdef RTEMS_SMP
44#if QORIQ_THREAD_COUNT > 1
45        .globl _start_thread
46#endif
47        .globl _start_secondary_processor
48#endif
49        .globl bsp_exc_vector_base
50
51        .section ".bsp_start_text", "ax"
52
53_start:
54        mr      FDT_REGISTER, r3
55        bl      .Linitearly
56
57        /* Get start stack */
58        LA      START_STACK, _Configuration_Interrupt_stack_area_begin
59        LA      r3, _Configuration_Interrupt_stack_size
60        add     START_STACK, START_STACK, r3
61
62        bl      .Linitmore
63
64        /* Copy fast text */
65        LA      r3, bsp_section_fast_text_begin
66        LA      r4, bsp_section_fast_text_load_begin
67        LA      r5, bsp_section_fast_text_size
68        bl      .Lcopy
69        LA      r3, bsp_section_fast_text_begin
70        LA      r4, bsp_section_fast_text_size
71        bl      rtems_cache_flush_multiple_data_lines
72        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
73
74        /* Copy read-only data */
75        LA      r3, bsp_section_rodata_begin
76        LA      r4, bsp_section_rodata_load_begin
77        LA      r5, bsp_section_rodata_size
78        bl      .Lcopy
79
80        /* Copy FDT into read-only data */
81        mr      r3, FDT_REGISTER
82        bl      bsp_fdt_copy
83        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
84
85        /* Flush read-only data */
86        LA      r3, bsp_section_rodata_begin
87        LA      r4, bsp_section_rodata_size
88        bl      rtems_cache_flush_multiple_data_lines
89        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
90
91        /* Copy fast data */
92        LA      r3, bsp_section_fast_data_begin
93        LA      r4, bsp_section_fast_data_load_begin
94        LA      r5, bsp_section_fast_data_size
95        bl      .Lcopy
96
97        /* Copy data */
98        LA      r3, bsp_section_data_begin
99        LA      r4, bsp_section_data_load_begin
100        LA      r5, bsp_section_data_size
101        bl      .Lcopy
102
103        /* NULL pointer access protection (only core 0 has to do this) */
104        mfspr   r3, BOOKE_PIR
105        cmpwi   r3, 0
106        bne     .Lnull_area_setup_done
107        LA      r3, bsp_section_start_begin
108        srawi   r3, r3, 2
109        mtctr   r3
110        li      r3, -4
111        LWI     r4, 0x44000002
112.Lnull_area_setup_loop:
113        stwu    r4, 4(r3)
114        bdnz    .Lnull_area_setup_loop
115.Lnull_area_setup_done:
116
117        li      r3, 1
118        bl      .Linitmmu
119
120        /* Clear SBSS */
121        LA      r3, bsp_section_sbss_begin
122        LA      r4, bsp_section_sbss_size
123        bl      bsp_start_zero
124        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
125
126        /* Clear BSS */
127        LA      r3, bsp_section_bss_begin
128        LA      r4, bsp_section_bss_size
129        bl      bsp_start_zero
130        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
131
132#ifndef __powerpc64__
133        /* Set up EABI and SYSV environment */
134        bl      __eabi
135#endif
136
137        /* Clear command line */
138        li      r3, 0
139
140        bl      boot_card
141        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
142
143.Lcopy:
144        PPC_REG_CMP     r3, r4
145        beqlr
146        b       memcpy
147        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
148
149.Linitearly:
150#ifdef __powerpc64__
151        /* Enable 64-bit computation mode for exceptions */
152        mfspr   r0, BOOKE_EPCR
153        oris    r0, r0, BOOKE_EPCR_ICM >> 16
154        mtspr   BOOKE_EPCR, r0
155
156        /* Enable 64-bit computation mode */
157        mfmsr   r0
158        oris    r0, r0, MSR_CM >> 16
159        mtmsr   r0
160        isync
161#endif
162
163        /* Disable decrementer */
164        mfspr   r0, BOOKE_TCR
165        LWI     r4, BOOKE_TCR_DIE
166        andc    r0, r0, r4
167        mtspr   BOOKE_TCR, r0
168
169#ifdef QORIQ_INITIAL_SPEFSCR
170        /* SPEFSCR initialization */
171        LWI     r0, QORIQ_INITIAL_SPEFSCR
172        mtspr   FSL_EIS_SPEFSCR, r0
173#endif
174
175#ifdef QORIQ_INITIAL_BUCSR
176        /* BUCSR initialization */
177        LWI     r0, QORIQ_INITIAL_BUCSR
178        mtspr   FSL_EIS_BUCSR, r0
179        isync
180#endif
181
182#if defined(QORIQ_INITIAL_HID0) && !defined(QORIQ_IS_HYPERVISOR_GUEST)
183        /* HID0 initialization */
184        LWI     r0, QORIQ_INITIAL_HID0
185        mtspr   HID0, r0
186#endif
187
188#ifdef __powerpc64__
189        LA32    r2, .TOC.
190#else
191        /* Invalidate TLS anchor */
192        li      r2, 0
193
194        /* Set small-data anchor */
195        LA      r13, _SDA_BASE_
196#endif
197
198        SET_SELF_CPU_CONTROL    r4, r5
199
200        blr
201
202.Linitmore:
203        mflr    SAVED_LINK_REGISTER
204
205        /* Invalidate all TS1 MMU entries */
206        li      r3, 1
207        bl      qoriq_tlb1_invalidate_all_by_ts
208        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
209
210        /* Add TS1 entry for the first 4GiB of RAM */
211        li      r3, SCRATCH_TLB
212        li      r4, FSL_EIS_MAS1_TS
213        li      r5, FSL_EIS_MAS2_M
214        li      r6, FSL_EIS_MAS3_SR | FSL_EIS_MAS3_SW | FSL_EIS_MAS3_SX
215        li      r7, 0
216        li      r8, 0
217        li      r9, 11
218        bl      qoriq_tlb1_write
219        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
220
221        /* MSR initialization and use TS1 for address translation */
222        LWI     INITIAL_MSR, QORIQ_INITIAL_MSR
223        ori     r0, INITIAL_MSR, MSR_IS | MSR_DS
224#ifdef QORIQ_IS_HYPERVISOR_GUEST
225        oris    r0, r0, MSR_GS >> 16
226#endif
227        mtmsr   r0
228        isync
229
230        /*
231         * Initialize start stack.  The stacks are statically allocated and
232         * properly aligned.
233         */
234        subi    r1, START_STACK, PPC_DEFAULT_CACHE_LINE_SIZE
235        li      r0, 0
236        PPC_REG_STORE   r0, 0(r1)
237
238#ifdef INITIALIZE_FPU
239        bl      .Linitfpu
240#endif
241
242        mtlr    SAVED_LINK_REGISTER
243        blr
244
245.Linitmmu:
246        mflr    SAVED_LINK_REGISTER
247
248        /* Configure MMU */
249        li      r4, FIRST_TLB
250        li      r5, SCRATCH_TLB
251        bl      qoriq_mmu_config
252        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
253        mtmsr   INITIAL_MSR
254        isync
255        li      r3, SCRATCH_TLB
256        bl      qoriq_tlb1_invalidate
257        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
258
259        mtlr    SAVED_LINK_REGISTER
260        blr
261
262#ifdef INITIALIZE_FPU
263        /*
264         * Write a value to the FPRs to initialize the hidden tag bits.  See
265         * also "Core Software Initialization Requirements" of the e500mc
266         * reference manual for example.
267         */
268.Linitfpu:
269        li      r0, 0
270        stw     r0, 0(r1)
271        stw     r0, 4(r1)
272        lfd     f0, 0(r1)
273        fmr     f1, f0
274        fmr     f2, f0
275        fmr     f3, f0
276        fmr     f4, f0
277        fmr     f5, f0
278        fmr     f6, f0
279        fmr     f7, f0
280        fmr     f8, f0
281        fmr     f9, f0
282        fmr     f10, f0
283        fmr     f11, f0
284        fmr     f12, f0
285        fmr     f13, f0
286        fmr     f14, f0
287        fmr     f15, f0
288        fmr     f16, f0
289        fmr     f17, f0
290        fmr     f18, f0
291        fmr     f19, f0
292        fmr     f20, f0
293        fmr     f21, f0
294        fmr     f22, f0
295        fmr     f23, f0
296        fmr     f24, f0
297        fmr     f25, f0
298        fmr     f26, f0
299        fmr     f27, f0
300        fmr     f28, f0
301        fmr     f29, f0
302        fmr     f30, f0
303        fmr     f31, f0
304        blr
305#endif
306
307#ifdef RTEMS_SMP
308#if QORIQ_THREAD_COUNT > 1
309_start_thread:
310        /* Adjust PIR */
311        mfspr   r0, BOOKE_PIR
312        srawi   r0, r0, 2
313        ori     r0, r0, 1
314        mtspr   BOOKE_PIR, r0
315
316        bl      .Linitearly
317
318        /* Initialize start stack */
319        GET_SELF_CPU_CONTROL    r3
320        PPC_REG_LOAD    r3, PER_CPU_INTERRUPT_STACK_HIGH(r3)
321        subi    r1, r3, PPC_MINIMUM_STACK_FRAME_SIZE
322        clrrwi  r1, r1, PPC_STACK_ALIGN_POWER
323        li      r0, 0
324        PPC_REG_STORE   r0, 0(r1)
325
326#ifdef INITIALIZE_FPU
327        bl      .Linitfpu
328#endif
329
330        b       qoriq_start_thread
331        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
332#endif
333_start_secondary_processor:
334        bl      .Linitearly
335
336        /* Get start stack */
337        mr      START_STACK, r3
338
339        bl      .Linitmore
340        li      r3, 0
341        bl      .Linitmmu
342        b       bsp_start_on_secondary_processor
343        PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
344#endif /* RTEMS_SMP */
345
346#ifdef __powerpc64__
347#define START_NOP_FOR_LINKER_TOC_POINTER_RESTORE nop; nop; nop; nop
348#else
349#define START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
350#endif
351
352        /* Exception vector prologues area */
353        .section ".bsp_start_text", "ax"
354        .align 4
355bsp_exc_vector_base:
356        /* Critical input */
357        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
358        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
359        li      r3, 0
360        b       ppc_exc_fatal_critical
361        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
362        /* Machine check */
363        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
364        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
365        li      r3, 1
366        b       ppc_exc_fatal_machine_check
367        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
368        /* Data storage */
369        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
370        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
371        li      r3, 2
372        b       ppc_exc_fatal_normal
373        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
374        /* Instruction storage */
375        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
376        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
377        li      r3, 3
378        b       ppc_exc_fatal_normal
379        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
380        /* External input */
381        PPC_REG_STORE_UPDATE    r1, -PPC_EXC_INTERRUPT_FRAME_SIZE(r1)
382        PPC_REG_STORE   r3, PPC_EXC_GPR3_PROLOGUE_OFFSET(r1)
383        li      r3, 4
384        b       ppc_exc_interrupt
385        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
386        /* Alignment */
387        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
388        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
389        li      r3, 5
390        b       ppc_exc_fatal_normal
391        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
392        /* Program */
393        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
394        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
395        li      r3, 6
396        b       ppc_exc_fatal_normal
397        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
398#ifdef __PPC_CPU_E6500__
399        /* Floating-point unavailable */
400        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
401        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
402        li      r3, 7
403        b       ppc_exc_fatal_normal
404        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
405#endif
406        /* System call */
407        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
408        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
409        li      r3, 8
410        b       ppc_exc_fatal_normal
411        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
412#ifdef __PPC_CPU_E6500__
413        /* APU unavailable */
414        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
415        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
416        li      r3, 9
417        b       ppc_exc_fatal_normal
418        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
419#endif
420        /* Decrementer */
421#ifdef QORIQ_IS_HYPERVISOR_GUEST
422        PPC_REG_STORE_UPDATE    r1, -PPC_EXC_INTERRUPT_FRAME_SIZE(r1)
423        PPC_REG_STORE   r3, PPC_EXC_GPR3_PROLOGUE_OFFSET(r1)
424        li      r3, 10
425        b       ppc_exc_interrupt
426#else
427        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
428        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
429        li      r3, 10
430        b       ppc_exc_fatal_normal
431#endif
432        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
433        /* Fixed-interval timer interrupt */
434        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
435        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
436        li      r3, 11
437        b       ppc_exc_fatal_normal
438        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
439        /* Watchdog timer interrupt */
440        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
441        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
442        li      r3, 12
443        b       ppc_exc_fatal_critical
444        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
445        /* Data TLB error */
446        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
447        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
448        li      r3, 13
449        b       ppc_exc_fatal_normal
450        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
451        /* Instruction TLB error */
452        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
453        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
454        li      r3, 14
455        b       ppc_exc_fatal_normal
456        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
457        /* Debug */
458        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
459        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
460        li      r3, 15
461        b       ppc_exc_fatal_debug
462        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
463        /* SPE APU unavailable or AltiVec unavailable */
464        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
465        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
466        li      r3, 32
467        b       ppc_exc_fatal_normal
468        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
469        /* SPE floating-point data exception or AltiVec assist */
470        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
471        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
472        li      r3, 33
473        b       ppc_exc_fatal_normal
474        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
475#ifndef __PPC_CPU_E6500__
476        /* SPE floating-point round exception */
477        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
478        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
479        li      r3, 34
480        b       ppc_exc_fatal_normal
481        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
482#endif
483        /* Performance monitor */
484        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
485        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
486        li      r3, 35
487        b       ppc_exc_fatal_normal
488        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
489#ifdef __PPC_CPU_E6500__
490        /* Processor doorbell interrupt */
491#if defined(QORIQ_IS_HYPERVISOR_GUEST) && defined(RTEMS_SMP)
492        PPC_REG_STORE_UPDATE    r1, -PPC_EXC_INTERRUPT_FRAME_SIZE(r1)
493        PPC_REG_STORE   r3, PPC_EXC_GPR3_PROLOGUE_OFFSET(r1)
494        li      r3, 36
495        b       ppc_exc_interrupt
496#else
497        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
498        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
499        li      r3, 36
500        b       ppc_exc_fatal_normal
501#endif
502        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
503        /* Processor doorbell critical interrupt */
504        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
505        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
506        li      r3, 37
507        b       ppc_exc_fatal_critical
508        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
509        /* Guest processor doorbell */
510        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
511        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
512        li      r3, 38
513        b       ppc_exc_fatal_normal
514        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
515        /* Guest processor doorbell critical and machine check */
516        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
517        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
518        li      r3, 39
519        b       ppc_exc_fatal_critical
520        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
521        /* Hypervisor system call */
522        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
523        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
524        li      r3, 40
525        b       ppc_exc_fatal_normal
526        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
527        /* Hypervisor privilege */
528        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
529        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
530        li      r3, 41
531        b       ppc_exc_fatal_normal
532        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
533        /* LRAT error */
534        PPC_REG_STORE_UPDATE    r1, -EXC_GENERIC_SIZE(r1)
535        PPC_REG_STORE   r3, GPR3_OFFSET(r1)
536        li      r3, 42
537        b       ppc_exc_fatal_normal
538        START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
539#endif
540
541/* Symbol provided for debugging and tracing */
542bsp_exc_vector_end:
Note: See TracBrowser for help on using the repository browser.