lava_helper: enable trace-based code coverage in FVP MPS2 jobs

Enable trace-based code coverage supportin in FVP MPS2 LAVA jobs,
where LAVA would fetch the coverage trace plugin from the downloads
repository [1].

This patch does not cover the extraction of trace logs from LAVA
into Jenkins, so the latter can convert logs into human-friendly LCOV
html reports. This is WIP and will be coverered in a separate patch.

[1] https://downloads.trustedfirmware.org

Signed-off-by: Leonardo Sandoval <leonardo.sandoval@linaro.org>
Change-Id: I81a8aaf3edaa4fd84e46526ed3d29ad94aa23a1b
diff --git a/lava_helper/jinja2_templates/fvp_mps2.jinja2 b/lava_helper/jinja2_templates/fvp_mps2.jinja2
index b799a3a..6f81efb 100644
--- a/lava_helper/jinja2_templates/fvp_mps2.jinja2
+++ b/lava_helper/jinja2_templates/fvp_mps2.jinja2
@@ -24,7 +24,10 @@
         url: {{ firmware_url }}
       s:
         url: {{ bootloader_url }}
-
+{%- if enable_code_coverage %}
+      cc:
+        url: {{ coverage_trace_plugin }}
+{%- endif %}
 - boot:
     failure_retry: 3
     namespace: docker
@@ -57,6 +60,10 @@
     -  "--parameter fvp_mps2.UART0.shutdown_on_eot=1"
     -  "--parameter 'fvp_mps2.UART0.out_file=-'"
     -  "--parameter fvp_mps2.mps2_visualisation.disable-visualisation=1"
+{%- if enable_code_coverage %}
+    -  "--plugin {CC}"
+{%- endif %}
+
     prompts:
     - '(.*)'
 
diff --git a/lava_helper/lava_create_jobs.py b/lava_helper/lava_create_jobs.py
index 1cffdb8..3fd75cc 100755
--- a/lava_helper/lava_create_jobs.py
+++ b/lava_helper/lava_create_jobs.py
@@ -131,6 +131,8 @@
                             "data_bin_offset": config.get('data_bin_offset', ''),
                             "docker_prefix": vars(user_args).get('docker_prefix', ''),
                             "license_variable": vars(user_args).get('license_variable', ''),
+                            "enable_code_coverage": user_args.enable_code_coverage == "TRUE",
+                            "coverage_trace_plugin": coverage_trace_plugin,
                             "build_job_url": artifact_store_url,
                             "cpu0_baseline": config.get("cpu0_baseline", 0),
                             "cpu0_initvtor_s": config.get("cpu0_initvtor_s", "0x10000000")
@@ -278,6 +280,9 @@
     cmdargs.add_argument(
         "--license-variable", dest="license_variable", action="store", help="License string for Fastmodels"
     )
+    cmdargs.add_argument(
+        "--enable-code-coverage", dest="enable_code_coverage", action="store", default="FALSE", help="Enable trace-base code coverage"
+    )
     cmdargs.add_argument("--bl2", dest="bl2", action="store_true", help="BL2")
     cmdargs.add_argument(
         "--psa-api-suite", dest="psa_suite", action="store", help="PSA API Suite name"
diff --git a/lava_helper/lava_helper_configs.py b/lava_helper/lava_helper_configs.py
index 3ddb364..1f95d12 100644
--- a/lava_helper/lava_helper_configs.py
+++ b/lava_helper/lava_helper_configs.py
@@ -19,6 +19,8 @@
 __project__ = "Trusted Firmware-M Open CI"
 __version__ = "1.2.0"
 
+tf_downloads="https://downloads.trustedfirmware.org"
+coverage_trace_plugin=tf_downloads + "/coverage-plugin/qa-tools/coverage-tool/coverage-plugin/coverage_trace.so"
 
 def lava_gen_get_config_subset(config,
                                default=True,