Commit c64738e9 authored by Thierry Reding's avatar Thierry Reding Committed by Krzysztof Kozlowski

memory: tegra: Make per-SoC setup more generic

The current per-SoC setup code runs at a fairly arbitrary point during
probe, thereby making it less flexible for other SoC generations. Move
the call around slightly (after only the very basic, common setup that
applies to all SoC generations has been performed), which will allow
it to be used for other implementations.
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/20210602163302.120041-6-thierry.reding@gmail.comSigned-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
parent 5c9016f0
...@@ -784,6 +784,14 @@ static int tegra_mc_probe(struct platform_device *pdev) ...@@ -784,6 +784,14 @@ static int tegra_mc_probe(struct platform_device *pdev)
return PTR_ERR(mc->clk); return PTR_ERR(mc->clk);
} }
mc->debugfs.root = debugfs_create_dir("mc", NULL);
if (mc->soc->ops && mc->soc->ops->probe) {
err = mc->soc->ops->probe(mc);
if (err < 0)
return err;
}
#ifdef CONFIG_ARCH_TEGRA_2x_SOC #ifdef CONFIG_ARCH_TEGRA_2x_SOC
if (mc->soc == &tegra20_mc_soc) { if (mc->soc == &tegra20_mc_soc) {
isr = tegra20_mc_irq; isr = tegra20_mc_irq;
...@@ -827,15 +835,6 @@ static int tegra_mc_probe(struct platform_device *pdev) ...@@ -827,15 +835,6 @@ static int tegra_mc_probe(struct platform_device *pdev)
return err; return err;
} }
mc->debugfs.root = debugfs_create_dir("mc", NULL);
if (mc->soc->ops && mc->soc->ops->init) {
err = mc->soc->ops->init(mc);
if (err < 0)
dev_err(&pdev->dev, "failed to initialize SoC driver: %d\n",
err);
}
err = tegra_mc_reset_setup(mc); err = tegra_mc_reset_setup(mc);
if (err < 0) if (err < 0)
dev_err(&pdev->dev, "failed to register reset controller: %d\n", dev_err(&pdev->dev, "failed to register reset controller: %d\n",
......
...@@ -679,7 +679,7 @@ static int tegra20_mc_stats_show(struct seq_file *s, void *unused) ...@@ -679,7 +679,7 @@ static int tegra20_mc_stats_show(struct seq_file *s, void *unused)
return 0; return 0;
} }
static int tegra20_mc_init(struct tegra_mc *mc) static int tegra20_mc_probe(struct tegra_mc *mc)
{ {
debugfs_create_devm_seqfile(mc->dev, "stats", mc->debugfs.root, debugfs_create_devm_seqfile(mc->dev, "stats", mc->debugfs.root,
tegra20_mc_stats_show); tegra20_mc_stats_show);
...@@ -714,7 +714,7 @@ static int tegra20_mc_resume(struct tegra_mc *mc) ...@@ -714,7 +714,7 @@ static int tegra20_mc_resume(struct tegra_mc *mc)
} }
static const struct tegra_mc_ops tegra20_mc_ops = { static const struct tegra_mc_ops tegra20_mc_ops = {
.init = tegra20_mc_init, .probe = tegra20_mc_probe,
.suspend = tegra20_mc_suspend, .suspend = tegra20_mc_suspend,
.resume = tegra20_mc_resume, .resume = tegra20_mc_resume,
}; };
......
...@@ -170,7 +170,11 @@ struct tegra_mc_icc_ops { ...@@ -170,7 +170,11 @@ struct tegra_mc_icc_ops {
}; };
struct tegra_mc_ops { struct tegra_mc_ops {
int (*init)(struct tegra_mc *mc); /*
* @probe: Callback to set up SoC-specific bits of the memory controller. This is called
* after basic, common set up that is done by the SoC-agnostic bits.
*/
int (*probe)(struct tegra_mc *mc);
int (*suspend)(struct tegra_mc *mc); int (*suspend)(struct tegra_mc *mc);
int (*resume)(struct tegra_mc *mc); int (*resume)(struct tegra_mc *mc);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment