arm920t.s
来自「ADS下的bios工程」· S 代码 · 共 692 行 · 第 1/2 页
S
692 行
#include <bios/linkage.h>#include <bios/s3c2410x.h>#define R1_iA (1<<31) /* Async. clock select */#define R1_nF (1<<30) /* not Fast Bus select */#define R1_RR (1<<14) /* Round robin replacement */#define R1_V (1<<13) /* Base location of exception vector*/#define R1_I (1<<12) /* Instruction Cache enable */#define R1_R (1<<9) /* ROM protection */#define R1_S (1<<8) /* System protection */#define R1_B (1<<7) /* Endian Big/Little */#define R1_C (1<<2) /* Data Cache enable */#define R1_A (1<<1) /* Alignment fault enable */#define R1_M (1<<0) /* MMU enable */ .text/*----------------------------------------------- * u32 IDCode(void) *-----------------------------------------------*/ .macro IDCode mrc p15, 0, r0, c0, c0, 0 .endm/*----------------------------------------------- * u32 CacheType(void) *-----------------------------------------------*/ .macro CacheType mrc p15, 0, r0, c0, c0, 1 .endm/*=================================================================== * Cache, Clock mode, Protection, Endian ... control functions *===================================================================*//*----------------------------------------------- * void SetRegister1(u32 bits) * r0 : R1_iA, R1_nF, R1_RR, R1_V, R1_I, * R1_R, R1_S, R1_B, R1_C, R1_A, R1_M *-----------------------------------------------*/ .macro SetRegister1 mrc p15, 0, r1, c1, c0, 0 orr r0, r1, r0 mcr p15, 0, r0, c1, c0, 0 mov r0, r0 mov r0, r0 mov r0, r0 .endmENTRY(SetRegister1) SetRegister1 mov pc,lr/*----------------------------------------------- * void ClearRegister1(u32 bits) * r0 : R1_iA, R1_nF, R1_RR, R1_V, R1_I, * R1_R, R1_S, R1_B, R1_C, R1_A, R1_M *-----------------------------------------------*/ .macro ClearRegister1 mrc p15, 0, r1, c1, c0, 0 bic r0, r1, r0 mcr p15, 0, r0, c1, c0, 0 .endmENTRY(ClearRegister1) ClearRegister1 mov pc,lr/*------------------------------------------------ * void icache_enable(void) *-----------------------------------------------*/ .macro icache_enable mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #R1_I mcr p15, 0, r0, c1, c0, 0 .endm/*------------------------------------------------ * ICache Enable Function *-----------------------------------------------*/ENTRY(icache_enable) icache_enable mov pc, lr/*------------------------------------------------ * void icache_disable(void) *-----------------------------------------------*/ .macro icache_disable mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #R1_I mcr p15, 0, r0, c1, c0, 0 .endm/*------------------------------------------------ * ICache Disable Function *-----------------------------------------------*/ENTRY(icache_disable) icache_disable mov pc, lr/*------------------------------------------------ * void dcache_enable(void) *-----------------------------------------------*/ .macro dcache_enable mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #R1_C mcr p15, 0, r0, c1, c0, 0 .endm/*------------------------------------------------ * DCache Enable Function *-----------------------------------------------*/ENTRY(dcache_enable) dcache_enable mov pc, lr/*------------------------------------------------ * void dcache_disable(void) *-----------------------------------------------*/ .macro dcache_disable mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #R1_C mcr p15, 0, r0, c1, c0, 0 .endm/*------------------------------------------------ * DCache Disable Function *-----------------------------------------------*/ENTRY(dcache_disable) dcache_disable mov pc, lr/*------------------------------------------------ * void align_fault_enable(void) *-----------------------------------------------*/ .macro align_fault_enable mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #R1_A mcr p15, 0, r0, c1, c0, 0 .endmENTRY(align_fault_enable) align_fault_enable mov pc,lr/*------------------------------------------------ * void align_fault_disable(void) *-----------------------------------------------*/ .macro align_fault_disable mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #R1_A mcr p15, 0, r0, c1, c0, 0 .endmENTRY(align_fault_disable) align_fault_disable mov pc,lr/*------------------------------------------------ * void mmu_enable(void) *-----------------------------------------------*/ .macro mmu_enable mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #R1_M mcr p15, 0, r0, c1, c0, 0 .endm/*------------------------------------------------ * MMU Enable Function *-----------------------------------------------*/ENTRY(mmu_enable) mmu_enable mov pc, lr/*------------------------------------------------ * void mmu_disable(void) *-----------------------------------------------*/ .macro mmu_disable mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #R1_M mcr p15, 0, r0, c1, c0, 0 .endm/*------------------------------------------------ * MMU Diable Function *-----------------------------------------------*/ENTRY(mmu_disable) mmu_disable mov pc,lr/*------------------------------------------------ * void fast_bus_mode(void) * FCLK:HCLK= 1:1 *-----------------------------------------------*/ .macro fast_bus_mode mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #R1_iA | R1_nF mcr p15, 0, r0, c1, c0, 0 .endmENTRY(fast_bus_mode) fast_bus_mode mov pc,lr/*------------------------------------------------ * void async_bus_mode(void) * FCLK:HCLK= 1:2 *-----------------------------------------------*/ .macro async_bus_mode mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #R1_nF | R1_iA mcr p15, 0, r0, c1, c0, 0 .endmENTRY(async_bus_mode) async_bus_mode mov pc,lr/*=================================================================== * Register2 : Translation table base register *===================================================================*//*------------------------------------------------ * void SetRegister2(u32 base) * base : TTBase(bit[13:0] should be zero) *-----------------------------------------------*/ .macro SetRegister2 mcr p15, 0, r0, c2, c0, 0 .endm/*------------------------------------------------ * SetRegister2(u32 base) function *-----------------------------------------------*/ENTRY(SetRegister2) SetRegister2 mov pc,lr/*------------------------------------------------ * u32 ReadRegister2(void) * return : TTBase(bit[13:0] are unpredictable) *-----------------------------------------------*/ .macro ReadRegister2 mrc p15, 0, r0, c2, c0, 0 .endm/*------------------------------------------------ * ReadRegister2(u32 base) function *-----------------------------------------------*/ENTRY(ReadRegister2) ReadRegister2 mov pc,lr/*=================================================================== * Register3 : Domain access control register *===================================================================*//*------------------------------------------------ * void MMU_SetDomain(u32 domain) * domain : 16 domain(each of 2-bit field) * 0 0 --> No Access(Generate a domain fault) * 0 1 --> Client(Checked in the section or page descriptor) * 1 0 --> Reserved * 1 1 --> Manager(Not checked) *-----------------------------------------------*/ .macro SetRegister3 mcr p15, 0, r0, c3, c0, 0 .endm/*------------------------------------------------ * SetRegister3(void) Function *-----------------------------------------------*/ENTRY(SetRegister3) SetRegister3 mov pc,lr/*------------------------------------------------ * u32 ReadRegister3(void) * return : 16 domain(each of 2-bit field) *-----------------------------------------------*/ .macro ReadRegister3 mrc p15, 0, r0, c3, c0, 0 .endm/*------------------------------------------------ * ReadRegister3(void) Function *-----------------------------------------------*/ENTRY(ReadRegister3) ReadRegister3 mov pc,lr/*=================================================================== * Register7 : Cache operations register(Write-only) *===================================================================*//*------------------------------------------------ * void InvalidateIDCache(void) * r0 : SBZ(should be zero) *-----------------------------------------------*/ .macro InvalidateIDCache mcr p15, 0, r0, c7, c7, 0 .endmENTRY(InvalidateIDCache) InvalidateIDCache mov pc,lr/*------------------------------------------------ * void InvalidateICache(void) * r0 : SBZ(should be zero) *-----------------------------------------------*/ .macro InvalidateICache mcr p15, 0, r0, c7, c5, 0 .endm/*------------------------------------------------ * InvalidateICache Function *-----------------------------------------------*/ENTRY(InvalidateICache) InvalidateICache mov pc,lr/*------------------------------------------------ * void InvalidateICacheMVA(u32 mva) * mva : MVA[31:5], SBZ[4:0] *-----------------------------------------------*/ .macro InvalidateICacheMVA mcr p15, 0, r0, c7, c5, 1 .endm ENTRY(InvalidateICacheMVA) InvalidateICacheMVA mov pc,lr/*------------------------------------------------ * void PrefetchICacheMVA(u32 mva) * mva : MVA[31:5], SBZ[4:0] *-----------------------------------------------*/ .macro PrefetchICacheMVA mcr p15, 0, r0, c7, c13, 1 .endmENTRY(PrefetchICacheMVA) PrefetchICacheMVA mov pc,lr
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?