int optimus_sdc_burn_dtb_load(HIMAGE hImg) { s64 itemSz = 0; HIMAGEITEM hImgItem = NULL; int rc = 0; const char* partName = "dtb"; u64 partBaseOffset = OPTIMUS_DOWNLOAD_TRANSFER_BUF_ADDR; unsigned char* dtbTransferBuf = (unsigned char*)partBaseOffset; //meson1.dtb but not meson.dtb for m8 compatible if (_check_if_secureboot_enabled()) { DWN_MSG("SecureEnabled, use meson1_ENC\n"); hImgItem = image_item_open(hImg, partName, "meson1_ENC"); } else { hImgItem = image_item_open(hImg, partName, "meson1"); } if (!hImgItem) { DWN_WRN("Fail to open item [meson1,%s]\n", partName); return ITEM_NOT_EXIST; } itemSz = image_item_get_size(hImgItem); if (!itemSz) { DWN_ERR("Item size 0\n"); image_item_close(hImgItem); return __LINE__; } #if 1 const unsigned itemSzNotAligned = image_item_get_first_cluster_size(hImg, hImgItem); if (itemSzNotAligned /*& 0x7*/) {//Not Aligned 8bytes/64bits, mmc dma read will failed DWN_MSG("align 4 mmc read...\t");//Assert Make 'DDR' buffer addr align 8 dtbTransferBuf += image_get_cluster_size(hImg) - itemSzNotAligned; partBaseOffset += image_get_cluster_size(hImg) - itemSzNotAligned; } #endif rc = image_item_read(hImg, hImgItem, dtbTransferBuf, (unsigned)itemSz); if (rc) { DWN_ERR("Failed at item read, rc = %d\n", rc); image_item_close(hImgItem); return __LINE__; } image_item_close(hImgItem); rc = optimus_parse_img_download_info(partName, itemSz, "normal", "mem", partBaseOffset); if (rc) { DWN_ERR("Failed in init down info\n"); return __LINE__; } { unsigned wrLen = 0; char errInfo[512]; wrLen = optimus_download_img_data(dtbTransferBuf, (unsigned)itemSz, errInfo); rc = (wrLen == itemSz) ? 0 : __LINE__; } return rc; }
static int sdc_burn_dtb_load(HIMAGE hImg) { s64 itemSz = 0; HIMAGEITEM hImgItem = NULL; int rc = 0; const char* partName = "dtb"; const u64 partBaseOffset = OPTIMUS_DOWNLOAD_TRANSFER_BUF_ADDR; unsigned char* dtbTransferBuf = (unsigned char*)(unsigned)partBaseOffset; hImgItem = image_item_open(hImg, partName, "meson"); if(!hImgItem){ DWN_ERR("Fail to open verify file for part (%s)\n", partName); return ITEM_NOT_EXIST; } itemSz = image_item_get_size(hImgItem); if(!itemSz){ DWN_ERR("Item size 0\n"); image_item_close(hImgItem); return __LINE__; } rc = image_item_read(hImg, hImgItem, dtbTransferBuf, (unsigned)itemSz); if(rc){ DWN_ERR("Failed at item read, rc = %d\n", rc); image_item_close(hImgItem); return __LINE__; } image_item_close(hImgItem); rc = optimus_parse_img_download_info(partName, itemSz, "normal", "mem", partBaseOffset); if(rc){ DWN_ERR("Failed in init down info\n"); return __LINE__; } { unsigned wrLen = 0; char errInfo[512]; wrLen = optimus_download_img_data(dtbTransferBuf, (unsigned)itemSz, errInfo); rc = (wrLen == itemSz) ? 0 : wrLen; } return rc; }