On Thu, Mar 11, 2021 at 03:06:25PM +0300, Dmitry Osipenko wrote: > 11.03.2021 01:17, Nicolin Chen пишет: > > On Wed, Mar 10, 2021 at 11:22:57PM +0300, Dmitry Osipenko wrote: > >> 10.03.2021 22:13, Dmitry Osipenko пишет: > >>> I found that this patch introduced a serious regression on Tegra30 using > >>> today's linux-next. Tegra30 has two 3d h/w blocks connected in SLI and > >>> only one of the blocks is now attached to IOMMU domain, meaning that GPU > >>> is unusable now. All 3d, 2d and display devices share the same "DRM" > >>> group on Tegra30. > >>> > >>> Nicolin, please let me know if have any suggestions. I may take a closer > >>> look a day later, for now I'll just revert this patch locally. Thanks in > >>> advance. > >>> > >> > >> Actually, this was easy to fix: > >> > >> diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c > >> index 97eb62f667d2..639d5ceab60b 100644 > >> --- a/drivers/iommu/tegra-smmu.c > >> +++ b/drivers/iommu/tegra-smmu.c > >> @@ -853,8 +853,6 @@ static struct iommu_device > >> *tegra_smmu_probe_device(struct device *dev) > >> > >> if (err < 0) > >> return ERR_PTR(err); > >> - > >> - break; > > > > Hmm..I don't understand why this "break" causes problems on Tegra30. > > The older versions that used _find()+configure() had it also, e.g.: > > https://elixir.bootlin.com/linux/v5.9.16/source/drivers/iommu/tegra-smmu.c#L760 > > > > Dmitry, do you have any idea? > > > > The older variant of tegra_smmu_attach_dev() didn't use fwspec [1], that > makes the difference. In other words, the older variant of > tegra_smmu_probe_device() was already buggy, but the bug was masked by > the tegra_smmu_attach_dev() that didn't use the fwspec. > > [1] > https://elixir.bootlin.com/linux/v5.10.22/source/drivers/iommu/tegra-smmu.c#L476 Hmm...would you mind submitting a fix from your side? I think it'd be more appropriate to do so, as you can definitely write a better commit message than I can for this bug. Thanks!