All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
To: Yong Wu <yong.wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>,
	Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
	youhua.li-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
	Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	k.zhang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	kendrick.hsu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
	arnd-r2nGTMty4D4@public.gmane.org,
	Tomasz Figa <tfiga-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Matthias Brugger
	<matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	pebolle-IWqWACnzNjzz+pZb47iToQ@public.gmane.org,
	srv_heupstream-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
	Sricharan R <sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	Daniel Kurtz <djkurtz-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Sasha Hauer <kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>,
	Lucas Stach <l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Subject: Re: [PATCH v5 5/6] iommu/mediatek: Add mt8173 IOMMU driver
Date: Wed, 14 Oct 2015 14:53:09 +0200	[thread overview]
Message-ID: <20151014125309.GO27420@8bytes.org> (raw)
In-Reply-To: <1444357388-30257-6-git-send-email-yong.wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>

On Fri, Oct 09, 2015 at 10:23:07AM +0800, Yong Wu wrote:
> +	/*
> +	 * There is a domain for each a iommu device in normal case.
> +	 * But MTK only has one iommu domain called the m4u domain which all
> +	 * the multimedia HW share. Here we reserve one as the m4u domain and
> +	 * free the others.
> +	 *
> +	 * And the attach_device that from __iommu_setup_dma_ops
> +	 * will be called earlier than probe.
> +	 */

Okay, with this being the case, you need to put all devices behind one
IOMMU into the same iommu-group, because the IOMMU can't really isolate
the devices from each other.

> +static int mtk_iommu_add_device(struct device *dev)
> +{
> +	struct iommu_group *group;
> +	struct mtk_iommu_client_priv *priv;
> +	struct mtk_iommu_domain *m4udom;
> +	struct iommu_domain *domain;
> +	int ret;
> +
> +	if (!dev->archdata.iommu) /* Not a iommu client device */
> +		return -ENODEV;
> +
> +	group = iommu_group_get(dev);
> +	if (!group) {
> +		group = iommu_group_alloc();
> +		if (IS_ERR(group)) {
> +			dev_err(dev, "Failed to allocate IOMMU group\n");
> +			return PTR_ERR(group);
> +		}
> +	}
> +
> +	ret = iommu_group_add_device(group, dev);
> +	if (ret) {
> +		dev_err(dev, "Failed to add IOMMU group\n");
> +		goto err_group_put;
> +	}
> +
> +	domain = iommu_get_domain_for_dev(dev);
> +	if (!domain) {
> +		/*
> +		 * Get the m4u iommu domain from the m4u device.
> +		 * Attach all the client devices into the m4u domain.
> +		 */
> +		priv = dev->archdata.iommu;
> +		m4udom = dev_get_drvdata(priv->m4udev);
> +		ret = iommu_attach_group(&m4udom->domain, group);
> +		if (ret)
> +			dev_err(dev, "Failed to attach IOMMU group\n");
> +	}
> +
> +err_group_put:
> +	iommu_group_put(group);
> +	return ret;
> +}

Here it looks like you are allocating one group for each device. As I
said, all devices need to be in one group.



	Joerg

WARNING: multiple messages have this Message-ID (diff)
From: joro@8bytes.org (Joerg Roedel)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 5/6] iommu/mediatek: Add mt8173 IOMMU driver
Date: Wed, 14 Oct 2015 14:53:09 +0200	[thread overview]
Message-ID: <20151014125309.GO27420@8bytes.org> (raw)
In-Reply-To: <1444357388-30257-6-git-send-email-yong.wu@mediatek.com>

On Fri, Oct 09, 2015 at 10:23:07AM +0800, Yong Wu wrote:
> +	/*
> +	 * There is a domain for each a iommu device in normal case.
> +	 * But MTK only has one iommu domain called the m4u domain which all
> +	 * the multimedia HW share. Here we reserve one as the m4u domain and
> +	 * free the others.
> +	 *
> +	 * And the attach_device that from __iommu_setup_dma_ops
> +	 * will be called earlier than probe.
> +	 */

Okay, with this being the case, you need to put all devices behind one
IOMMU into the same iommu-group, because the IOMMU can't really isolate
the devices from each other.

