Patch "mfd: qcom_rpm: Parametrize also ack selector size" has been added to the 4.4-stable tree
This is a note to let you know that I've just added the patch titled
mfd: qcom_rpm: Parametrize also ack selector size
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mfd-qcom_rpm-parametrize-also-ack-selector-size.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
f37be01e6dc606f2fcc5e95c9933d948ce19bd35Mon Sep 17 00:00:00 2001
From: Linus Walleij <[email protected]>
Date: Wed, 22 Jun 2016 08:27:17 +0200
Subject: mfd: qcom_rpm: Parametrize also ack selector size
From: Linus Walleij <[email protected]>
commit f37be01e6dc606f2fcc5e95c9933d948ce19bd35 upstream.
The RPM has two sets of selectors (IPC bit fields): request and acknowledge. Apparently, some models use 4*32 bit words for select and some use 7*32 bit words for request, but all use 7*32 words for acknowledge bits.
So apparently you can on the models with requests of 4*32 select bits send 4*32 messages and get 7*32 different replies, so on ACK interrupt, 7*32 bit words need to be read. This is how the vendor code apparently works.
--- drivers/mfd/qcom_rpm.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
drivers/mfd/qcom_rpm.c +12 -7
@@ -39,7 +39,8 @@ struct qcom_rpm_data {unsigned int req_sel_off;unsigned int ack_ctx_off;unsigned int ack_sel_off; -unsigned int sel_size; +unsigned int req_sel_size; +unsigned int ack_sel_size; };struct qcom_rpm {
@@ -162,7 +163,8 @@ static const struct qcom_rpm_data apq806 .req_sel_off = 11, .ack_ctx_off = 15, .ack_sel_off = 23, - .sel_size = 4, + .req_sel_size = 4, + .ack_sel_size = 7, };static const struct qcom_rpm_resource msm8660_rpm_resource_table[] = {
@@ -250,7 +252,8 @@ static const struct qcom_rpm_data msm866 .req_sel_off = 11, .ack_ctx_off = 19, .ack_sel_off = 27, - .sel_size = 7, + .req_sel_size = 7, + .ack_sel_size = 7, };static const struct qcom_rpm_resource msm8960_rpm_resource_table[] = {
@@ -337,7 +340,8 @@ static const struct qcom_rpm_data msm896 .req_sel_off = 11, .ack_ctx_off = 15, .ack_sel_off = 23, - .sel_size = 4, + .req_sel_size = 4, + .ack_sel_size = 7, };static const struct qcom_rpm_resource ipq806x_rpm_resource_table[] = {
@@ -382,7 +386,8 @@ static const struct qcom_rpm_data ipq806 .req_sel_off = 11, .ack_ctx_off = 15, .ack_sel_off = 23, - .sel_size = 4, + .req_sel_size = 4, + .ack_sel_size = 7, };static const struct of_device_id qcom_rpm_of_match[] = {
@@ -419,7 +424,7 @@ int qcom_rpm_write(struct qcom_rpm *rpm,writel_relaxed (buf[i],RPM_REQ_REG (rpm, res->target_id + i));bitmap_set ((unsigned long *)sel_mask, res->select_id,1 ); -for (i =0 ; i < rpm->data->sel_size; i++) { +for (i =0 ; i < rpm->data->req_sel_size; i++) {writel_relaxed (sel_mask[i],RPM_CTRL_REG (rpm, rpm->data->req_sel_off + i)); }
@@ -448,7 +453,7 @@ static irqreturn_t qcom_rpm_ack_interrupint i; ack =readl_relaxed (RPM_CTRL_REG (rpm, rpm->data->ack_ctx_off)); -for (i =0 ; i < rpm->data->sel_size; i++) +for (i =0 ; i < rpm->data->ack_sel_size; i++)writel_relaxed (0 ,RPM_CTRL_REG (rpm, rpm->data->ack_sel_off + i));writel (0 ,RPM_CTRL_REG (rpm, rpm->data->ack_ctx_off));
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/pinctrl-cherryview-prevent-concurrent-access-to-gpio-controllers.patch queue-4.4/gpio-pca953x-fix-nbank-calculation-for-pca9536.patch queue-4.4/mfd-qcom_rpm-parametrize-also-ack-selector-size.patch queue-4.4/gpio-intel-mid-remove-potentially-harmful-code.patch queue-4.4/mfd-qcom_rpm-fix-offset-error-for-msm8660.patch