From: Dmitry Baryshkov <[email protected]>

On MSM8974 and APQ8074 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 <[email protected]>
Signed-off-by: Dmitry Baryshkov <[email protected]>
---
Changes in v3:
- Reverted back to the simple patch from v1
- Added define for 0x1000 (Konrad)
- Added MBA firmware size check
- Corrected the Fixes tag to point to the commit adding firmware-name
  support
- Link to v2: 
https://lore.kernel.org/r/[email protected]

Changes in v2:
- Replace fixed offset 0x1000 with the value obtained from ELF headers
- Implement ELF validity checks
- Link to v1: 
https://lore.kernel.org/r/[email protected]
---
 drivers/remoteproc/qcom_q6v5_mss.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/remoteproc/qcom_q6v5_mss.c 
b/drivers/remoteproc/qcom_q6v5_mss.c
index 
0c0199fb0e68d6286f1e238d110539554d1d5f14..999644c2a15b46e89ef1c04af294bf02ee0b3638
 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 &&
+           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);
 

---
base-commit: b12a9fa1c88a441daa33f15edfa3ded8cd6d3556
change-id: 20250706-msm8974-fix-mss-e1b8e114b7e0

Best regards,
-- 
With best wishes
Dmitry


Reply via email to