• Linus Walleij's avatar
    mfd: qcom_rpm: Fix offset error for msm8660 · 9835f1b7
    Linus Walleij authored
    The RPM in MSM8660/APQ8060 has different offsets to the selector
    ACK and request context ACK registers. Make all these register
    offsets part of the per-SoC data and assign the right values.
    
    The bug was found by verifying backwards to the vendor tree in
    the out-of-tree files <mach/rpm-[8660|8064|8960]>: all were using
    offsets 3,11,15,23 and a select size of 4, except the MSM8660/APQ8060
    which was using offsets 3,11,19,27 and a select size of 7.
    
    All other platforms apart from msm8660 were affected by reading
    excess registers, since 7 was hardcoded as the number of select
    words, this patch makes also this part dynamic so we only write/read
    as many select words as the platform actually use.
    
    Symptoms of this bug when using msm8660: the first RPM transaction
    would work, but the next would stall or raise an error since the
    previous transaction was not properly ACKed as the ACK words were
    read at the wrong offset.
    
    Cc: stable@vger.kernel.org
    Fixes: 58e21438 ("mfd: qcom-rpm: Driver for the Qualcomm RPM")
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Reviewed-by: default avatarBjörn Andersson <bjorn.andersson@linaro.org>
    Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
    9835f1b7
qcom_rpm.c 21.6 KB