soc/tegra: fuse: Add Tegra186 support
authorTimo Alho <talho@nvidia.com>
Mon, 6 Mar 2017 13:47:20 +0000 (15:47 +0200)
committerThierry Reding <treding@nvidia.com>
Wed, 13 Dec 2017 11:43:29 +0000 (12:43 +0100)
Tegra210 and Tegra186 are mostly compatible from a fuses point of view.
However, speedo support is implemented in the BPMP firmware, hence the
implementation needs to be skipped in the fuses driver.

Signed-off-by: Timo Alho <talho@nvidia.com>
Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>
[treding@nvidia.com: reword commit message]
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/soc/tegra/fuse/fuse-tegra.c
drivers/soc/tegra/fuse/fuse-tegra30.c
drivers/soc/tegra/fuse/fuse.h

index b7c552e3133ca2bde10d6699e235151f2b60db31..d7ccfee51b1a918bb9c2b3f9f44bc395ecd9fc92 100644 (file)
@@ -103,6 +103,9 @@ static struct tegra_fuse *fuse = &(struct tegra_fuse) {
 };
 
 static const struct of_device_id tegra_fuse_match[] = {
+#ifdef CONFIG_ARCH_TEGRA_186_SOC
+       { .compatible = "nvidia,tegra186-efuse", .data = &tegra186_fuse_soc },
+#endif
 #ifdef CONFIG_ARCH_TEGRA_210_SOC
        { .compatible = "nvidia,tegra210-efuse", .data = &tegra210_fuse_soc },
 #endif
index 882607bcaa6c1e667fa603bea322c9d1d62a5e72..497eb044095fe249c9875e117ff47017b247b624 100644 (file)
@@ -46,7 +46,8 @@
     defined(CONFIG_ARCH_TEGRA_114_SOC) || \
     defined(CONFIG_ARCH_TEGRA_124_SOC) || \
     defined(CONFIG_ARCH_TEGRA_132_SOC) || \
-    defined(CONFIG_ARCH_TEGRA_210_SOC)
+    defined(CONFIG_ARCH_TEGRA_210_SOC) || \
+    defined(CONFIG_ARCH_TEGRA_186_SOC)
 static u32 tegra30_fuse_read_early(struct tegra_fuse *fuse, unsigned int offset)
 {
        return readl_relaxed(fuse->base + FUSE_BEGIN + offset);
@@ -98,7 +99,10 @@ static void __init tegra30_fuse_init(struct tegra_fuse *fuse)
        fuse->read = tegra30_fuse_read;
 
        tegra_init_revision();
-       fuse->soc->speedo_init(&tegra_sku_info);
+
+       if (fuse->soc->speedo_init)
+               fuse->soc->speedo_init(&tegra_sku_info);
+
        tegra30_fuse_add_randomness();
 }
 #endif
@@ -158,3 +162,16 @@ const struct tegra_fuse_soc tegra210_fuse_soc = {
        .info = &tegra210_fuse_info,
 };
 #endif
+
+#if defined(CONFIG_ARCH_TEGRA_186_SOC)
+static const struct tegra_fuse_info tegra186_fuse_info = {
+       .read = tegra30_fuse_read,
+       .size = 0x300,
+       .spare = 0x280,
+};
+
+const struct tegra_fuse_soc tegra186_fuse_soc = {
+       .init = tegra30_fuse_init,
+       .info = &tegra186_fuse_info,
+};
+#endif
index 10c2076d5089aa347c1200ac66c03e0a5a2fe926..f355b9d549151e3e9d7ed8fcd1b429e09da35d8e 100644 (file)
@@ -105,4 +105,8 @@ extern const struct tegra_fuse_soc tegra124_fuse_soc;
 extern const struct tegra_fuse_soc tegra210_fuse_soc;
 #endif
 
+#ifdef CONFIG_ARCH_TEGRA_186_SOC
+extern const struct tegra_fuse_soc tegra186_fuse_soc;
+#endif
+
 #endif