123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #include <mips/asm.h>
- #include <boot.h>
- #include <mips/m32c0.h>
- #include <mips/regdef.h>
- LEAF(__reset_vector)
- la v0,__ram_end
- li v1,0x12345678
- sw v1,0(v0)
- la a2, check_nmi
- mtc0 zero, C0_COUNT
- jr a2
-
- END(__reset_vector)
- .org 0x200
- LEAF(__boot_tlb_refill)
- PTR_MFC0 k0, C0_EPC
- PTR_MFC0 k1, C0_BADVADDR
- 1: wait
- b 1b
- nop
- END(__boot_tlb_refill)
- .org 0x280
- LEAF(__boot_xtlb_refill)
- PTR_MFC0 k0, C0_EPC
- PTR_MFC0 k1, C0_BADVADDR
- 1: wait
- b 1b
- nop
- END(__boot_xtlb_refill)
- .org 0x300
- LEAF(__boot_cache_error)
- PTR_MFC0 k0, C0_EPC
- PTR_MFC0 k1, C0_BADVADDR
- 1: wait
- b 1b
- nop
- END(__boot_cache_error)
- .extern _general_exception_handler
- .org 0x380
- LEAF(__boot_general_exception)
- PTR_MFC0 a0, C0_EPC
- PTR_MFC0 a1, C0_BADVADDR
- 1: wait
- b 1b
- nop
- END(__boot_general_exception)
- .org 0x480
- LEAF(__boot_debug_exception)
- PTR_MFC0 k0, C0_DEPC
- PTR_MFC0 k1, C0_BADVADDR
- 1: wait
- b 1b
- END(__boot_debug_exception)
- .org 0x500
- check_nmi:
- mfc0 a0, C0_STATUS
- srl a0, 19
- andi a0, a0, 1
- beqz a0, verify_isa
- sdbbp
- verify_isa:
- mfc0 a0, C0_CONFIG
- srl a0, 10
- andi a3, a0, 0x18
- beqz a3, is_mips32
- sdbbp
- is_mips32:
- andi a3, a0, 0x07
- bnez a3, init_common_resources
- sdbbp # Failed assertion RISC32R2.
- init_common_resources:
- la a2,init_gpr
- jalr a2
- la a2, set_gpr_boot_values
- jalr a2
- la a2, init_cp0
- jalr a2
-
- mfc0 v1, C0_CONFIG
- ext v1, v1, 7, 3
- li a3, 0x1
- bne v1, a3, done_tlb
-
- beqz r9_vpe_num, do_tlb
-
- mfc0 a0, $0, 1
- ext a0, a0, 3, 1
- beq a0, zero, done_tlb
- do_tlb:
- la a2, init_tlb
- jalr a2
-
- done_tlb:
- bnez r9_vpe_num, init_done
- init_sys_resources: # We are core0 vpe0.
- la a2, init_icache
- jalr a2
- la a2, change_k0_cca
- li a1, 0xf
- ins a2, a1, 29, 1
- jalr a2
- la a2, init_dcache
- jalr a2
- la a2, copy_c2_ram
- jalr a2
- la a2, init_itc
- jalr a2
- la a2, init_vpe1
- jalr a2
- init_done:
-
- la ra, __exit
- la a1, _start
- mtc0 a1, C0_ERRPC
- ehb
- eret # Exit reset exception handler for this vpe and start execution of main().
- nop
- .global __exit
- __exit:
- all_done:
- # Looks like main returned. Just busy wait spin.
- b all_done
|