From: Hiroshi Doyu <hdoyu@nvidia.com>
To: "joerg.roedel@amd.com" <joerg.roedel@amd.com>
Cc: "joro@8bytes.org" <joro@8bytes.org>,
"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>,
"linaro-mm-sig-bounces@lists.linaro.org"
<linaro-mm-sig-bounces@lists.linaro.org>,
"iommu@lists.linux-foundation.org"
<iommu@lists.linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 2/2] ARM: IOMMU: Tegra30: Add iommu_ops for SMMU driver
Date: Tue, 24 Jan 2012 12:36:14 +0100 [thread overview]
Message-ID: <20120124.133614.1646093482547685131.hdoyu@nvidia.com> (raw)
In-Reply-To: <20120124110444.GB19255@amd.com>
From: Joerg Roedel <joerg.roedel@amd.com>
Subject: Re: [PATCH 2/2] ARM: IOMMU: Tegra30: Add iommu_ops for SMMU driver
Date: Tue, 24 Jan 2012 12:04:44 +0100
Message-ID: <20120124110444.GB19255@amd.com>
> > > Hmm, this looks like there is a 1-1 mapping between hardware SMMU
> > > devices and domains. This is not consistent with IOMMU-API semantics
> > > where a domain can contain devices behind different SMMUs. Please fix
> > > that.
> >
> > I'm a bit confused with the concept of "domain". I thought that
> > "domain" is equivalent to a "virtual address space". Usually a IOMMU
> > device provides a virtual address space for multiple client
> > devices. IOW, a IOMMU device provides a virtual address space, which
> > can be shared with multiple client devices.
> >
> > Actually Tegra SMMU case, a single IOMMU device has 4 different
> > virtual address speace("smmu_as"). Each "smmu_as" has its own virtual
> > address space. "smmu_as[i]" has mutiple "smmu_client" devices.
> >
> > smmu_as[i] == domain[i]
> >
> > I don't understand why "a domain can contain devices behind different
> > SMMUs" because those client devices belong to different virtual
> > address spaces, and they should belong to different "domains".
> >
> > Could you please explain a bit more about "domain"?
>
> A domain is, as you said, a virtual address space for IO devices. But
> the important point is, an arbitrary number of devices can be part of a
> domain. This also means that the devices can be behind different
> hardware SMMUs. In this case your driver needs to program the page-table
> pointer into more than one SMMU to give devices behind different SMMUs
> the same address space.
Thank you for explaining.
Does the above mean that a buffer can be shared with different devices
which belong to different IOMMU devices(virtual address spaces)?
For example, assuming the following:
- We have "struct iommu_domain *domain1".
- "domain1" has iommu device "iommu_dev1" and "iommu_dev2".
- "iommu_dev1" has "client_dev1" and "client_dev2".
- "iommu_dev2" has "client_dev3" and "client_dev4".
"iommu_map(domain1, iova, pa, ...)" will create the following mapping
___at once___:
- (iova)-(pa) mapping in iommu_dev1(iommmu_dev1's virtual address space)
- (iova)-(pa) mapping in iommu_dev2(iommmu_dev2's virtual address space)
Is the above correct?
It seems that the same (iova) is used for different virtual address
spaces. What kind of case is this beneficial most in?
next prev parent reply other threads:[~2012-01-24 11:36 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-05 7:11 [PATCH v3 0/2] ARM: IOMMU: tegra: Add iommu_ops for GART/SMMU driver Hiroshi DOYU
2012-01-05 7:11 ` [PATCH 1/2] ARM: IOMMU: Tegra20: Add iommu_ops for GART driver Hiroshi DOYU
2012-01-23 15:00 ` Joerg Roedel
2012-01-25 7:40 ` Hiroshi Doyu
2012-01-26 11:58 ` joro
2012-01-26 14:45 ` Hiroshi Doyu
2012-01-05 7:11 ` [PATCH 2/2] ARM: IOMMU: Tegra30: Add iommu_ops for SMMU driver Hiroshi DOYU
2012-01-23 15:43 ` Joerg Roedel
2012-01-24 9:57 ` Hiroshi Doyu
2012-01-24 11:04 ` Joerg Roedel
2012-01-24 11:36 ` Hiroshi Doyu [this message]
2012-01-24 11:57 ` joerg.roedel
2012-01-24 12:07 ` Hiroshi Doyu
2012-01-24 13:41 ` Hiroshi Doyu
2012-01-24 13:46 ` Felipe Balbi
2012-01-24 14:25 ` joro
2012-01-25 7:39 ` Hiroshi Doyu
2012-01-26 14:59 ` joro
2012-01-05 7:17 ` [PATCH v3 0/2] ARM: IOMMU: tegra: Add iommu_ops for GART/SMMU driver Hiroshi Doyu
2012-01-05 12:53 ` Russell King - ARM Linux
2012-01-05 14:29 ` Hiroshi Doyu
2012-01-05 14:46 ` Russell King - ARM Linux
2012-01-11 14:24 ` Hiroshi Doyu
2012-01-09 0:39 ` KyongHo Cho
2012-01-09 11:45 ` Russell King - ARM Linux
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=20120124.133614.1646093482547685131.hdoyu@nvidia.com \
--to=hdoyu@nvidia.com \
--cc=iommu@lists.linux-foundation.org \
--cc=joerg.roedel@amd.com \
--cc=joro@8bytes.org \
--cc=linaro-mm-sig-bounces@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.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
all inboxes | Powered by JetHome®