Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/start.S

    r93d66ef racee917  
    3232#include <mm/asid.h>
    3333
    34 #define RR_MASK    (0xFFFFFFFF00000002)
    35 #define RID_SHIFT  8
    36 #define PS_SHIFT   2
    37 
    38 #define KERNEL_TRANSLATION_I    0x0010000000000661
    39 #define KERNEL_TRANSLATION_D    0x0010000000000661
    40 #define KERNEL_TRANSLATION_VIO  0x0010000000000671
    41 #define KERNEL_TRANSLATION_IO   0x00100FFFFC000671
    42 #define KERNEL_TRANSLATION_FW   0x00100000F0000671
     34#define RR_MASK (0xFFFFFFFF00000002)
     35#define RID_SHIFT       8
     36#define PS_SHIFT        2
     37
     38#define KERNEL_TRANSLATION_I    0x0010000000000661
     39#define KERNEL_TRANSLATION_D    0x0010000000000661
     40#define KERNEL_TRANSLATION_VIO  0x0010000000000671
     41#define KERNEL_TRANSLATION_IO   0x00100FFFFC000671
     42#define KERNEL_TRANSLATION_FW   0x00100000F0000671
    4343
    4444.section K_TEXT_START, "ax"
     
    4949kernel_image_start:
    5050        .auto
    51        
     51
    5252#ifdef CONFIG_SMP
    5353        # Identify self(CPU) in OS structures by ID / EID
    54        
     54
    5555        mov r9 = cr64
    5656        mov r10 = 1
     
    6262        st1 [r8] = r10
    6363#endif
    64        
     64
    6565        mov psr.l = r0
    6666        srlz.i
    6767        srlz.d
    68        
     68
    6969        # Fill TR.i and TR.d using Region Register #VRN_KERNEL
    70        
     70
    7171        movl r8 = (VRN_KERNEL << VRN_SHIFT)
    7272        mov r9 = rr[r8]
    73        
     73
    7474        movl r10 = (RR_MASK)
    7575        and r9 = r10, r9
    7676        movl r10 = ((RID_KERNEL << RID_SHIFT) | (KERNEL_PAGE_WIDTH << PS_SHIFT))
    77         or r9 = r10, r9
    78        
     77        or  r9 = r10, r9
     78
    7979        mov rr[r8] = r9
    80        
     80
    8181        movl r8 = (VRN_KERNEL << VRN_SHIFT)
    8282        mov cr.ifa = r8
    83        
     83
    8484        mov r11 = cr.itir
    8585        movl r10 = (KERNEL_PAGE_WIDTH << PS_SHIFT)
    8686        or r10 = r10, r11
    8787        mov cr.itir = r10
    88        
     88
    8989        movl r10 = (KERNEL_TRANSLATION_I)
    9090        itr.i itr[r0] = r10
    9191        movl r10 = (KERNEL_TRANSLATION_D)
    9292        itr.d dtr[r0] = r10
    93        
     93
    9494        movl r7 = 1
    9595        movl r8 = (VRN_KERNEL << VRN_SHIFT) | VIO_OFFSET
     
    9797        movl r10 = (KERNEL_TRANSLATION_VIO)
    9898        itr.d dtr[r7] = r10
    99        
     99
    100100        mov r11 = cr.itir
    101101        movl r10 = ~0xfc
     
    104104        or r10 = r10, r11
    105105        mov cr.itir = r10
    106        
     106
    107107        movl r7 = 2
    108108        movl r8 = (VRN_KERNEL << VRN_SHIFT) | IO_OFFSET
     
    110110        movl r10 = (KERNEL_TRANSLATION_IO)
    111111        itr.d dtr[r7] = r10
    112        
    113         # Setup mapping for firmware area (also SAPIC)
    114        
     112
     113        # Setup mapping for fimware arrea (also SAPIC)
     114
    115115        mov r11 = cr.itir
    116116        movl r10 = ~0xfc
     
    119119        or r10 = r10, r11
    120120        mov cr.itir = r10
    121        
     121
    122122        movl r7 = 3
    123123        movl r8 = (VRN_KERNEL << VRN_SHIFT) | FW_OFFSET
     
    125125        movl r10 = (KERNEL_TRANSLATION_FW)
    126126        itr.d dtr[r7] = r10
    127        
    128         # Initialize DSR
    129        
    130         movl r10 = (DCR_DP_MASK | DCR_DK_MASK | DCR_DX_MASK | DCR_DR_MASK | DCR_DA_MASK | DCR_DD_MASK | DCR_LC_MASK)
    131         mov r9 = cr.dcr
    132         or r10 = r10, r9
    133         mov cr.dcr = r10
    134        
     127
    135128        # Initialize PSR
    136        
     129
    137130        movl r10 = (PSR_DT_MASK | PSR_RT_MASK | PSR_IT_MASK | PSR_IC_MASK)  /* Enable paging */
    138131        mov r9 = psr
    139        
     132
    140133        or r10 = r10, r9
    141134        mov cr.ipsr = r10
     
    145138        srlz.d
    146139        srlz.i
    147        
     140
    148141        .explicit
    149        
     142
    150143        /*
    151144         * Return From Interrupt is the only way to
     
    154147        rfi ;;
    155148
     149
    156150.global paging_start
    157151paging_start:
    158        
     152
    159153        /*
    160154         * Now we are paging.
    161155         */
    162        
     156
    163157        # Switch to register bank 1
    164158        bsw.1
    165        
     159
    166160#ifdef CONFIG_SMP
    167161        # Am I BSP or AP?
     
    170164        cmp.eq p3, p2 = r20, r0 ;;
    171165#else
    172         cmp.eq p3, p2 = r0, r0 ;;  /* you are BSP */
    173 #endif  /* CONFIG_SMP */
     166        cmp.eq p3, p2 = r0, r0 ;;       /* you are BSP */
     167#endif  /* CONFIG_SMP */
    174168       
    175169        # Initialize register stack
     
    178172        mov ar.bspstore = r8
    179173        loadrs
    180        
     174
    181175        # Initialize memory stack to some sane value
    182176        movl r12 = stack0 ;;
    183         add r12 = -16, r12  /* allocate a scratch area on the stack */
    184        
     177        add r12 = -16, r12      /* allocate a scratch area on the stack */
     178
    185179        # Initialize gp (Global Pointer) register
    186         movl r20 = (VRN_KERNEL << VRN_SHIFT) ;;
    187         or r20 = r20, r1 ;;
     180        movl r20 = (VRN_KERNEL << VRN_SHIFT);;
     181        or r20 = r20,r1;;
    188182        movl r1 = _hardcoded_load_address
    189183       
     
    198192(p3)    addl r19 = @gprel(hardcoded_load_address), gp
    199193(p3)    addl r21 = @gprel(bootinfo), gp
    200                 ;;
     194        ;;
    201195(p3)    st8 [r17] = r14
    202196(p3)    st8 [r18] = r15
    203197(p3)    st8 [r19] = r16
    204198(p3)    st8 [r21] = r20
    205        
     199
    206200        ssm (1 << 19) ;; /* Disable f32 - f127 */
    207201        srlz.i
    208202        srlz.d ;;
    209        
     203
    210204#ifdef CONFIG_SMP
    211205(p2)    movl r18 = main_ap ;;
    212 (p2)    mov b1 = r18 ;;
     206(p2)    mov b1 = r18 ;;
    213207(p2)    br.call.sptk.many b0 = b1
    214        
     208
    215209        # Mark that BSP is on
    216        
    217210        mov r20 = 1 ;;
    218211        movl r21 = bsp_started ;;
    219212        st8 [r21] = r20 ;;
    220213#endif
    221        
     214
    222215        br.call.sptk.many b0 = arch_pre_main
    223        
     216
    224217        movl r18 = main_bsp ;;
    225218        mov b1 = r18 ;;
     
    234227kernel_image_ap_start:
    235228        .auto
    236        
     229
    237230        # Identify self(CPU) in OS structures by ID / EID
    238        
     231
    239232        mov r9 = cr64
    240233        mov r10 = 1
     
    247240       
    248241        # Wait for wakeup synchro signal (#3 in cpu_by_id_eid_list)
    249 
     242       
    250243kernel_image_ap_start_loop:
    251244        movl r11 = kernel_image_ap_start_loop
    252245        and r11 = r11, r12
    253         mov b1 = r11
    254        
    255         ld1 r20 = [r8]
    256         movl r21 = 3
    257         cmp.eq p2, p3 = r20, r21
     246        mov b1 = r11
     247
     248        ld1 r20 = [r8] ;;
     249        movl r21 = 3 ;;
     250        cmp.eq p2, p3 = r20, r21 ;;
    258251(p3)    br.call.sptk.many b0 = b1
    259        
     252
    260253        movl r11 = kernel_image_start
    261254        and r11 = r11, r12
    262         mov b1 = r11
     255        mov b1 = r11 
    263256        br.call.sptk.many b0 = b1
    264257
     
    266259.global bsp_started
    267260bsp_started:
    268         .space 8
     261.space 8
    269262
    270263.align 4096
    271264.global cpu_by_id_eid_list
    272265cpu_by_id_eid_list:
    273         .space 65536
    274 
    275 #endif  /* CONFIG_SMP */
     266.space 65536
     267
     268#endif  /* CONFIG_SMP */
Note: See TracChangeset for help on using the changeset viewer.