diff --git a/scripts/sanitycheck b/scripts/sanitycheck
index 1c67f45..535c1b6 100755
--- a/scripts/sanitycheck
+++ b/scripts/sanitycheck
@@ -1609,7 +1609,7 @@
 
         return build_only
 
-    def create_overlay(self):
+    def create_overlay(self, platform):
         file = os.path.join(self.outdir, "overlay.conf")
         os.makedirs(self.outdir, exist_ok=True)
         f = open(file, "w")
@@ -1618,7 +1618,8 @@
         if len(self.test.extra_configs) > 0:
             content = "\n".join(self.test.extra_configs)
         if options.enable_coverage:
-            content = content + "\nCONFIG_COVERAGE=y"
+            if platform in options.coverage_platform:
+                content = content + "\nCONFIG_COVERAGE=y"
 
         f.write(content)
         f.close()
@@ -1775,12 +1776,12 @@
                 name = os.path.join(row[0], row[1])
                 platforms = self.arches[row[3]].platforms
                 myp = None
-                for p in platforms:
-                    if p.name == row[2]:
-                        myp = p
+                for platform in platforms:
+                    if platform.name == row[2]:
+                        selected_platform = platform
                         break
-                instance = TestInstance(self.testcases[name], myp, self.outdir)
-                instance.create_overlay()
+                instance = TestInstance(self.testcases[name], selected_platform, self.outdir)
+                instance.create_overlay(selected_platform.name)
                 instance_list.append(instance)
             self.add_instances(instance_list)
 
@@ -2108,7 +2109,7 @@
                     self.add_instances(instance_list)
 
                 for name, case in self.instances.items():
-                    case.create_overlay()
+                    case.create_overlay(case.platform.name)
 
         self.discards = discards
         return discards
@@ -2672,6 +2673,11 @@
     parser.add_argument("-C", "--coverage", action="store_true",
                         help="Generate coverage reports. Implies --enable_coverage")
 
+    coverage_platforms = ["native_posix", "nrf52_bsim"]
+    parser.add_argument("--coverage-platform", action="append", default=coverage_platforms,
+                        help="Plarforms to run coverage reports on. "
+                        "This option may be used multiple times.")
+
     return parser.parse_args()
 
 
