All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Sven Peter" <sven@svenpeter.dev>
To: "Mark Kettenis" <mark.kettenis@xs4all.nl>
Cc: iommu@lists.linux-foundation.org, joro@8bytes.org,
	will@kernel.org, robin.murphy@arm.com, robh+dt@kernel.org,
	"Arnd Bergmann" <arnd@kernel.org>,
	marcan@marcan.st, "Marc Zyngier" <maz@kernel.org>,
	mohamed.mediouni@caramail.com, stan@corellium.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH 0/3] Apple M1 DART IOMMU driver
Date: Tue, 23 Mar 2021 22:03:45 +0100	[thread overview]
Message-ID: <1a2da66b-221a-404f-a0af-d2b247ced0b0@www.fastmail.com> (raw)
In-Reply-To: <c1bcca33753f71d3@bloch.sibelius.xs4all.nl>

Hi Mark,

On Tue, Mar 23, 2021, at 21:00, Mark Kettenis wrote:
> The problem with both #1 and #2 is that you end up with two references
> to (effectively) different iommu's in the dwc3 device node.  I don't
> see how that is compatible with the idea of using a single translation
> table for both sub-DARTs.

I don't have a strong opinion about this fwiw.
Option #1 and #2 seem to have precedence in the already existing
iommu bindings though [1,2,3].
I just want to make sure we've thought through all options and understand
their advantages/disadvantages before we take a decision.


I've been reading some more Linux iommu code and here's how I understand
it now / how I could implement at least #1 with a single shared pagetable.
This might also be possible for option #2, but I'll need to think that through
in more detail.

An iommu domain is a collection of devices that share a virtual address space.
During domain allocation I can just allocate a single DART pagetable and
not have anything point to it for now.

A stream identifies the smallest unit the iommu hardware can differentiate.
For the DART we have 16 of these with a single TCR + the four TTBR register
for each stream.

A device is assigned to individual streams using the "iommus" property. When
a device is attached to a domain we now simply setup the TTBR registers to
point to the iommu domain pagetable. It doesn't matter here if it's a single
stream or multiple ones or even multiple devices sharing a single stream as
long as they're attached to the same domain.

All operations (map, unmap, etc.) now simply first modify the domain
pagetable and then issue the TLB maintenance operations for attached streams.


> 
> If you no longer think that is desirable, you'll still have the
> problem that you'll need to modify the dwc3 driver code such that it
> uses the right IOMMU to do its DMA address translation.  Given what
> you write above that sounds really ugly and confusing.  I would
> certainly want to avoid doing that in OpenBSD.

Yeah, I absolutely don't want to hack on the dwc3 code at all.
That will end up being *very* ugly.



Best,

Sven


[1] Documentation/devicetree/bindings/iommu/iommu.txt "Multiple-master IOMMU"
[2] Documentation/devicetree/bindings/qcom,iommu.txt last example
[3] Documentation/devicetree/bindings/arm,smmu.yaml first example

WARNING: multiple messages have this Message-ID (diff)
From: Sven Peter via iommu <iommu@lists.linux-foundation.org>
To: "Mark Kettenis" <mark.kettenis@xs4all.nl>
Cc: Arnd Bergmann <arnd@kernel.org>,
	devicetree@vger.kernel.org, will@kernel.org, marcan@marcan.st,
	linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org,
	robh+dt@kernel.org, Marc Zyngier <maz@kernel.org>,
	mohamed.mediouni@caramail.com, robin.murphy@arm.com,
	linux-arm-kernel@lists.infradead.org, stan@corellium.com
Subject: Re: [PATCH 0/3] Apple M1 DART IOMMU driver
Date: Tue, 23 Mar 2021 22:03:45 +0100	[thread overview]
Message-ID: <1a2da66b-221a-404f-a0af-d2b247ced0b0@www.fastmail.com> (raw)
In-Reply-To: <c1bcca33753f71d3@bloch.sibelius.xs4all.nl>

