Changeset 762a824 in mainline for arch/ppc32/src


Ignore:
Timestamp:
2006-05-01T14:44:37Z (20 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
16dad032
Parents:
0f27b4c
Message:

ppc32: proper exception handling from user-space
code cleanup

Location:
arch/ppc32/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc32/src/asm.S

    r0f27b4c r762a824  
    4040        # r3 = uspace_uarg
    4141        # r4 = stack
    42         # r5 = entry   
     42        # r5 = entry
     43       
     44        # disable interrupts
    4345
    4446        mfmsr r31
     
    5254        # set problem state, enable interrupts
    5355       
    54         ori r31, r31, 1 << 14
    55         ori r31, r31, 1 << 15
     56        ori r31, r31, msr_pr
     57        ori r31, r31, msr_ee
    5658        mtsrr1 r31
    5759       
     
    6567
    6668iret:
    67         lwz r3, 144(sp)
    68         mtxer r3
    69        
    70         lwz r3, 140(sp)
    71         mtctr r3
    72        
    73         lwz r3, 136(sp)
    74         mtcr r3
    75        
    76         lwz r3, 132(sp)
    77         mtlr r3
    78        
    79         lwz r3, 128(sp)
    80         mtspr srr1, r3
    81        
    82         lwz r3, 124(sp)
    83         mtspr srr0, r3
    84        
    8569        lwz r0, 0(sp)
    8670        lwz r2, 4(sp)
     
    9478        lwz r10, 36(sp)
    9579        lwz r11, 40(sp)
    96         lwz r12, 44(sp)
    97         lwz r13, 48(sp)
    98         lwz r14, 52(sp)
    99         lwz r15, 56(sp)
    100         lwz r16, 60(sp)
    101         lwz r17, 64(sp)
    102         lwz r18, 68(sp)
    103         lwz r19, 72(sp)
    104         lwz r20, 76(sp)
    105         lwz r21, 80(sp)
    106         lwz r22, 84(sp)
    107         lwz r23, 88(sp)
    108         lwz r24, 92(sp)
    109         lwz r25, 96(sp)
    110         lwz r26, 100(sp)
    111         lwz r27, 104(sp)
    112         lwz r28, 108(sp)
    113         lwz r29, 112(sp)
    114         lwz r30, 116(sp)
    115         lwz r31, 120(sp)
    116        
    117         mfspr sp, sprg1
     80        lwz r13, 44(sp)
     81        lwz r14, 48(sp)
     82        lwz r15, 52(sp)
     83        lwz r16, 56(sp)
     84        lwz r17, 60(sp)
     85        lwz r18, 64(sp)
     86        lwz r19, 68(sp)
     87        lwz r20, 72(sp)
     88        lwz r21, 76(sp)
     89        lwz r22, 80(sp)
     90        lwz r23, 84(sp)
     91        lwz r24, 88(sp)
     92        lwz r25, 92(sp)
     93        lwz r26, 96(sp)
     94        lwz r27, 100(sp)
     95        lwz r28, 104(sp)
     96        lwz r29, 108(sp)
     97        lwz r30, 112(sp)
     98        lwz r31, 116(sp)
     99       
     100        lwz r12, 120(sp)
     101        mtsrr0 r12
     102       
     103        lwz r12, 124(sp)
     104        mtsrr1 r12
     105       
     106        lwz r12, 128(sp)
     107        mtlr r12
     108       
     109        lwz r12, 132(sp)
     110        mtcr r12
     111       
     112        lwz r12, 136(sp)
     113        mtctr r12
     114       
     115        lwz r12, 140(sp)
     116        mtxer r12
     117
     118        mfsprg1 sp
     119        mfsprg2 r12
    118120       
    119121        rfi
  • arch/ppc32/src/boot/boot.S

    r0f27b4c r762a824  
    3535kernel_image_start:
    3636
    37         # load temporary stack
     37        # load temporal kernel stack
    3838       
    39         lis sp, end_stack@ha
    40         addi sp, sp, end_stack@l
     39        lis sp, kernel_stack@ha
     40        addi sp, sp, kernel_stack@l
     41       
     42        # set kernel stack for interrupt handling
     43       
     44        mr r31, sp
     45        subis r31, r31, 0x8000
     46        mtsprg0 r31
    4147       
    4248        # r3 contains physical address of bootinfo_t
    4349        # r4 contains size of bootinfo_t
    4450       
    45         lis r31, 0x80000000@ha
    46         addi r31, r31, 0x80000000@l
    47        
    48         add r3, r3, r31
     51        addis r3, r3, 0x8000
    4952
    5053        lis r31, bootinfo@ha
     
    7376.section K_DATA_START, "aw", @progbits
    7477
     78.align 12
     79kernel_stack_bottom:
    7580        .space TEMP_STACK_SIZE
    76 end_stack:
     81kernel_stack:
  • arch/ppc32/src/exception.S

    r0f27b4c r762a824  
    3333
    3434.macro CONTEXT_STORE
    35         mtspr sprg1, sp
    36        
    37         subis sp, sp, 0x8000
    38        
    39         subi sp, sp, 144
     35       
     36        # save SP in SPRG1
     37        # save R12 in SPRG2, backup CR in R12
     38
     39        mtsprg1 sp
     40        mtsprg2 r12
     41        mfcr r12
     42       
     43        # check whether SP is in kernel
     44       
     45        andis. sp, sp, 0x8000
     46        bne 1f
     47       
     48                # stack is in user-space
     49               
     50                mfsprg0 sp
     51       
     52        b 2f
     53       
     54        1:
     55       
     56                # stack is in kernel
     57               
     58                mfsprg1 sp
     59                subis sp, sp, 0x8000
     60       
     61        2:
     62       
     63        subi sp, sp, 140
    4064        stw r0, 0(sp)
    4165        stw r2, 4(sp)
     
    4973        stw r10, 36(sp)
    5074        stw r11, 40(sp)
    51         stw r12, 44(sp)
    52         stw r13, 48(sp)
    53         stw r14, 52(sp)
    54         stw r15, 56(sp)
    55         stw r16, 60(sp)
    56         stw r17, 64(sp)
    57         stw r18, 68(sp)
    58         stw r19, 72(sp)
    59         stw r20, 76(sp)
    60         stw r21, 80(sp)
    61         stw r22, 84(sp)
    62         stw r23, 88(sp)
    63         stw r24, 92(sp)
    64         stw r25, 96(sp)
    65         stw r26, 100(sp)
    66         stw r27, 104(sp)
    67         stw r28, 108(sp)
    68         stw r29, 112(sp)
    69         stw r30, 116(sp)
    70         stw r31, 120(sp)
    71        
    72         mfspr r3, srr0
     75        stw r13, 44(sp)
     76        stw r14, 48(sp)
     77        stw r15, 52(sp)
     78        stw r16, 56(sp)
     79        stw r17, 60(sp)
     80        stw r18, 64(sp)
     81        stw r19, 68(sp)
     82        stw r20, 72(sp)
     83        stw r21, 76(sp)
     84        stw r22, 80(sp)
     85        stw r23, 84(sp)
     86        stw r24, 88(sp)
     87        stw r25, 92(sp)
     88        stw r26, 96(sp)
     89        stw r27, 100(sp)
     90        stw r28, 104(sp)
     91        stw r29, 108(sp)
     92        stw r30, 112(sp)
     93        stw r31, 116(sp)
     94       
     95        mfsrr0 r3
     96        stw r3, 120(sp)
     97       
     98        mfsrr1 r3
    7399        stw r3, 124(sp)
    74100       
    75         mfspr r3, srr1
     101        mflr r3
    76102        stw r3, 128(sp)
    77103       
    78         mflr r3
    79         stw r3, 132(sp)
    80        
    81         mfcr r3
     104        stw r12, 132(sp)
     105       
     106        mfctr r3
    82107        stw r3, 136(sp)
    83108       
    84         mfctr r3
     109        mfxer r3
    85110        stw r3, 140(sp)
    86        
    87         mfxer r3
    88         stw r3, 144(sp)
    89111.endm
    90112
     
    103125exc_data_storage:
    104126        CONTEXT_STORE
    105 
     127       
    106128        lis r3, pht_refill@ha
    107129        addi r3, r3, pht_refill@l
    108         mtspr srr0, r3
     130        mtsrr0 r3
    109131       
    110132        mfmsr r3
    111133        ori r3, r3, (msr_ir | msr_dr)@l
    112         mtspr srr1, r3
     134        mtsrr1 r3
    113135       
    114136        lis r3, iret@ha
     
    117139       
    118140        addis sp, sp, 0x8000
     141        mr r3, sp
    119142        rfi
    120143
     
    122145.global exc_instruction_storage
    123146exc_instruction_storage:
    124         b exc_instruction_storage
    125 
    126 .org 0x480
    127 .global exc_instruction_segment
    128 exc_instruction_segment:
    129         b exc_instruction_segment
     147        CONTEXT_STORE
     148       
     149        lis r3, pht_refill@ha
     150        addi r3, r3, pht_refill@l
     151        mtsrr0 r3
     152       
     153        mfmsr r3
     154        ori r3, r3, (msr_ir | msr_dr)@l
     155        mtsrr1 r3
     156       
     157        lis r3, iret@ha
     158        addi r3, r3, iret@l
     159        mtlr r3
     160       
     161        addis sp, sp, 0x8000
     162        mr r3, sp
     163        rfi
    130164
    131165.org 0x500
     
    156190        lis r3, exc_dispatch@ha
    157191        addi r3, r3, exc_dispatch@l
    158         mtspr srr0, r3
     192        mtsrr0 r3
    159193       
    160194        mfmsr r3
    161195        ori r3, r3, (msr_ir | msr_dr)@l
    162         mtspr srr1, r3
     196        mtsrr1 r3
    163197       
    164198        lis r3, iret@ha
     
    168202        addis sp, sp, 0x8000
    169203        li r3, 10
     204        mr r4, sp
    170205        rfi
    171206
  • arch/ppc32/src/interrupt.c

    r0f27b4c r762a824  
    3232#include <arch.h>
    3333#include <time/clock.h>
    34 #include <print.h>
    3534#include <ipc/sysipc.h>
     35
    3636
    3737void start_decrementer(void)
  • arch/ppc32/src/proc/scheduler.c

    r0f27b4c r762a824  
    2828
    2929#include <arch/mm/page.h>
     30#include <arch/boot/boot.h>
    3031#include <proc/scheduler.h>
    3132#include <proc/thread.h>
    3233#include <arch.h>
    33 
    34 __address supervisor_sp;
    35 __address supervisor_sp_physical;
    3634
    3735/** Perform ppc32 specific tasks needed before the new task is run. */
     
    4341void before_thread_runs_arch(void)
    4442{
    45         supervisor_sp = (__address) &THREAD->kstack[THREAD_STACK_SIZE - SP_DELTA];
    46         supervisor_sp_physical = KA2PA(supervisor_sp_physical);
     43        asm volatile (
     44                "mtsprg0 %0\n"
     45                :
     46                : "r" (KA2PA(&THREAD->kstack[THREAD_STACK_SIZE - SP_DELTA]))
     47        );
    4748}
    4849
Note: See TracChangeset for help on using the changeset viewer.