Tools: Use dictionary to manage partition statistics

This patch creates a partition_statistics dictionary
to manage ipc_partition_num and sfn_partition_num.
It makes the scripts more readable and easier to maintain.

Signed-off-by: Xinyu Zhang <xinyu.zhang@arm.com>
Change-Id: Iee76f011c0611f77e8362105220bf4d7436e15a9
diff --git a/interface/include/config_impl.h.template b/interface/include/config_impl.h.template
index 5a6c3e1..8c79f04 100644
--- a/interface/include/config_impl.h.template
+++ b/interface/include/config_impl.h.template
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021, Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -10,7 +10,8 @@
 #ifndef __CONFIG_IMPL_H__
 #define __CONFIG_IMPL_H__
 
-{% if ipc_partition_num > 0 and sfn_partition_num == 0 %}
+{% if partition_statistics['ipc_partition_num'] > 0
+    and partition_statistics['sfn_partition_num'] == 0 %}
 /* IPC model */
 #define {{"%-56s"|format("CONFIG_TFM_SPM_BACKEND_IPC")}} 1
 
@@ -27,7 +28,8 @@
             {{"%-56s"|format("CONFIG_TFM_NS_AGENT_TZ_STACK_SIZE")}}
 #endif /* TFM_LVL > 1 */
 
-{% elif sfn_partition_num > 0 and ipc_partition_num == 0 %}
+{% elif partition_statistics['sfn_partition_num'] > 0
+    and partition_statistics['ipc_partition_num'] == 0 %}
 /* SFN model */
 #define {{"%-56s"|format("CONFIG_TFM_SPM_BACKEND_SFN")}} 1
 #define {{"%-56s"|format("CONFIG_TFM_PSA_API_SFN_CALL")}} 1
@@ -61,7 +63,8 @@
 #define {{"%-56s"|format("CONFIG_TFM_NS_AGENT_TZ_STACK_SIZE")}}  \
     ((({{"0x%x"|format(total_stk.size)}} >> CONFIG_TFM_NS_AGENT_TZ_STK_SIZE_SHIFT_FACTOR) + 0x7) & (~0x7))
 
-{% elif sfn_partition_num > 0 and ipc_partition_num > 0 %}
+{% elif partition_statistics['sfn_partition_num'] > 0
+    and partition_statistics['ipc_partition_num'] > 0 %}
 #error "IPC and SFN co-work not supported yet."
 {% else %}
 #error "Invalid partition number input, check configurations."
diff --git a/tools/tfm_parse_manifest_list.py b/tools/tfm_parse_manifest_list.py
index 8b7afa1..5652461 100644
--- a/tools/tfm_parse_manifest_list.py
+++ b/tools/tfm_parse_manifest_list.py
@@ -1,5 +1,5 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2018-2021, Arm Limited. All rights reserved.
+# Copyright (c) 2018-2022, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -141,10 +141,12 @@
 
     partition_list = []
     all_manifests = []
-    ipc_partition_num = 0
-    sfn_partition_num = 0
     pid_list = []
     no_pid_manifest_idx = []
+    partition_statistics = {
+        'ipc_partition_num': 0,
+        'sfn_partition_num': 0
+    }
 
     # Get all the manifests information as a dictionary
     for i, item in enumerate(manifest_lists):
@@ -214,9 +216,9 @@
         if pid == None or pid >= TFM_PID_BASE:
             # Count the number of IPC/SFN partitions
             if manifest['psa_framework_version'] == 1.1 and manifest['model'] == 'SFN':
-                sfn_partition_num += 1
+                partition_statistics['sfn_partition_num'] += 1
             else:
-                ipc_partition_num += 1
+                partition_statistics['ipc_partition_num'] += 1
 
         manifest_out_basename = os.path.splitext(os.path.basename(manifest_path))[0]
 
@@ -249,8 +251,7 @@
         pid_list.append(pid)
 
     context['partitions'] = partition_list
-    context['ipc_partition_num'] = ipc_partition_num
-    context['sfn_partition_num'] = sfn_partition_num
+    context['partition_statistics'] = partition_statistics
 
     context['stateless_services'] = process_stateless_services(partition_list)