diff --git a/cmake/utils.cmake b/cmake/utils.cmake
new file mode 100644
index 0000000..7b5f9b5
--- /dev/null
+++ b/cmake/utils.cmake
@@ -0,0 +1,56 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2022, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+# A string calibrating routine to the specified length by
+# appending to an input string a specified character.
+#
+# output - variable to return the calibrated string
+
+function(format_string output input size filler)
+    string(LENGTH ${input} length)
+    foreach(i RANGE ${length} ${size})
+        string(CONCAT input ${input} ${filler})
+    endforeach()
+    set(${output} ${input} PARENT_SCOPE)
+endfunction()
+
+# Prints formatted list of options with a title
+#
+# title - will be printed in a header
+# options - list of CMake options to print (semicolon separated)
+#
+# Example:
+# dump_options("Partitions" "TFM_PARTITION_CRYPTO; TFM_PARTITION_FIRMWARE_UPDATE ")
+# will produce:
+# -- -------- Partitions ---------------------
+# -- TFM_PARTITION_CRYPTO                  ON
+# -- TFM_PARTITION_FIRMWARE_UPDATE         OFF
+# -- -----------------------------------------
+
+function(dump_options title options)
+
+    if (CONFIG_TFM_PARTITION_QUIET)
+        return()
+    endif()
+
+    format_string(header "-------- ${title} " 50 "-")
+    message(STATUS )
+    message(STATUS "${header}")
+
+    foreach (option ${options})
+        string(STRIP ${option} option)
+        # avoid errors on empty strings to tolerate ';' at the end of list
+        if (option)
+            format_string(option_name ${option} 40 " ")
+            message(STATUS "${option_name} ${${option}}")
+        endif()
+    endforeach()
+
+    format_string(footer "-" 50 "-")
+    message(STATUS "${footer}")
+endfunction()
+
diff --git a/secure_fw/partitions/crypto/CMakeLists.txt b/secure_fw/partitions/crypto/CMakeLists.txt
index 94dcece..c792693 100644
--- a/secure_fw/partitions/crypto/CMakeLists.txt
+++ b/secure_fw/partitions/crypto/CMakeLists.txt
@@ -80,25 +80,24 @@
 )
 
 ################ Display the configuration being applied #######################
-if (NOT CONFIG_TFM_PARTITION_QUIET)
-    message(STATUS "---------- Display crypto configuration - start --------------")
 
-    message(STATUS "CRYPTO_RNG_MODULE_DISABLED is set to ${CRYPTO_RNG_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_KEY_MODULE_DISABLED is set to ${CRYPTO_KEY_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_AEAD_MODULE_DISABLED is set to ${CRYPTO_AEAD_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_MAC_MODULE_DISABLED is set to ${CRYPTO_MAC_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_CIPHER_MODULE_DISABLED is set to ${CRYPTO_CIPHER_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_HASH_MODULE_DISABLED is set to ${CRYPTO_HASH_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_KEY_DERIVATION_MODULE_DISABLED is set to ${CRYPTO_KEY_DERIVATION_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_ASYM_SIGN_MODULE_DISABLED is set to ${CRYPTO_ASYM_SIGN_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_ASYM_ENCRYPT_MODULE_DISABLED is set to ${CRYPTO_ASYM_ENCRYPT_MODULE_DISABLED}")
-    message(STATUS "CRYPTO_ENGINE_BUF_SIZE is set to ${CRYPTO_ENGINE_BUF_SIZE}")
-    message(STATUS "CRYPTO_CONC_OPER_NUM is set to ${CRYPTO_CONC_OPER_NUM}")
-    if (${TFM_PSA_API})
-        message(STATUS "CRYPTO_IOVEC_BUFFER_SIZE is set to ${CRYPTO_IOVEC_BUFFER_SIZE}")
-    endif()
-    message(STATUS "---------- Display crypto configuration - stop ---------------")
-endif()
+include(utils)
+    dump_options("Crypto config"
+    "
+        CRYPTO_RNG_MODULE_DISABLED;
+        CRYPTO_KEY_MODULE_DISABLED;
+        CRYPTO_AEAD_MODULE_DISABLED;
+        CRYPTO_MAC_MODULE_DISABLED;
+        CRYPTO_CIPHER_MODULE_DISABLED;
+        CRYPTO_HASH_MODULE_DISABLED;
+        CRYPTO_KEY_DERIVATION_MODULE_DISABLED;
+        CRYPTO_ASYM_SIGN_MODULE_DISABLED;
+        CRYPTO_ASYM_ENCRYPT_MODULE_DISABLED;
+        CRYPTO_ENGINE_BUF_SIZE;
+        CRYPTO_CONC_OPER_NUM;
+        CRYPTO_IOVEC_BUFFER_SIZE;
+    "
+    )
 
 ############################ Secure API ########################################
 
