void check_fwbl(struct ssp_data *data) { int iRet; data->client->addr = BOOTLOADER_SLAVE_ADDR; iRet = check_bootloader(data->client, BL_WAITING_BOOTLOAD_CMD); if (iRet >= 0) { pr_info("[SSP] ssp_load_fw_bootmode\n"); load_fw_bootmode(data->client, BL_FW_NAME); msleep(SSP_SW_RESET_TIME); } else { data->client->addr = APP_SLAVE_ADDR; data->uCurFirmRev = get_firmware_rev(data); if (data->uCurFirmRev != SSP_FIRMWARE_REVISION) { pr_info("[SSP] MPU Firm Rev. : Old = %8u, New = %8u\n", data->uCurFirmRev, SSP_FIRMWARE_REVISION); update_mcu_bin(data); } } data->client->addr = APP_SLAVE_ADDR; data->uCurFirmRev = get_firmware_rev(data); pr_info("[SSP] MPU Firm Rev. : Old = %8u, New = %8u\n", data->uCurFirmRev, SSP_FIRMWARE_REVISION); }
int update_crashed_mcu_bin(struct ssp_data *data) { int iRet = 0; pr_info("[SSP] ssp_change_to_bootmode\n"); change_to_bootmode(data); data->client->addr = BOOTLOADER_SLAVE_ADDR; iRet = load_fw_bootmode(data->client, BL_CRASHED_FW_NAME); msleep(SSP_SW_RESET_TIME); data->client->addr = APP_SLAVE_ADDR; data->bBinaryChashed = true; return iRet; }
int update_mcu_bin(struct ssp_data *data) { int iRet = 0; pr_info("[SSP] ssp_change_to_bootmode\n"); change_to_bootmode(data); data->client->addr = BOOTLOADER_SLAVE_ADDR; iRet = load_fw_bootmode(data->client, BL_FW_NAME); msleep(SSP_SW_RESET_TIME); data->client->addr = APP_SLAVE_ADDR; if (iRet < 0) data->bSspShutdown = true; else data->bSspShutdown = false; return iRet; }