Hi Mark,

On Tue, Mar 23, 2021, at 21:00, Mark Kettenis wrote:
> The problem with both #1 and #2 is that you end up with two references
> to (effectively) different iommu's in the dwc3 device node.  I don't
> see how that is compatible with the idea of using a single translation
> table for both sub-DARTs.

I don't have a strong opinion about this fwiw.
Option #1 and #2 seem to have precedence in the already existing
iommu bindings though [1,2,3].
I just want to make sure we've thought through all options and understand
their advantages/disadvantages before we take a decision.


I've been reading some more Linux iommu code and here's how I understand
it now / how I could implement at least #1 with a single shared pagetable.
This might also be possible for option #2, but I'll need to think that through
in more detail.

An iommu domain is a collection of devices that share a virtual address space.
During domain allocation I can just allocate a single DART pagetable and
not have anything point to it for now.

A stream identifies the smallest unit the iommu hardware can differentiate.
For the DART we have 16 of these with a single TCR + the four TTBR register
for each stream.

A device is assigned to individual streams using the "iommus" property. When
a device is attached to a domain we now simply setup the TTBR registers to
point to the iommu domain pagetable. It doesn't matter here if it's a single
stream or multiple ones or even multiple devices sharing a single stream as
long as they're attached to the same domain.

All operations (map, unmap, etc.) now simply first modify the domain
pagetable and then issue the TLB maintenance operations for attached streams.


> 
> If you no longer think that is desirable, you'll still have the
> problem that you'll need to modify the dwc3 driver code such that it
> uses the right IOMMU to do its DMA address translation.  Given what
> you write above that sounds really ugly and confusing.  I would
> certainly want to avoid doing that in OpenBSD.

Yeah, I absolutely don't want to hack on the dwc3 code at all.
That will end up being *very* ugly.



Best,

Sven


[1] Documentation/devicetree/bindings/iommu/iommu.txt "Multiple-master IOMMU"
[2] Documentation/devicetree/bindings/qcom,iommu.txt last example
[3] Documentation/devicetree/bindings/arm,smmu.yaml first example
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

WARNING: multiple messages have this Message-ID (diff)
From: "Sven Peter" <sven@svenpeter.dev>
To: "Mark Kettenis" <mark.kettenis@xs4all.nl>
Cc: iommu@lists.linux-foundation.org, joro@8bytes.org,
	will@kernel.org, robin.murphy@arm.com, robh+dt@kernel.org,
	"Arnd Bergmann" <arnd@kernel.org>,
	marcan@marcan.st, "Marc Zyngier" <maz@kernel.org>,
	mohamed.mediouni@caramail.com, stan@corellium.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH 0/3] Apple M1 DART IOMMU driver
Date: Tue, 23 Mar 2021 22:03:45 +0100	[thread overview]
Message-ID: <1a2da66b-221a-404f-a0af-d2b247ced0b0@www.fastmail.com> (raw)
In-Reply-To: <c1bcca33753f71d3@bloch.sibelius.xs4all.nl>

Hi Mark,

On Tue, Mar 23, 2021, at 21:00, Mark Kettenis wrote:
> The problem with both #1 and #2 is that you end up with two references
> to (effectively) different iommu's in the dwc3 device node.  I don't
> see how that is compatible with the idea of using a single translation
> table for both sub-DARTs.

I don't have a strong opinion about this fwiw.
Option #1 and #2 seem to have precedence in the already existing
iommu bindings though [1,2,3].
I just want to make sure we've thought through all options and understand
their advantages/disadvantages before we take a decision.


I've been reading some more Linux iommu code and here's how I understand
it now / how I could implement at least #1 with a single shared pagetable.
This might also be possible for option #2, but I'll need to think that through
in more detail.

An iommu domain is a collection of devices that share a virtual address space.
During domain allocation I can just allocate a single DART pagetable and
not have anything point to it for now.

