OpenCores
URL https://opencores.org/ocsvn/s1_core/s1_core/trunk

Subversion Repositories s1_core

[/] [s1_core/] [trunk/] [tests/] [boot/] [boot.s] - Diff between revs 33 and 35

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 33 Rev 35
Line 35... Line 35...
* ========== Copyright Header End ============================================
* ========== Copyright Header End ============================================
*/
*/
 
 
#include "defines.h"
#include "defines.h"
 
 
        // Enable L2-ucache: Unused in S1 Core
        !! Enable L2-ucache: Unused in S1 Core
/*
/*
        setx    cregs_l2_ctl_reg_r64, %g1, %l1                          // aka "wr  %g0, 5, %asr26" "clr  %l1"
        setx    cregs_l2_ctl_reg_r64, %g1, %l1                          !! aka "wr  %g0, 5, %asr26" "clr  %l1"
        mov     0xa9, %g1
        mov     0xa9, %g1
        sllx    %g1, 32, %g1
        sllx    %g1, 32, %g1
 
 
        stx     %l1, [%g1 + 0x00]
        stx     %l1, [%g1 + 0x00]
        stx     %l1, [%g1 + 0x40]
        stx     %l1, [%g1 + 0x40]
        stx     %l1, [%g1 + 0x80]
        stx     %l1, [%g1 + 0x80]
        stx     %l1, [%g1 + 0xc0]
        stx     %l1, [%g1 + 0xc0]
*/
*/
 
 
        // Set LSU Diagnostic Register to use all ways for L1-icache and L1-dcache
        !! Set LSU Diagnostic Register to use all ways for L1-icache and L1-dcache
        setx    cregs_lsu_diag_reg_r64, %g1, %l1                                // aka "clr  %l1"
        setx    cregs_lsu_diag_reg_r64, %g1, %l1                                !! aka "clr  %l1"
        mov     0x10, %g1
        mov     0x10, %g1
        stxa    %l1, [%g1] ASI_LSU_DIAG_REG                                     // aka "stxa %l1, [%g1] (66)"
        stxa    %l1, [%g1] ASI_LSU_DIAG_REG                                     !! aka "stxa %l1, [%g1] (66)"
 
 
        // Set LSU Control Register to enable L1-icache and L1-dcache
        !! Set LSU Control Register to enable L1-icache and L1-dcache
        setx    (CREGS_LSU_CTL_REG_IC | (CREGS_LSU_CTL_REG_DC << 1)), %g1, %l1  // aka "mov  3, %l1"
        setx    (CREGS_LSU_CTL_REG_IC | (CREGS_LSU_CTL_REG_DC << 1)), %g1, %l1  !! aka "mov  3, %l1"
        stxa    %l1, [%g0] ASI_LSU_CTL_REG                                      // aka "stxa  %l1, [ %g0 ] (69)"
        stxa    %l1, [%g0] ASI_LSU_CTL_REG                                      !! aka "stxa  %l1, [ %g0 ] (69)"
 
 
        // Set hpstate.red = 0 and hpstate.enb = 1
        !! Set hpstate.red = 0 and hpstate.enb = 1
        rdhpr   %hpstate, %l1
        rdhpr   %hpstate, %l1
        wrhpr   %l1, 0x820, %hpstate
        wrhpr   %l1, 0x820, %hpstate
 
 
        // Initialize Interrupt Queue Registers: Currently disabled in S1 Core
        !! Initialize Interrupt Queue Registers: Currently disabled in S1 Core
