From: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
To: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
Mark Rutland <Mark.Rutland-5wv7dgnIgG8@public.gmane.org>,
"ksummit-2013-discuss-cunTk1MwBs98uUxBSJOaYoYkZiVZrdSR2LY78lusg7I@public.gmane.org"
<ksummit-2013-discuss-cunTk1MwBs98uUxBSJOaYoYkZiVZrdSR2LY78lusg7I@public.gmane.org>,
Lorenzo Pieralisi
<Lorenzo.Pieralisi-5wv7dgnIgG8@public.gmane.org>,
Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
"khilman-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
<khilman-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
"broonie-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
<broonie-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"paul-DWxLp4Yu+b8AvxtiuMwx3w@public.gmane.org"
<paul-DWxLp4Yu+b8AvxtiuMwx3w@public.gmane.org>,
"grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org"
<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>,
"lwn-T1hC0tSOHrs@public.gmane.org"
<lwn-T1hC0tSOHrs@public.gmane.org>,
"iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org"
<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
"thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org"
<thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org"
<andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
"olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org"
<olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>
Subject: Re: Report from 2013 ARM kernel summit
Date: Thu, 21 Nov 2013 11:40:28 -0700 [thread overview]
Message-ID: <528E539C.8080603@wwwdotorg.org> (raw)
In-Reply-To: <20131121110024.GA8395-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
On 11/21/2013 04:00 AM, Will Deacon wrote:
> On Wed, Nov 20, 2013 at 08:02:10PM +0000, Rob Herring wrote:
>> On Wed, Nov 20, 2013 at 12:39 AM, Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
>>> smmu_a: iommu@xxxxxxxx {
>>> #iommu-cells = <2>;
>>> ....
>>> };
>>>
>>> smmu_b: iommu@xxxxxxxx {
>>> #iommu-cells = <3>;
>>> ....
>>> };
>>>
>>> device_a {
>>> iommus = <&smmu_a param1 param2>,
>>> <&smmu_b param1 param2 param3>;
>>> };
>>>
>>> This can describe the relation between a device and an iommu
>>> independently. The number of params needed for each IOMMU can be
>>> sepcified by #iommu-cells in its iommu entry.
>>>
>>> device_a <-> smmu_a, needs 2 params for a device
>>> device_a <-> smmu_b, needs 3 params for a device
>>>
>>> For example, "smmu_a" can be an bus level global IOMMU where all child
>>> devices can be an master of "smmu_a", and "smmu_b" is a local IOMMU
>>> only for "device_a".
>>>
>>> "memory controller"---"smmu_a"---bus--+--"smmu_b"--"device_a"
>>> |
>>> |
>>> +--"device_b"
>>
>> I think the above binding would be the correct way to describe things
>> if you have 1 device connected to 2 IOMMUs (directly rather than
>> chained). IIUC, that is something you have on tegra?
>>
>> For the topology above where you are chaining iommu's, I think
>> something like this is more accurately describing the hierarchy:
>>
>> smmu_b: iommu@xxxxxxxx {
>> #iommu-cells = <3>;
>> iommus = <&smmu_a param1 param2>;
>> ....
>> };
>> device_a {
>> iommus = <&smmu_b param1 param2 param3>;
>> };
>>
>> I remember discussing this with Will and seem to recall some issue
>> with describing things this way. But looking at it now, I don't see
>> what that was.
>
> I think it was the usual issue with StreamID remastering. For example, if
^^^ s/was/had/ I assume
> you had a device going into two chained IOMMUs, you need a way to relate the
> StreamIDs of the device to the remastered IDs coming out of the first SMMU.
That seems pretty easy to deal with. Am I missing something. Here's how
I assume that would work:
1)
If the mapping is static in HW, then you simply have a table that
describes the remapping. A table representation could be in the DT or
the driver itself. Either way, any static mapping is a property of the
HW itself, so shouldn't need to leak into the client DT nodes at all, right?
That might look like:
smmu_a: iommu@xxxxxxxx {
#iommu-cells = <1>;
};
smmu_b: iommu@xxxxxxxx {
#iommu-cells = <1>;
// a) All stream IDs squashed down to 1 ID
iommus = <&smmu_a SMMU_B's_STREAM_ID_IN_SMMU_A>;
// OR b) stream IDs translated:
iommus = <&smmu_a 0>,
<&smmu_a 1>,
<&smmu_a 2> ...;
// this table could be in the driver instead
iommu-stream-id-map =
<DEV_A's_STREAM_ID_IN_SMMU_B 0>,
<DEV_B's_STREAM_ID_IN_SMMU_B 1>,
<DEV_C's_STREAM_ID_IN_SMMU_B 2>,
};
device_a {
iommus = <&smmu_b DEV_A's_STREAM_ID_IN_SMMU_B>;
};
or 2)
If the remapping is entirely dynamic, then you'd either need a table in
the DT to describe how to set it up for the particular use-case (similar
to the above), or a function in the driver to manage the mapping at
run-time, probably hooked into the of_xlate() of the parent IOMMU, which
would call into some function of the source IOMMU.
In other words, of_xlate for smmu_a would do both:
a) Parse the SMMU specifier in the client's iommus property
b) If the parse specifier represents a "dynamic stream ID device/IOMMU",
call some function in the client driver to find out which stream ID(s)
the parse iommus entry (specifier) represents.
WARNING: multiple messages have this Message-ID (diff)
From: swarren@wwwdotorg.org (Stephen Warren)
To: linux-arm-kernel@lists.infradead.org
Subject: Report from 2013 ARM kernel summit
Date: Thu, 21 Nov 2013 11:40:28 -0700 [thread overview]
Message-ID: <528E539C.8080603@wwwdotorg.org> (raw)
In-Reply-To: <20131121110024.GA8395@mudshark.cambridge.arm.com>
On 11/21/2013 04:00 AM, Will Deacon wrote:
> On Wed, Nov 20, 2013 at 08:02:10PM +0000, Rob Herring wrote:
>> On Wed, Nov 20, 2013 at 12:39 AM, Hiroshi Doyu <hdoyu@nvidia.com> wrote:
>>> smmu_a: iommu at xxxxxxxx {
>>> #iommu-cells = <2>;
>>> ....
>>> };
>>>
>>> smmu_b: iommu at xxxxxxxx {
>>> #iommu-cells = <3>;
>>> ....
>>> };
>>>
>>> device_a {
>>> iommus = <&smmu_a param1 param2>,
>>> <&smmu_b param1 param2 param3>;
>>> };
>>>
>>> This can describe the relation between a device and an iommu
>>> independently. The number of params needed for each IOMMU can be
>>> sepcified by #iommu-cells in its iommu entry.
>>>
>>> device_a <-> smmu_a, needs 2 params for a device
>>> device_a <-> smmu_b, needs 3 params for a device
>>>
>>> For example, "smmu_a" can be an bus level global IOMMU where all child
>>> devices can be an master of "smmu_a", and "smmu_b" is a local IOMMU
>>> only for "device_a".
>>>
>>> "memory controller"---"smmu_a"---bus--+--"smmu_b"--"device_a"
>>> |
>>> |
>>> +--"device_b"
>>
>> I think the above binding would be the correct way to describe things
>> if you have 1 device connected to 2 IOMMUs (directly rather than
>> chained). IIUC, that is something you have on tegra?
>>
>> For the topology above where you are chaining iommu's, I think
>> something like this is more accurately describing the hierarchy:
>>
>> smmu_b: iommu at xxxxxxxx {
>> #iommu-cells = <3>;
>> iommus = <&smmu_a param1 param2>;
>> ....
>> };
>> device_a {
>> iommus = <&smmu_b param1 param2 param3>;
>> };
>>
>> I remember discussing this with Will and seem to recall some issue
>> with describing things this way. But looking at it now, I don't see
>> what that was.
>
> I think it was the usual issue with StreamID remastering. For example, if
^^^ s/was/had/ I assume
> you had a device going into two chained IOMMUs, you need a way to relate the
> StreamIDs of the device to the remastered IDs coming out of the first SMMU.
That seems pretty easy to deal with. Am I missing something. Here's how
I assume that would work:
1)
If the mapping is static in HW, then you simply have a table that
describes the remapping. A table representation could be in the DT or
the driver itself. Either way, any static mapping is a property of the
HW itself, so shouldn't need to leak into the client DT nodes at all, right?
That might look like:
smmu_a: iommu at xxxxxxxx {
#iommu-cells = <1>;
};
smmu_b: iommu at xxxxxxxx {
#iommu-cells = <1>;
// a) All stream IDs squashed down to 1 ID
iommus = <&smmu_a SMMU_B's_STREAM_ID_IN_SMMU_A>;
// OR b) stream IDs translated:
iommus = <&smmu_a 0>,
<&smmu_a 1>,
<&smmu_a 2> ...;
// this table could be in the driver instead
iommu-stream-id-map =
<DEV_A's_STREAM_ID_IN_SMMU_B 0>,
<DEV_B's_STREAM_ID_IN_SMMU_B 1>,
<DEV_C's_STREAM_ID_IN_SMMU_B 2>,
};
device_a {
iommus = <&smmu_b DEV_A's_STREAM_ID_IN_SMMU_B>;
};
or 2)
If the remapping is entirely dynamic, then you'd either need a table in
the DT to describe how to set it up for the particular use-case (similar
to the above), or a function in the driver to manage the mapping at
run-time, probably hooked into the of_xlate() of the parent IOMMU, which
would call into some function of the source IOMMU.
In other words, of_xlate for smmu_a would do both:
a) Parse the SMMU specifier in the client's iommus property
b) If the parse specifier represents a "dynamic stream ID device/IOMMU",
call some function in the client driver to find out which stream ID(s)
the parse iommus entry (specifier) represents.
next prev parent reply other threads:[~2013-11-21 18:40 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-08 13:20 Report from 2013 ARM kernel summit Grant Likely
[not found] ` <CACxGe6stYhZOc=MfGj8BgtG8zp6eh=jRFGUbFn1SSYRtw+zryA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-11-11 9:47 ` Hiroshi Doyu
2013-11-11 9:47 ` Hiroshi Doyu
[not found] ` <20131111.114723.1885845500744256130.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-11-15 7:06 ` Grant Likely
2013-11-15 7:06 ` Grant Likely
[not found] ` <20131115070627.6CF65C4079B-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2013-11-19 9:40 ` Hiroshi Doyu
2013-11-19 9:40 ` Hiroshi Doyu
[not found] ` <20131119.114054.663999769447782808.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-11-19 17:35 ` Will Deacon
2013-11-19 17:35 ` Will Deacon
[not found] ` <20131119173524.GK11778-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-11-19 20:45 ` Rob Herring
2013-11-19 20:45 ` Rob Herring
[not found] ` <528BCDCE.6070006-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-11-20 6:39 ` Hiroshi Doyu
2013-11-20 6:39 ` Hiroshi Doyu
[not found] ` <20131120.083955.1386179068365424976.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-11-20 20:02 ` Rob Herring
2013-11-20 20:02 ` Rob Herring
[not found] ` <CAL_Jsq+AxEWhkOhxwAZ=+rpzDZ+yC1b3ZV541UhOu9kiwUhUdQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-11-20 20:22 ` Stephen Warren
2013-11-20 20:22 ` Stephen Warren
[not found] ` <528D1A0F.2000508-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-11-21 8:49 ` Hiroshi Doyu
2013-11-21 8:49 ` Hiroshi Doyu
2013-11-21 11:00 ` Will Deacon
2013-11-21 11:00 ` Will Deacon
[not found] ` <20131121110024.GA8395-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-11-21 18:40 ` Stephen Warren [this message]
2013-11-21 18:40 ` Stephen Warren
[not found] ` <528E539C.8080603-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-11-25 18:03 ` Will Deacon
2013-11-25 18:03 ` Will Deacon
2013-11-20 10:31 ` Will Deacon
2013-11-20 10:31 ` Will Deacon
[not found] ` <20131120103111.GB19352-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-11-20 13:53 ` Thierry Reding
2013-11-20 13:53 ` Thierry Reding
[not found] ` <20131120135308.GC8279-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2013-11-20 19:47 ` Rob Herring
2013-11-20 19:47 ` Rob Herring
2013-11-20 20:22 ` Rob Herring
2013-11-20 20:22 ` Rob Herring
-- strict thread matches above, loose matches on Subject: below --
2013-11-07 23:29 Grant Likely
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=528E539C.8080603@wwwdotorg.org \
--to=swarren-3lzwwm7+weoh9zmkesr00q@public.gmane.org \
--cc=Lorenzo.Pieralisi-5wv7dgnIgG8@public.gmane.org \
--cc=Mark.Rutland-5wv7dgnIgG8@public.gmane.org \
--cc=andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
--cc=broonie-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
--cc=hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=khilman-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=ksummit-2013-discuss-cunTk1MwBs98uUxBSJOaYoYkZiVZrdSR2LY78lusg7I@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=lwn-T1hC0tSOHrs@public.gmane.org \
--cc=olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org \
--cc=paul-DWxLp4Yu+b8AvxtiuMwx3w@public.gmane.org \
--cc=robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@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.