更新loader适配emmc

This commit is contained in:
greg 2024-02-04 20:20:52 +08:00
parent 61bb7ba7f6
commit 4400af7b8b

View File

@ -115,6 +115,8 @@ static LDR_RECOVERY_TRIGGER_CB gRecoveryTriggerCallBack = NULL;
//#if (STORAGE_EXT_TYPE != STORAGE_EXT_USB) //#if (STORAGE_EXT_TYPE != STORAGE_EXT_USB)
//static BOOL g_is_recovery_triggered = FALSE; // indicate recovery flow is triggered. //static BOOL g_is_recovery_triggered = FALSE; // indicate recovery flow is triggered.
//#endif //#endif
_THUMB2 static int bl_is_smp(unsigned char *p_fdt); _THUMB2 static int bl_is_smp(unsigned char *p_fdt);
static UINT32 g_uiStartBlkUpdateFW = StartNandBlkUpdateFW; static UINT32 g_uiStartBlkUpdateFW = StartNandBlkUpdateFW;
static UINT32 g_uiNandBlkSize = 0; static UINT32 g_uiNandBlkSize = 0;
@ -2963,6 +2965,7 @@ _THUMB2 static unsigned int bl_process_flash_boot(unsigned char *p_tmp, DRAM_PAR
if (er != 0) { if (er != 0) {
bl_displayErrMsg("boot uboot failed\r\n"); bl_displayErrMsg("boot uboot failed\r\n");
} }
} }
#endif #endif
else { else {
@ -3143,53 +3146,10 @@ _THUMB2 UINT32 bl_mainFlow(void)
// rtc reset shutdown timer // rtc reset shutdown timer
// rtc_resetShutDownTimer(); // rtc_resetShutDownTimer();
// Display Loader Version
#if 0
// adjust PAD driving (if required)
bl_adjustDriving();
/*
- @b RTC_PWR_SW_STS: Power on source is PWR_SW
- @b RTC_PWR_VBAT_STS: Power on source is PWR_VBAT
- @b RTC_PWR_VBUS_STS: Power on source is PWR_VBUS
*/
uiPowerOnSrc = rtc_getPWRONSource();
if (uiPowerOnSrc & RTC_PWR_SW_STS) {
uart_putSystemUARTStr("\r\nSW PON\r\n");
} else if (uiPowerOnSrc & RTC_PWR_VBAT_STS) {
uart_putSystemUARTStr("\r\nVBAT PON\r\n");
} else if (uiPowerOnSrc & RTC_PWR_VBUS_STS) {
uart_putSystemUARTStr("\r\nVBUS PON\r\n");
} else if (rtc_getIsAlarmPowerOn()) {
uart_putSystemUARTStr("\r\nPwrAlarm PON\r\n");
} else {
uart_putSystemUARTStr("\r\nPOR PON\r\n");
}
#endif
// Display Loader Version
debug_msg((char *)LOADER_START_STR); debug_msg((char *)LOADER_START_STR);
UTL_setDrvTmpBufferAddress(uiTmpBufferAddr); UTL_setDrvTmpBufferAddress(uiTmpBufferAddr);
#if 0 // for now, reduce code size
if (rtc_chkS3boot()) {
UINT32 resume_addr;
uart_putSystemUARTStr("main selfing..\r\n");
resume_addr = bl_resume_cpu1((unsigned char *)_BOARD_IPC_ADDR_);
if (resume_addr == 0) {
// in codition for MODELEXT_BUILT_IN_ON
resume_addr = RESUME_ADDR;
}
return resume_addr;
} else {
uart_putSystemUARTStr("main not selfing..\r\n");
}
#endif
#if 0 #if 0
// Sample to hook spi flash extending function // Sample to hook spi flash extending function
flash_installIdentifyCB(bl_spiIdentify); flash_installIdentifyCB(bl_spiIdentify);
@ -3234,38 +3194,11 @@ _THUMB2 UINT32 bl_mainFlow(void)
uiLoaderFunc |= FUNC_RUN_CARD; uiLoaderFunc |= FUNC_RUN_CARD;
} else if ((int_strg_obj->flash_getBlockSize() == EMMC_BLOCK_SIZE) && gRecoveryTriggerCallBack && gRecoveryTriggerCallBack()) { } else if ((int_strg_obj->flash_getBlockSize() == EMMC_BLOCK_SIZE) && gRecoveryTriggerCallBack && gRecoveryTriggerCallBack()) {
debug_msg("Recovery triggered not support currently.\r\n"); debug_msg("Recovery triggered not support currently.\r\n");
#if 0
// open flash
if (bl_flash_open() != 0) {
bl_displayErrMsg("flash open failed\r\n");
} else {
flash_mount_fs(0, BaseOfStack + 0x4000, FAT_HEAP_BUFFER_SIZE);
if (flash_mount_partition(g_uiPartitionID) == E_OK) {
if (flash_open_file(RECOVERY_FW_NAME) == TRUE) {
NVTPACK_MEM mem_in ;
flash_read_file((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD);
mem_in.p_data = (void *)uiUpdateMainBinBufAddr;
mem_in.len = uiUpdateFileLen;
// all in one bin
if (bl_chk_valid_all_in_one(&mem_in) == 0) {
// Read all
uiUpdateFileLen = flash_read_file((UINT8 *)uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH);
uiLoaderFunc |= FUNC_UPDATE_FW;
g_is_recovery_triggered = TRUE;
} else {
debug_msg("Recovery should be all in one bin!\r\n");
}
} else {
debug_msg("no recovery bin!\r\n");
}
} else {
debug_msg("Partition error!\r\n");
}
}
#endif
} }
#if 1 #if 1
else if ((gSpecialKeyCallBack(ota_flag)) && (gCardDetectCallBack())) { else if ((gSpecialKeyCallBack(ota_flag)) && (gCardDetectCallBack())) {
if (card_open() == TRUE && fat_initFAT(uiheapBufferAddr, FAT_HEAP_BUFFER_SIZE) == TRUE) { if (card_open() == TRUE && fat_initFAT(uiheapBufferAddr, FAT_HEAP_BUFFER_SIZE) == TRUE) {
#if UPDATE_SIM_CODE #if UPDATE_SIM_CODE
BOOL bWDTInit = UTL_canUpdateSecKey(); BOOL bWDTInit = UTL_canUpdateSecKey();
@ -3326,102 +3259,7 @@ _THUMB2 UINT32 bl_mainFlow(void)
} }
// Run FW has lower priority // Run FW has lower priority
else if (fat_open_rootfile(RUN_FW_NAME) == TRUE) { else if (fat_open_rootfile(RUN_FW_NAME) == TRUE) {
NVTPACK_MEM mem_in ;
uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD);
mem_in.p_data = (void *)uiUpdateMainBinBufAddr;
mem_in.len = uiUpdateFileLen;
if (bl_chk_valid_all_in_one(&mem_in) == 0) {
// Read all
uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH);
} else {
// Read rtos
unsigned int adjusted_addr = 0;
unsigned int adjusted_size = 0;
if (bl_load_rtos_from_non_nvtpack(uiUpdateMainBinBufAddr, uiUpdateFileLen, &adjusted_addr, &adjusted_size) != 0) {
bl_displayErrMsg("invalid firmware");
} else {
uiFwBaseAddr = adjusted_addr; //fix compressed fit bl_checkDramScanFW() after copy its to temp area, see commit log
uiUpdateFileLen = adjusted_size;
}
uiLoaderFunc |= FUNC_RUN_CARD;
}
fat_close_rootfile();
debug_msg("\r\n"); // for line end RRRRRRR....
uiLoaderFunc |= FUNC_RUN_CARD;
}
#if UPDATE_SIM_CODE
}
#endif
debug_msg("card close\r\n");
card_close();
} else {
debug_msg("card open fail\r\n");
// while (1);
}
}
#endif
#if 0
else if (((gCardDetectCallBack == NULL) || gCardDetectCallBack()))
{
debug_msg("sf gCardDetectCallBack gCardDetectCallBack\r\n");
if (card_open() == TRUE && fat_initFAT(uiheapBufferAddr, FAT_HEAP_BUFFER_SIZE) == TRUE) {
#if UPDATE_SIM_CODE
BOOL bWDTInit = UTL_canUpdateSecKey();
if (bWDTInit && fat_open_rootfile(RUN_WRKEY_NAME) == TRUE) {
debug_msg("sim.bin exist\r\n"); // the others A or T are skipped.
// Read byte count specified in file directory entry
uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH);
fat_close_rootfile();
debug_msg("\r\n"); // for line end RRRRRRR....
uiLoaderFunc |= FUNC_RUN_WRBIN;
} else { // exclude others update if FUNC_RUN_WRBIN is existing.
#endif
// Update loader or not, loader is fixed to 16 KB
if (fat_open_rootfile(UPDATE_LOADER_NAME) == TRUE) {
// Read byte count specified in file directory entry
fat_read_rootfile((UINT8 *)uiUpdateBootloaderBufAddr, FAT_READ_TOTAL_FILE_LENGTH);
fat_close_rootfile();
debug_msg("\r\n"); // for line end RRRRRRR....
debug_msg("sf ld\r\n"); // for line end RRRRRRR....
uiLoaderFunc |= FUNC_UPDATE_LOADER;
uiLoaderSize = *((UINT32 *)(uiUpdateBootloaderBufAddr + 0x24));
}
// "Update FW" or "Run FW" function
// Update FW has higher priority
if (fat_open_rootfile(UPDATE_FW_NAME) == TRUE) {
NVTPACK_MEM mem_in ;
fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD);
mem_in.p_data = (void *)uiUpdateMainBinBufAddr;
mem_in.len = uiUpdateFileLen;
// all in one bin
debug_msg("sf fw\r\n"); // for line end RRRRRRR....
if (bl_chk_valid_all_in_one(&mem_in) == 0) {
// Read all
uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH);
uiLoaderFunc |= FUNC_UPDATE_FW;
} else {
// only rtos
debug_msg("not all-in-one, force behavior as T bin.\r\n");
adjusted_addr = 0;
adjusted_size = 0;
if (bl_load_rtos_from_non_nvtpack(uiUpdateMainBinBufAddr, uiUpdateFileLen, &adjusted_addr, &adjusted_size) == 0) {
uiFwBaseAddr = adjusted_addr; //fix compressed fit bl_checkDramScanFW() after copy its to temp area, see commit log
uiUpdateFileLen = adjusted_size;
} else {
bl_displayErrMsg("invalid firmware");
}
#if UPDATE_EMU_CODE
uiLoaderFunc |= FUNC_UPDATE_FW;
#else
uiLoaderFunc |= FUNC_RUN_CARD;
#endif
}
fat_close_rootfile();
debug_msg("\r\n"); // for line end RRRRRRR....
}
// Run FW has lower priority
else if (fat_open_rootfile(RUN_FW_NAME) == TRUE) {
NVTPACK_MEM mem_in ; NVTPACK_MEM mem_in ;
uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD); uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD);
mem_in.p_data = (void *)uiUpdateMainBinBufAddr; mem_in.p_data = (void *)uiUpdateMainBinBufAddr;
@ -3454,7 +3292,7 @@ _THUMB2 UINT32 bl_mainFlow(void)
#if UPDATE_SIM_CODE #if UPDATE_SIM_CODE
} }
#endif #endif
card_close(); card_close();
} else { } else {
debug_msg("card open fail\r\n"); debug_msg("card open fail\r\n");
// while (1); // while (1);