void movi_uboot_copy(void) { int i; #ifdef CONFIG_EVT1 #ifdef CONFIG_CORTEXA5_ENABLE SDMMC_ReadBlocks(MOVI_UBOOT_POS, MOVI_UBOOT_BLKCNT, 0x40000000); #endif SDMMC_ReadBlocks(MOVI_UBOOT_POS, MOVI_UBOOT_BLKCNT, CONFIG_PHY_UBOOT_BASE); #ifdef CONFIG_TRUSTZONE for(i = 0; i < 100; i++) { *((u32*)(0x2028000)+i) = 0xBAADD00D; } SDMMC_ReadBlocks(MOVI_TZSW_POS, MOVI_TZSW_BLKCNT, CFG_FASTBOOT_TRANSFER_BUFFER); uboot_memcpy(TZSW_MEM_ADDR, CFG_FASTBOOT_TRANSFER_BUFFER, PART_SIZE_TZSW); #endif #else copy_sd_mmc_to_mem copy_uboot = (copy_sd_mmc_to_mem)(0x00002488); copy_uboot(MOVI_UBOOT_POS, MOVI_UBOOT_BLKCNT, CONFIG_PHY_UBOOT_BASE); #ifdef CONFIG_TRUSTZONE copy_uboot(MOVI_TZSW_POS, MOVI_TZSW_BLKCNT, TZSW_MEM_ADDR); #endif #endif #ifdef CONFIG_SECURE_BOOT if(Check_Signature( (SB20_CONTEXT *)SECURE_CONTEXT_BASE, (unsigned char*)CONFIG_PHY_UBOOT_BASE, PART_SIZE_UBOOT-256, (unsigned char*)(CONFIG_PHY_UBOOT_BASE+PART_SIZE_UBOOT-256), 256 ) != 0) { while(1); } #endif }
void movi_uboot_copy(void) { #if defined(CONFIG_S5P6460) SDMMC_ReadBlocks(MOVI_UBOOT_POS, MOVI_UBOOT_BLKCNT, CONFIG_PHY_UBOOT_BASE); #else copy_sd_mmc_to_mem copy_uboot = (copy_sd_mmc_to_mem)(COPY_MOVI_TO_MEM_FUNC); copy_uboot(MOVI_UBOOT_POS, MOVI_UBOOT_BLKCNT, CONFIG_PHY_UBOOT_BASE); #endif }
void movi_uboot_copy(void) { #ifdef CONFIG_RAM_TEST uboot_mem_test(); #endif #ifdef CONFIG_CORTEXA5_ENABLE SDMMC_ReadBlocks(MOVI_UBOOT_POS, MOVI_UBOOT_BLKCNT, 0x40000000); #endif SDMMC_ReadBlocks(MOVI_UBOOT_POS, MOVI_UBOOT_BLKCNT, CONFIG_PHY_UBOOT_BASE); #ifdef CONFIG_SECURE_BOOT if (Check_Signature((SB20_CONTEXT *)SECURE_CONTEXT_BASE, (unsigned char*)CONFIG_PHY_UBOOT_BASE, PART_SIZE_UBOOT-256, (unsigned char*)(CONFIG_PHY_UBOOT_BASE+PART_SIZE_UBOOT-256), 256) != 0) { while(1); } #endif }
void copy_code_to_dram(void) { //unsigned long ch; void (*user_bin)(void); //ch = *(volatile unsigned int *)(0xD0037488);//need modify // 函数指针 //copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem) (*(unsigned int *) (0xD0037F98)); //copy_bl2(0, 49, 32,(unsigned int *)0x23E00000, 0); // 49:源,代码位于扇区49,1 sector = 512 bytes // 32:长度,拷贝32 sector,即16K // 0x23E00000:目的,链接地址0x23E00000 volatile unsigned long count=0x100000; while(count>0){ count--;} uart_asm_putc('C'); uart_asm_putc('O'); uart_asm_putc('P'); uart_asm_putc('Y'); uart_asm_putc('\r'); uart_asm_putc('\n'); SDMMC_ReadBlocks(49,32,(unsigned int *)0x43e00000); //uart_asm_putx("now copy OVER!!!!/n"); uart_asm_putc('O'); uart_asm_putc('V'); uart_asm_putc('E'); uart_asm_putc('R'); uart_asm_putc('\r'); uart_asm_putc('\n'); unsigned int *p; int i; p = (unsigned int *) 0x43e00000; for (i = 0; i < 100; i++) { uart_asm_putx(*(p+i)); uart_asm_putc(' '); } // 跳转到DRAM user_bin = (void *)0x43e00000; (*user_bin)(); }