#include #include #include "cortex_a9.h" #include "public.h" #include "mmu.h" #include "arm_cache.h" #include "asm_defines.h" const unsigned int PLL1_CLK = 792000000; extern unsigned int TestNeon(void); extern void TestRoundData(unsigned int Row,unsigned int Line); extern SWUART swuart; unsigned int process = 0xdeadbeef; void delay_short(volatile unsigned int n) { while(n--) { } } void delay(volatile unsigned int n) { while(n--) { delay_short(0xbbccf); } } void data_abort_test(void) { unsigned int *p = (unsigned int *)0x79880001; *p = 1; } void prefectch_abort_test(void) { unsigned int badaddr = 0x79000000; asm volatile( "mov r5,%0\n" "mov pc,r5\n" : : "r"(badaddr) : "r5" ); } extern unsigned int SCU_BASE; extern void MMU_Enable(void); double gdPi = 3.141592654; __attribute__ ((section (".cpu3main"))) void main(void) { const char Date[12] = __DATE__; const char Time[9] = __TIME__; mmu_l1_entry_t l1ent; mmu_l2_entry_t l2ent; volatile unsigned int *ptr = (unsigned int*)0x00a00000; volatile unsigned int cnt = 0; unsigned int vbar_reg = 0; unsigned int cpsr_reg = 0; disp("Build Time:%s-%s.\n",Date,Time); disp("float test pi = %lf\n",gdPi); disp("CPU1 process debug addr:0x%x\n",&process); disable_mmu();// if enabled cpsr_reg = read_cpsr_reg(); disp("cpsr reg = 0x%08lx\n",cpsr_reg); _arm_mrc(15, 0, vbar_reg, 12, 0, 0); disp("vbar reg = 0x%08lx\n",vbar_reg); disp_scu_all_regs(); twd_set_periodic(); disp_private_timer_regs(); invalidate_tlb(); arm_icache_enable(); arm_dcache_enable(); arm_icache_invalidate(); arm_dcache_invalidate(); arm_branch_target_cache_invalidate(); arm_branch_prediction_enable(); mmu_init(); Test_VirtualMMU(0xdeadbeef); arm_dcache_invalidate(); l1ent.u = 0; l2ent.u = 0; l2ent.id = 0b10; l2ent.s = 1; l2ent.tex = 0b000; l2ent.ap = 0b11; l2ent.c = 0; l2ent.b = 0; l1ent.id = 0b01; l1ent.domain = 0x0; SetTlbAttributes((unsigned int)&swuart, l1ent.l1_attr, l2ent.l2_attr); disp("SCU_BASE=0x%08x\n", SCU_BASE); disp("Enable MMU \n"); /* mmu_enable(); */ MMU_Enable(); disp_cp15_regs(); // disable_mmu(); ptr = (unsigned int *)SCU_BASE; // disp("SCU_BASE %#x=%#x\n", ptr, *ptr); disp("Enable SIMD VFP \n"); Enable_SIMD_VFP(); disp("Neon Test ...\n"); TestNeon(); disp("Normal Distribution Random number Test ...\n"); TestRoundData(10,5); for(;;) { disp("run times:0x%08x.\n",cnt); //data_abort_test(); //prefectch_abort_test(); cnt++; delay(30); /* disp_private_timer_regs(); */ } }