soc/tegra: fuse: Implement tegra_is_silicon()
authorThierry Reding <treding@nvidia.com>
Thu, 17 Sep 2020 10:07:46 +0000 (12:07 +0200)
committerThierry Reding <treding@nvidia.com>
Fri, 18 Sep 2020 13:55:26 +0000 (15:55 +0200)
This function can be used by drivers to determine whether code is
running on silicon or on a simulation platform.

Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/soc/tegra/fuse/tegra-apbmisc.c
include/soc/tegra/fuse.h

index 92a2d64..946a2d9 100644 (file)
@@ -52,6 +52,25 @@ u8 tegra_get_platform(void)
        return (tegra_read_chipid() >> 20) & 0xf;
 }
 
+bool tegra_is_silicon(void)
+{
+       switch (tegra_get_chip_id()) {
+       case TEGRA194:
+               if (tegra_get_platform() == 0)
+                       return true;
+
+               return false;
+       }
+
+       /*
+        * Chips prior to Tegra194 have a different way of determining whether
+        * they are silicon or not. Since we never supported simulation on the
+        * older Tegra chips, don't bother extracting the information and just
+        * report that we're running on silicon.
+        */
+       return true;
+}
+
 u32 tegra_read_straps(void)
 {
        WARN(!chipid, "Tegra ABP MISC not yet available\n");
index 214908f..a9db917 100644 (file)
@@ -24,6 +24,7 @@
 u32 tegra_read_chipid(void);
 u8 tegra_get_chip_id(void);
 u8 tegra_get_platform(void);
+bool tegra_is_silicon(void);
 
 enum tegra_revision {
        TEGRA_REVISION_UNKNOWN = 0,