> +static int mtk_iommu_add_device(struct device *dev)
> +{
> +	struct iommu_group *group;
> +	struct mtk_iommu_client_priv *priv;
> +	struct mtk_iommu_domain *m4udom;
> +	struct iommu_domain *domain;
> +	int ret;
> +
> +	if (!dev->archdata.iommu) /* Not a iommu client device */
> +		return -ENODEV;
> +
> +	group = iommu_group_get(dev);
> +	if (!group) {
> +		group = iommu_group_alloc();
> +		if (IS_ERR(group)) {
> +			dev_err(dev, "Failed to allocate IOMMU group\n");
> +			return PTR_ERR(group);
> +		}
> +	}
> +
> +	ret = iommu_group_add_device(group, dev);
> +	if (ret) {
> +		dev_err(dev, "Failed to add IOMMU group\n");
> +		goto err_group_put;
> +	}
> +
> +	domain = iommu_get_domain_for_dev(dev);
> +	if (!domain) {
> +		/*
> +		 * Get the m4u iommu domain from the m4u device.
> +		 * Attach all the client devices into the m4u domain.
> +		 */
> +		priv = dev->archdata.iommu;
> +		m4udom = dev_get_drvdata(priv->m4udev);
> +		ret = iommu_attach_group(&m4udom->domain, group);
> +		if (ret)
> +			dev_err(dev, "Failed to attach IOMMU group\n");
> +	}
> +
> +err_group_put:
> +	iommu_group_put(group);
> +	return ret;
> +}

Here it looks like you are allocating one group for each device. As I
said, all devices need to be in one group.



	Joerg

WARNING: multiple messages have this Message-ID (diff)
From: Joerg Roedel <joro@8bytes.org>
To: Yong Wu <yong.wu@mediatek.com>
Cc: Thierry Reding <treding@nvidia.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	Daniel Kurtz <djkurtz@google.com>, Tomasz Figa <tfiga@google.com>,
	Lucas Stach <l.stach@pengutronix.de>,
	Rob Herring <robh+dt@kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	linux-mediatek@lists.infradead.org,
	Sasha Hauer <kernel@pengutronix.de>,
	srv_heupstream@mediatek.com, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	iommu@lists.linux-foundation.org, pebolle@tiscali.nl,
	arnd@arndb.de, mitchelh@codeaurora.org,
	Sricharan R <sricharan@codeaurora.org>,
	youhua.li@mediatek.com, k.zhang@mediatek.com,
	kendrick.hsu@mediatek.com
Subject: Re: [PATCH v5 5/6] iommu/mediatek: Add mt8173 IOMMU driver
Date: Wed, 14 Oct 2015 14:53:09 +0200	[thread overview]
Message-ID: <20151014125309.GO27420@8bytes.org> (raw)
In-Reply-To: <1444357388-30257-6-git-send-email-yong.wu@mediatek.com>

On Fri, Oct 09, 2015 at 10:23:07AM +0800, Yong Wu wrote:
> +	/*
> +	 * There is a domain for each a iommu device in normal case.
> +	 * But MTK only has one iommu domain called the m4u domain which all
> +	 * the multimedia HW share. Here we reserve one as the m4u domain and
> +	 * free the others.
> +	 *
> +	 * And the attach_device that from __iommu_setup_dma_ops
> +	 * will be called earlier than probe.
> +	 */

Okay, with this being the case, you need to put all devices behind one
IOMMU into the same iommu-group, because the IOMMU can't really isolate
the devices from each other.

> +static int mtk_iommu_add_device(struct device *dev)
> +{
> +	struct iommu_group *group;
> +	struct mtk_iommu_client_priv *priv;
> +	struct mtk_iommu_domain *m4udom;
> +	struct iommu_domain *domain;
> +	int ret;
> +
> +	if (!dev->archdata.iommu) /* Not a iommu client device */
> +		return -ENODEV;
> +
> +	group = iommu_group_get(dev);
> +	if (!group) {
> +		group = iommu_group_alloc();
> +		if (IS_ERR(group)) {
> +			dev_err(dev, "Failed to allocate IOMMU group\n");
> +			return PTR_ERR(group);
> +		}
> +	}
> +
> +	ret = iommu_group_add_device(group, dev);
> +	if (ret) {
> +		dev_err(dev, "Failed to add IOMMU group\n");
> +		goto err_group_put;
> +	}
> +
> +	domain = iommu_get_domain_for_dev(dev);
> +	if (!domain) {
> +		/*
> +		 * Get the m4u iommu domain from the m4u device.
> +		 * Attach all the client devices into the m4u domain.
> +		 */
> +		priv = dev->archdata.iommu;
> +		m4udom = dev_get_drvdata(priv->m4udev);
> +		ret = iommu_attach_group(&m4udom->domain, group);
> +		if (ret)
> +			dev_err(dev, "Failed to attach IOMMU group\n");
> +	}
> +
> +err_group_put:
> +	iommu_group_put(group);
> +	return ret;
> +}

