diff options
author | Olof Johansson <olof@lixom.net> | 2019-04-29 12:40:30 -0400 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2019-04-29 12:40:30 -0400 |
commit | 782935d12ec2c942a793e90da2240093272d24ba (patch) | |
tree | f88729049d9e6a76728e273b5d53a1d537027b4f | |
parent | 524feb799408e5d45c6aa82763a9f52489d1e19f (diff) | |
parent | 2616b3deaf9c5db18f78689968d4c998bda8a983 (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-- | MAINTAINERS | 2 | ||||
-rw-r--r-- | drivers/soc/qcom/cmd-db.c | 4 | ||||
-rw-r--r-- | drivers/soc/qcom/qmi_interface.c | 7 | ||||
-rw-r--r-- | drivers/soc/qcom/rmtfs_mem.c | 21 | ||||
-rw-r--r-- | drivers/soc/qcom/rpmh-rsc.c | 2 |
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/ | |||
1984 | S: Maintained | 1984 | S: Maintained |
1985 | 1985 | ||
1986 | ARM/QUALCOMM SUPPORT | 1986 | ARM/QUALCOMM SUPPORT |
1987 | M: Andy Gross <andy.gross@linaro.org> | 1987 | M: Andy Gross <agross@kernel.org> |
1988 | M: David Brown <david.brown@linaro.org> | 1988 | M: David Brown <david.brown@linaro.org> |
1989 | L: linux-arm-msm@vger.kernel.org | 1989 | L: linux-arm-msm@vger.kernel.org |
1990 | S: Maintained | 1990 | S: 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 | ||
140 | static 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 | |||
140 | static const struct file_operations qcom_rmtfs_mem_fops = { | 160 | static 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 | ||
149 | static void qcom_rmtfs_mem_release_device(struct device *dev) | 170 | static 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); |