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;
}