From: andreas.herrmann@calxeda.com (Andreas Herrmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 02/11] iommu/arm-smmu: Introduce bus notifier block
Date: Mon, 20 Jan 2014 22:29:08 +0100 [thread overview]
Message-ID: <20140120212908.GF3471@alberich> (raw)
In-Reply-To: <419c2609cab14842b5258f7048ce6d43@BL2PR03MB468.namprd03.prod.outlook.com>
On Sat, Jan 18, 2014 at 03:59:53PM -0500, Varun Sethi wrote:
> > -----Original Message-----
> > From: iommu-bounces at lists.linux-foundation.org [mailto:iommu-
> > bounces at lists.linux-foundation.org] On Behalf Of Andreas Herrmann
> > Sent: Thursday, January 16, 2014 6:14 PM
> > To: Will Deacon
> > Cc: Andreas Herrmann; iommu at lists.linux-foundation.org; linux-arm-
> > kernel at lists.infradead.org
> > Subject: [PATCH 02/11] iommu/arm-smmu: Introduce bus notifier block
> >
> > At the moment just handle BUS_NOTIFY_BIND_DRIVER to conditionally isolate
> > all master devices for an SMMU.
> >
> > Depending on DT information each device is put into its own protection
> > domain (if possible). For configuration with one or just a few masters
> > per SMMU that is easy to achieve.
> >
> > In case of many devices per SMMU (e.g. MMU-500 with it's distributed
> > translation support) isolation of each device might not be possible --
> > depending on number of available SMR groups and/or context banks.
> >
> > Default is that device isolation is contolled per SMMU with SMMU node
> > property "arm,smmu-isolate-devices" in a DT. If this property is set for
> > an SMMU node, device isolation is performed.
> [Sethi Varun-B16395] What if the devices have to be assigned to
> different virtual machines? Would the absence of this property
> indicate that devices can't Be assigned to different virtual
> machines i.e. devices would be in the same iommu group?
The absence of this property implies that arm-smmu driver handling of
master devices is equivalent to the current handling.
(I.e. assignment to different VMs works or doesn't work as with the current
mainline driver.)
> > W/o device isolation the driver detects SMMUs but no translation is
> > configured (transactions just bypass translation process).
> >
> [Sethi Varun-B16395] Would SMR and S2CR still be allocated?
That's similar to the current handling of the driver. SMRs will be
marked as invalid and all S2CRs are configured as bypass.
As long as nobody creates a domain and attaches a device to it this
won't change.
> > Note that for device isolation dma_base and size are fixed as 0 and
> > SZ_128M at the moment. Additional patches will address this restriction
> > and allow automatic growth of mapping size.
> >
> > Cc: Andreas Herrmann <herrmann.der.user@googlemail.com>
> > Signed-off-by: Andreas Herrmann <andreas.herrmann@calxeda.com>
> > ---
> > drivers/iommu/arm-smmu.c | 45
> > +++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 45 insertions(+)
> >
> > diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index
> > 0b97d03..bc81dd0 100644
> > --- a/drivers/iommu/arm-smmu.c
> > +++ b/drivers/iommu/arm-smmu.c
> > @@ -46,6 +46,7 @@
> > #include <linux/amba/bus.h>
> >
> > #include <asm/pgalloc.h>
> > +#include <asm/dma-iommu.h>
> >
> > /* Driver options */
> > #define ARM_SMMU_OPT_ISOLATE_DEVICES (1 << 0)
> > @@ -1964,6 +1965,48 @@ static int arm_smmu_device_remove(struct
> > platform_device *pdev)
> > return 0;
> > }
> >
> > +static int arm_smmu_device_notifier(struct notifier_block *nb,
> > + unsigned long action, void *data)
> > +{
> > + struct device *dev = data;
> > + struct dma_iommu_mapping *mapping;
> > + struct arm_smmu_device *smmu;
> > + int ret;
> > +
> > + switch (action) {
> > + case BUS_NOTIFY_BIND_DRIVER:
> > +
> > + arm_smmu_add_device(dev);
> [Sethi Varun-B16395] This would have already happened by virtue of the add_device iommu_ops.
You are right. That call is there for no good reason.
> > + smmu = dev->archdata.iommu;
> > + if (!smmu || !(smmu->options & ARM_SMMU_OPT_ISOLATE_DEVICES))
> > + break;
> > +
> > + mapping = arm_iommu_create_mapping(&platform_bus_type,
> > + 0, SZ_128M, 0);
> > + if (IS_ERR(mapping)) {
> > + ret = PTR_ERR(mapping);
> > + dev_info(dev, "arm_iommu_create_mapping failed\n");
> > + break;
> > + }
> > +
> > + ret = arm_iommu_attach_device(dev, mapping);
> > + if (ret < 0) {
> > + dev_info(dev, "arm_iommu_attach_device failed\n");
> > + arm_iommu_release_mapping(mapping);
> > + }
> > +
> > + break;
> > + default:
> > + break;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +static struct notifier_block device_nb = {
> > + .notifier_call = arm_smmu_device_notifier, };
> > +
> > #ifdef CONFIG_OF
> > static struct of_device_id arm_smmu_of_match[] = {
> > { .compatible = "arm,smmu-v1", },
> > @@ -2000,6 +2043,8 @@ static int __init arm_smmu_init(void)
> > if (!iommu_present(&amba_bustype))
> > bus_set_iommu(&amba_bustype, &arm_smmu_ops);
> >
> > + bus_register_notifier(&platform_bus_type, &device_nb);
> > +
> [Sethi Varun-B16395] Notifier was already registered for the
> platform bus via bus_set_iommu. You can actually register a iommu
> group (once iommu group gets created) notifier
> (iommu_group_register_notifier) and listen for the
> IOMMU_GROUP_NOTIFY_BIND_DRIVER event.
Sounds reasonable.
So far the driver didn't care about iommu_groups. But there is already
a patch "iommu/arm-smmu: add devices attached to the SMMU to an IOMMU
group" pending in Will's iommu/devel branch that fixes this.
I'll adapt my patch to use iommu_group notifier instead of bus
notifier.
Thanks for your review!
Andreas
next prev parent reply other threads:[~2014-01-20 21:29 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-16 12:44 [PATCH v4 0/11] iommu/arm-smmu: Misc modifications to support SMMUs on Calxeda ECX-2000 Andreas Herrmann
2014-01-16 12:44 ` [PATCH 01/11] iommu/arm-smmu: Introduce driver option handling Andreas Herrmann
2014-01-22 11:51 ` Will Deacon
2014-01-23 20:16 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 02/11] iommu/arm-smmu: Introduce bus notifier block Andreas Herrmann
2014-01-18 20:59 ` Varun Sethi
2014-01-20 21:29 ` Andreas Herrmann [this message]
2014-01-20 21:53 ` [PATCH v2 02/11] iommu/arm-smmu: Introduce iommu_group " Andreas Herrmann
2014-01-20 21:56 ` Andreas Herrmann
2014-01-20 22:28 ` [PATCH v3 " Andreas Herrmann
2014-01-21 17:48 ` Varun Sethi
2014-01-22 12:25 ` Will Deacon
2014-01-22 13:14 ` Varun Sethi
2014-01-22 13:40 ` Will Deacon
2014-01-22 13:54 ` Varun Sethi
2014-01-22 15:33 ` Will Deacon
2014-01-22 19:07 ` Varun Sethi
2014-01-23 19:57 ` Andreas Herrmann
2014-01-28 11:00 ` Varun Sethi
2014-01-29 14:14 ` Andreas Herrmann
2014-01-29 19:19 ` Varun Sethi
2014-01-23 19:24 ` Andreas Herrmann
2014-01-24 9:48 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 03/11] iommu/arm-smmu: Support buggy implementation where all config accesses are secure Andreas Herrmann
2014-01-16 12:44 ` [PATCH 04/11] iommu/arm-smmu: Introduce automatic stream-id-masking Andreas Herrmann
2014-01-22 15:26 ` Will Deacon
2014-01-22 20:15 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 05/11] iommu/arm-smmu: Check for duplicate stream IDs when registering master devices Andreas Herrmann
2014-01-22 15:53 ` Will Deacon
2014-01-23 21:17 ` Andreas Herrmann
2014-01-16 12:44 ` [PATCH 06/11] documentation/iommu: Update description of ARM System MMU binding Andreas Herrmann
2014-01-16 14:31 ` Rob Herring
2014-01-16 12:44 ` [PATCH 07/11] iommu/arm-smmu: Set MAX_MASTER_STREAMIDS to MAX_PHANDLE_ARGS Andreas Herrmann
2014-01-16 12:44 ` [PATCH 08/11] of: Increase MAX_PHANDLE_ARGS Andreas Herrmann
2014-01-16 14:25 ` Rob Herring
2014-01-17 11:00 ` Andreas Herrmann
2014-01-17 11:08 ` [PATCH v2 " Andreas Herrmann
2014-01-29 16:11 ` Suravee Suthikulanit
[not found] ` < CAL_JsqLhzp5jUJPA91rNkQ07kCDYCDZLxw8LxxFEVP9b12e1Jw@mail.gmail.com>
2014-01-29 16:57 ` Rob Herring
2014-01-29 16:59 ` Suravee Suthikulanit
2014-01-29 17:16 ` Andreas Herrmann
2014-01-29 17:26 ` Suravee Suthikulanit
2014-01-29 17:29 ` Will Deacon
2014-01-29 17:57 ` Suravee Suthikulanit
2014-01-29 18:03 ` Will Deacon
2014-01-30 22:53 ` Suravee Suthikulanit
2014-01-31 0:18 ` Will Deacon
2014-01-30 17:45 ` Andreas Herrmann
2014-01-31 16:24 ` Rob Herring
2014-02-03 16:44 ` Will Deacon
2014-02-04 17:33 ` Grant Likely
2014-02-04 17:36 ` Grant Likely
2014-01-16 12:44 ` [PATCH 09/11] ARM: dts: Add nodes for SMMUs on Calxeda ECX-2000 Andreas Herrmann
2014-01-16 14:30 ` Rob Herring
2014-01-17 11:01 ` Andreas Herrmann
2014-01-17 11:16 ` [PATCH v2 " Andreas Herrmann
2014-01-16 12:44 ` [PATCH 10/11] arm: dma-mapping: Add additional parameters to arm_iommu_create_mapping Andreas Herrmann
2014-01-22 16:01 ` Will Deacon
2014-01-16 12:44 ` [PATCH 11/11] arm: dma-mapping: Add support to extend DMA IOMMU mappings Andreas Herrmann
2014-01-22 16:10 ` Will Deacon
2014-01-23 21:50 ` Andreas Herrmann
2014-01-29 10:57 ` Marek Szyprowski
2014-01-29 11:05 ` Will Deacon
2014-01-29 14:40 ` Andreas Herrmann
2014-01-30 8:28 ` Marek Szyprowski
2014-01-30 8:44 ` Andreas Herrmann
2014-01-31 17:23 ` [PATCH] " Andreas Herrmann
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=20140120212908.GF3471@alberich \
--to=andreas.herrmann@calxeda.com \
--cc=linux-arm-kernel@lists.infradead.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