/*
/*
        wr %g0, 0x25, %asi
        wr %g0, 0x25, %asi
 
 
        stxa %g0, [0x3c0] %asi
        stxa %g0, [0x3c0] %asi
        stxa %g0, [0x3c8] %asi
        stxa %g0, [0x3c8] %asi
Line 81... Line 81...
        wr      %g0, cregs_fprs_imm, %fprs
        wr      %g0, cregs_fprs_imm, %fprs
        wr      %g0, cregs_ccr_imm, %ccr
        wr      %g0, cregs_ccr_imm, %ccr
 
 
        wr      %g0, cregs_asi_imm, %asi
        wr      %g0, cregs_asi_imm, %asi
        setx    cregs_tick_r64, %g1, %g2
        setx    cregs_tick_r64, %g1, %g2
        // FIXME set other ticks also
        !! FIXME set other ticks also
        wrpr    %g2, %tick
        wrpr    %g2, %tick
        setx    cregs_stick_r64, %g1, %g2
        setx    cregs_stick_r64, %g1, %g2
 
 
        wr      %g2, %g0, %sys_tick
        wr      %g2, %g0, %sys_tick
        mov     0x1, %g2
        mov     0x1, %g2
Line 104... Line 104...
 
 
        wrpr    cregs_cleanwin_imm, %cleanwin
        wrpr    cregs_cleanwin_imm, %cleanwin
        wrpr    cregs_wstate_imm, %wstate
        wrpr    cregs_wstate_imm, %wstate
*/
*/
 
 
        // Clear L1-icache and L1-dcache SFSR
        !! Clear L1-icache and L1-dcache SFSR
        mov     0x18, %g1
        mov     0x18, %g1
        stxa    %g0, [%g0 + %g1] 0x50
        stxa    %g0, [%g0 + %g1] 0x50
        stxa    %g0, [%g0 + %g1] 0x58
        stxa    %g0, [%g0 + %g1] 0x58
 
 
        // Enable error trap
        !! Enable error trap
        setx    cregs_sparc_error_en_reg_r64, %g1, %l1                  // aka "mov  3, %l1"
        setx    cregs_sparc_error_en_reg_r64, %g1, %l1                  !! aka "mov  3, %l1"
        stxa    %l1, [%g0] ASI_SPARC_ERROR_EN_REG                       // aka "stxa  %l1, [%g0] (75)"
        stxa    %l1, [%g0] ASI_SPARC_ERROR_EN_REG                       !! aka "stxa  %l1, [%g0] (75)"
 
 
        // Enable L2-ucache error trap: Unused in S1 Core
        !! Enable L2-ucache error trap: Unused in S1 Core
