All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Herrmann <andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
To: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
Cc: "iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org"
	<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
	Rob Herring <robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>
Subject: Re: [PATCH 7/9] iommu/arm-smmu: Add function that conditionally isolates all masters of all SMMUs
Date: Mon, 7 Oct 2013 17:42:27 +0200	[thread overview]
Message-ID: <20131007154227.GC2935@alberich> (raw)
In-Reply-To: <20130927130001.GF9520-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>

On Fri, Sep 27, 2013 at 09:00:01AM -0400, Will Deacon wrote:
> Hi Andreas,
> 
> On Thu, Sep 26, 2013 at 11:36:19PM +0100, Andreas Herrmann wrote:
> > (Depending on DT information and module parameters) 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 "linux,arm-smmu-isolate-devices" in a DT. If the property is
> > set for an SMMU node device isolation is performed.
> > 
> > Also introduce a module parameter:
> 
> Actually, I think I'd rather do away with the module paramater / command
> line option altogether in favour of DT.
> 
> > +extern struct platform_device *of_find_device_by_node(struct device_node *np);
> > +
> > +static int arm_smmu_isolate_devices(void)
> > +{
> > +	struct dma_iommu_mapping *mapping;
> > +	struct arm_smmu_device *smmu;
> > +	struct rb_node *rbn;
> > +	struct arm_smmu_master *master;
> > +	struct platform_device *pdev;
> > +	struct device *dev;
> > +	void __iomem *gr0_base;
> > +	u32 cr0;
> > +	int ret = 0;
> > +	size_t size;
> > +
> > +	list_for_each_entry(smmu, &arm_smmu_devices, list) {
> > +		if (arm_smmu_disable_isolation ||
> > +			(!(smmu->features & ARM_SMMU_FEAT_ISOLATE_DEVICES)
> > +				&& !arm_smmu_force_isolation))
> > +			continue;
> > +		rbn = rb_first(&smmu->masters);
> > +		while (rbn) {
> > +			master = container_of(rbn, struct arm_smmu_master, node);
> > +			pdev = of_find_device_by_node(master->of_node);
> > +			if (!pdev)
> > +				break;
> > +			dev = &pdev->dev;
> > +
> > +			size = (size_t) dev->coherent_dma_mask;
> > +			size = size ? : (unsigned long) dev->dma_mask;
> 
> Hmm, this could be *huge* with 64-bit capable DMA controllers (think LPAE).

Yes, agreed.
(And even for 32-bit DMA this requires a large bitmap_size for the
mapping.)

> Russell also has some pending dma mask cleanup, which might break some
> assumptions here:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2013-September/199397.html
> 
> (namely that we're offsetting everything from zero).

What do you think is a reasonable general value for the size of a
mapping? (Do we need a DT property to specify this?)

What about a size of 128 MB -- if I'm not mistaken this requires a
bitmap_size of 4K.


Andreas

WARNING: multiple messages have this Message-ID (diff)
From: andreas.herrmann@calxeda.com (Andreas Herrmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 7/9] iommu/arm-smmu: Add function that conditionally isolates all masters of all SMMUs
Date: Mon, 7 Oct 2013 17:42:27 +0200	[thread overview]
Message-ID: <20131007154227.GC2935@alberich> (raw)
In-Reply-To: <20130927130001.GF9520@mudshark.cambridge.arm.com>

On Fri, Sep 27, 2013 at 09:00:01AM -0400, Will Deacon wrote:
> Hi Andreas,
> 
> On Thu, Sep 26, 2013 at 11:36:19PM +0100, Andreas Herrmann wrote:
> > (Depending on DT information and module parameters) 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 "linux,arm-smmu-isolate-devices" in a DT. If the property is
> > set for an SMMU node device isolation is performed.
> > 
> > Also introduce a module parameter:
> 
> Actually, I think I'd rather do away with the module paramater / command
> line option altogether in favour of DT.
> 
> > +extern struct platform_device *of_find_device_by_node(struct device_node *np);
> > +
> > +static int arm_smmu_isolate_devices(void)
> > +{
> > +	struct dma_iommu_mapping *mapping;
> > +	struct arm_smmu_device *smmu;
> > +	struct rb_node *rbn;
> > +	struct arm_smmu_master *master;
> > +	struct platform_device *pdev;
> > +	struct device *dev;
> > +	void __iomem *gr0_base;
> > +	u32 cr0;
> > +	int ret = 0;
> > +	size_t size;
> > +
> > +	list_for_each_entry(smmu, &arm_smmu_devices, list) {
> > +		if (arm_smmu_disable_isolation ||
> > +			(!(smmu->features & ARM_SMMU_FEAT_ISOLATE_DEVICES)
> > +				&& !arm_smmu_force_isolation))
> > +			continue;
> > +		rbn = rb_first(&smmu->masters);
> > +		while (rbn) {
> > +			master = container_of(rbn, struct arm_smmu_master, node);
> > +			pdev = of_find_device_by_node(master->of_node);
> > +			if (!pdev)
> > +				break;
> > +			dev = &pdev->dev;
> > +
> > +			size = (size_t) dev->coherent_dma_mask;
> > +			size = size ? : (unsigned long) dev->dma_mask;
> 
> Hmm, this could be *huge* with 64-bit capable DMA controllers (think LPAE).

Yes, agreed.
(And even for 32-bit DMA this requires a large bitmap_size for the
mapping.)

> Russell also has some pending dma mask cleanup, which might break some
> assumptions here:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2013-September/199397.html
> 
> (namely that we're offsetting everything from zero).

What do you think is a reasonable general value for the size of a
mapping? (Do we need a DT property to specify this?)

What about a size of 128 MB -- if I'm not mistaken this requires a
bitmap_size of 4K.


Andreas

  parent reply	other threads:[~2013-10-07 15:42 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-26 22:36 [PATCH 0/9] arm-smmu: Misc changes/Calxeda ECX-2000 support Andreas Herrmann
2013-09-26 22:36 ` Andreas Herrmann
     [not found] ` <1380234982-1677-1-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-26 22:36   ` [PATCH 1/9] iommu/arm-smmu: Switch to arch_initcall for driver registration Andreas Herrmann
2013-09-26 22:36     ` Andreas Herrmann
     [not found]     ` <1380234982-1677-2-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-27  8:58       ` Will Deacon
2013-09-27  8:58         ` Will Deacon
2013-09-27  9:24         ` Andreas Herrmann
2013-09-27  9:24           ` Andreas Herrmann
2013-09-27 10:02           ` [PATCH] iommu/arm-smmu: Switch to subsys_initcall " Andreas Herrmann
2013-09-27 10:02             ` Andreas Herrmann
2013-09-26 22:36   ` [PATCH 2/9] iommu/arm-smmu: Calculate SMMU_CB_BASE from smmu register values Andreas Herrmann
2013-09-26 22:36     ` Andreas Herrmann
     [not found]     ` <1380234982-1677-3-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-27  9:51       ` Will Deacon
2013-09-27  9:51         ` Will Deacon
     [not found]         ` <20130927095157.GA9057-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-27 10:23           ` Andreas Herrmann
2013-09-27 10:23             ` Andreas Herrmann
2013-09-27 10:51             ` Will Deacon
2013-09-27 10:51               ` Will Deacon
     [not found]               ` <20130927105153.GG9057-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-27 11:05                 ` Andreas Herrmann
2013-09-27 11:05                   ` Andreas Herrmann
2013-09-27 11:08                   ` Will Deacon
2013-09-27 11:08                     ` Will Deacon
     [not found]                     ` <20130927110832.GC9520-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-27 14:33                       ` [PATCH] iommu/arm-smmu: Refine check for proper size of mapped region Andreas Herrmann
2013-09-27 14:33                         ` Andreas Herrmann
2013-09-26 22:36   ` [PATCH 3/9] ARM: dma-mapping: Always pass proper prot flags to iommu_map() Andreas Herrmann
2013-09-26 22:36     ` Andreas Herrmann
     [not found]     ` <1380234982-1677-4-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-27  8:35       ` Will Deacon
2013-09-27  8:35         ` Will Deacon
2013-09-30 13:40       ` Marek Szyprowski
2013-09-30 13:40         ` Marek Szyprowski
2013-09-26 22:36   ` [PATCH 4/9] iommu/arm-smmu: Check for num_context_irqs > 0 to avoid divide by zero exception Andreas Herrmann
2013-09-26 22:36     ` Andreas Herrmann
     [not found]     ` <1380234982-1677-5-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-27  8:41       ` Will Deacon
2013-09-27  8:41         ` Will Deacon
     [not found]         ` <20130927084154.GB8319-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-27  9:03           ` Andreas Herrmann
2013-09-27  9:03             ` Andreas Herrmann
2013-09-27 10:23             ` Will Deacon
2013-09-27 10:23               ` Will Deacon
     [not found]               ` <20130927102307.GE9057-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-27 10:39                 ` Andreas Herrmann
2013-09-27 10:39                   ` Andreas Herrmann
2013-09-27 10:48                   ` Will Deacon
2013-09-27 10:48                     ` Will Deacon
     [not found]                     ` <20130927104802.GF9057-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-27 11:07                       ` Andreas Herrmann
2013-09-27 11:07                         ` Andreas Herrmann
2013-09-27 14:30                         ` [PATCH] " Andreas Herrmann
2013-09-27 14:30                           ` Andreas Herrmann
2013-09-26 22:36   ` [PATCH 5/9] iommu/arm-smmu: Clear global and context bank fault status registers Andreas Herrmann
2013-09-26 22:36     ` Andreas Herrmann
     [not found]     ` <1380234982-1677-6-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-27  8:52       ` Will Deacon
2013-09-27  8:52         ` Will Deacon
     [not found]         ` <20130927085255.GC8319-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-30 13:54           ` Andreas Herrmann
2013-09-30 13:54             ` Andreas Herrmann
2013-09-30 13:56             ` [PATCH] " Andreas Herrmann
2013-09-30 13:56               ` Andreas Herrmann
2013-09-30 16:06               ` Will Deacon
2013-09-30 16:06                 ` Will Deacon
     [not found]                 ` <20130930160615.GG26036-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-30 17:17                   ` Andreas Herrmann
2013-09-30 17:17                     ` Andreas Herrmann
2013-09-30 18:30                     ` Will Deacon
2013-09-30 18:30                       ` Will Deacon
     [not found]                       ` <20130930183006.GK26036-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-30 21:06                         ` Andreas Herrmann
2013-09-30 21:06                           ` Andreas Herrmann
2013-09-26 22:36   ` [PATCH 6/9] iommu/arm-smmu: Support buggy implemenations where all config accesses are secure Andreas Herrmann
2013-09-26 22:36     ` Andreas Herrmann
     [not found]     ` <1380234982-1677-7-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-27 13:05       ` Will Deacon
2013-09-27 13:05         ` Will Deacon
     [not found]         ` <20130927130527.GH9520-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-27 13:48           ` Andreas Herrmann
2013-09-27 13:48             ` Andreas Herrmann
2013-09-26 22:36   ` [PATCH 7/9] iommu/arm-smmu: Add function that conditionally isolates all masters of all SMMUs Andreas Herrmann
2013-09-26 22:36     ` Andreas Herrmann
     [not found]     ` <1380234982-1677-8-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-27 13:00       ` Will Deacon
2013-09-27 13:00         ` Will Deacon
     [not found]         ` <20130927130001.GF9520-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-10-07 15:42           ` Andreas Herrmann [this message]
2013-10-07 15:42             ` Andreas Herrmann
2013-10-08 10:43             ` Will Deacon
2013-10-08 10:43               ` Will Deacon
2013-09-26 22:36   ` [PATCH 8/9] iommu/arm-smmu: Introduce a default fault handler Andreas Herrmann
2013-09-26 22:36     ` Andreas Herrmann
     [not found]     ` <1380234982-1677-9-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
2013-09-27 10:09       ` Will Deacon
2013-09-27 10:09         ` Will Deacon
     [not found]         ` <20130927100902.GD9057-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-09-27 10:45           ` Andreas Herrmann
2013-09-27 10:45             ` Andreas Herrmann
2013-09-27 21:22             ` [PATCH] iommu/arm-smmu: Print context fault information Andreas Herrmann
2013-09-27 21:22               ` Andreas Herrmann
2013-09-26 22:36   ` [PATCH 9/9] ARM: dts: Add nodes for SMMUs on Calxeda ECX-2000 Andreas Herrmann
2013-09-26 22:36     ` 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=20131007154227.GC2935@alberich \
    --to=andreas.herrmann-bsgfqqb8/dxbdgjk7y7tuq@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=robherring2-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.