diff --git a/secure_fw/partitions/internal_trusted_storage/CMakeLists.txt b/secure_fw/partitions/internal_trusted_storage/CMakeLists.txt
index 2dac309..9631eea 100644
--- a/secure_fw/partitions/internal_trusted_storage/CMakeLists.txt
+++ b/secure_fw/partitions/internal_trusted_storage/CMakeLists.txt
@@ -82,31 +82,26 @@
 
 ################ Display the configuration being applied #######################
 
-if (NOT CONFIG_TFM_PARTITION_QUIET)
-    message(STATUS "----------- Display storage configuration - start ------------")
+include(utils)
+    dump_options("Storage config"
+    "
+        PS_CREATE_FLASH_LAYOUT;
+        PS_ENCRYPTION;
+        PS_RAM_FS;
+        PS_ROLLBACK_PROTECTION;
+        PS_VALIDATE_METADATA_FROM_FLASH;
+        PS_MAX_ASSET_SIZE;
+        PS_NUM_ASSETS;
+        PS_CRYPTO_AEAD_ALG;
 
-    message(STATUS "PS_CREATE_FLASH_LAYOUT is set to ${PS_CREATE_FLASH_LAYOUT}")
-    message(STATUS "PS_ENCRYPTION is set to ${PS_ENCRYPTION}")
-    message(STATUS "PS_RAM_FS is set to ${PS_RAM_FS}")
-    message(STATUS "PS_ROLLBACK_PROTECTION is set to ${PS_ROLLBACK_PROTECTION}")
-    message(STATUS "PS_VALIDATE_METADATA_FROM_FLASH is set to ${PS_VALIDATE_METADATA_FROM_FLASH}")
-    message(STATUS "PS_MAX_ASSET_SIZE is set to ${PS_MAX_ASSET_SIZE}")
-    message(STATUS "PS_NUM_ASSETS is set to ${PS_NUM_ASSETS}")
-    message(STATUS "PS_CRYPTO_AEAD_ALG is set to ${PS_CRYPTO_AEAD_ALG}")
-
-    message(STATUS "ITS_CREATE_FLASH_LAYOUT is set to ${ITS_CREATE_FLASH_LAYOUT}")
-    message(STATUS "ITS_RAM_FS is set to ${ITS_RAM_FS}")
-    message(STATUS "ITS_VALIDATE_METADATA_FROM_FLASH is set to ${ITS_VALIDATE_METADATA_FROM_FLASH}")
-    message(STATUS "ITS_MAX_ASSET_SIZE is set to ${ITS_MAX_ASSET_SIZE}")
-    message(STATUS "ITS_NUM_ASSETS is set to ${ITS_NUM_ASSETS}")
-    if (${ITS_BUF_SIZE})
-        message(STATUS "ITS_BUF_SIZE is set to ${ITS_BUF_SIZE}")
-    else()
-        message(STATUS "ITS_BUF_SIZE is not set (defaults to ITS_MAX_ASSET_SIZE)")
-    endif()
-
-    message(STATUS "----------- Display storage configuration - stop -------------")
-endif()
+        ITS_CREATE_FLASH_LAYOUT;
+        ITS_RAM_FS;
+        ITS_VALIDATE_METADATA_FROM_FLASH;
+        ITS_MAX_ASSET_SIZE;
+        ITS_NUM_ASSETS;
+        ITS_BUF_SIZE
+    "
+    )
 
 ############################ Secure API ########################################
 
diff --git a/tools/tfm_parse_manifest_list.py b/tools/tfm_parse_manifest_list.py
index ce7bb60..16ab1cc 100644
--- a/tools/tfm_parse_manifest_list.py
+++ b/tools/tfm_parse_manifest_list.py
@@ -288,10 +288,10 @@
             is_enabled = 'on'
 
         if is_enabled in valid_disabled_conditions:
-            logging.info("{} partition is disabled".format(manifest_item['name']))
+            logging.info("   {:40s}  OFF".format(manifest_item['name']))
             continue
         elif is_enabled in valid_enabled_conditions:
-            logging.info("{} partition is enabled".format(manifest_item['name']))
+            logging.info("   {:40s}  ON".format(manifest_item['name']))
         else:
             raise Exception('Invalid "conditional" attribute: "{}" for {}. '
                             'Please set to one of {} or {}, case-insensitive.'\
