Пример #1
0
static void Boot_Linux(void)
{
	U32 i,j;
	
	*((volatile U32 *)(ZPARAMADDR + 4*0)) = 2;
	*((volatile U32 *)(ZPARAMADDR + 4*1)) = ATAG_CORE;
	
	*((volatile U32 *)(ZPARAMADDR + 4*2)) = 4;
	*((volatile U32 *)(ZPARAMADDR + 4*3)) = ATAG_SERIAL;	
	*((volatile U32 *)(ZPARAMADDR + 4*4)) = board_id_l;
	*((volatile U32 *)(ZPARAMADDR + 4*5)) = board_id_h;	
	
	*((volatile U32 *)(ZPARAMADDR + 4*6)) = 3;
	*((volatile U32 *)(ZPARAMADDR + 4*7)) = ATAG_REVISION;	
	*((volatile U32 *)(ZPARAMADDR + 4*8)) = BOARD_VER;	
	
// 	*((volatile U32 *)(ZPARAMADDR + 4*9)) = (4 + kcmdFileSize + 5) >> 2;
// 	*((volatile U32 *)(ZPARAMADDR + 4*10)) = ATAG_CMDLINE;
	
	*((volatile U32 *)(ZPARAMADDR + 4*9)) = 2 + (kcmdFileSize >> 2) + 1;
	*((volatile U32 *)(ZPARAMADDR + 4*10)) = ATAG_CMDLINE;

	for(i=0;i<64;i++) for(j=0;j<8;j++) CP15_CleanInvalidateDcacheIndex((i<<26)|(j<<5));
	CP15_DisableDcache();
	CP15_DisableIcache();
	CP15_InvalidateIcache();
	CP15_DisableMMU();
	CP15_InvalidateTLB(); 
	run = (void (*)(void))ZRELADDR;
	BootmSet_ParamAddr(ZPARAMADDR);
	BootmSet_MachineID(LINUX_MACH_ID);
	run();
}
Пример #2
0
//----------------------------------------------------------------------------
/// Lock I cache
/// \param I cache index
//----------------------------------------------------------------------------
void CP15_LockIcache(unsigned int index)
{
    unsigned int victim = 0;

    // invalidate all the cache (4 ways) 
    CP15_InvalidateIcache();
    
    // lockdown all the ways except this in parameter
    victim =  CP15_ReadIcacheLockdown();
    victim = 0;
    victim |= ~index;
    victim &= 0xffff;
    CP15_WriteIcacheLockdown(victim);
}