Here it looks like you are allocating one group for each device. As I
said, all devices need to be in one group.



	Joerg


  parent reply	other threads:[~2015-10-14 12:53 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-09  2:23 [PATCH v5 0/6] MT8173 IOMMU SUPPORT Yong Wu
2015-10-09  2:23 ` Yong Wu
2015-10-09  2:23 ` Yong Wu
2015-10-09  2:23 ` [PATCH v5 1/6] dt-bindings: iommu: Add binding for mediatek IOMMU Yong Wu
2015-10-09  2:23   ` Yong Wu
2015-10-09  2:23   ` Yong Wu
2015-10-09  2:23 ` [PATCH v5 2/6] dt-bindings: mediatek: Add smi dts binding Yong Wu
2015-10-09  2:23   ` Yong Wu
2015-10-09  2:23   ` Yong Wu
2015-10-09  2:23 ` [PATCH v5 3/6] iommu: add ARM short descriptor page table allocator Yong Wu
2015-10-09  2:23   ` Yong Wu
2015-10-09  2:23   ` Yong Wu
     [not found]   ` <1444357388-30257-4-git-send-email-yong.wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-10-14 12:54     ` Joerg Roedel
2015-10-14 12:54       ` Joerg Roedel
2015-10-14 12:54       ` Joerg Roedel
     [not found]       ` <20151014125419.GP27420-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-10-15 17:20         ` Will Deacon
2015-10-15 17:20           ` Will Deacon
2015-10-15 17:20           ` Will Deacon
2015-11-06  8:42     ` Yong Wu
2015-11-06  8:42       ` Yong Wu
2015-11-06  8:42       ` Yong Wu
2015-11-06 11:42       ` Will Deacon
2015-11-06 11:42         ` Will Deacon
2015-11-06 11:42         ` Will Deacon
2015-10-09  2:23 ` [PATCH v5 4/6] memory: mediatek: Add SMI driver Yong Wu
2015-10-09  2:23   ` Yong Wu
2015-10-09  2:23   ` Yong Wu
     [not found]   ` <1444357388-30257-5-git-send-email-yong.wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-10-27 13:24     ` Robin Murphy
2015-10-27 13:24       ` Robin Murphy
2015-10-27 13:24       ` Robin Murphy
     [not found]       ` <562F7B12.7030201-5wv7dgnIgG8@public.gmane.org>
2015-10-31  8:32         ` Yong Wu
2015-10-31  8:32           ` Yong Wu
2015-10-31  8:32           ` Yong Wu
2015-10-09  2:23 ` [PATCH v5 5/6] iommu/mediatek: Add mt8173 IOMMU driver Yong Wu
2015-10-09  2:23   ` Yong Wu
2015-10-09  2:23   ` Yong Wu
     [not found]   ` <1444357388-30257-6-git-send-email-yong.wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-10-14 12:53     ` Joerg Roedel [this message]
2015-10-14 12:53       ` Joerg Roedel
2015-10-14 12:53       ` Joerg Roedel
     [not found]       ` <20151014125309.GO27420-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-10-26  5:23         ` Yong Wu
2015-10-26  5:23           ` Yong Wu
2015-10-26  5:23           ` Yong Wu
2015-10-27 13:25     ` Robin Murphy
2015-10-27 13:25       ` Robin Murphy
2015-10-27 13:25       ` Robin Murphy
     [not found]       ` <562F7B46.1040109-5wv7dgnIgG8@public.gmane.org>
2015-10-31  8:28         ` Yong Wu
2015-10-31  8:28           ` Yong Wu
2015-10-31  8:28           ` Yong Wu
2015-10-09  2:23 ` [PATCH v5 6/6] dts: mt8173: Add iommu/smi nodes for mt8173 Yong Wu
2015-10-09  2:23   ` Yong Wu
2015-10-09  2:23   ` Yong Wu
     [not found] ` <1444357388-30257-1-git-send-email-yong.wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-10-14 12:56   ` [PATCH v5 0/6] MT8173 IOMMU SUPPORT Joerg Roedel
2015-10-14 12:56     ` Joerg Roedel
2015-10-14 12:56     ` Joerg Roedel
     [not found]     ` <20151014125620.GQ27420-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-10-22  4:40       ` Yong Wu
2015-10-22  4:40         ` Yong Wu
2015-10-22  4:40         ` Yong Wu
2015-10-23  9:26         ` Joerg Roedel
2015-10-23  9:26           ` Joerg Roedel
2015-10-23  9:26           ` Joerg Roedel
     [not found]           ` <20151023092636.GX27420-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2015-11-24  5:58             ` Yong Wu
2015-11-24  5:58               ` Yong Wu
2015-11-24  5:58               ` Yong Wu
2015-11-24 10:38               ` Thierry Reding
2015-11-24 10:38                 ` Thierry Reding
2015-11-24 10:38                 ` Thierry Reding
     [not found]                 ` <20151124103819.GE17658-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2015-11-25  1:30                   ` Yong Wu
2015-11-25  1:30                     ` Yong Wu
2015-11-25  1:30                     ` Yong Wu

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=20151014125309.GO27420@8bytes.org \
    --to=joro-zlv9swrftaidnm+yrofe0a@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=djkurtz-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=k.zhang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
    --cc=kendrick.hsu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
    --cc=kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
    --cc=l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=pebolle-IWqWACnzNjzz+pZb47iToQ@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=srv_heupstream-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
    --cc=tfiga-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
    --cc=yong.wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
    --cc=youhua.li-NuS5LvNUpcJWk0Htik3J/w@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.