#include
|
#include
|
#include
|
#include
|
#include
|
#include
|
|
|
#undef IC_ENABLE
|
#undef IC_ENABLE
|
#define IC_ENABLE 1
|
#define IC_ENABLE 1
|
|
|
.extern _reset_support
|
.extern _reset_support
|
.extern _src_beg
|
.extern _src_beg
|
.extern _dst_beg
|
.extern _dst_beg
|
.extern _dst_end
|
.extern _dst_end
|
.extern _c_reset
|
.extern _c_reset
|
|
|
.global start
|
.global start
|
.global _lolev_ie
|
.global _lolev_ie
|
.global _str
|
.global _str
|
|
|
.section .stack
|
.section .stack
|
.space 0x30000
|
.space 0x30000
|
_stack:
|
_stack:
|
|
|
.section .reset, "a"
|
.section .reset, "a"
|
|
|
.org 0x100
|
.org 0x100
|
start:
|
start:
|
_reset:
|
_reset:
|
l.addi r3,r0,SPR_SR_SM
|
l.addi r3,r0,SPR_SR_SM
|
l.mtspr r0,r3,SPR_SR
|
l.mtspr r0,r3,SPR_SR
|
l.movhi r3,hi(_start)
|
l.movhi r3,hi(_start)
|
l.ori r3,r3,lo(_start)
|
l.ori r3,r3,lo(_start)
|
l.jr r3
|
l.jr r3
|
l.nop
|
l.nop
|
|
|
.section .text
|
.section .text
|
|
|
_start:
|
_start:
|
l.jal init_mc
|
l.jal init_mc
|
l.nop
|
l.nop
|
|
|
.if IC_ENABLE
|
.if IC_ENABLE
|
l.jal _ic_enable
|
l.jal _ic_enable
|
l.nop
|
l.nop
|
.endif
|
.endif
|
|
|
/* Copy form flash to sram */
|
/* Copy form flash to sram */
|
.if 1
|
.if 1
|
l.movhi r3,hi(_src_beg)
|
l.movhi r3,hi(_src_beg)
|
l.ori r3,r3,lo(_src_beg)
|
l.ori r3,r3,lo(_src_beg)
|
l.movhi r4,hi(_dst_beg)
|
l.movhi r4,hi(_dst_beg)
|
l.ori r4,r4,lo(_dst_beg)
|
l.ori r4,r4,lo(_dst_beg)
|
l.movhi r5,hi(_dst_end)
|
l.movhi r5,hi(_dst_end)
|
l.ori r5,r5,lo(_dst_end)
|
l.ori r5,r5,lo(_dst_end)
|
l.sub r5,r5,r4
|
l.sub r5,r5,r4
|
l.sfeqi r5,0
|
l.sfeqi r5,0
|
l.bf 2f
|
l.bf 2f
|
l.nop
|
l.nop
|
1: l.lwz r6,0(r3)
|
1: l.lwz r6,0(r3)
|
l.sw 0(r4),r6
|
l.sw 0(r4),r6
|
l.addi r3,r3,4
|
l.addi r3,r3,4
|
l.addi r4,r4,4
|
l.addi r4,r4,4
|
l.addi r5,r5,-4
|
l.addi r5,r5,-4
|
l.sfgtsi r5,0
|
l.sfgtsi r5,0
|
l.bf 1b
|
l.bf 1b
|
l.nop
|
l.nop
|
2:
|
2:
|
.endif
|
.endif
|
|
|
l.movhi r1,hi(_stack)
|
l.movhi r1,hi(_stack)
|
l.addi r1,r1,lo(_stack)
|
l.addi r1,r1,lo(_stack)
|
l.addi r1,r1,-4
|
l.addi r1,r1,-4
|
|
|
l.movhi r3,hi(_linux_start)
|
l.movhi r3,hi(_linux_start)
|
l.ori r3,r3,lo(_linux_start)
|
l.ori r3,r3,lo(_linux_start)
|
l.addi r4,r0,0
|
l.addi r4,r0,0
|
l.jal _decompress
|
l.jal _decompress
|
l.nop
|
l.nop
|
|
|
l.addi r2,r0,0x100
|
l.addi r2,r0,0x100
|
l.jr r2
|
l.jr r2
|
l.addi r2,r0,0
|
l.addi r2,r0,0
|
|
|
init_mc:
|
init_mc:
|
|
|
l.movhi r3,hi(MC_BASE_ADD)
|
l.movhi r3,hi(MC_BASE_ADD)
|
l.ori r3,r3,lo(MC_BASE_ADD)
|
l.ori r3,r3,lo(MC_BASE_ADD)
|
|
|
l.addi r4,r3,MC_CSC(0)
|
l.addi r4,r3,MC_CSC(0)
|
l.movhi r5,hi(FLASH_BASE_ADD)
|
l.movhi r5,hi(FLASH_BASE_ADD)
|
l.srai r5,r5,5
|
l.srai r5,r5,5
|
l.ori r5,r5,0x0025
|
l.ori r5,r5,0x0025
|
l.sw 0(r4),r5
|
l.sw 0(r4),r5
|
|
|
l.addi r4,r3,MC_TMS(0)
|
l.addi r4,r3,MC_TMS(0)
|
l.movhi r5,hi(FLASH_TMS_VAL)
|
l.movhi r5,hi(FLASH_TMS_VAL)
|
l.ori r5,r5,lo(FLASH_TMS_VAL)
|
l.ori r5,r5,lo(FLASH_TMS_VAL)
|
l.sw 0(r4),r5
|
l.sw 0(r4),r5
|
|
|
l.addi r4,r3,MC_BA_MASK
|
l.addi r4,r3,MC_BA_MASK
|
l.addi r5,r0,MC_MASK_VAL
|
l.addi r5,r0,MC_MASK_VAL
|
l.sw 0(r4),r5
|
l.sw 0(r4),r5
|
|
|
l.addi r4,r3,MC_CSR
|
l.addi r4,r3,MC_CSR
|
l.movhi r5,hi(MC_CSR_VAL)
|
l.movhi r5,hi(MC_CSR_VAL)
|
l.ori r5,r5,lo(MC_CSR_VAL)
|
l.ori r5,r5,lo(MC_CSR_VAL)
|
l.sw 0(r4),r5
|
l.sw 0(r4),r5
|
|
|
l.addi r4,r3,MC_TMS(1)
|
l.addi r4,r3,MC_TMS(1)
|
l.movhi r5,hi(SDRAM_TMS_VAL)
|
l.movhi r5,hi(SDRAM_TMS_VAL)
|
l.ori r5,r5,lo(SDRAM_TMS_VAL)
|
l.ori r5,r5,lo(SDRAM_TMS_VAL)
|
l.sw 0(r4),r5
|
l.sw 0(r4),r5
|
|
|
l.addi r4,r3,MC_CSC(1)
|
l.addi r4,r3,MC_CSC(1)
|
l.movhi r5,hi(SDRAM_BASE_ADD)
|
l.movhi r5,hi(SDRAM_BASE_ADD)
|
l.srai r5,r5,5
|
l.srai r5,r5,5
|
l.ori r5,r5,0x0411
|
l.ori r5,r5,0x0411
|
l.sw 0(r4),r5
|
l.sw 0(r4),r5
|
|
|
l.jr r9
|
l.jr r9
|
l.nop
|
l.nop
|
|
|
_ic_enable:
|
_ic_enable:
|
/* Disable IC */
|
/* Disable IC */
|
l.mfspr r13,r0,SPR_SR
|
l.mfspr r13,r0,SPR_SR
|
l.addi r11,r0,-1
|
l.addi r11,r0,-1
|
l.xori r11,r11,SPR_SR_ICE
|
l.xori r11,r11,SPR_SR_ICE
|
l.and r11,r13,r11
|
l.and r11,r13,r11
|
l.mtspr r0,r11,SPR_SR
|
l.mtspr r0,r11,SPR_SR
|
|
|
/* Invalidate IC */
|
/* Invalidate IC */
|
l.addi r13,r0,0
|
l.addi r13,r0,0
|
l.addi r11,r0,IC_SIZE
|
l.addi r11,r0,IC_SIZE
|
1:
|
1:
|
l.mtspr r0,r13,SPR_ICBIR
|
l.mtspr r0,r13,SPR_ICBIR
|
l.sfne r13,r11
|
l.sfne r13,r11
|
l.bf 1b
|
l.bf 1b
|
l.addi r13,r13,IC_LINE
|
l.addi r13,r13,IC_LINE
|
|
|
/* Enable IC */
|
/* Enable IC */
|
l.mfspr r13,r0,SPR_SR
|
l.mfspr r13,r0,SPR_SR
|
l.ori r13,r13,SPR_SR_ICE
|
l.ori r13,r13,SPR_SR_ICE
|
l.mtspr r0,r13,SPR_SR
|
l.mtspr r0,r13,SPR_SR
|
l.nop
|
l.nop
|
l.nop
|
l.nop
|
l.nop
|
l.nop
|
l.nop
|
l.nop
|
l.nop
|
l.nop
|
|
|
l.jr r9
|
l.jr r9
|
l.nop
|
l.nop
|
|
|
.global __print
|
.global __print
|
__print:
|
__print:
|
l.lwz r3,0(r1)
|
l.lwz r3,0(r1)
|
l.addi r4,r1,4
|
l.addi r4,r1,4
|
# l.sys 202
|
# l.sys 202
|
l.nop 3
|
l.nop 3
|
l.jr r9
|
l.jr r9
|
l.nop
|
l.nop
|
|
|
|
|
|
|
|
|