soc: qcom: wcnss_ctrl: Fix increment in NV upload
authorBjorn Andersson <bjorn.andersson@linaro.org>
Wed, 28 Feb 2018 00:45:25 +0000 (16:45 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 May 2018 05:52:35 +0000 (07:52 +0200)
[ Upstream commit 90c29ed7627b6b4aeb603ee197650173c8434512 ]

hdr.len includes both the size of the header and the fragment, so using
this when stepping through the firmware causes us to skip 16 bytes every
chunk of 3072 bytes; causing only the first fragment to actually be
valid data.

Instead use fragment size steps through the firmware blob.

Fixes: ea7a1f275cf0 ("soc: qcom: Introduce WCNSS_CTRL SMD client")
Reported-by: Will Newton <will.newton@gmail.com>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/soc/qcom/wcnss_ctrl.c

index d008e5b..df3ccb3 100644 (file)
@@ -249,7 +249,7 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
                /* Increment for next fragment */
                req->seq++;
 
-               data += req->hdr.len;
+               data += NV_FRAGMENT_SIZE;
                left -= NV_FRAGMENT_SIZE;
        } while (left > 0);