| From 3f6c781f414614d51caf46701162fab31e4f2605 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 28 Aug 2021 15:02:02 +0800 |
| Subject: soc: qcom: mdt_loader: Drop PT_LOAD check on hash segment |
| |
| From: Shawn Guo <shawn.guo@linaro.org> |
| |
| [ Upstream commit 833d51d7c66d6708abbc02398892b96b950167b9 ] |
| |
| PT_LOAD type denotes that the segment should be loaded into the final |
| firmware memory region. Hash segment is not one such, because it's only |
| needed for PAS init and shouldn't be in the final firmware memory region. |
| That's why mdt_phdr_valid() explicitly reject non PT_LOAD segment and |
| hash segment. This actually makes the hash segment type check in |
| qcom_mdt_read_metadata() unnecessary and redundant. For a hash segment, |
| it won't be loaded into firmware memory region anyway, due to the |
| QCOM_MDT_TYPE_HASH check in mdt_phdr_valid(), even if it has a PT_LOAD |
| type for some reason (misusing or abusing?). |
| |
| Some firmware files on Sony phones are such examples, e.g WCNSS firmware |
| of Sony Xperia M4 Aqua phone. The type of hash segment is just PT_LOAD. |
| Drop the unnecessary hash segment type check in qcom_mdt_read_metadata() |
| to fix firmware loading failure on these phones, while hash segment is |
| still kept away from the final firmware memory region. |
| |
| Fixes: 498b98e93900 ("soc: qcom: mdt_loader: Support loading non-split images") |
| Signed-off-by: Shawn Guo <shawn.guo@linaro.org> |
| Reviewed-by: Marijn Suijten <marijn.suijten@somainline.org> |
| Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> |
| Link: https://lore.kernel.org/r/20210828070202.7033-1-shawn.guo@linaro.org |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/soc/qcom/mdt_loader.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c |
| index eba7f76f9d61..6034cd8992b0 100644 |
| --- a/drivers/soc/qcom/mdt_loader.c |
| +++ b/drivers/soc/qcom/mdt_loader.c |
| @@ -98,7 +98,7 @@ void *qcom_mdt_read_metadata(const struct firmware *fw, size_t *data_len) |
| if (ehdr->e_phnum < 2) |
| return ERR_PTR(-EINVAL); |
| |
| - if (phdrs[0].p_type == PT_LOAD || phdrs[1].p_type == PT_LOAD) |
| + if (phdrs[0].p_type == PT_LOAD) |
| return ERR_PTR(-EINVAL); |
| |
| if ((phdrs[1].p_flags & QCOM_MDT_TYPE_MASK) != QCOM_MDT_TYPE_HASH) |
| -- |
| 2.33.0 |
| |