From: Suman Anna <s-anna-l0cyMroinI0@public.gmane.org>
To: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>,
Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
Laurent Pinchart
<laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>,
Florian Vaussard <florian.vaussard-p8DiymsW2f8@public.gmane.org>,
linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: [PATCHv2 06/16] iommu/omap: allocate archdata on the fly for DT-based devices
Date: Thu, 13 Feb 2014 12:15:37 -0600 [thread overview]
Message-ID: <1392315347-32967-7-git-send-email-s-anna@ti.com> (raw)
In-Reply-To: <1392315347-32967-1-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
From: Laurent Pinchart <laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
The OMAP IOMMU driver locates the IOMMU associated to a device using the
IOMMU name stored in the device archdata iommu field. That field is
expected to be populated by platform code and is left unset for DT-based
devices. This results in a crash when the IOMMU driver attaches a domain
to a device.
Fix this by allocating the archdata iommu structure when devices are
added and freeing when they are removed. Devices without an OF node, and
devices without an iommus property in their OF node are ignored. The
iommu name is initialized from the IOMMU device node name.
This should be simplified when removing non-DT support completely from
the IOMMU users as the IOMMU name won't be needed anymore, and the
IOMMU device pointer could then be stored in the archdata iommu field
directly.
Signed-off-by: Laurent Pinchart <laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
[s-anna-l0cyMroinI0@public.gmane.org: updated to use device name instead of OF name]
Signed-off-by: Suman Anna <s-anna-l0cyMroinI0@public.gmane.org>
---
drivers/iommu/omap-iommu.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
index e64025a..f6afe8f 100644
--- a/drivers/iommu/omap-iommu.c
+++ b/drivers/iommu/omap-iommu.c
@@ -1256,6 +1256,49 @@ static int omap_iommu_domain_has_cap(struct iommu_domain *domain,
return 0;
}
+static int omap_iommu_add_device(struct device *dev)
+{
+ struct omap_iommu_arch_data *arch_data;
+ struct device_node *np;
+
+ /*
+ * Allocate the archdata iommu structure for DT-based devices.
+ *
+ * TODO: Simplify this when removing non-DT support completely from the
+ * IOMMU users.
+ */
+ if (!dev->of_node)
+ return 0;
+
+ np = of_parse_phandle(dev->of_node, "iommus", 0);
+ if (!np)
+ return 0;
+
+ arch_data = kzalloc(sizeof(*arch_data), GFP_KERNEL);
+ if (!arch_data) {
+ of_node_put(np);
+ return -ENOMEM;
+ }
+
+ arch_data->name = kstrdup(dev_name(dev), GFP_KERNEL);
+ dev->archdata.iommu = arch_data;
+
+ of_node_put(np);
+
+ return 0;
+}
+
+static void omap_iommu_remove_device(struct device *dev)
+{
+ struct omap_iommu_arch_data *arch_data = dev->archdata.iommu;
+
+ if (!dev->of_node || !arch_data)
+ return;
+
+ kfree(arch_data->name);
+ kfree(arch_data);
+}
+
static struct iommu_ops omap_iommu_ops = {
.domain_init = omap_iommu_domain_init,
.domain_destroy = omap_iommu_domain_destroy,
@@ -1265,6 +1308,8 @@ static struct iommu_ops omap_iommu_ops = {
.unmap = omap_iommu_unmap,
.iova_to_phys = omap_iommu_iova_to_phys,
.domain_has_cap = omap_iommu_domain_has_cap,
+ .add_device = omap_iommu_add_device,
+ .remove_device = omap_iommu_remove_device,
.pgsize_bitmap = OMAP_IOMMU_PGSIZES,
};
--
1.8.5.3
next prev parent reply other threads:[~2014-02-13 18:15 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-13 18:15 [PATCHv2 00/16] OMAP IOMMU DT adaptation and cleanup Suman Anna
2014-02-13 18:15 ` [PATCHv2 01/16] iommu/omap: convert to devm_* interfaces Suman Anna
[not found] ` <1392315347-32967-2-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
2014-02-25 21:10 ` Laurent Pinchart
2014-02-13 18:15 ` [PATCHv2 08/16] ARM: OMAP3: remove deprecated CONFIG_OMAP_IOMMU_IVA2 Suman Anna
[not found] ` <1392315347-32967-9-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
2014-02-25 21:17 ` Laurent Pinchart
2014-02-26 17:09 ` Tony Lindgren
2014-02-26 17:15 ` Tony Lindgren
2014-02-28 19:58 ` Paul Walmsley
[not found] ` <alpine.DEB.2.02.1402281958170.453-rwI8Ez+7Ko+d5PgPZx9QOdBPR1lH4CV8@public.gmane.org>
2014-02-28 20:42 ` Suman Anna
[not found] ` <1392315347-32967-1-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
2014-02-13 18:15 ` [PATCHv2 02/16] iommu/omap: omap_iommu_attach() should return ENODEV, not NULL Suman Anna
[not found] ` <1392315347-32967-3-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
2014-02-25 21:13 ` Laurent Pinchart
2014-02-25 22:32 ` Suman Anna
[not found] ` <530D19E3.9030407-l0cyMroinI0@public.gmane.org>
2014-02-26 2:05 ` Laurent Pinchart
2014-02-26 16:45 ` Suman Anna
2014-02-13 18:15 ` [PATCHv2 03/16] Documentation: dt: add OMAP iommu bindings Suman Anna
2014-02-24 12:57 ` Florian Vaussard
2014-02-24 18:09 ` Suman Anna
[not found] ` <1392315347-32967-4-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
2014-02-25 21:26 ` Laurent Pinchart
2014-02-25 23:02 ` Suman Anna
2014-02-26 2:13 ` Laurent Pinchart
2014-02-26 17:02 ` Suman Anna
[not found] ` <530E1E20.9000301-l0cyMroinI0@public.gmane.org>
2014-02-26 19:32 ` Laurent Pinchart
2014-02-26 20:23 ` Suman Anna
2014-02-26 20:36 ` Laurent Pinchart
2014-02-26 22:18 ` Suman Anna
[not found] ` <530E682D.9070005-l0cyMroinI0@public.gmane.org>
2014-02-26 22:28 ` Suman Anna
2014-02-26 22:43 ` Laurent Pinchart
2014-02-26 23:14 ` Suman Anna
2014-02-13 18:15 ` [PATCHv2 04/16] iommu/omap: add devicetree support Suman Anna
2014-02-26 17:08 ` Tony Lindgren
2014-02-13 18:15 ` [PATCHv2 05/16] iommu/omap: enable bus-error back on supported iommus Suman Anna
2014-02-13 18:15 ` Suman Anna [this message]
2014-02-13 18:15 ` [PATCHv2 07/16] iommu/omap: allow enable/disable even without pdata Suman Anna
[not found] ` <1392315347-32967-8-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
2014-02-25 21:15 ` Laurent Pinchart
2014-02-25 22:41 ` Suman Anna
2014-02-13 18:15 ` [PATCHv2 09/16] ARM: OMAP2+: change the ISP device archdata MMU name Suman Anna
2014-02-13 18:15 ` [PATCHv2 10/16] ARM: OMAP2+: use pdata quirks for iommu reset lines Suman Anna
[not found] ` <1392315347-32967-11-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
2014-02-26 17:17 ` Tony Lindgren
[not found] ` <20140226171731.GG11654-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2014-02-26 18:04 ` Suman Anna
2014-02-13 18:15 ` [PATCHv2 11/16] ARM: OMAP3: fix iva mmu programming issues Suman Anna
2014-02-13 18:15 ` [PATCHv2 12/16] ARM: OMAP5: hwmod data: add mmu data for ipu & dsp Suman Anna
2014-02-13 18:15 ` [PATCHv2 16/16] ARM: OMAP2+: Remove legacy omap-iommu.c Suman Anna
2014-02-13 18:15 ` [PATCHv2 13/16] ARM: OMAP2+: extend iommu pdata-quirks to OMAP5 Suman Anna
2014-02-13 18:15 ` [PATCHv2 14/16] ARM: OMAP3: hwmod data: cleanup data for IOMMUs Suman Anna
[not found] ` <1392315347-32967-15-git-send-email-s-anna-l0cyMroinI0@public.gmane.org>
2014-02-26 17:18 ` Tony Lindgren
[not found] ` <20140226171824.GH11654-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2014-02-26 17:59 ` Suman Anna
[not found] ` <530E2B67.9050300-l0cyMroinI0@public.gmane.org>
2014-02-27 9:16 ` Florian Vaussard
[not found] ` <530F0255.0-p8DiymsW2f8@public.gmane.org>
2014-02-28 0:25 ` Tony Lindgren
2014-02-13 18:15 ` [PATCHv2 15/16] ARM: OMAP4: " Suman Anna
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=1392315347-32967-7-git-send-email-s-anna@ti.com \
--to=s-anna-l0cymroini0@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=florian.vaussard-p8DiymsW2f8@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org \
--cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.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).