diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/remoteproc/qcom_q6v5_mss.c | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c index 0c0199fb0e68..3087d895b87f 100644 --- a/drivers/remoteproc/qcom_q6v5_mss.c +++ b/drivers/remoteproc/qcom_q6v5_mss.c @@ -498,6 +498,8 @@ static void q6v5_debug_policy_load(struct q6v5 *qproc, void *mba_region)  	release_firmware(dp_fw);  } +#define MSM8974_B00_OFFSET 0x1000 +  static int q6v5_load(struct rproc *rproc, const struct firmware *fw)  {  	struct q6v5 *qproc = rproc->priv; @@ -516,7 +518,14 @@ static int q6v5_load(struct rproc *rproc, const struct firmware *fw)  		return -EBUSY;  	} -	memcpy(mba_region, fw->data, fw->size); +	if ((qproc->version == MSS_MSM8974 || +	     qproc->version == MSS_MSM8226 || +	     qproc->version == MSS_MSM8926) && +	    fw->size > MSM8974_B00_OFFSET && +	    !memcmp(fw->data, ELFMAG, SELFMAG)) +		memcpy(mba_region, fw->data + MSM8974_B00_OFFSET, fw->size - MSM8974_B00_OFFSET); +	else +		memcpy(mba_region, fw->data, fw->size);  	q6v5_debug_policy_load(qproc, mba_region);  	memunmap(mba_region); | 
