Re: [PATCH v3 2/3] iommu/tegra-smmu: Rework .probe_device and .attach_dev
From: Thierry Reding
Date: Wed Sep 30 2020 - 12:47:14 EST
On Wed, Sep 30, 2020 at 07:25:41PM +0300, Dmitry Osipenko wrote:
> 30.09.2020 19:06, Thierry Reding пишет:
> > On Wed, Sep 30, 2020 at 06:36:52PM +0300, Dmitry Osipenko wrote:
> >> I'...
> >>>> + struct tegra_mc *mc = devm_tegra_get_memory_controller(dev);
> >>>> + struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
> >>>
> >>> 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.
> >>>
> >>> Once we have that we can still iterate over the iommus property and do
> >>> not need to rely on this global variable.
> >>
> >> This sounds more complicated than the current variant.
> >>
> >> Secondly, I'm already about to use the new tegra_get_memory_controller()
> >> API for all the T20/30/124/210 EMC and devfreq drivers.
> >
> > Why do we need it there? They seem to work fine without it right now.
>
> All the Tegra30/124/210 EMC drivers are already duplicating that MC
> lookup code and only the recent T210 driver does it properly.
>
> > If it is required for new functionality, we can always make the dependent
> > on a DT reference via phandle without breaking any existing code.
>
> That's correct, it will be also needed for the new functionality as
> well, hence even more drivers will need to perform the MC lookup.
I don't have any issues with adding a helper if we need it from several
different locations. But the helper should be working off of a given
device and look up the device via the device tree node referenced by
phandle. We already have those phandles in place for the EMC devices,
and any other device that needs to interoperate with the MC should also
get such a reference.
> I don't quite understand why you're asking for the phandle reference,
> it's absolutely not needed for the MC lookup and won't work for the
We need that phandle in order to establish a link between the devices.
Yes, you can probably do it without the phandle and just match by
compatible string. But we don't do that for other types of devices
either, right? For a display driver we reference the attached panel via
phandle, but we could also just look it up via name or absolute path or
some other heuristic. But a phandle is just a much more explicit way of
linking the devices, so why not use it?
> older DTs if DT change will be needed. Please give a detailed explanation.
New functionality doesn't have to work with older DTs.
Thierry
Attachment:
signature.asc
Description: PGP signature