From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: John Garry <john.garry@huawei.com>
Cc: Will Deacon <will.deacon@arm.com>,
Robin Murphy <robin.murphy@arm.com>,
Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>,
marc.zyngier@arm.com, sudeep.holla@arm.com,
hanjun.guo@linaro.org, gabriele.paoloni@huawei.com,
iommu@lists.linux-foundation.org,
linux-arm-kernel@lists.infradead.org, linux-acpi@vger.kernel.org,
devel@acpica.org, linuxarm@huawei.com, wangzhou1@hisilicon.com,
guohanjun@huawei.com
Subject: Re: [PATCH v6 3/3] iommu/arm-smmu-v3:Enable ACPI based HiSilicon erratum 161010801
Date: Thu, 7 Sep 2017 10:54:11 +0100 [thread overview]
Message-ID: <20170907095411.GA5057@red-moon> (raw)
In-Reply-To: <9a999fd4-3ade-f7a4-56d7-68ed731ff646@huawei.com>
On Tue, Sep 05, 2017 at 12:07:59PM +0100, John Garry wrote:
> >>
> >>Hi Will, Lorenzo, Robin,
> >>
> >>I have created the patch to add DT support for this erratum.
> >>However, currently I have only added support for pci-based devices.
> >>I'm a bit stumped on how to add platform device support, or if we
> >>should also add support at all. And I would rather ask before
> >>sending the patches.
> >>
> >>The specific issue is that I know of no platform device with an ITS
> >>msi-parent which we would want reserve, i.e. do not translate msi.
> >>And, if there were, how to do it.
> >>
> >>The only platform devices I know off with msi ITS parents are SMMUv3
> >>and mbigen. For mbigen, the msi are not translated. Actually, as I
> >>see under IORT solution, for mbigen we don't reserve the hw msi
> >>region as the SMMUv3 does not have an ID mapping. And we have no
> >>equivalent ID mapping property for DT SMMUv3, so cannot create an
> >>equivalent check.
> >>
> >>So here is how the DT iommu get reserved region function with only
> >>pci device support looks:
> >>
> >>/**
> >> * of_iommu_its_get_resv_regions - Reserved region driver helper
> >> * @dev: Device from iommu_get_resv_regions()
> >> * @list: Reserved region list from iommu_get_resv_regions()
> >> *
> >> * Returns: Number of reserved regions on success(0 if no associated ITS),
> >> * appropriate error value otherwise.
> >> */
> >>int of_iommu_its_get_resv_regions(struct device *dev, struct
> >>list_head *head)
> >>{
> >> struct device_node *of_node = NULL;
> >> struct device *parent_dev;
> >> const __be32 *msi_map;
> >> int num_mappings, i, err, len, resv = 0;
> >>
> >> /* walk up to find the parent with a msi-map property */
> >> for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent) {
> >> if (!parent_dev->of_node)
> >> continue;
> >>
> >> /*
> >> * Current logic to reserve ITS regions for only PCI root
> >> * complex.
> >> */
> >> msi_map = of_get_property(parent_dev->of_node, "msi-map", &len);
> >> if (msi_map) {
> >> of_node = parent_dev->of_node;
> >> break;
> >> }
> >> }
> >>
> >> if (!of_node)
> >> return 0;
> >>
> >> num_mappings = of_count_phandle_with_args(of_node, "msi-map",
> >>NULL) / 4;
> >>
> >> for (i = 0; i < num_mappings; i++) {
> >> int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
> >> struct iommu_resv_region *region;
> >> struct device_node *msi_node;
> >> struct resource resource;
> >> u32 phandle;
> >>
> >> phandle = be32_to_cpup(msi_map + 1);
> >> msi_node = of_find_node_by_phandle(phandle);
> >> if (!msi_node)
> >> return -ENODEV;
> >>
> >> /*
> >> * There may be different types of msi-controller, so check
> >> * for ITS.
> >> */
> >> if (!of_device_is_compatible(msi_node, "arm,gic-v3-its")) {
> >> of_node_put(msi_node);
> >> continue;
> >> }
> >>
> >> err = of_address_to_resource(msi_node, 0, &resource);
> >>
> >> of_node_put(msi_node);
> >> if (err)
> >> return err;
> >>
> >> region = iommu_alloc_resv_region(resource.start, SZ_128K, prot,
> >> IOMMU_RESV_MSI);
> >> if (region) {
> >> list_add_tail(®ion->list, head);
> >> resv++;
> >> }
> >> }
> >>
> >> return (resv == num_mappings) ? resv : -ENODEV;
> >>}
> >>
> >>Any feedback is appreciated.
> >
> >Hi John,
> >
> >I appreciate it is not trivial to make the code generic, part of the
> >snippet above can be shared between ACPI/IORT and OF, the only sticking
> >point is probably the "compatible" string that has to be parameterized
> >since having this code in generic IOMMU layer is a bit horrible to
> >have it ITS specific (and it is a problem that was existing already
> >in the original patch with the hardcoded ITS node type or function
> >name).
>
> Hi Lorenzo,
>
> Agreed, checking the ITS compatible string in IOMMU code is not
> nice. However the function is just trying to replicate our ACPI
> version, which calls IORT code directly, and this is ITS specific.
> Anyway, we can make it generic.
>
> >
> >To sum it up the hook:
> >
> >- has to be called from SMMU driver in a firmware agnostic way
>
> ok
>
> >- somehow it has to ascertain which interrupt controller "compatible"
> > (which in IORT is a node type) to match against so the hook has to
> > take an id of sorts
>
> OK
>
> I will mention 2 more points after discussion on OF solution with Shameer:
> - for platform device, we can add suppport by checking for the
> devices msi-parent property
> - for both pci and platform device, we should check device rid for
> msi-controller also, like IORT solution
>
> BTW, even though merge window is open, we would like to send some
> solution to the lists this week, so any outstanding topics can
> potentially be discussed at LPC next week. Let me know if you're
> unhappy about this.
I am happy to find a way forward for this next week, posting patches
this week would not help much with the merge window ongoing, I think
it is better to try to find a way forward and post the resulting code
after reaching an agreement, at -rc1 (or right after the IOMMU PR is
merged).
Thanks,
Lorenzo
prev parent reply other threads:[~2017-09-07 9:54 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-09 10:07 [PATCH v6 0/3] iommu/smmu-v3: Workaround for hisilicon 161010801 erratum(reserve HW MSI) Shameer Kolothum
2017-08-09 10:07 ` [PATCH v6 1/3] ACPI/IORT: Add ITS address regions reservation helper Shameer Kolothum
2017-08-09 10:07 ` [PATCH v6 2/3] iommu/dma: Add a helper function to reserve HW MSI address regions for IOMMU drivers Shameer Kolothum
2017-08-09 10:07 ` [PATCH v6 3/3] iommu/arm-smmu-v3:Enable ACPI based HiSilicon erratum 161010801 Shameer Kolothum
[not found] ` <20170809100715.870516-4-shameerali.kolothum.thodi-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-08-10 17:27 ` Will Deacon
[not found] ` <20170810172723.GD9980-5wv7dgnIgG8@public.gmane.org>
2017-08-10 17:52 ` Shameerali Kolothum Thodi
2017-08-23 13:17 ` John Garry
2017-08-23 13:24 ` Will Deacon
2017-08-23 14:29 ` John Garry
2017-08-23 16:43 ` Will Deacon
2017-08-23 16:55 ` John Garry
2017-08-24 14:35 ` Will Deacon
2017-08-24 15:01 ` John Garry
2017-09-01 8:46 ` John Garry
[not found] ` <47b8bf19-abad-3503-2e1c-b9d1304a157e-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-09-04 17:09 ` Lorenzo Pieralisi
2017-09-05 11:07 ` John Garry
2017-09-07 9:54 ` Lorenzo Pieralisi [this message]
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=20170907095411.GA5057@red-moon \
--to=lorenzo.pieralisi@arm.com \
--cc=devel@acpica.org \
--cc=gabriele.paoloni@huawei.com \
--cc=guohanjun@huawei.com \
--cc=hanjun.guo@linaro.org \
--cc=iommu@lists.linux-foundation.org \
--cc=john.garry@huawei.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linuxarm@huawei.com \
--cc=marc.zyngier@arm.com \
--cc=robin.murphy@arm.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=sudeep.holla@arm.com \
--cc=wangzhou1@hisilicon.com \
--cc=will.deacon@arm.com \
/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;
as well as URLs for NNTP newsgroup(s).