summaryrefslogtreecommitdiff
authorSam Wu <yihui.wu@amlogic.com>2019-12-06 08:34:17 (GMT)
committer Yihui Wu <yihui.wu@amlogic.com>2019-12-10 02:20:53 (GMT)
commitdcc1845a3257df79496383e374edde13f9539878 (patch)
tree2d39e478619e700944da03506fc63bdf1d3164de
parent02981b179b4509fd259524571da0ab30affc7110 (diff)
downloaduboot-dcc1845a3257df79496383e374edde13f9539878.zip
uboot-dcc1845a3257df79496383e374edde13f9539878.tar.gz
uboot-dcc1845a3257df79496383e374edde13f9539878.tar.bz2
factoryBurn: usb disk: burn aml_upgrade_package improve [1/1]
PD#SWPL-17922 Problem: 1, speed up usb disk read speed when burn img don't erase bootloader when usb disk upgrade 2, default erase flash but not no erase bootloader Solution: enlarge fatload buffer per-time read image support calculate cost time Verify: u200 / txhd /tl1 tested x301 usb read time saved about half when upgrade Change-Id: I511cb3773279cc77cb5c68908e8b23fffbb5a520 Signed-off-by: Sam Wu <yihui.wu@amlogic.com>
Diffstat
-rw-r--r--common/store_interface.c3
-rw-r--r--drivers/usb/gadget/v2_burning/v2_common/amlImage_if.h3
-rw-r--r--drivers/usb/gadget/v2_burning/v2_common/optimus_buffer_manager.c19
-rw-r--r--drivers/usb/gadget/v2_burning/v2_common/optimus_download.c42
-rw-r--r--drivers/usb/gadget/v2_burning/v2_common/optimus_download.h24
-rw-r--r--drivers/usb/gadget/v2_burning/v2_common/optimus_fat.c14
-rw-r--r--drivers/usb/gadget/v2_burning/v2_common/optimus_img_decoder.c6
-rw-r--r--drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_ini__aml_sdc_burn.c6
-rw-r--r--drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_sdc_burn.c28
-rw-r--r--drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/optimus_key_burn.c41
-rw-r--r--drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/sdc_keysprovider.c5
11 files changed, 145 insertions, 46 deletions
diff --git a/common/store_interface.c b/common/store_interface.c
index 68f71e3..f152877 100644
--- a/common/store_interface.c
+++ b/common/store_interface.c
@@ -1134,7 +1134,8 @@ E_SWITCH_BACK:
else if(device_boot_flag==EMMC_BOOT_FLAG){
store_dbg("MMC BOOT,erase data : %s %d off =%llx ,size=%llx",__func__,__LINE__, off, size);
off = size =0;
- ret = run_command("amlmmc erase 1",0); //whole
+ MsgP("amlmmc erase non_loader\n");
+ ret = run_command("amlmmc erase non_loader",0); //whole
if (ret != 0) {
store_msg("amlmmc cmd %s failed ",cmd);
return -1;
diff --git a/drivers/usb/gadget/v2_burning/v2_common/amlImage_if.h b/drivers/usb/gadget/v2_burning/v2_common/amlImage_if.h
index f77af43..aa31fb9 100644
--- a/drivers/usb/gadget/v2_burning/v2_common/amlImage_if.h
+++ b/drivers/usb/gadget/v2_burning/v2_common/amlImage_if.h
@@ -139,5 +139,8 @@ int get_total_itemnr(HIMAGE hImg);
u64 optimus_img_decoder_get_data_parts_size(HIMAGE hImg, int* hasBootloader);
+
+unsigned image_get_crc(HIMAGE hImg);
+
#endif//ifndef __AMLIMAGE_IF_H__
diff --git a/drivers/usb/gadget/v2_burning/v2_common/optimus_buffer_manager.c b/drivers/usb/gadget/v2_burning/v2_common/optimus_buffer_manager.c
index a80751f..d09622d 100644
--- a/drivers/usb/gadget/v2_burning/v2_common/optimus_buffer_manager.c
+++ b/drivers/usb/gadget/v2_burning/v2_common/optimus_buffer_manager.c
@@ -83,6 +83,10 @@ int optimus_buf_manager_init(const unsigned mediaAlignSz)
return OPT_DOWN_FAIL;
}
_bufManager.mediaAlignSz = mediaAlignSz;
+ *(u32*)(&_bufManager.transferUnitSz) = (OPTIMUS_WORK_MODE_USB_PRODUCE >= optimus_work_mode_get())
+ ? OPTIMUS_DOWNLOAD_SLOT_SZ : OPTIMUS_LOCAL_UPGRADE_SLOT_SZ;
+ _bufManager.writeBackUnitSz = _bufManager.transferUnitSz;
+
DWN_DBG("transfer=0x%p, transferBufSz=0x%x, transferUnitSz=0x%x, writeBackUnitSz=0x%x, totalSlotNum=%d\n", _bufManager.transferBuf,
_bufManager.transferBufSz, _bufManager.transferUnitSz, _bufManager.writeBackUnitSz, _bufManager.totalSlotNum);
@@ -131,6 +135,7 @@ int optimus_buf_manager_tplcmd_init(const char* mediaType, const char* partName
_bufManager.destMediaType = !strcmp("mem", mediaType) ? OPTIMUS_MEDIA_TYPE_MEM : OPTIMUS_MEDIA_TYPE_STORE ;
if ( !cacheAll2Mem ) cacheAll2Mem = !strcmp("mem", mediaType) ;
+ if ( !cacheAll2Mem ) cacheAll2Mem = (pktSz4BufManager <= _bufManager.transferUnitSz);
if (cacheAll2Mem)
{
writeBackUnitSz = pktSz4BufManager + _bufManager.transferUnitSz - 1;
@@ -149,7 +154,7 @@ int optimus_buf_manager_tplcmd_init(const char* mediaType, const char* partName
return OPT_DOWN_FAIL;
}
if (_bufManager.transferUnitSz > writeBackUnitSz) {
- DWN_ERR("write back size %d < align size %d\n", writeBackUnitSz, _bufManager.mediaAlignSz);
+ DWN_ERR("write back size %d < align size %d\n", writeBackUnitSz, _bufManager.transferUnitSz);
return OPT_DOWN_FAIL;
}
DWN_DBG("writeBackUnitSz = 0x%x, pktSz4BufManager = %lld\n", writeBackUnitSz, pktSz4BufManager);
@@ -197,7 +202,7 @@ int optimus_buf_manager_get_buf_for_bulk_transfer(char** pBuf, const unsigned wa
(u8*)(u64)_bufManager.partBaseOffset ;
if (wantSz < _bufManager.transferUnitSz && !isLastTransfer) {
- DWN_ERR("only last transfer can less 64K, this index %d at size 0x%u illegle\n", totalSlotNum + 1, wantSz);
+ DWN_ERR("only last transfer can less 64K, this index %d at size 0x%x illegle\n", totalSlotNum + 1, wantSz);
return OPT_DOWN_FAIL;
}
@@ -215,12 +220,12 @@ int optimus_buf_manager_get_buf_for_bulk_transfer(char** pBuf, const unsigned wa
//prepare data for upload
if (!bufSzNotDisposed && _bufManager.isUpload)
{
- u32 dataSz4Up = (leftPktSz > _bufManager.writeBackUnitSz) ? _bufManager.writeBackUnitSz : ((u32)leftPktSz);
- DWN_DBG("want size 0x%x\n", dataSz4Up);
+ u32 wantSz = (leftPktSz > _bufManager.writeBackUnitSz) ? _bufManager.writeBackUnitSz : ((u32)leftPktSz);
+ DWN_DBG("want size 0x%x\n", wantSz);
- u32 readSz = optimus_dump_storage_data((u8*)BufBase, dataSz4Up, errInfo);
- if (readSz != dataSz4Up) {
- DWN_ERR("Want read %u, but %u\n", dataSz4Up, readSz);
+ u32 readSz = optimus_dump_storage_data((u8*)BufBase, wantSz, errInfo);
+ if (readSz != wantSz) {
+ DWN_ERR("Want read %u, but %u\n", wantSz, readSz);
return OPT_DOWN_FAIL;
}
}
diff --git a/drivers/usb/gadget/v2_burning/v2_common/optimus_download.c b/drivers/usb/gadget/v2_burning/v2_common/optimus_download.c
index 1d546f9..d8cb2ee 100644
--- a/drivers/usb/gadget/v2_burning/v2_common/optimus_download.c
+++ b/drivers/usb/gadget/v2_burning/v2_common/optimus_download.c
@@ -57,6 +57,18 @@ int v2_key_command(const int argc, char * const argv[], char *info)
}
#endif//#ifndef CONFIG_UNIFY_KEY_MANAGE
+#if SUM_FUNC_TIME_COST
+static inline int
+store_read_ops_(unsigned char *partition_name,unsigned char * buf, uint64_t off, uint64_t size)
+{
+ int ret = 0;
+ _func_cost_utime_yret(FlashRdTime, ret, store_read_ops, partition_name, buf, off, size);
+ return ret;
+}
+#else
+#define store_read_ops_ store_read_ops
+#endif//#if SUM_FUNC_TIME_COST
+
static unsigned long _dtb_is_loaded = 0;
@@ -247,7 +259,11 @@ static int optimus_verify_bootloader(struct ImgBurnInfo* pDownInfo, u8* genSum)
}
+#if SUM_FUNC_TIME_COST
+static u32 _optimus_cb_simg_write_media(const unsigned destAddrInSec, const unsigned dataSzInBy, const char* data)
+#else
u32 optimus_cb_simg_write_media(const unsigned destAddrInSec, const unsigned dataSzInBy, const char* data)
+#endif//#if SUM_FUNC_TIME_COST
{
int ret = OPT_DOWN_OK;
unsigned char* partName = (unsigned char*)OptimusImgBurnInfo.partName;
@@ -269,6 +285,16 @@ u32 optimus_cb_simg_write_media(const unsigned destAddrInSec, const unsigned dat
return dataSzInBy;
}
+#if SUM_FUNC_TIME_COST
+u32 optimus_cb_simg_write_media(const unsigned destAddrInSec, const unsigned dataSzInBy, const char* data)
+{
+ extern unsigned long FlashWrTime;
+ u32 ret = 0;
+ _func_cost_utime_yret(FlashWrTime, ret, _optimus_cb_simg_write_media, destAddrInSec, dataSzInBy, data);
+ return ret;
+}
+#endif//#if SUM_FUNC_TIME_COST
+
//return value: the data size disposed
static u32 optimus_download_sparse_image(struct ImgBurnInfo* pDownInfo, u32 dataSz, const u8* data)
{
@@ -286,10 +312,14 @@ static u32 optimus_download_sparse_image(struct ImgBurnInfo* pDownInfo, u32 data
return dataSz - unParsedDataLen;
}
+#if SUM_FUNC_TIME_COST
+static u32 _optimus_download_normal_image(struct ImgBurnInfo* pDownInfo, u32 dataSz, const u8* data)
+#else
//Normal image can write directly to NAND, best aligned to 16K when write
//FIXME: check it aligned to 16K when called
//1, write to media 2 -- save the verify info
static u32 optimus_download_normal_image(struct ImgBurnInfo* pDownInfo, u32 dataSz, const u8* data)
+#endif//#if SUM_FUNC_TIME_COST
{
int ret = 0;
u64 addrOrOffsetInBy = pDownInfo->nextMediaOffset;
@@ -308,6 +338,16 @@ static u32 optimus_download_normal_image(struct ImgBurnInfo* pDownInfo, u32 data
return dataSz;
}
+#if SUM_FUNC_TIME_COST
+static u32 optimus_download_normal_image(struct ImgBurnInfo* pDownInfo, u32 dataSz, const u8* data)
+{
+ extern unsigned long FlashWrTime;
+ u32 ret = 0;
+ _func_cost_utime_yret(FlashWrTime, ret, _optimus_download_normal_image, pDownInfo, dataSz, data);
+ return ret;
+}
+#endif// #if SUM_FUNC_TIME_COST
+
static int optimus_storage_open(struct ImgBurnInfo* pDownInfo, const u8* data, const u32 dataSz)
{
int ret = OPT_DOWN_OK;
@@ -538,7 +578,7 @@ static int optimus_storage_read(struct ImgBurnInfo* pDownInfo, u64 addrOrOffsetI
}
else
{
- ret = store_read_ops(partName, buff, addrOrOffsetInBy, (u64)readSzInBy);
+ ret = store_read_ops_(partName, buff, addrOrOffsetInBy, (u64)readSzInBy);
platform_busy_increase_un_reported_size(readSzInBy);
}
if (ret) {
diff --git a/drivers/usb/gadget/v2_burning/v2_common/optimus_download.h b/drivers/usb/gadget/v2_burning/v2_common/optimus_download.h
index b5e0cbd..a0a10eb 100644
--- a/drivers/usb/gadget/v2_burning/v2_common/optimus_download.h
+++ b/drivers/usb/gadget/v2_burning/v2_common/optimus_download.h
@@ -95,6 +95,7 @@ unsigned v2_key_burn(const char* keyName, const u8* keyVal, const unsigned keyVa
#define OPTIMUS_DOWNLOAD_TRANSFER_BUF_ADDR (OPTIMUS_SPARSE_IMG_LEFT_DATA_ADDR_LOW + OPTIMUS_SPARSE_IMG_LEFT_DATA_MAX_SZ)
#define OPTIMUS_DOWNLOAD_SLOT_SZ (64<<10) //64K
+#define OPTIMUS_LOCAL_UPGRADE_SLOT_SZ (OPTIMUS_DOWNLOAD_SLOT_SZ * 16) //1M per time for fatload
#define OPTIMUS_DOWNLOAD_SLOT_SZ_SHIFT_BITS (16) //64K
#define OPTIMUS_DOWNLOAD_SLOT_NUM (OPTIMUS_DOWNLOAD_TRANSFER_BUF_TOTALSZ/OPTIMUS_DOWNLOAD_SLOT_SZ)
@@ -215,5 +216,28 @@ int optimus_work_mode_set(int workmode);
//cannot called nested as it shares the same buffer
const char* getenv_optimus(const char* name);
+#ifdef CONFIG_AML_FACTORY_BURN_LOCAL_UPGRADE
+#define SUM_FUNC_TIME_COST 0
+#if SUM_FUNC_TIME_COST
+#define _func_cost_utime_yret(sum, ret, func, ...) do {\
+ unsigned long uTime = timer_get_us(); \
+ ret = func(__VA_ARGS__); \
+ sum += timer_get_us() - uTime; \
+} while(0)
+
+#define _func_cost_utime_nret(sum, func, ...) do {\
+ unsigned long uTime = timer_get_us(); \
+ func(__VA_ARGS__); \
+ sum += timer_get_us() - uTime; \
+} while(0)
+
+extern unsigned long ImageRdTime;
+extern unsigned long FlashRdTime;
+extern unsigned long FlashWrTime;
+
+#else
+#endif//#if SUM_FUNC_TIME_COST
+#endif//#ifdef CONFIG_AML_FACTORY_BURN_LOCAL_UPGRADE
+
#endif//ifndef __OPTIMUS_DOWNLOAD_H__
diff --git a/drivers/usb/gadget/v2_burning/v2_common/optimus_fat.c b/drivers/usb/gadget/v2_burning/v2_common/optimus_fat.c
index 0c28ed3..57e647e 100644
--- a/drivers/usb/gadget/v2_burning/v2_common/optimus_fat.c
+++ b/drivers/usb/gadget/v2_burning/v2_common/optimus_fat.c
@@ -1174,9 +1174,13 @@ unsigned do_fat_get_bytesperclust(int fd)
return bytesperclust;
}
+#if SUM_FUNC_TIME_COST
+static long _do_fat_fread(int fd, __u8 *buffer, unsigned long maxsize)
+#else
// clusters need to read:
// data moddule: <first cluser not engouh cluster> + <n * Consecutive clusters > + <last cluster not engouh cluster>
long do_fat_fread(int fd, __u8 *buffer, unsigned long maxsize)
+#endif// #if SUM_FUNC_TIME_COST
{
if (fd < 0) {
FAT_ERROR("Invalid fd %d\n", fd);
@@ -1352,6 +1356,16 @@ exit:
return gotsize;
}
+#if SUM_FUNC_TIME_COST
+long do_fat_fread(int fd, __u8 *buffer, unsigned long maxsize)
+{
+ extern unsigned long ImageRdTime;
+ long ret = 0;
+ _func_cost_utime_yret(ImageRdTime, ret, _do_fat_fread, fd, buffer, maxsize);
+ return ret;
+}
+#endif//#if SUM_FUNC_TIME_COST
+
void
do_fat_fclose(int fd)
{
diff --git a/drivers/usb/gadget/v2_burning/v2_common/optimus_img_decoder.c b/drivers/usb/gadget/v2_burning/v2_common/optimus_img_decoder.c
index 9df7fcd..a1fbbdb 100644
--- a/drivers/usb/gadget/v2_burning/v2_common/optimus_img_decoder.c
+++ b/drivers/usb/gadget/v2_burning/v2_common/optimus_img_decoder.c
@@ -128,6 +128,12 @@ _err:
return NULL;
}
+unsigned image_get_crc(HIMAGE hImg)
+{
+ ImgInfo_t* imgInfo = (ImgInfo_t*)hImg;
+ return imgInfo->imgHead.crc;
+}
+
//close a Amlogic firmware image
int image_close(HIMAGE hImg)
diff --git a/drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_ini__aml_sdc_burn.c b/drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_ini__aml_sdc_burn.c
index 337b0f8..5eb4d2c 100644
--- a/drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_ini__aml_sdc_burn.c
+++ b/drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_ini__aml_sdc_burn.c
@@ -49,8 +49,8 @@ ConfigPara_t g_sdcBurnPara = {
},
.custom = {
- .eraseBootloader = 1,//default to erase bootloader!
- .eraseFlash = 0,//default no erase flash for usb disk upgrade
+ .eraseBootloader = 1,//default to erase bootloader! no effect for usb_upgrade
+ .eraseFlash = 1,//default erase flash for all cases
.bitsMap.eraseBootloader = 1,
.bitsMap.eraseFlash = 1,
},
@@ -323,7 +323,7 @@ static int parse_burn_parts(const char* key, const char* strVal)
partName = (char*)pBurnParts->burnParts[burnIndex];
if (!strVal) {
- err("value of %s can't empty\n", strVal);
+ err("value of %s can't empty\n", key);
return __LINE__;
}
diff --git a/drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_sdc_burn.c b/drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_sdc_burn.c
index e94d32f..bacf90c 100644
--- a/drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_sdc_burn.c
+++ b/drivers/usb/gadget/v2_burning/v2_sdc_burn/optimus_sdc_burn.c
@@ -140,7 +140,7 @@ static int optimus_burn_one_partition(const char* partName, HIMAGE hImg, __hdle
u32 thisReadLen = 0;
__hdle hImgItem = NULL;
char* downTransBuf = NULL;//get buffer from optimus_buffer_manager
- const unsigned ItemReadBufSz = OPTIMUS_DOWNLOAD_SLOT_SZ;//read this size from image item each time
+ const unsigned ItemReadBufSz = OPTIMUS_LOCAL_UPGRADE_SLOT_SZ;//read this size from image item each time
unsigned sequenceNo = 0;
const char* fileFmt = NULL;
/*static */char _errInfo[512];
@@ -489,7 +489,10 @@ static int sdc_burn_aml_keys(HIMAGE hImg, const int keyOverWrite)
const char** pCurKeysName = NULL;
unsigned index = 0;
- rc = run_command("aml_key_burn probe vfat sdc", 0);
+ if (strcmp("1", getenv("usb_update")))
+ rc = run_command("aml_key_burn probe vfat sdc", 0);
+ else
+ rc = run_command("aml_key_burn probe vfat udisk", 0);
if (rc) {
DWN_ERR("Fail in probe for aml_key_burn\n");
return __LINE__;
@@ -591,6 +594,12 @@ static int sdc_burn_aml_keys(HIMAGE hImg, const int keyOverWrite)
#define sdc_burn_aml_keys(fmt...) 0
#endif// #if CONFIG_SUPPORT_SDC_KEYBURN
+#if SUM_FUNC_TIME_COST
+unsigned long ImageRdTime = 0;
+unsigned long FlashRdTime = 0;
+unsigned long FlashWrTime = 0;
+#endif//#if SUM_FUNC_TIME_COST
+
int optimus_burn_with_cfg_file(const char* cfgFile)
{
extern ConfigPara_t g_sdcBurnPara ;
@@ -604,6 +613,7 @@ int optimus_burn_with_cfg_file(const char* cfgFile)
u64 datapartsSz = 0;
int eraseFlag = pSdcCfgPara->custom.eraseFlash;
+ optimus_buf_manager_init(16*1024);
hImg = image_open("mmc", "0", "1", cfgFile);
if (!hImg) {
DWN_MSG("cfg[%s] not valid aml pkg, parse it as ini\n", cfgFile);
@@ -693,7 +703,16 @@ int optimus_burn_with_cfg_file(const char* cfgFile)
eraseFlag = 0;
DWN_MSG("Disable erase as data parts size is 0\n");
}
- ret = optimus_storage_init(eraseFlag);
+ if (eraseFlag && !strcmp("1", getenv("usb_update"))) {
+ ret = optimus_storage_init(0);
+ if (ret) {
+ DWN_ERR("FAil in init flash for usb upgrade\n");
+ return __LINE__;
+ }
+ ret = run_command("store erase data", 0);//erase after bootloader
+ }
+ else
+ ret = optimus_storage_init(eraseFlag);
if (ret) {
DWN_ERR("Fail to init stoarge for sdc burn\n");
ret = __LINE__; goto _finish;
@@ -759,6 +778,9 @@ int optimus_burn_with_cfg_file(const char* cfgFile)
_finish:
image_close(hImg);
+#if SUM_FUNC_TIME_COST
+ DWN_MSG("[ms]ImageRdTime %ld, FlashRdTime %ld, FlashWrTime %ld\n", ImageRdTime/1000, FlashRdTime/1000, FlashWrTime/1000);
+#endif//#if SUM_FUNC_TIME_COST
if (hUiProgress) optimus_progress_ui_report_upgrade_stat(hUiProgress, !ret);
optimus_report_burn_complete_sta(ret, pSdcCfgPara->custom.rebootAfterBurn);
if (hUiProgress) optimus_progress_ui_release(hUiProgress);
diff --git a/drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/optimus_key_burn.c b/drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/optimus_key_burn.c
index 0c6778c..cc02dfc 100644
--- a/drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/optimus_key_burn.c
+++ b/drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/optimus_key_burn.c
@@ -101,11 +101,13 @@ static int do_opt_keysburn_probe(cmd_tbl_t *cmdtp, int flag, int argc, char * co
if (!_udiskProbe)
{
+#if 0
rc = run_command("usb start 0", 0);
if (rc) {
_AML_KEY_ERR("Fail in mmcinfo\n");
return __LINE__;
}
+#endif
rc = optimus_device_probe("usb", "0");
if (rc) {
_AML_KEY_ERR("Fail to detect device mmc 0\n");
@@ -170,39 +172,18 @@ static int optimus_read_keyfile_2_mem(const char* filePath, u8* buf, unsigned* k
{
int rc = 0;
unsigned keySz = 0;
+ char cmd[128];
if (DEV_FILE_FMT_VFAT == _optKeyInfo.fileFmt)
{
- long hFile = -1;
- unsigned readSz = 0;
-
-#if 1//FIXME: remove this mmcinfo
- /*rc = run_command("mmcinfo 0", 0);*/
- rc = optimus_sdc_burn_switch_to_extmmc();
- if (rc) {
- DWN_ERR("Fail in mmcinfo\n");
- return __LINE__;
- }
-#endif//
- keySz = (unsigned)do_fat_get_fileSz(filePath);//can support both sdc and udisk
- if (!keySz) {
- DWN_ERR("size is 0 of file [%s]\n", filePath);
- return __LINE__;
- }
-
- hFile = do_fat_fopen(filePath);
- if (hFile < 0) {
- DWN_ERR("Fail to open file[%s]\n", filePath);
- return __LINE__;
- }
-
- readSz = do_fat_fread(hFile, buf, keySz);
- if (readSz != keySz) {
- DWN_ERR("Want read %d bytes, but %d\n", keySz, readSz);
- return __LINE__;
- }
-
- do_fat_fclose(hFile);
+ if (strcmp("1", getenv("usb_update")))
+ sprintf(cmd, "fatload mmc 0 %p %s", buf, filePath);
+ else
+ sprintf(cmd, "fatload usb 0 %p %s", buf, filePath);
+ rc = run_command(cmd, 0);
+ if (rc) {
+ DWN_ERR("Fail in load key cmd[%s]\n", cmd);
+ }
}
*keyValLen = keySz;
diff --git a/drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/sdc_keysprovider.c b/drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/sdc_keysprovider.c
index 91914fe..075b1d8 100644
--- a/drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/sdc_keysprovider.c
+++ b/drivers/usb/gadget/v2_burning/v2_sdc_burn/sdc_burnkeys/sdc_keysprovider.c
@@ -400,7 +400,10 @@ static int get_key_val_for_fmt_onlyone(const char* licenseName, u8* keyVal, unsi
optimus_sdc_burn_switch_to_extmmc();
- sprintf(_cmd, "fatload mmc 0:1 0x%p %s", keyVal, licenseName);
+ if (strcmp("1", getenv("usb_update")))
+ sprintf(_cmd, "fatload mmc 0:1 0x%p %s", keyVal, licenseName);
+ else
+ sprintf(_cmd, "fatload usb 0:1 0x%p %s", keyVal, licenseName);
rc = run_command(_cmd, 0);
if (rc) {
errorP("failed in cmd[%s]\n", _cmd);