arm920t.s
来自「ADS下的bios工程」· S 代码 · 共 692 行 · 第 1/2 页
S
692 行
/*------------------------------------------------ * void InvalidateDCache(void) * r0 : SBZ(should be zero) *-----------------------------------------------*/ .macro InvalidateDCache mcr p15, 0, r0, c7, c6, 0 .endmENTRY(InvalidateDCache) InvalidateDCache mov pc,lr/*------------------------------------------------ * void InvalidateDCacheMVA(u32 mva) * mva : MVA[31:5], SBZ[4:0] *-----------------------------------------------*/ .macro InvalidateDCacheMVA mcr p15, 0, r0, c7, c6, 1 .endmENTRY(InvalidateDCacheMVA) InvalidateDCacheMVA mov pc,lr/*------------------------------------------------ * void CleanDCacheMVA(u32 mva) * mva : MVA[31:5], SBZ[4:0] *-----------------------------------------------*/ .macro CleanDCacheMVA mcr p15, 0, r0, c7, c10, 1 .endmENTRY(CleanDCacheMVA) CleanDCacheMVA mov pc,lr/*------------------------------------------------ * void CleanInvalidateDCacheMVA(u32 mva) * mva : MVA[31:5], SBZ[4:0] *-----------------------------------------------*/ .macro CleanInvalidateDCacheMVA mcr p15, 0, r0, c7, c14, 1 .endmENTRY(CleanInvalidateDCacheMVA) CleanInvalidateDCacheMVA mov pc,lr/*------------------------------------------------ * void CleanDCacheIndex(u32 index) * index : *-----------------------------------------------*/ .macro CleanDCacheIndex mcr p15, 0, r0, c7, c10, 2 .endmENTRY(CleanDCacheIndex) CleanDCacheIndex mov pc,lr/*------------------------------------------------ * void CleanInvalidateDCacheIndex(u32 index) * index : *-----------------------------------------------*/ .macro CleanInvalidateDCacheIndex mcr p15, 0, r0, c7, c14, 2 .endm/*------------------------------------------------ * CleanInvalidateDCacheIndex(u32 index) Function *-----------------------------------------------*/ENTRY(CleanInvalidateDCacheIndex) CleanInvalidateDCacheIndex mov pc,lr/*------------------------------------------------ * void DrainWriteBuffer(void) * r0 : SBZ(should be zero) *-----------------------------------------------*/ .macro DrainWriteBuffer mcr p15, 0, r0, c7, c0, 4 .endmENTRY(DrainWriteBuffer) DrainWriteBuffer mov pc,lr/*------------------------------------------------ * void WaitForInterrupt(void) * r0 : SBZ(should be zero) *-----------------------------------------------*/ .macro WaitForInterrupt mcr p15, 0, r0, c7, c0, 4 .endmENTRY(WaitForInterrupt) WaitForInterrupt mov pc,lr/*=================================================================== * Register8 : Translation lookaside buffer(TLB) operations register * (Write-only) *===================================================================*//*------------------------------------------------ * void InvalidateTLB(void) *-----------------------------------------------*/ .macro InvalidateTLB mcr p15, 0, r0, c8, c7, 0 .endm/*------------------------------------------------ * InvalidateTLB Funtion *-----------------------------------------------*/ENTRY(InvalidateTLB) InvalidateTLB mov pc,lr/*------------------------------------------------ * void InvalidateITLB(void) *-----------------------------------------------*/ .macro InvalidateITLB mcr p15, 0, r0, c8, c5, 0 .endmENTRY(InvalidateITLB) InvalidateITLB mov pc,lr/*------------------------------------------------ * void InvalidateITLBMVA(u32 mva) * mva : MVA[31:10], SBZ[9:0] *-----------------------------------------------*/ .macro InvalidateITLBMVA mcr p15, 0, r0, c8, c5, 1 .endmENTRY(InvalidateITLBMVA) InvalidateITLBMVA mov pc,lr/*------------------------------------------------ * void InvalidateDTLB(void) *-----------------------------------------------*/ .macro InvalidateDTLB mcr p15, 0, r0, c8, c6, 0 .endmENTRY(InvalidateDTLB) InvalidateDTLB mov pc,lr/*------------------------------------------------ * void InvalidateDTLBMVA(u32 mva) * mva : MVA[31:10], SBZ[9:0] *-----------------------------------------------*/ .macro InvalidateDTLBMVA mcr p15, 0, r0, c8, c6, 1 .endmENTRY(InvalidateDTLBMVA) InvalidateDTLBMVA mov pc,lr/*=================================================================== * Register9 : Cache lock down register *===================================================================*//*------------------------------------------------ * void SetDCacheLockdownBase(u32 base) * base : victim & lockdown base *-----------------------------------------------*/ .macro SetDCacheLockdownBase mcr p15, 0, r0, c9, c0, 0 .endm ENTRY(SetDCacheLockdownBase) SetDCacheLockdownBase mov pc,lr/*------------------------------------------------ * void SetICacheLockdownBase(u32 base) * base : victim & lockdown base *-----------------------------------------------*/ .macro SetICacheLockdownBase mcr p15, 0, r0, c9, c0, 1 .endmENTRY(SetICacheLockdownBase) SetICacheLockdownBase mov pc,lr/*=================================================================== * Register10 : TLB lock down register *===================================================================*//*------------------------------------------------ * void SetDTLBLockdown(u32 baseVictim) * baseVictim : *-----------------------------------------------*/ .macro SetDTLBLockdown mcr p15, 0, r0, c10, c0, 0 .endm ENTRY(SetDTLBLockdown) SetDTLBLockdown mov pc,lr/*----------------------------------------------- * void SetITLBLockdown(u32 baseVictim) * baseVictim : *-----------------------------------------------*/ .macro SetITLBLockdown mcr p15, 0, r0, c10, c0, 1 .endmENTRY(SetITLBLockdown) SetITLBLockdown mov pc,lr/*=================================================================== * Register13 : process identifier register *===================================================================*//*------------------------------------ * void SetProcessId(u32 pid) * pid : Proc ID[31:25], SBZ[24:0] *-----------------------------------*/ .macro SetProcessId mcr p15, 0, r0, c13, c0, 0 .endmENTRY(SetProcessId) SetProcessId mov pc,lrENTRY(MMU_Init) mov r11, lr mov r0, #R1_C orr r0, r0, #R1_I ClearRegister1 mov r1, #0 /* ways */02: mov r2, #0 /* line */ mov r3, r1, lsl #2601: orr r0, r3, r2, lsl #5 add r2, r2, #1 CleanInvalidateDCacheIndex cmp r2, #7 ble 01b add r1, r1, #1 cmp r1, #63 ble 02b mov r0, #0x0 InvalidateICache mov r0, #R1_M ClearRegister1 InvalidateTLB /* table created(r0:MMU_Base, r1:paddr, r2:vaddr, r3:size, r4:attr) */ /* entry = MMU_Base + (vaddr >> 18) */ /* value = (((paddr >> 20) + 1M) << 20) | attr */ bl MMUTT_Init ldr r0, =MMUTT_STARTADDRESS SetRegister2 @ Set Translation Table Base ldr r0, =0x5555555F SetRegister3 mov r0, #0x0 SetProcessId mov r0, #R1_A | R1_C | R1_M orr r0, r0, #R1_I SetRegister1 @ MMU Enable mov pc, r11ENTRY(MMUTT_Init) mov r12, lr ldr r0, =MMUTT_STARTADDRESS @ Table Base Address mov r6, #0x9 ldr r5, =.ROM0_TT_Value01: ldmia r5!, {r1-r4} bl MMU_Memory_Bank_Init subs r6, r6, #1 bne 01b mov pc, r12/*----------------------------- * r1 : Physical Address * r2 : Virtual Address * r3 : Setting Count by MB * r4 : Attr *----------------------------*/ENTRY(MMU_Memory_Bank_Init) add r2, r0, r2, lsr #18 add r1, r1, r4 str r1, [r2], #406: add r1, r1, #1 << 20 str r1, [r2], #4 subs r3, r3, #1 bne 06b mov pc, lr.ROM0_TT_Value: .long 0x00000000 @ Physical Address (nGCS0) .long 0x00000000 @ Virtual Address .long 0x7F @ MMU Table Entry Count(by MB) .long 0x00000C1A @ 128 MB(Base:0x00000000, Cache ON, Buffer OFF) .long 0x08000000 @ Physical Address (nGCS1) .long 0x08000000 @ Virtual Address .long 0x7F @ MMU Table Entry Count(by MB) .long 0x00000C1A @ 128 MB(Base:0x00000000, Cache ON, Buffer OFF) .long 0x10000000 @ Physical Address (nGCS2) .long 0x10000000 @ Virtual Address .long 0x7F @ MMU Table Entry Count(by MB) .long 0x00000C12 @ 128 MB(Base:0x00000000, Cache OFF, Buffer OFF) .long 0x18000000 @ Physical Address (nGCS3) .long 0x18000000 @ Virtual Address .long 0x7F @ MMU Table Entry Count(by MB) .long 0x00000C12 @ 128 MB(Base:0x00000000, Cache OFF, Buffer OFF) .long 0x20000000 @ Physical Address (nGCS4) .long 0x20000000 @ Virtual Address .long 0x7F @ MMU Table Entry Count(by MB) .long 0x00000C12 @ 128 MB(Base:0x00000000, Cache OFF, Buffer OFF) .long 0x28000000 @ Physical Address (nGCS5) .long 0x28000000 @ Virtual Address .long 0x7F @ MMU Table Entry Count(by MB) .long 0x00000C12 @ 128 MB(Base:0x00000000, Cache OFF, Buffer OFF) .long 0x30000000 @ Physical Address (nGCS6) .long 0x30000000 @ Virtual Address .long 0x7F @ MMU Table Entry Count(by MB) .long 0x00000C1E @ 128 MB(Base:0x00000000, Cache ON, Buffer ON) .long 0x38000000 @ Physical Address (nGCS7) .long 0x38000000 @ Virtual Address .long 0x7F @ MMU Table Entry Count(by MB) .long 0x00000C1E @ 128 MB(Base:0x00000000, Cache ON, Buffer ON) .long 0x48000000 @ Physical Address (SFR) .long 0x48000000 @ Virtual Address .long 0xFF @ MMU Table Entry Count(by MB) .long 0x00000C12 @ 256 MB(Base:0x00000000, Cache OFF, Buffer OFF)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?