linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: sricharan@codeaurora.org (Sricharan R)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V3 2/8] of: dma: Move range size workaround to of_dma_get_range()
Date: Tue,  4 Oct 2016 22:33:46 +0530	[thread overview]
Message-ID: <1475600632-21289-3-git-send-email-sricharan@codeaurora.org> (raw)
In-Reply-To: <1475600632-21289-1-git-send-email-sricharan@codeaurora.org>

From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

Invalid dma-ranges values should be worked around when retrieving the
DMA range in of_dma_get_range(), not by all callers of the function.
This isn't much of a problem now that we have a single caller, but that
situation will change when moving DMA configuration to device probe
time.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/of/address.c | 20 ++++++++++++++++++--
 drivers/of/device.c  | 15 ---------------
 2 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/of/address.c b/drivers/of/address.c
index 02b2903..6aeb816 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -819,8 +819,8 @@ EXPORT_SYMBOL(of_io_request_and_map);
  *	CPU addr (phys_addr_t)	: pna cells
  *	size			: nsize cells
  *
- * It returns -ENODEV if "dma-ranges" property was not found
- * for this device in DT.
+ * Return 0 on success, -ENODEV if the "dma-ranges" property was not found for
+ * this device in DT, or -EINVAL if the CPU address or size is invalid.
  */
 int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *size)
 {
@@ -880,6 +880,22 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
 	*dma_addr = dmaaddr;
 
 	*size = of_read_number(ranges + naddr + pna, nsize);
+	/*
+	 * DT nodes sometimes incorrectly set the size as a mask. Work around
+	 * those incorrect DT by computing the size as mask + 1.
+	 */
+	if (*size & 1) {
+		pr_warn("%s: size 0x%llx for dma-range in node(%s) set as mask\n",
+			__func__, *size, np->full_name);
+		*size = *size + 1;
+	}
+
+	if (!*size) {
+		pr_err("%s: invalid size zero for dma-range in node(%s)\n",
+		       __func__, np->full_name);
+		ret = -EINVAL;
+		goto out;
+	}
 
 	pr_debug("dma_addr(%llx) cpu_addr(%llx) size(%llx)\n",
 		 *dma_addr, *paddr, *size);
diff --git a/drivers/of/device.c b/drivers/of/device.c
index fd5cfad..d9898d9 100644
--- a/drivers/of/device.c
+++ b/drivers/of/device.c
@@ -110,21 +110,6 @@ void of_dma_configure(struct device *dev, struct device_node *np)
 		size = dev->coherent_dma_mask + 1;
 	} else {
 		offset = PFN_DOWN(paddr - dma_addr);
-
-		/*
-		 * Add a work around to treat the size as mask + 1 in case
-		 * it is defined in DT as a mask.
-		 */
-		if (size & 1) {
-			dev_warn(dev, "Invalid size 0x%llx for dma-range\n",
-				 size);
-			size = size + 1;
-		}
-
-		if (!size) {
-			dev_err(dev, "Adjusted size 0x%llx invalid\n", size);
-			return;
-		}
 		dev_dbg(dev, "dma_pfn_offset(%#08lx)\n", offset);
 	}
 
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation

  parent reply	other threads:[~2016-10-04 17:03 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20161004170414eucas1p141bebe16e1bf241862833e7ad0270c72@eucas1p1.samsung.com>
2016-10-04 17:03 ` [PATCH V3 0/8] IOMMU probe deferral support Sricharan R
2016-10-04 17:03   ` [PATCH V3 1/8] arm: dma-mapping: Don't override dma_ops in arch_setup_dma_ops() Sricharan R
2016-10-04 17:03   ` Sricharan R [this message]
2016-10-04 17:03   ` [PATCH V3 3/8] of: dma: Make of_dma_deconfigure() public Sricharan R
2016-10-04 17:03   ` [PATCH V3 4/8] drivers: platform: Configure dma operations at probe time Sricharan R
2016-10-26 14:07     ` Robin Murphy
2016-10-26 15:04       ` Sricharan
2016-10-27 10:49         ` Lorenzo Pieralisi
2016-11-02  7:05           ` Sricharan
2016-10-04 17:03   ` [PATCH V3 5/8] iommu: of: Handle IOMMU lookup failure with deferred probing or error Sricharan R
2016-10-26 14:52     ` Robin Murphy
2016-10-27  2:55       ` Sricharan
2016-10-04 17:03   ` [PATCH V3 6/8] arm: dma-mapping: Reset the device's dma_ops Sricharan R
2016-10-26 15:07     ` Robin Murphy
2016-10-27  3:37       ` Sricharan
2017-05-23 16:25         ` Russell King - ARM Linux
2017-05-23 16:55           ` Robin Murphy
2017-05-23 17:53             ` Russell King - ARM Linux
2017-05-23 21:46               ` Laurent Pinchart
2017-05-23 22:42                 ` Russell King - ARM Linux
2017-05-24 10:31                   ` Sricharan R
2017-05-24 11:26                     ` Laurent Pinchart
2017-05-24 11:38                       ` Sricharan R
2017-05-25 15:05                       ` Russell King - ARM Linux
2017-05-26  5:18                         ` Sricharan R
2017-05-26 14:04                         ` Laurent Pinchart
2016-10-04 17:03   ` [PATCH V3 7/8] arm/arm64: dma-mapping: Call iommu's remove_device callback during device detach Sricharan R
2016-10-26 15:16     ` Robin Murphy
2016-10-27  5:16       ` Sricharan
2016-10-04 17:03   ` [PATCH V3 8/8] arm64: dma-mapping: Remove the notifier trick to handle early setting of dma_ops Sricharan R
2016-10-07 15:40     ` Sricharan
2016-10-26 15:34     ` Robin Murphy
2016-10-27  5:19       ` Sricharan
2016-10-10 12:36   ` [PATCH V3 0/8] IOMMU probe deferral support Marek Szyprowski
2016-10-12  6:24     ` Sricharan
2016-10-24  6:34       ` Marek Szyprowski
2016-10-24 12:30         ` Sricharan
2016-10-17  6:58     ` Sricharan
2016-10-17  7:02     ` Sricharan
2016-10-25  6:25   ` Archit Taneja
2016-10-25 14:35   ` Robin Murphy
2016-10-26 14:44     ` Sricharan
2016-10-26 17:14       ` Robin Murphy
2016-10-27  8:37         ` Sricharan
2016-11-03 22:25         ` Sricharan
2016-11-04 15:16         ` Sricharan
2016-11-07 19:13           ` Will Deacon
2016-11-07 19:22           ` Robin Murphy
2016-11-09  6:24             ` Sricharan
2016-11-09 16:59               ` Will Deacon
2016-11-14  3:41             ` Sricharan
2016-11-20 15:11             ` Sricharan
2016-11-23 19:54               ` Robin Murphy
2016-11-24 16:10                 ` Sricharan
2016-11-24 19:11                   ` Robin Murphy
2016-11-28 17:42                     ` Sricharan
2016-11-28 18:13                       ` Lorenzo Pieralisi
2016-11-30  0:34                         ` Sricharan
2016-11-30 12:07                           ` Lorenzo Pieralisi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1475600632-21289-3-git-send-email-sricharan@codeaurora.org \
    --to=sricharan@codeaurora.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).