aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2019-04-29 12:40:30 -0400
committerOlof Johansson <olof@lixom.net>2019-04-29 12:40:30 -0400
commit782935d12ec2c942a793e90da2240093272d24ba (patch)
treef88729049d9e6a76728e273b5d53a1d537027b4f
parent524feb799408e5d45c6aa82763a9f52489d1e19f (diff)
parent2616b3deaf9c5db18f78689968d4c998bda8a983 (diff)
Merge tag 'qcom-drivers-for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux into arm/drivers
Qualcomm ARM Based Driver Updates for v5.2 * Update MAINTAINERS for Andy Gross's new email address * Add support for mmap in RMTFS * Fixup for QMI to change txn wait to non-interruptible * Fixup for error code in probe of cmd-db * Fixup for slot number check in RMPH-RSC * tag 'qcom-drivers-for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/agross/linux: MAINTAINERS: Update email for Qualcomm SoC maintainer drivers: soc: qcom: rpmh-rsc: Correct check for slot number soc: qcom: cmd-db: Fix an error code in cmd_db_dev_probe() soc: qcom: qmi: Change txn wait to non-interruptible soc: qcom: rmtfs: Add support for mmap functionality Signed-off-by: Olof Johansson <olof@lixom.net>
-rw-r--r--MAINTAINERS2
-rw-r--r--drivers/soc/qcom/cmd-db.c4
-rw-r--r--drivers/soc/qcom/qmi_interface.c7
-rw-r--r--drivers/soc/qcom/rmtfs_mem.c21
-rw-r--r--drivers/soc/qcom/rpmh-rsc.c2
5 files changed, 27 insertions, 9 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 43b36dbed48e..931ab60c5fe6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1984,7 +1984,7 @@ W: http://www.armlinux.org.uk/
1984S: Maintained 1984S: Maintained
1985 1985
1986ARM/QUALCOMM SUPPORT 1986ARM/QUALCOMM SUPPORT
1987M: Andy Gross <andy.gross@linaro.org> 1987M: Andy Gross <agross@kernel.org>
1988M: David Brown <david.brown@linaro.org> 1988M: David Brown <david.brown@linaro.org>
1989L: linux-arm-msm@vger.kernel.org 1989L: linux-arm-msm@vger.kernel.org
1990S: Maintained 1990S: Maintained
diff --git a/drivers/soc/qcom/cmd-db.c b/drivers/soc/qcom/cmd-db.c
index c701b3b010f1..f6c3d17b05c7 100644
--- a/drivers/soc/qcom/cmd-db.c
+++ b/drivers/soc/qcom/cmd-db.c
@@ -248,8 +248,8 @@ static int cmd_db_dev_probe(struct platform_device *pdev)
248 } 248 }
249 249
250 cmd_db_header = memremap(rmem->base, rmem->size, MEMREMAP_WB); 250 cmd_db_header = memremap(rmem->base, rmem->size, MEMREMAP_WB);
251 if (IS_ERR_OR_NULL(cmd_db_header)) { 251 if (!cmd_db_header) {
252 ret = PTR_ERR(cmd_db_header); 252 ret = -ENOMEM;
253 cmd_db_header = NULL; 253 cmd_db_header = NULL;
254 return ret; 254 return ret;
255 } 255 }
diff --git a/drivers/soc/qcom/qmi_interface.c b/drivers/soc/qcom/qmi_interface.c
index c239a28e503f..f9e309f0acd3 100644
--- a/drivers/soc/qcom/qmi_interface.c
+++ b/drivers/soc/qcom/qmi_interface.c
@@ -345,8 +345,7 @@ int qmi_txn_wait(struct qmi_txn *txn, unsigned long timeout)
345 struct qmi_handle *qmi = txn->qmi; 345 struct qmi_handle *qmi = txn->qmi;
346 int ret; 346 int ret;
347 347
348 ret = wait_for_completion_interruptible_timeout(&txn->completion, 348 ret = wait_for_completion_timeout(&txn->completion, timeout);
349 timeout);
350 349
351 mutex_lock(&qmi->txn_lock); 350 mutex_lock(&qmi->txn_lock);
352 mutex_lock(&txn->lock); 351 mutex_lock(&txn->lock);
@@ -354,9 +353,7 @@ int qmi_txn_wait(struct qmi_txn *txn, unsigned long timeout)
354 mutex_unlock(&txn->lock); 353 mutex_unlock(&txn->lock);
355 mutex_unlock(&qmi->txn_lock); 354 mutex_unlock(&qmi->txn_lock);
356 355
357 if (ret < 0) 356 if (ret == 0)
358 return ret;
359 else if (ret == 0)
360 return -ETIMEDOUT; 357 return -ETIMEDOUT;
361 else 358 else
362 return txn->result; 359 return txn->result;
diff --git a/drivers/soc/qcom/rmtfs_mem.c b/drivers/soc/qcom/rmtfs_mem.c
index 7200d762a951..6f5e8be9689c 100644
--- a/drivers/soc/qcom/rmtfs_mem.c
+++ b/drivers/soc/qcom/rmtfs_mem.c
@@ -137,6 +137,26 @@ static struct class rmtfs_class = {
137 .name = "rmtfs", 137 .name = "rmtfs",
138}; 138};
139 139
140static int qcom_rmtfs_mem_mmap(struct file *filep, struct vm_area_struct *vma)
141{
142 struct qcom_rmtfs_mem *rmtfs_mem = filep->private_data;
143
144 if (vma->vm_end - vma->vm_start > rmtfs_mem->size) {
145 dev_dbg(&rmtfs_mem->dev,
146 "vm_end[%lu] - vm_start[%lu] [%lu] > mem->size[%pa]\n",
147 vma->vm_end, vma->vm_start,
148 (vma->vm_end - vma->vm_start), &rmtfs_mem->size);
149 return -EINVAL;
150 }
151
152 vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
153 return remap_pfn_range(vma,
154 vma->vm_start,
155 rmtfs_mem->addr >> PAGE_SHIFT,
156 vma->vm_end - vma->vm_start,
157 vma->vm_page_prot);
158}
159
140static const struct file_operations qcom_rmtfs_mem_fops = { 160static const struct file_operations qcom_rmtfs_mem_fops = {
141 .owner = THIS_MODULE, 161 .owner = THIS_MODULE,
142 .open = qcom_rmtfs_mem_open, 162 .open = qcom_rmtfs_mem_open,
@@ -144,6 +164,7 @@ static const struct file_operations qcom_rmtfs_mem_fops = {
144 .write = qcom_rmtfs_mem_write, 164 .write = qcom_rmtfs_mem_write,
145 .release = qcom_rmtfs_mem_release, 165 .release = qcom_rmtfs_mem_release,
146 .llseek = default_llseek, 166 .llseek = default_llseek,
167 .mmap = qcom_rmtfs_mem_mmap,
147}; 168};
148 169
149static void qcom_rmtfs_mem_release_device(struct device *dev) 170static void qcom_rmtfs_mem_release_device(struct device *dev)
diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c
index 75bd9a83aef0..e278fc11fe5c 100644
--- a/drivers/soc/qcom/rpmh-rsc.c
+++ b/drivers/soc/qcom/rpmh-rsc.c
@@ -459,7 +459,7 @@ static int find_slots(struct tcs_group *tcs, const struct tcs_request *msg,
459 do { 459 do {
460 slot = bitmap_find_next_zero_area(tcs->slots, MAX_TCS_SLOTS, 460 slot = bitmap_find_next_zero_area(tcs->slots, MAX_TCS_SLOTS,
461 i, msg->num_cmds, 0); 461 i, msg->num_cmds, 0);
462 if (slot == tcs->num_tcs * tcs->ncpt) 462 if (slot >= tcs->num_tcs * tcs->ncpt)
463 return -ENOMEM; 463 return -ENOMEM;
464 i += tcs->ncpt; 464 i += tcs->ncpt;
465 } while (slot + msg->num_cmds - 1 >= i); 465 } while (slot + msg->num_cmds - 1 >= i);