Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

memory: tegra: Register SMMU after MC driver became ready

Memory Controller driver invokes SMMU driver registration and MC's
registers mapping is shared with SMMU. This mapping goes away if MC
driver probing fails after SMMU registration.

Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>

authored by

Dmitry Osipenko and committed by
Thierry Reding
45a81df0 273d7600

+9 -9
+9 -9
drivers/memory/tegra/mc.c
··· 672 672 return err; 673 673 } 674 674 675 - if (IS_ENABLED(CONFIG_TEGRA_IOMMU_SMMU)) { 676 - mc->smmu = tegra_smmu_probe(&pdev->dev, mc->soc->smmu, mc); 677 - if (IS_ERR(mc->smmu)) { 678 - dev_err(&pdev->dev, "failed to probe SMMU: %ld\n", 679 - PTR_ERR(mc->smmu)); 680 - return PTR_ERR(mc->smmu); 681 - } 682 - } 683 - 684 675 err = tegra_mc_reset_setup(mc); 685 676 if (err < 0) { 686 677 dev_err(&pdev->dev, "failed to register reset controller: %d\n", ··· 695 704 dev_err(&pdev->dev, "failed to request IRQ#%u: %d\n", mc->irq, 696 705 err); 697 706 return err; 707 + } 708 + 709 + if (IS_ENABLED(CONFIG_TEGRA_IOMMU_SMMU)) { 710 + mc->smmu = tegra_smmu_probe(&pdev->dev, mc->soc->smmu, mc); 711 + if (IS_ERR(mc->smmu)) { 712 + dev_err(&pdev->dev, "failed to probe SMMU: %ld\n", 713 + PTR_ERR(mc->smmu)); 714 + return PTR_ERR(mc->smmu); 715 + } 698 716 } 699 717 700 718 return 0;