diff --git a/misc/config_tools/board_inspector/board_inspector.py b/misc/config_tools/board_inspector/board_inspector.py
index a2373e2e8..833c074ab 100755
--- a/misc/config_tools/board_inspector/board_inspector.py
+++ b/misc/config_tools/board_inspector/board_inspector.py
@@ -16,6 +16,8 @@ from cpuparser import parse_cpuid, get_online_cpu_ids, get_offline_cpu_ids
script_dir = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(script_dir))
+from inspectorlib import validator
+
def check_deps():
# Check that the required tools are installed on the system
BIN_LIST = ['cpuid', 'rdmsr', 'lspci', ' dmidecode', 'blkid', 'stty']
@@ -113,6 +115,11 @@ def main(board_name, board_xml, args):
continue
module.extract(args, board_etree)
+ # Validate the XML against XSD assertions
+ count = validator.validate_board("schema/boardchecks.xsd", board_etree)
+ if count == 0:
+ logging.info("All board checks passed.")
+
# Finally overwrite the output with the updated XML
board_etree.write(board_xml, pretty_print=True)
print("SUCCESS: Board configuration file {} generated successfully and saved to {}" \
diff --git a/misc/config_tools/board_inspector/inspectorlib/validator.py b/misc/config_tools/board_inspector/inspectorlib/validator.py
new file mode 100644
index 000000000..6409fe328
--- /dev/null
+++ b/misc/config_tools/board_inspector/inspectorlib/validator.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2022 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+import sys, os
+import argparse
+import lxml.etree as etree
+import logging
+import xmlschema
+
+logging_fn = {
+ "error": logging.error,
+ "warning": logging.warning,
+ "info": logging.info,
+}
+
+def validate_board(xsd_path, board_etree):
+ schema_etree = etree.parse(xsd_path)
+ schema_etree.xinclude()
+ schema = xmlschema.XMLSchema11(schema_etree)
+
+ it = schema.iter_errors(board_etree)
+ count = 0
+ for error in it:
+ anno = error.validator.annotation
+ severity = anno.elem.get("{https://projectacrn.org}severity")
+ description = anno.elem.find("{http://www.w3.org/2001/XMLSchema}documentation").text
+ logging_fn[severity](description)
+ if severity in ["error", "warning"]:
+ count += 1
+
+ return count
diff --git a/misc/config_tools/board_inspector/schema/boardchecks.xsd b/misc/config_tools/board_inspector/schema/boardchecks.xsd
new file mode 100644
index 000000000..cdecfd32f
--- /dev/null
+++ b/misc/config_tools/board_inspector/schema/boardchecks.xsd
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/misc/config_tools/board_inspector/schema/checks/platform_capabilities.xsd b/misc/config_tools/board_inspector/schema/checks/platform_capabilities.xsd
new file mode 100644
index 000000000..6af0241e6
--- /dev/null
+++ b/misc/config_tools/board_inspector/schema/checks/platform_capabilities.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Intel(R) Virtualization Technology Extension shall be enabled in BIOS.
+
+
+
+