From: Nicolin Chen <nicoleotsuka@gmail.com>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org,
krzk@kernel.org, jonathanh@nvidia.com,
linux-tegra@vger.kernel.org, Dmitry Osipenko <digetx@gmail.com>
Subject: Re: [PATCH v3 2/3] iommu/tegra-smmu: Rework .probe_device and .attach_dev
Date: Thu, 1 Oct 2020 03:33:19 -0700 [thread overview]
Message-ID: <20201001103318.GA1272@Asurada> (raw)
In-Reply-To: <20201001095152.GD3919720@ulmo>
On Thu, Oct 01, 2020 at 11:51:52AM +0200, Thierry Reding wrote:
> > > >> ...
> > > >>>> It looks to me like the only reason why you need this new global API is
> > > >>>> because PCI devices may not have a device tree node with a phandle to
> > > >>>> the IOMMU. However, SMMU support for PCI will only be enabled if the
> > > >>>> root complex has an iommus property, right? In that case, can't we
> > > >>>> simply do something like this:
> > > >>>>
> > > >>>> if (dev_is_pci(dev))
> > > >>>> np = find_host_bridge(dev)->of_node;
> > > >>>> else
> > > >>>> np = dev->of_node;
> > > >>>>
> > > >>>> ? I'm not sure exactly what find_host_bridge() is called, but I'm pretty
> > > >>>> sure that exists.
> > @@ -814,12 +815,15 @@ static struct tegra_smmu *tegra_smmu_find(struct device_node *np)
> > }
> >
> > static int tegra_smmu_configure(struct tegra_smmu *smmu, struct device *dev,
> > - struct of_phandle_args *args)
> > + struct of_phandle_args *args, struct fwnode_handle *fwnode)
> > {
> > const struct iommu_ops *ops = smmu->iommu.ops;
> > int err;
> >
> > - err = iommu_fwspec_init(dev, &dev->of_node->fwnode, ops);
> > + if (!fwnode)
> > + return -ENOENT;
> > +
> > + err = iommu_fwspec_init(dev, fwnode, ops);
> > if (err < 0) {
> > dev_err(dev, "failed to initialize fwspec: %d\n", err);
> > return err;
> > @@ -835,6 +839,19 @@ static int tegra_smmu_configure(struct tegra_smmu *smmu, struct device *dev,
> > return 0;
> > }
> >
> > +static struct device_node *tegra_smmu_find_pci_np(struct pci_dev *pci_dev)
> > +{
> > + struct pci_bus *bus = pci_dev->bus;
> > + struct device *dev = &bus->dev;
> > +
> > + while (!of_property_read_bool(dev->of_node, "iommus") && bus->parent) {
> > + dev = &bus->parent->dev;
> > + bus = bus->parent;
> > + }
> > +
> > + return dev->of_node;
> > +}
>
> This seems like it's the equivalent of pci_get_host_bridge_device(). Can
> you use that instead? I think you might use the parent of the host
> bridge that's returned from that function, though.
I noticed that one when looking up one of the of_ functions, yet
also found that this pci_get_host_bridge_device() is privated by
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/drivers/pci/pci.h?id=975e1ac173058b8710e5979e97fc1397233301f3
Would PCI folks be that willing to (allow to) revert it?
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
WARNING: multiple messages have this Message-ID (diff)
From: Nicolin Chen <nicoleotsuka@gmail.com>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: Dmitry Osipenko <digetx@gmail.com>,
joro@8bytes.org, krzk@kernel.org, vdumpa@nvidia.com,
jonathanh@nvidia.com, linux-tegra@vger.kernel.org,
iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 2/3] iommu/tegra-smmu: Rework .probe_device and .attach_dev
Date: Thu, 1 Oct 2020 03:33:19 -0700 [thread overview]
Message-ID: <20201001103318.GA1272@Asurada> (raw)
In-Reply-To: <20201001095152.GD3919720@ulmo>
On Thu, Oct 01, 2020 at 11:51:52AM +0200, Thierry Reding wrote:
> > > >> ...
> > > >>>> It looks to me like the only reason why you need this new global API is
> > > >>>> because PCI devices may not have a device tree node with a phandle to
> > > >>>> the IOMMU. However, SMMU support for PCI will only be enabled if the
> > > >>>> root complex has an iommus property, right? In that case, can't we
> > > >>>> simply do something like this:
> > > >>>>
> > > >>>> if (dev_is_pci(dev))
> > > >>>> np = find_host_bridge(dev)->of_node;
> > > >>>> else
> > > >>>> np = dev->of_node;
> > > >>>>
> > > >>>> ? I'm not sure exactly what find_host_bridge() is called, but I'm pretty
> > > >>>> sure that exists.
> > @@ -814,12 +815,15 @@ static struct tegra_smmu *tegra_smmu_find(struct device_node *np)
> > }
> >
> > static int tegra_smmu_configure(struct tegra_smmu *smmu, struct device *dev,
> > - struct of_phandle_args *args)
> > + struct of_phandle_args *args, struct fwnode_handle *fwnode)
> > {
> > const struct iommu_ops *ops = smmu->iommu.ops;
> > int err;
> >
> > - err = iommu_fwspec_init(dev, &dev->of_node->fwnode, ops);
> > + if (!fwnode)
> > + return -ENOENT;
> > +
> > + err = iommu_fwspec_init(dev, fwnode, ops);
> > if (err < 0) {
> > dev_err(dev, "failed to initialize fwspec: %d\n", err);
> > return err;
> > @@ -835,6 +839,19 @@ static int tegra_smmu_configure(struct tegra_smmu *smmu, struct device *dev,
> > return 0;
> > }
> >
> > +static struct device_node *tegra_smmu_find_pci_np(struct pci_dev *pci_dev)
> > +{
> > + struct pci_bus *bus = pci_dev->bus;
> > + struct device *dev = &bus->dev;
> > +
> > + while (!of_property_read_bool(dev->of_node, "iommus") && bus->parent) {
> > + dev = &bus->parent->dev;
> > + bus = bus->parent;
> > + }
> > +
> > + return dev->of_node;
> > +}
>
> This seems like it's the equivalent of pci_get_host_bridge_device(). Can
> you use that instead? I think you might use the parent of the host
> bridge that's returned from that function, though.
I noticed that one when looking up one of the of_ functions, yet
also found that this pci_get_host_bridge_device() is privated by
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/drivers/pci/pci.h?id=975e1ac173058b8710e5979e97fc1397233301f3
Would PCI folks be that willing to (allow to) revert it?
next prev parent reply other threads:[~2020-10-01 10:33 UTC|newest]
Thread overview: 132+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-30 8:42 [PATCH v3 0/3] iommu/tegra-smmu: Add PCI support Nicolin Chen
2020-09-30 8:42 ` Nicolin Chen
2020-09-30 8:42 ` [PATCH v3 1/3] memory: tegra: Add devm_tegra_get_memory_controller() Nicolin Chen
2020-09-30 8:42 ` Nicolin Chen
2020-09-30 9:07 ` Krzysztof Kozlowski
2020-09-30 9:07 ` Krzysztof Kozlowski
2020-09-30 9:41 ` Nicolin Chen
2020-09-30 9:41 ` Nicolin Chen
2020-09-30 10:27 ` Krzysztof Kozlowski
2020-09-30 10:27 ` Krzysztof Kozlowski
2020-09-30 14:41 ` Dmitry Osipenko
2020-09-30 14:41 ` Dmitry Osipenko
2020-09-30 14:45 ` Krzysztof Kozlowski
2020-09-30 14:45 ` Krzysztof Kozlowski
2020-09-30 15:22 ` Dmitry Osipenko
2020-09-30 15:22 ` Dmitry Osipenko
2020-09-30 15:23 ` Thierry Reding
2020-09-30 15:23 ` Thierry Reding
2020-09-30 15:27 ` Dmitry Osipenko
2020-09-30 15:27 ` Dmitry Osipenko
2020-09-30 15:53 ` Dmitry Osipenko
2020-09-30 15:53 ` Dmitry Osipenko
2020-09-30 16:03 ` Thierry Reding
2020-09-30 16:03 ` Thierry Reding
2020-09-30 16:06 ` Dmitry Osipenko
2020-09-30 16:06 ` Dmitry Osipenko
2020-09-30 16:15 ` Thierry Reding
2020-09-30 16:15 ` Thierry Reding
2020-09-30 16:26 ` Dmitry Osipenko
2020-09-30 16:26 ` Dmitry Osipenko
2020-09-30 16:38 ` Thierry Reding
2020-09-30 16:38 ` Thierry Reding
2020-09-30 17:32 ` Dmitry Osipenko
2020-09-30 17:32 ` Dmitry Osipenko
2020-09-30 8:42 ` [PATCH v3 2/3] iommu/tegra-smmu: Rework .probe_device and .attach_dev Nicolin Chen
2020-09-30 8:42 ` Nicolin Chen
2020-09-30 9:21 ` Krzysztof Kozlowski
2020-09-30 9:21 ` Krzysztof Kozlowski
2020-09-30 9:40 ` Nicolin Chen
2020-09-30 9:40 ` Nicolin Chen
2020-09-30 10:19 ` Krzysztof Kozlowski
2020-09-30 10:19 ` Krzysztof Kozlowski
2020-09-30 14:41 ` Dmitry Osipenko
2020-09-30 14:41 ` Dmitry Osipenko
2020-09-30 15:09 ` Dmitry Osipenko
2020-09-30 15:09 ` Dmitry Osipenko
2020-09-30 20:51 ` Nicolin Chen
2020-09-30 20:51 ` Nicolin Chen
2020-09-30 15:31 ` Thierry Reding
2020-09-30 15:31 ` Thierry Reding
2020-09-30 15:36 ` Dmitry Osipenko
2020-09-30 15:36 ` Dmitry Osipenko
2020-09-30 16:06 ` Thierry Reding
2020-09-30 16:06 ` Thierry Reding
2020-09-30 16:25 ` Dmitry Osipenko
2020-09-30 16:25 ` Dmitry Osipenko
2020-09-30 16:47 ` Thierry Reding
2020-09-30 16:47 ` Thierry Reding
2020-10-01 2:11 ` Dmitry Osipenko
2020-10-01 2:11 ` Dmitry Osipenko
2020-10-01 7:58 ` Thierry Reding
2020-10-01 7:58 ` Thierry Reding
2020-10-01 19:04 ` Dmitry Osipenko
2020-10-01 19:04 ` Dmitry Osipenko
2020-10-05 9:16 ` Thierry Reding
2020-10-05 9:16 ` Thierry Reding
2020-10-05 9:38 ` Dmitry Osipenko
2020-10-05 9:38 ` Dmitry Osipenko
2020-10-05 10:27 ` Thierry Reding
2020-10-05 10:27 ` Thierry Reding
2020-09-30 16:10 ` Thierry Reding
2020-09-30 16:10 ` Thierry Reding
2020-09-30 16:29 ` Dmitry Osipenko
2020-09-30 16:29 ` Dmitry Osipenko
2020-10-01 7:59 ` Thierry Reding
2020-10-01 7:59 ` Thierry Reding
2020-09-30 20:36 ` Nicolin Chen
2020-09-30 20:36 ` Nicolin Chen
2020-09-30 21:24 ` Dmitry Osipenko
2020-09-30 21:24 ` Dmitry Osipenko
2020-09-30 21:32 ` Nicolin Chen
2020-09-30 21:32 ` Nicolin Chen
2020-09-30 21:56 ` Dmitry Osipenko
2020-09-30 21:56 ` Dmitry Osipenko
2020-10-01 1:26 ` Nicolin Chen
2020-10-01 1:26 ` Nicolin Chen
2020-10-01 2:06 ` Dmitry Osipenko
2020-10-01 2:06 ` Dmitry Osipenko
2020-10-01 2:48 ` Nicolin Chen
2020-10-01 2:48 ` Nicolin Chen
2020-10-01 4:04 ` Dmitry Osipenko
2020-10-01 4:04 ` Dmitry Osipenko
2020-10-01 10:23 ` Thierry Reding
2020-10-01 10:23 ` Thierry Reding
2020-10-01 11:04 ` Nicolin Chen
2020-10-01 11:04 ` Nicolin Chen
2020-10-01 20:33 ` Dmitry Osipenko
2020-10-01 20:33 ` Dmitry Osipenko
2020-10-02 1:07 ` Nicolin Chen
2020-10-02 1:07 ` Nicolin Chen
2020-10-02 1:55 ` Dmitry Osipenko
2020-10-02 1:55 ` Dmitry Osipenko
2020-10-02 2:54 ` Nicolin Chen
2020-10-02 2:54 ` Nicolin Chen
2020-10-05 7:24 ` Thierry Reding
2020-10-05 7:24 ` Thierry Reding
2020-10-05 7:13 ` Thierry Reding
2020-10-05 7:13 ` Thierry Reding
2020-10-05 8:14 ` Dmitry Osipenko
2020-10-05 8:14 ` Dmitry Osipenko
2020-10-05 9:31 ` Thierry Reding
2020-10-05 9:31 ` Thierry Reding
2020-10-01 9:54 ` Thierry Reding
2020-10-01 9:54 ` Thierry Reding
2020-10-01 9:51 ` Thierry Reding
2020-10-01 9:51 ` Thierry Reding
2020-10-01 10:33 ` Nicolin Chen [this message]
2020-10-01 10:33 ` Nicolin Chen
2020-10-01 10:42 ` Thierry Reding
2020-10-01 10:42 ` Thierry Reding
2020-10-01 9:47 ` Thierry Reding
2020-10-01 9:47 ` Thierry Reding
2020-10-01 10:46 ` Thierry Reding
2020-10-01 10:46 ` Thierry Reding
2020-10-02 1:29 ` Nicolin Chen
2020-10-02 1:29 ` Nicolin Chen
2020-09-30 8:42 ` [PATCH v3 3/3] iommu/tegra-smmu: Add PCI support Nicolin Chen
2020-09-30 8:42 ` Nicolin Chen
2020-09-30 14:53 ` Dmitry Osipenko
2020-09-30 14:53 ` Dmitry Osipenko
2020-09-30 20:03 ` Nicolin Chen
2020-09-30 20:03 ` Nicolin Chen
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=20201001103318.GA1272@Asurada \
--to=nicoleotsuka@gmail.com \
--cc=digetx@gmail.com \
--cc=iommu@lists.linux-foundation.org \
--cc=jonathanh@nvidia.com \
--cc=krzk@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=thierry.reding@gmail.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 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.