static const unsigned char * upload_isp_code(const struct sh_css_fw_info *firmware) { const unsigned char *binary = firmware->isp_code; if (!binary) { unsigned size = firmware->blob.size; const unsigned char *blob; const unsigned char *binary_name; binary_name = (const unsigned char *)(SH_CSS_EXT_ISP_PROG_NAME( firmware)); blob = binary_name + strlen((const char *)binary_name) + 1; binary = (const unsigned char *)HOST_ADDRESS( sh_css_load_blob(blob, size)); ((struct sh_css_fw_info *)firmware)->isp_code = binary; ((struct sh_css_fw_info *)firmware)->info.isp.xmem_addr = (hrt_vaddress)HOST_ADDRESS(binary); } if (!binary) return NULL; return binary; }
static enum sh_css_err load_binary(struct sh_css_binary_info *binary, bool *binary_found) { const unsigned char *blob = sh_css_blob_info[binary->id].blob; unsigned size = sh_css_blob_info[binary->id].size; *binary_found = blob != NULL; /* we don't have this binary, skip it */ if (!size) return sh_css_success; binary->xmem_addr = sh_css_load_blob(blob, size); if (!binary->xmem_addr) return sh_css_err_cannot_allocate_memory; return sh_css_success; }
static const unsigned char * sh_css_acc_upload_isp_code(const struct sh_css_acc_fw *firmware) { struct sh_css_acc_fw_hdr *header = (struct sh_css_acc_fw_hdr *)&firmware->header; const unsigned char *binary = firmware->header.isp_code; if (!binary) { const unsigned char *blob = SH_CSS_ACC_ISP_CODE(firmware); unsigned size = SH_CSS_ACC_ISP_SIZE(firmware); binary = (const unsigned char *)HOST_ADDRESS( sh_css_load_blob(blob, size)); header->isp_code = binary; } if (!binary) return NULL; sp_dmem_store(SP0_ID, HOST_ADDRESS(header->sp.isp_code), &binary, sizeof(binary)); return binary; }
static enum ia_css_err init_binary_info(struct ia_css_binary_info *info, unsigned int i, bool *binary_found) { const unsigned char *blob = sh_css_blob_info[i].blob; unsigned size = sh_css_blob_info[i].header.blob.size; assert(info != NULL); assert(binary_found != NULL); *info = sh_css_blob_info[i].header.info.isp; *binary_found = blob != NULL; info->blob_index = i; /* we don't have this binary, skip it */ if (!size) return IA_CSS_SUCCESS; info->xmem_addr = sh_css_load_blob(blob, size); if (!info->xmem_addr) return IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; return IA_CSS_SUCCESS; }
static enum sh_css_err init_binary_info(struct sh_css_binary_info *info, unsigned int i, bool *binary_found) { const unsigned char *blob = sh_css_blob_info[i].blob; unsigned size = sh_css_blob_info[i].header.blob.size; assert(info != NULL); assert(binary_found != NULL); *info = sh_css_blob_info[i].header.info.isp; *binary_found = blob != NULL; info->blob_index = i; /* we don't have this binary, skip it */ if (!size) return sh_css_success; info->xmem_addr = sh_css_load_blob(blob, size); if (!info->xmem_addr) return sh_css_err_cannot_allocate_memory; return sh_css_success; }