增加eMMC升级功能
This commit is contained in:
parent
38877f88d7
commit
61bb7ba7f6
|
@ -165,6 +165,7 @@ int nvt_process_rootfs_format(void);
|
||||||
int nvt_check_is_fw_update_fw(void);
|
int nvt_check_is_fw_update_fw(void);
|
||||||
int nvt_check_is_fomat_rootfs(void);
|
int nvt_check_is_fomat_rootfs(void);
|
||||||
int nvt_fs_set_blk_dev(void);
|
int nvt_fs_set_blk_dev(void);
|
||||||
|
int nvt_fs_set_blk_dev_emmc(void);
|
||||||
int nvt_process_sys_recovery(void);
|
int nvt_process_sys_recovery(void);
|
||||||
int nvt_flash_mark_bad(void);
|
int nvt_flash_mark_bad(void);
|
||||||
void nvt_shminfo_init(void);
|
void nvt_shminfo_init(void);
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
((((UINT32)(data)) & 0x00FF0000) >> 8) | \
|
((((UINT32)(data)) & 0x00FF0000) >> 8) | \
|
||||||
((((UINT32)(data)) & 0xFF000000) >> 24)) ///< Swap [31:24] with [7:0] and [23:16] with [15:8].
|
((((UINT32)(data)) & 0xFF000000) >> 24)) ///< Swap [31:24] with [7:0] and [23:16] with [15:8].
|
||||||
static UINT32 g_LcdBl = TRUE;
|
static UINT32 g_LcdBl = TRUE;
|
||||||
|
static int curr_device = 1;
|
||||||
|
|
||||||
static int nvt_update_partitions(unsigned int addr, unsigned int size, u64 part_off, u64 PartitionSize)
|
static int nvt_update_partitions(unsigned int addr, unsigned int size, u64 part_off, u64 PartitionSize)
|
||||||
{
|
{
|
||||||
|
@ -2347,16 +2348,39 @@ int nvt_fw_update(bool firm_upd_firm)
|
||||||
} else if (p_shminfo->boot.LdCtrl2 & LDCF_BOOT_FLASH) {
|
} else if (p_shminfo->boot.LdCtrl2 & LDCF_BOOT_FLASH) {
|
||||||
return ERR_NVT_UPDATE_NO_NEED;
|
return ERR_NVT_UPDATE_NO_NEED;
|
||||||
} else {
|
} else {
|
||||||
if (nvt_fs_set_blk_dev())
|
|
||||||
return ERR_NVT_UPDATE_OPENFAILED;
|
/*added for emmc upgrade by greg*/
|
||||||
else {
|
extern struct mmc *init_mmc_device(int dev, bool force_init);
|
||||||
if (fs_size(get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW), &size) < 0) {
|
struct mmc *mmc;
|
||||||
return ERR_NVT_UPDATE_NO_NEED;
|
mmc = init_mmc_device(curr_device, false);
|
||||||
}
|
if (!mmc) {
|
||||||
}
|
printf("Get eMMc device failed\n\r");
|
||||||
|
return ERR_NVT_UPDATE_OPENFAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef int (*set_blk_dev_cb)(void);
|
||||||
|
set_blk_dev_cb nvt_fs_set_blk_dev_cb = NULL;
|
||||||
|
|
||||||
|
if(nvt_fs_set_blk_dev() == 0 && fs_exists(get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW))){
|
||||||
|
printf("***found fw bin in sd card******\n");
|
||||||
|
nvt_fs_set_blk_dev_cb = nvt_fs_set_blk_dev;
|
||||||
|
}
|
||||||
|
else if(nvt_fs_set_blk_dev_emmc() == 0 && fs_exists(get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW))){
|
||||||
|
|
||||||
|
printf("***found fw bin in emmc*******\n");
|
||||||
|
nvt_fs_set_blk_dev_cb = nvt_fs_set_blk_dev_emmc;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return ERR_NVT_UPDATE_OPENFAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nvt_fs_set_blk_dev_cb() || fs_size(get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW), &size) < 0) {
|
||||||
|
return ERR_NVT_UPDATE_NO_NEED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
while (retry < UPDATE_ALL_IN_ONE_RETRY_TIMES) {
|
while (retry < UPDATE_ALL_IN_ONE_RETRY_TIMES) {
|
||||||
if (nvt_fs_set_blk_dev())
|
if (nvt_fs_set_blk_dev_cb())
|
||||||
return ERR_NVT_UPDATE_OPENFAILED;
|
return ERR_NVT_UPDATE_OPENFAILED;
|
||||||
else {
|
else {
|
||||||
#ifdef CONFIG_NVT_DISPLAY_BAR_FWUPDATE //uboot config
|
#ifdef CONFIG_NVT_DISPLAY_BAR_FWUPDATE //uboot config
|
||||||
|
|
|
@ -426,6 +426,17 @@ int nvt_fs_set_blk_dev(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*added for emmc upgrade by greg*/
|
||||||
|
int nvt_fs_set_blk_dev_emmc(void)
|
||||||
|
{
|
||||||
|
if (fs_set_blk_dev("mmc", "1:1", FS_TYPE_FAT)){
|
||||||
|
printf("MMC interface configure failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_NVT_SPI_NONE
|
#ifndef CONFIG_NVT_SPI_NONE
|
||||||
int nvt_flash_mark_bad(void)
|
int nvt_flash_mark_bad(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -158,18 +158,21 @@ static int nvt_handle_fw_abin(void)
|
||||||
char buf[512] = {0};
|
char buf[512] = {0};
|
||||||
int ota_upgrade_sts = 0;
|
int ota_upgrade_sts = 0;
|
||||||
int is_ota = 0;
|
int is_ota = 0;
|
||||||
|
|
||||||
if(WDT_OTA_GET_STS() == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LOADER_DETECTING_FW))
|
if(WDT_OTA_GET_STS() == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LOADER_DETECTING_FW))
|
||||||
{
|
{
|
||||||
is_ota = 1;
|
is_ota = 1;
|
||||||
}
|
}
|
||||||
else if(WDT_OTA_GET_STS() == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LOADER_DETECTING_FW_AUTO))
|
else if(WDT_OTA_GET_STS() == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LOADER_DETECTING_FW_AUTO))
|
||||||
{
|
{
|
||||||
is_ota = 1;
|
is_ota = 1;
|
||||||
#ifdef CONFIG_NVT_DISPLAY_BAR_FWUPDATE //uboot config
|
#ifdef CONFIG_NVT_DISPLAY_BAR_FWUPDATE //uboot config
|
||||||
sf_display_lcd_bl(0);
|
sf_display_lcd_bl(0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("is_ota: %d\r\n", is_ota);
|
printf("is_ota: %d\r\n", is_ota);
|
||||||
|
|
||||||
/* To handle firmware update */
|
/* To handle firmware update */
|
||||||
ret = nvt_fw_update(false);
|
ret = nvt_fw_update(false);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
@ -396,7 +399,7 @@ static int nvt_handle_fw_auto(void)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
} else if (nvt_detect_fw_tbin()) {
|
} else if (nvt_detect_fw_tbin()) {
|
||||||
ret = nvt_handle_fw_tbin();
|
ret = nvt_handle_fw_tbin();
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -425,7 +428,7 @@ static int nvt_handle_fw_auto(void)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
} else {
|
} else {
|
||||||
ret = nvt_handle_fw_abin();
|
ret = nvt_handle_fw_abin();
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
#define SDIO2_MASK 0x7FF0000
|
#define SDIO2_MASK 0x7FF0000
|
||||||
#else
|
#else
|
||||||
#define SDIO_MASK 0x7FF
|
#define SDIO_MASK 0x7FF
|
||||||
#define SDIO2_MASK 0x7FF000
|
#define SDIO2_MASK 0x7FF0000 //from 0x7FF000 to 0x7FF0000 for emmc speed added by greg
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NVT_FPGA_EMULATION
|
#ifdef CONFIG_NVT_FPGA_EMULATION
|
||||||
|
@ -383,7 +383,7 @@ void pll_set_sdioclock_rate(int id, u32 value)
|
||||||
regdata |= value;
|
regdata |= value;
|
||||||
} else {
|
} else {
|
||||||
regdata &= ~SDIO2_MASK;
|
regdata &= ~SDIO2_MASK;
|
||||||
regdata |= value << 12;
|
regdata |= value << 16;//Improve the read and write speed of the emmc added by greg
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id != SDIO_HOST_ID_3)
|
if (id != SDIO_HOST_ID_3)
|
||||||
|
|
|
@ -134,10 +134,21 @@ static int is_camera_fw_upgrade(void)
|
||||||
//char font = System_Get_DCF_Disk_Drive(dcf_handle) == 'B' ? 'B' : 'A';
|
//char font = System_Get_DCF_Disk_Drive(dcf_handle) == 'B' ? 'B' : 'A';
|
||||||
//char fw_file[64] = {'\0'};
|
//char fw_file[64] = {'\0'};
|
||||||
//sprintf((char *)fw_file, "%c%s", font, FW_UPDATE_NAME);
|
//sprintf((char *)fw_file, "%c%s", font, FW_UPDATE_NAME);
|
||||||
hFile = FileSys_OpenFile(FW_UPDATE_NAME, FST_OPEN_READ);
|
hFile = FileSys_OpenFile("B:\\FW98565A.bin", FST_OPEN_READ);
|
||||||
//hFile = FileSys_OpenFile(fw_file, FST_OPEN_READ);
|
//hFile = FileSys_OpenFile(fw_file, FST_OPEN_READ);
|
||||||
//if (gBattery < 40 || hFile == NULL)
|
//if (gBattery < 40 || hFile == NULL)
|
||||||
if (hFile == NULL)
|
if (hFile == NULL)
|
||||||
|
{
|
||||||
|
printf("[%s:%d]emmc no update file\n", __FUNCTION__, __LINE__);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FileSys_CloseFile(hFile);
|
||||||
|
return UPGRADABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
hFile = FileSys_OpenFile(FW_UPDATE_NAME, FST_OPEN_READ);
|
||||||
|
if (hFile == NULL)
|
||||||
{
|
{
|
||||||
printf("[%s:%d]sd card no update file\n", __FUNCTION__, __LINE__);
|
printf("[%s:%d]sd card no update file\n", __FUNCTION__, __LINE__);
|
||||||
return NOT_UPGRADABLE;
|
return NOT_UPGRADABLE;
|
||||||
|
|
|
@ -1780,7 +1780,7 @@ static SINT32 sf_cardv_proccess_cmd_key(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SF_EVENT_KEY_TEST:
|
case SF_EVENT_KEY_TEST:
|
||||||
sf_do_upgrade_thread();//update
|
sf_do_upgrade_thread();//update
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -2242,14 +2242,17 @@ static UINT32 sf_fwupdate(void)
|
||||||
#else
|
#else
|
||||||
BOOL sf_ota_trigger(void)
|
BOOL sf_ota_trigger(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
UINT32 uiUserData = 0;
|
UINT32 uiUserData = 0;
|
||||||
char cmd[128]={0};
|
char cmd[128]={0};
|
||||||
|
|
||||||
if((PWR_ON_SETUP == sf_cardv_convert_power_on_mode()))
|
if((PWR_ON_SETUP == sf_cardv_convert_power_on_mode()))
|
||||||
{
|
{
|
||||||
|
|
||||||
uiUserData = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER);
|
uiUserData = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
uiUserData = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER_AUTO);
|
uiUserData = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER_AUTO);
|
||||||
}
|
}
|
||||||
Ux_PostEvent(NVTEVT_ALGMSG_FOCUSEND, 0);
|
Ux_PostEvent(NVTEVT_ALGMSG_FOCUSEND, 0);
|
||||||
|
@ -2328,8 +2331,7 @@ void* sf_sys_do_upgrade(void *arg)
|
||||||
#if !SF_UBOOT_UPDATA_FW
|
#if !SF_UBOOT_UPDATA_FW
|
||||||
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
#endif
|
#endif
|
||||||
SLOGW("Begin to do Upgrade!\n");
|
|
||||||
|
|
||||||
//if(sf_is_enough_power_to_update() == FALSE)
|
//if(sf_is_enough_power_to_update() == FALSE)
|
||||||
if(sf_cardv_battery_value_get() < 40){
|
if(sf_cardv_battery_value_get() < 40){
|
||||||
sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR);
|
sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR);
|
||||||
|
@ -2338,7 +2340,8 @@ void* sf_sys_do_upgrade(void *arg)
|
||||||
// sf_set_fw_update(0);
|
// sf_set_fw_update(0);
|
||||||
// }
|
// }
|
||||||
else{
|
else{
|
||||||
sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 1);
|
|
||||||
|
sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 1);
|
||||||
//sf_set_fw_update(1);
|
//sf_set_fw_update(1);
|
||||||
sf_set_send_statu(TRUE);
|
sf_set_send_statu(TRUE);
|
||||||
sf_sys_status_led_set(SF_LED_SYS_STATE_UPDATE);
|
sf_sys_status_led_set(SF_LED_SYS_STATE_UPDATE);
|
||||||
|
@ -2347,12 +2350,13 @@ void* sf_sys_do_upgrade(void *arg)
|
||||||
#if SF_UBOOT_UPDATA_FW
|
#if SF_UBOOT_UPDATA_FW
|
||||||
sf_ota_trigger();
|
sf_ota_trigger();
|
||||||
#else
|
#else
|
||||||
//BKG_PostEvent(NVTEVT_BKW_FW_UPDATE);
|
|
||||||
|
//BKG_PostEvent(NVTEVT_BKW_FW_UPDATE);
|
||||||
if(0 != sf_fwupdate()){
|
if(0 != sf_fwupdate()){
|
||||||
sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR);
|
sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//SysResetFlag();
|
//SysResetFlag();
|
||||||
puiPara->OtaFlag = 1;
|
puiPara->OtaFlag = 1;
|
||||||
Save_MenuInfo();
|
Save_MenuInfo();
|
||||||
//sync();
|
//sync();
|
||||||
|
|
|
@ -121,6 +121,8 @@ static UINT32 g_uiNandBlkSize = 0;
|
||||||
static UINT32 g_rtos_load_addr = 0;
|
static UINT32 g_rtos_load_addr = 0;
|
||||||
static UINT32 g_rtos_target_addr = 0;
|
static UINT32 g_rtos_target_addr = 0;
|
||||||
static UINT32 g_rtos_size = 0;
|
static UINT32 g_rtos_size = 0;
|
||||||
|
static UINT32 g_update_from_emmc = 0;
|
||||||
|
|
||||||
|
|
||||||
#if (FDT_SUPPORT)
|
#if (FDT_SUPPORT)
|
||||||
#define PATH_MEM_DRAM "/nvt_memory_cfg/dram"
|
#define PATH_MEM_DRAM "/nvt_memory_cfg/dram"
|
||||||
|
@ -2948,7 +2950,8 @@ _THUMB2 static unsigned int bl_process_flash_boot(unsigned char *p_tmp, DRAM_PAR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if 1
|
#if 1
|
||||||
else if (p_dram_partition->rtos_addr == 0 || DUAL_RTOS_SUPPORT || (gFastbootKeyCallBack == NULL) || (!gFastbootKeyCallBack())) {
|
//added by greg
|
||||||
|
else if (p_dram_partition->rtos_addr == 0 || DUAL_RTOS_SUPPORT || (gFastbootKeyCallBack == NULL) || (!gFastbootKeyCallBack()|| g_update_from_emmc)) {
|
||||||
// load uboot
|
// load uboot
|
||||||
er = bl_load_uboot_from_flash((unsigned char *)p_dram_partition->fdt_addr, p_tmp);
|
er = bl_load_uboot_from_flash((unsigned char *)p_dram_partition->fdt_addr, p_tmp);
|
||||||
if (er != 0) {
|
if (er != 0) {
|
||||||
|
@ -3442,6 +3445,12 @@ _THUMB2 UINT32 bl_mainFlow(void)
|
||||||
debug_msg("\r\n"); // for line end RRRRRRR....
|
debug_msg("\r\n"); // for line end RRRRRRR....
|
||||||
uiLoaderFunc |= FUNC_RUN_CARD;
|
uiLoaderFunc |= FUNC_RUN_CARD;
|
||||||
}
|
}
|
||||||
|
/* no fw found in sd card , start emmc check flow */
|
||||||
|
else{
|
||||||
|
|
||||||
|
g_update_from_emmc = 1;
|
||||||
|
uiLoaderFunc &= ~(FUNC_UPDATE_LOADER); /* loader won't be updated by emmc */
|
||||||
|
}
|
||||||
#if UPDATE_SIM_CODE
|
#if UPDATE_SIM_CODE
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3455,6 +3464,8 @@ _THUMB2 UINT32 bl_mainFlow(void)
|
||||||
else if (((gSpecialKeyCallBack == NULL) || gSpecialKeyCallBack(ota_flag)) &&
|
else if (((gSpecialKeyCallBack == NULL) || gSpecialKeyCallBack(ota_flag)) &&
|
||||||
((gCardDetectCallBack != NULL) || (gCardDetectCallBack() == FALSE))) {
|
((gCardDetectCallBack != NULL) || (gCardDetectCallBack() == FALSE))) {
|
||||||
debug_msg("No card inserted\r\n");
|
debug_msg("No card inserted\r\n");
|
||||||
|
g_update_from_emmc = 1;
|
||||||
|
uiLoaderFunc &= ~(FUNC_UPDATE_LOADER); /* loader won't be updated by emmc */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -175,7 +175,7 @@ static BOOL prj_isSpecialKeyPressed(UINT32 ota_flag)
|
||||||
static BOOL prj_issfSpecialKeyPressed(UINT32 ota_flag)
|
static BOOL prj_issfSpecialKeyPressed(UINT32 ota_flag)
|
||||||
{
|
{
|
||||||
|
|
||||||
#if (MODEL == MODEL_S530)
|
#if (MODEL == MODEL_S530)
|
||||||
if ((!gpio_getPin(GPIO_SPECIAL_KEY)) && (gpio_getPin(GPIO_SPECIAL_USB)))
|
if ((!gpio_getPin(GPIO_SPECIAL_KEY)) && (gpio_getPin(GPIO_SPECIAL_USB)))
|
||||||
#elif (MODEL == MODEL_S550)
|
#elif (MODEL == MODEL_S550)
|
||||||
if ((!(gpio_getPin(GPIO_SPECIAL_KEY2)) && (gpio_getPin(GPIO_SPECIAL_USB))))//Force Upgrade
|
if ((!(gpio_getPin(GPIO_SPECIAL_KEY2)) && (gpio_getPin(GPIO_SPECIAL_USB))))//Force Upgrade
|
||||||
|
@ -242,7 +242,7 @@ _THUMB2 void prj_main(void)
|
||||||
{
|
{
|
||||||
PSTORAGE_OBJ strg_obj = NULL;
|
PSTORAGE_OBJ strg_obj = NULL;
|
||||||
loader_setVersion(_LDR_VER_);
|
loader_setVersion(_LDR_VER_);
|
||||||
|
|
||||||
debug_msg("\r\n");
|
debug_msg("\r\n");
|
||||||
debug_msg("LD_VER ");
|
debug_msg("LD_VER ");
|
||||||
debug_msg(Dec2HexStr2Bytes((LoaderInternalInfo[1] >> 28) & 0xF));
|
debug_msg(Dec2HexStr2Bytes((LoaderInternalInfo[1] >> 28) & 0xF));
|
||||||
|
@ -261,7 +261,7 @@ _THUMB2 void prj_main(void)
|
||||||
} else {
|
} else {
|
||||||
debug_msg(_LOADER_VERSION_STR_);
|
debug_msg(_LOADER_VERSION_STR_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup loader/fw file names
|
// Setup loader/fw file names
|
||||||
loader_setUpdateFwName(_UPDATE_FW_NAME_);
|
loader_setUpdateFwName(_UPDATE_FW_NAME_);
|
||||||
loader_setUpdateLdrName(_UPDATE_LOADER_NAME_);
|
loader_setUpdateLdrName(_UPDATE_LOADER_NAME_);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user