On 9/2/2025 5:59 PM, Konrad Dybcio wrote: > On 9/2/25 1:50 PM, Akhil P Oommen wrote: >> Current parser logic for GMU firmware assumes a dword aligned payload >> size for every block. This is not true for all GMU firmwares. So, fix >> this by using correct 'size' value in the calculation for the offset >> for the next block's header. > > Hm, I haven't seen this in the wild - do you have any specific examples?
I saw this in an unreleased chipset's fw. But felt it might show up in newer gmu fw versions of older chipsets too. > >> >> Fixes: c6ed04f856a4 ("drm/msm/a6xx: A640/A650 GMU firmware path") >> Signed-off-by: Akhil P Oommen <akhi...@oss.qualcomm.com> >> --- >> drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c >> b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c >> index >> 28e6705c6da682c7b41c748e375dda59a6551898..ea52374c9fcd481d816ed9608e9f6eb1c2e3005a >> 100644 >> --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c >> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c >> @@ -758,6 +758,8 @@ static bool fw_block_mem(struct a6xx_gmu_bo *bo, const >> struct block_header *blk) >> return true; >> } >> >> +#define NEXT_BLK(blk) ((const struct block_header *)((const char *)blk + >> sizeof(*blk) + blk->size)) > > CHECK: Macro argument 'blk' may be better as '(blk)' to avoid precedence > issues > #146: FILE: drivers/gpu/drm/msm/adreno/a6xx_gmu.c:761: > +#define NEXT_BLK(blk) ((const struct block_header *)((const char *)blk + > sizeof(*blk) + blk->size)) Ack. Thanks. -Akhil. > > Konrad