Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

remoteproc: qcom_q6v5_mss: support loading MBN file on msm8974

On MSM8974 / APQ8074, MSM8226 and MSM8926 the MSS requires loading raw
MBA image instead of the ELF file. Skip the ELF headers if mba.mbn was
specified as the firmware image.

Fixes: a5a4e02d083d ("remoteproc: qcom: Add support for parsing fw dt bindings")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Tested-by: Luca Weiss <luca@lucaweiss.eu> # msm8974pro-fairphone-fp2
Link: https://lore.kernel.org/r/20250706-msm8974-fix-mss-v4-1-630907dbd898@oss.qualcomm.com
[bjorn: Unwrapped the long memcpy line, to taste]
Signed-off-by: Bjorn Andersson <andersson@kernel.org>

authored by

Dmitry Baryshkov and committed by
Bjorn Andersson
581e3dea e65a9ed4

+10 -1
+10 -1
drivers/remoteproc/qcom_q6v5_mss.c
··· 498 498 release_firmware(dp_fw); 499 499 } 500 500 501 + #define MSM8974_B00_OFFSET 0x1000 502 + 501 503 static int q6v5_load(struct rproc *rproc, const struct firmware *fw) 502 504 { 503 505 struct q6v5 *qproc = rproc->priv; ··· 518 516 return -EBUSY; 519 517 } 520 518 521 - memcpy(mba_region, fw->data, fw->size); 519 + if ((qproc->version == MSS_MSM8974 || 520 + qproc->version == MSS_MSM8226 || 521 + qproc->version == MSS_MSM8926) && 522 + fw->size > MSM8974_B00_OFFSET && 523 + !memcmp(fw->data, ELFMAG, SELFMAG)) 524 + memcpy(mba_region, fw->data + MSM8974_B00_OFFSET, fw->size - MSM8974_B00_OFFSET); 525 + else 526 + memcpy(mba_region, fw->data, fw->size); 522 527 q6v5_debug_policy_load(qproc, mba_region); 523 528 memunmap(mba_region); 524 529