A stream identifies the smallest unit the iommu hardware can differentiate.
For the DART we have 16 of these with a single TCR + the four TTBR register
for each stream.

A device is assigned to individual streams using the "iommus" property. When
a device is attached to a domain we now simply setup the TTBR registers to
point to the iommu domain pagetable. It doesn't matter here if it's a single
stream or multiple ones or even multiple devices sharing a single stream as
long as they're attached to the same domain.

All operations (map, unmap, etc.) now simply first modify the domain
pagetable and then issue the TLB maintenance operations for attached streams.


> 
> If you no longer think that is desirable, you'll still have the
> problem that you'll need to modify the dwc3 driver code such that it
> uses the right IOMMU to do its DMA address translation.  Given what
> you write above that sounds really ugly and confusing.  I would
> certainly want to avoid doing that in OpenBSD.

Yeah, I absolutely don't want to hack on the dwc3 code at all.
That will end up being *very* ugly.



Best,

Sven


[1] Documentation/devicetree/bindings/iommu/iommu.txt "Multiple-master IOMMU"
[2] Documentation/devicetree/bindings/qcom,iommu.txt last example
[3] Documentation/devicetree/bindings/arm,smmu.yaml first example

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-03-23 21:06 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-20 15:19 [PATCH 0/3] Apple M1 DART IOMMU driver Sven Peter
2021-03-20 15:19 ` Sven Peter
2021-03-20 15:19 ` Sven Peter via iommu
2021-03-20 15:19 ` [PATCH 1/3] iommu: io-pgtable: add DART pagetable format Sven Peter
2021-03-20 15:19   ` Sven Peter
2021-03-20 15:19   ` Sven Peter via iommu
2021-03-24 16:37   ` Robin Murphy
2021-03-24 16:37     ` Robin Murphy
2021-03-24 16:37     ` Robin Murphy
2021-03-25 20:47     ` Sven Peter
2021-03-25 20:47       ` Sven Peter
2021-03-25 20:47       ` Sven Peter via iommu
2021-03-20 15:20 ` [PATCH 2/3] dt-bindings: iommu: add DART iommu bindings Sven Peter
2021-03-20 15:20   ` Sven Peter
2021-03-20 15:20   ` Sven Peter via iommu
2021-03-22  0:15   ` Rob Herring
2021-03-22  0:15     ` Rob Herring
2021-03-22  0:15     ` Rob Herring
2021-03-22 18:16     ` Sven Peter
2021-03-22 18:16       ` Sven Peter
2021-03-22 18:16       ` Sven Peter via iommu
2021-03-21 16:00 ` [PATCH 0/3] Apple M1 DART IOMMU driver Mark Kettenis
2021-03-21 16:00   ` Mark Kettenis
2021-03-21 16:00   ` Mark Kettenis
2021-03-21 17:22   ` Sven Peter via iommu
2021-03-21 18:35     ` Mark Kettenis
2021-03-21 18:35       ` Mark Kettenis
2021-03-21 18:35       ` Mark Kettenis
2021-03-22 22:17       ` Sven Peter
2021-03-22 22:17         ` Sven Peter
2021-03-22 22:17         ` Sven Peter via iommu
2021-03-23 20:00         ` Mark Kettenis
2021-03-23 20:00           ` Mark Kettenis
2021-03-23 20:00           ` Mark Kettenis
2021-03-23 21:03           ` Sven Peter [this message]
2021-03-23 21:03             ` Sven Peter
2021-03-23 21:03             ` Sven Peter via iommu
2021-03-21 17:28   ` Sven Peter
2021-03-21 17:28     ` Sven Peter
2021-03-21 17:28     ` Sven Peter via iommu
2021-03-23 20:53   ` Rob Herring
2021-03-23 20:53     ` Rob Herring
2021-03-23 20:53     ` Rob Herring
2021-03-23 22:33     ` Mark Kettenis
2021-03-23 22:33       ` Mark Kettenis
2021-03-23 22:33       ` Mark Kettenis
2021-03-25  7:53     ` Sven Peter
2021-03-25  7:53       ` Sven Peter
2021-03-25  7:53       ` Sven Peter via iommu
2021-03-25 11:50       ` Robin Murphy
2021-03-25 11:50         ` Robin Murphy
2021-03-25 11:50         ` Robin Murphy
2021-03-25 20:49         ` Sven Peter
2021-03-25 20:49           ` Sven Peter
2021-03-25 20:49           ` Sven Peter via iommu
2021-03-27 15:33         ` Sven Peter
2021-03-27 15:33           ` Sven Peter
2021-03-27 15:33           ` Sven Peter via iommu
2021-03-25 21:41       ` Arnd Bergmann
2021-03-25 21:41         ` Arnd Bergmann
2021-03-25 21:41         ` Arnd Bergmann
2021-03-26 15:59         ` Mark Kettenis
2021-03-26 15:59           ` Mark Kettenis
2021-03-26 15:59           ` Mark Kettenis
2021-03-26 16:09           ` Arnd Bergmann
2021-03-26 16:09             ` Arnd Bergmann
2021-03-26 16:09             ` Arnd Bergmann
2021-03-26 16:10           ` Sven Peter
2021-03-26 16:10             ` Sven Peter
2021-03-26 16:10             ` Sven Peter via iommu
2021-03-26 16:38             ` Arnd Bergmann
2021-03-26 16:38               ` Arnd Bergmann
2021-03-26 16:38               ` Arnd Bergmann
2021-03-26 17:06               ` Sven Peter
2021-03-26 17:06                 ` Sven Peter
2021-03-26 17:06                 ` Sven Peter via iommu
2021-03-26 17:26               ` Mark Kettenis
2021-03-26 17:26                 ` Mark Kettenis
2021-03-26 17:26                 ` Mark Kettenis
2021-03-26 17:34                 ` Robin Murphy
2021-03-26 17:34                   ` Robin Murphy
2021-03-26 17:34                   ` Robin Murphy
2021-03-26 17:51                   ` Sven Peter
2021-03-26 17:51                     ` Sven Peter
2021-03-26 17:51                     ` Sven Peter via iommu
2021-03-26 19:59                     ` Arnd Bergmann
2021-03-26 19:59                       ` Arnd Bergmann
2021-03-26 19:59                       ` Arnd Bergmann
2021-03-26 21:16                       ` Mark Kettenis
2021-03-26 21:16                         ` Mark Kettenis
2021-03-26 21:16                         ` Mark Kettenis
2021-03-27 15:30                       ` Sven Peter
2021-03-27 15:30                         ` Sven Peter
2021-03-27 15:30                         ` Sven Peter via iommu
2021-03-26 20:03                 ` Arnd Bergmann
2021-03-26 20:03                   ` Arnd Bergmann
2021-03-26 20:03                   ` Arnd Bergmann
2021-03-26 21:13                   ` Mark Kettenis
2021-03-26 21:13                     ` Mark Kettenis
2021-03-26 21:13                     ` Mark Kettenis
2021-03-24 15:29 ` Robin Murphy
2021-03-24 15:29   ` Robin Murphy
2021-03-24 15:29   ` Robin Murphy
2021-03-25  7:58   ` Sven Peter
2021-03-25  7:58     ` Sven Peter
2021-03-25  7:58     ` Sven Peter via iommu

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=1a2da66b-221a-404f-a0af-d2b247ced0b0@www.fastmail.com \
    --to=sven@svenpeter.dev \
    --cc=arnd@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joro@8bytes.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcan@marcan.st \
    --cc=mark.kettenis@xs4all.nl \
    --cc=maz@kernel.org \
    --cc=mohamed.mediouni@caramail.com \
    --cc=robh+dt@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=stan@corellium.com \
    --cc=will@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 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.