/*
/*
        setx    cregs_l2_error_en_reg_r64, %g1, %l1
        setx    cregs_l2_error_en_reg_r64, %g1, %l1
 
 
        mov     0xaa, %g1
        mov     0xaa, %g1
        sllx    %g1, 32, %g1
        sllx    %g1, 32, %g1
Line 126... Line 126...
 
 
        stx     %l1, [%g1 + 0x80]
        stx     %l1, [%g1 + 0x80]
        stx     %l1, [%g1 + 0xc0]
        stx     %l1, [%g1 + 0xc0]
*/
*/
 
 
        // Load Partition ID
        !! Load Partition ID
        rd      %asr26, %l1
        rd      %asr26, %l1
        set     0x0300, %g1                             // aka "sethi %hi(0x1c00), %g1" "or  %g1, 0x300, %g1"
        set     0x0300, %g1                             !! aka "sethi %hi(0x1c00), %g1" "or  %g1, 0x300, %g1"
        and     %l1, %g1, %l1
        and     %l1, %g1, %l1
        srlx    %l1, 8, %l1                             // %l1 has thread ID
        srlx    %l1, 8, %l1                             !! %l1 has thread ID
 
 
        setx    part_id_list, %g1, %g2
        setx    part_id_list, %g1, %g2
        // this instruction expands as
        !! this instruction expands as
        // "sethi  %hi(0), %g1"
        !! "sethi  %hi(0), %g1"
        // "sethi  %hi(0x4c000), %g2"
        !! "sethi  %hi(0x4c000), %g2"
        // "mov  %g1, %g1"
        !! "mov  %g1, %g1"
        // "mov  %g2, %g2"
        !! "mov  %g2, %g2"
        // "sllx  %g1, 0x20, %g1"
        !! "sllx  %g1, 0x20, %g1"
        // "or  %g2, %g1, %g2"
        !! "or  %g2, %g1, %g2"
 
 
        sllx    %l1, 3, %l1                                                     // offset - partition list
        sllx    %l1, 3, %l1                                                     !! offset - partition list
        ldx     [%g2 + %l1], %g2                                                // %g2 contains partition ID
        ldx     [%g2 + %l1], %g2                                                !! %g2 contains partition ID
        mov     0x80, %g1
        mov     0x80, %g1
        stxa    %g2, [%g1] 0x58
        stxa    %g2, [%g1] 0x58
 
 
        // Set Hypervisor Trap Base Address
        !! Set Hypervisor Trap Base Address
        setx HV_TRAP_BASE_PA, %l0, %l7                                          // sethi %hi(0x80000), %l7
        setx HV_TRAP_BASE_PA, %l0, %l7                                          !! sethi %hi(0x80000), %l7
        wrhpr %l7, %g0, %htba
        wrhpr %l7, %g0, %htba
 
 
        // Load TSB config/base from memory and write to corresponding ASI's
        !! Load TSB config/base from memory and write to corresponding ASI's
        // set tsb-reg (4 at present) for one partition
        !! set tsb-reg (4 at present) for one partition
        // 2 i-config, 2-dconfig
        !! 2 i-config, 2-dconfig
 
 
        setx    tsb_config_base_list, %l0, %g1
        setx    tsb_config_base_list, %l0, %g1
        // this instructions expands as
        !! this instructions expands as
        // sethi  %hi(0), %l0
        !! sethi  %hi(0), %l0
        // sethi  %hi(0x4c000), %g1
        !! sethi  %hi(0x4c000), %g1
        // mov  %l0, %l0
        !! mov  %l0, %l0
        // or  %g1, 0x140, %g1
        !! or  %g1, 0x140, %g1
        // sllx  %l0, 0x20, %l0
        !! sllx  %l0, 0x20, %l0
        // or  %g1, %l0, %g1
        !! or  %g1, %l0, %g1
 
 
        sllx    %g2, 7, %g2                                     // %g2 contains offset to tsb_config_base_list
        sllx    %g2, 7, %g2                                     !! %g2 contains offset to tsb_config_base_list
        add     %g1, %g2, %g1                                   // %g1 contains pointer to tsb_config_base_list
        add     %g1, %g2, %g1                                   !! %g1 contains pointer to tsb_config_base_list
 
 
        // IMMU_CXT_Z_CONFIG   (0x37, VA=0x00)
        !! IMMU_CXT_Z_CONFIG   (0x37, VA=0x00)
        ldx     [%g1], %l1
        ldx     [%g1], %l1
        stxa    %l1, [%g0] 0x37
        stxa    %l1, [%g0] 0x37
 
 
        // IMMU_CXT_NZ_CONFIG  (0x3f, VA=0x00)
        !! IMMU_CXT_NZ_CONFIG  (0x3f, VA=0x00)
        ldx     [%g1+8], %l1
        ldx     [%g1+8], %l1
        stxa    %l1, [%g0] 0x3f
        stxa    %l1, [%g0] 0x3f
 
 
        // IMMU_CXT_Z_PS0_TSB  (0x35, VA=0x0)
        !! IMMU_CXT_Z_PS0_TSB  (0x35, VA=0x0)
        // IMMU_CXT_Z_PS1_TSB  (0x36, VA=0x0)
        !! IMMU_CXT_Z_PS1_TSB  (0x36, VA=0x0)
        ldx     [%g1+16], %l1
        ldx     [%g1+16], %l1
        stxa    %l1, [%g0] 0x35
        stxa    %l1, [%g0] 0x35
        ldx     [%g1+32], %l1
        ldx     [%g1+32], %l1
        stxa    %l1, [%g0] 0x36
        stxa    %l1, [%g0] 0x36
 
 
        // IMMU_CXT_NZ_PS0_TSB (0x3d, VA=0x00)
        !! IMMU_CXT_NZ_PS0_TSB (0x3d, VA=0x00)
        // IMMU_CXT_NZ_PS1_TSB (0x3e, VA=0x00)
        !! IMMU_CXT_NZ_PS1_TSB (0x3e, VA=0x00)
        ldx     [%g1+24], %l1
        ldx     [%g1+24], %l1
        stxa    %l1, [%g0] 0x3d
        stxa    %l1, [%g0] 0x3d
        ldx     [%g1+40], %l1
        ldx     [%g1+40], %l1
        stxa    %l1, [%g0] 0x3e
        stxa    %l1, [%g0] 0x3e
 
 
        // DMMU_CXT_Z_CONFIG   (0x33, VA=0x00)
        !! DMMU_CXT_Z_CONFIG   (0x33, VA=0x00)
        ldx     [%g1+64], %l1
        ldx     [%g1+64], %l1
        stxa    %l1, [%g0] 0x33
        stxa    %l1, [%g0] 0x33
 
 
        // DMMU_CXT_NZ_CONFIG  (0x3b, VA=0x00)
        !! DMMU_CXT_NZ_CONFIG  (0x3b, VA=0x00)
        ldx     [%g1+72], %l1
        ldx     [%g1+72], %l1
        stxa    %l1, [%g0] 0x3b
        stxa    %l1, [%g0] 0x3b
 
 
        // DMMU_CXT_Z_PS0_TSB  (0x31, VA=0x00)
        !! DMMU_CXT_Z_PS0_TSB  (0x31, VA=0x00)
        // DMMU_CXT_Z_PS1_TSB  (0x32, VA=0x00)
        !! DMMU_CXT_Z_PS1_TSB  (0x32, VA=0x00)
        ldx     [%g1+80], %l1
        ldx     [%g1+80], %l1
        stxa    %l1, [%g0] 0x31
        stxa    %l1, [%g0] 0x31
        ldx     [%g1+96], %l1
        ldx     [%g1+96], %l1
        stxa    %l1, [%g0] 0x32
        stxa    %l1, [%g0] 0x32
 
 
        // DMMU_CXT_NZ_PS0_TSB (0x39, VA=0x00)
        !! DMMU_CXT_NZ_PS0_TSB (0x39, VA=0x00)
        // DMMU_CXT_NZ_PS0_TSB (0x3a, VA=0x00)
        !! DMMU_CXT_NZ_PS0_TSB (0x3a, VA=0x00)
        ldx     [%g1+88], %l1
        ldx     [%g1+88], %l1
        stxa    %l1, [%g0] 0x39
        stxa    %l1, [%g0] 0x39
        ldx     [%g1+104], %l1
        ldx     [%g1+104], %l1
        stxa    %l1, [%g0] 0x3a
        stxa    %l1, [%g0] 0x3a
 
 
        // Demap all itlb and dtlb
        !! Demap all itlb and dtlb
        mov     0x80, %o2
        mov     0x80, %o2
        stxa    %g0, [%o2] 0x57
        stxa    %g0, [%o2] 0x57
        stxa    %g0, [%o2] 0x5f
        stxa    %g0, [%o2] 0x5f
 
 
        // Initialize primary context register
        !! Initialize primary context register
        mov 0x8, %l1
        mov 0x8, %l1
        stxa %g0, [%l1] 0x21
        stxa %g0, [%l1] 0x21
 
 
        // Initialize secondary context register
        !! Initialize secondary context register
        mov 0x10, %l1
        mov 0x10, %l1
        stxa %g0, [%l1] 0x21
        stxa %g0, [%l1] 0x21
 
 
        // Initialize dtsb entry for i context zero ps0, ps1
        !! Initialize dtsb entry for i context zero ps0, ps1
        // Set LSU Control Register to enable icache, dcache, immu, dmmu
        !! Set LSU Control Register to enable icache, dcache, immu, dmmu
        setx    cregs_lsu_ctl_reg_r64, %g1, %l1                                 // aka "mov  0xf, %l1"
        setx    cregs_lsu_ctl_reg_r64, %g1, %l1                                 !! aka "mov  0xf, %l1"
        stxa    %l1, [%g0] ASI_LSU_CTL_REG                                      // aka "stxa  %l1, [%g0] (69)"
        stxa    %l1, [%g0] ASI_LSU_CTL_REG                                      !! aka "stxa  %l1, [%g0] (69)"
 
 
        setx    HPriv_Reset_Handler, %g1, %g2
        setx    HPriv_Reset_Handler, %g1, %g2
        // this instructions expands as
        !! this instructions expands as
        // sethi  %hi(0), %g1
        !! sethi  %hi(0), %g1
        // sethi  %hi(0x144000), %g2
        !! sethi  %hi(0x144000), %g2
        // mov  %g1, %g1
        !! mov  %g1, %g1
        // mov  %g2, %g2
        !! mov  %g2, %g2
        // sllx  %g1, 0x20, %g1
        !! sllx  %g1, 0x20, %g1
        // or  %g2, %g1, %g2
        !! or  %g2, %g1, %g2
 
 
        rdhpr   %hpstate, %g3
        rdhpr   %hpstate, %g3
        wrpr    1, %tl
        wrpr    1, %tl
        setx    cregs_htstate_r64, %g1, %g4                     // aka "clr  %g4"
        setx    cregs_htstate_r64, %g1, %g4                     !! aka "clr  %g4"
        wrhpr   %g4, %g0, %htstate
        wrhpr   %g4, %g0, %htstate
        wrpr    0, %tl
        wrpr    0, %tl
        mov     0x0, %o0                // aka "clr %o0", don't delete since used in customized IMMU miss trap
        mov     0x0, %o0                !! aka "clr %o0", don't delete since used in customized IMMU miss trap
        jmp     %g2
        jmp     %g2
        wrhpr   %g0, 0x800, %hpstate
        wrhpr   %g0, 0x800, %hpstate
        nop
        nop
        nop
        nop
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.