mfd: qcom_rpm: Fix offset error for msm8660
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 14 Jun 2016 23:02:26 +0000 (01:02 +0200)
committerLee Jones <lee.jones@linaro.org>
Wed, 29 Jun 2016 09:14:39 +0000 (10:14 +0100)
commit9835f1b70bb3890d38308b9be4fb9d7451ba67f1
tree493d17d34d985aeb2f3bed008db1c6e062ebf22b
parent0d3a7cce3e8bc5c060b1f038984c10cb70289e1d
mfd: qcom_rpm: Fix offset error for msm8660

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: 58e214382bdd ("mfd: qcom-rpm: Driver for the Qualcomm RPM")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Björn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/qcom_rpm.c