From: Elliot Berman <quic_eberman@quicinc.com>
To: Rob Herring <robh+dt@kernel.org>,
Frank Rowand <frowand.list@gmail.com>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>
Cc: Amrit Anand <quic_amrianan@quicinc.com>,
Peter Griffin <peter.griffin@linaro.org>,
Caleb Connolly <caleb.connolly@linaro.org>,
"Andy Gross" <agross@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
"Doug Anderson" <dianders@chromium.org>,
Simon Glass <sjg@chromium.org>,
"Chen-Yu Tsai" <wenst@chromium.org>,
Julius Werner <jwerner@chromium.org>,
"Humphreys, Jonathan" <j-humphreys@ti.com>,
Sumit Garg <sumit.garg@linaro.org>,
"Jon Hunter" <jonathanh@nvidia.org>,
Michal Simek <michal.simek@amd.com>,
<boot-architecture@lists.linaro.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-arm-msm@vger.kernel.org>,
Elliot Berman <quic_eberman@quicinc.com>
Subject: [PATCH RFC v3 9/9] tools: board-id: Add test suite
Date: Tue, 21 May 2024 11:38:06 -0700 [thread overview]
Message-ID: <20240521-board-ids-v3-9-e6c71d05f4d2@quicinc.com> (raw)
In-Reply-To: <20240521-board-ids-v3-0-e6c71d05f4d2@quicinc.com>
Add a short test suite to demonstrate board-id selection and scoring.
This patch isn't intended to be merged here.
After compiling the kernel (esp. arch/arm64/boot/dts/qcom DTBs), run
tools/board-id/test.py.
The test cases provide a hypothetical firmware-provied board-id and
compares expected output for which DTBs gets matched.
Signed-off-by: Elliot Berman <quic_eberman@quicinc.com>
---
tools/board-id/test.py | 151 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 151 insertions(+)
diff --git a/tools/board-id/test.py b/tools/board-id/test.py
new file mode 100644
index 000000000000..687b31ad73d2
--- /dev/null
+++ b/tools/board-id/test.py
@@ -0,0 +1,151 @@
+from collections import namedtuple
+import glob
+import os
+import subprocess
+from tempfile import NamedTemporaryFile
+import unittest
+
+
+LINUX_ROOT = os.path.abspath(os.path.join(__file__, "..", "..", ".."))
+ENV_WITH_DTC = {
+ "PATH": os.path.join(LINUX_ROOT, "scripts", "dtc") + os.pathsep + os.environ["PATH"]
+}
+
+
+TestCase = namedtuple("TestCase", ["score_all", "board_id", "output"])
+
+test_cases = [
+ TestCase(
+ # A board_id that could be provided by firmware
+ board_id="""
+ qcom,soc = <QCOM_ID_SM8650>;
+ qcom,soc-version = <QCOM_ID_SM8650 QCOM_SOC_REVISION(1)>;
+ qcom,platform = <QCOM_BOARD_ID_MTP>;
+ qcom,platform-type = <QCOM_BOARD_ID_MTP 0>;
+ qcom,platform-version = <QCOM_BOARD_ID_MTP 0 0x0100>;
+ qcom,boot-device = <QCOM_BOARD_BOOT_UFS>;
+ """,
+ score_all=False,
+ output="""
+ qcom/sm8650-mtp.dtb
+ """,
+ ),
+ TestCase(
+ # A board_id that could be provided by firmware
+ board_id="""
+ qcom,soc = <QCOM_ID_SM8550>;
+ qcom,soc-version = <QCOM_ID_SM8550 QCOM_SOC_REVISION(1)>;
+ qcom,platform = <QCOM_BOARD_ID_MTP>;
+ qcom,platform-type = <QCOM_BOARD_ID_MTP 0>;
+ qcom,platform-version = <QCOM_BOARD_ID_MTP 0 0x0100>;
+ qcom,boot-device = <QCOM_BOARD_BOOT_UFS>;
+ """,
+ score_all=True,
+ output="""
+ qcom/sm8550.dtb: 1
+ qcom/sm8550-mtp.dtb: 3
+ qcom/sm8550-mtp.dtbo: 2
+ """,
+ ),
+]
+
+
+def compile_board_id(board_id: str):
+ dts = f"""
+ /dts-v1/;
+
+ #include <dt-bindings/arm/qcom,ids.h>
+
+ / {{
+ compatible = "linux,dummy";
+ board-id {{
+ {board_id}
+ }};
+ }};
+ """
+ dts_processed = subprocess.run(
+ [
+ "gcc",
+ "-E",
+ "-nostdinc",
+ f"-I{os.path.join(LINUX_ROOT, 'scripts', 'dtc', 'include-prefixes')}",
+ "-undef",
+ "-D__DTS__",
+ "-x",
+ "assembler-with-cpp",
+ "-o" "-",
+ "-",
+ ],
+ stdout=subprocess.PIPE,
+ input=dts.encode("utf-8"),
+ check=True,
+ )
+ dtc = subprocess.run(
+ ["dtc", "-I", "dts", "-O", "dtb", "-o", "-", "-"],
+ stdout=subprocess.PIPE,
+ input=dts_processed.stdout,
+ env=ENV_WITH_DTC,
+ )
+ return dtc.stdout
+
+
+def select_boards(score_all, fwdtb):
+ with NamedTemporaryFile() as fwdtb_file:
+ fwdtb_file.write(fwdtb)
+ fwdtb_file.flush()
+ root_dir = os.path.join(LINUX_ROOT, "arch", "arm64", "boot", "dts")
+ return subprocess.run(
+ filter(
+ bool,
+ [
+ "fdt-select-board",
+ "-a" if score_all else None,
+ "-r",
+ fwdtb_file.name,
+ *glob.glob(
+ "qcom/*.dtb*",
+ root_dir=root_dir,
+ ),
+ ],
+ ),
+ stdout=subprocess.PIPE,
+ text=True,
+ cwd=root_dir,
+ env=ENV_WITH_DTC,
+ stderr=subprocess.STDOUT,
+ )
+
+
+def fixup_lines(s):
+ return '\n'.join(filter(bool, sorted(_s.strip() for _s in s.split('\n'))))
+
+
+class TestBoardIds(unittest.TestCase):
+ def __init__(self, index: int, args: TestCase) -> None:
+ super().__init__()
+ self.args = args
+ self.index = index
+
+ def runTest(self):
+ fwdtb = compile_board_id(self.args.board_id)
+ output = select_boards(self.args.score_all, fwdtb)
+ if output.stderr:
+ self.assertMultiLineEqual(output.stderr, "")
+ expected = fixup_lines(self.args.output)
+ actual = fixup_lines(output.stdout)
+ self.assertMultiLineEqual(expected, actual)
+
+ def __str__(self):
+ return f"Test case {self.index}"
+
+
+def suite():
+ suite = unittest.TestSuite()
+ for idx, test in enumerate(test_cases):
+ suite.addTest(TestBoardIds(idx + 1, test))
+ return suite
+
+
+if __name__ == "__main__":
+ runner = unittest.TextTestRunner()
+ runner.run(suite())
--
2.34.1
next prev parent reply other threads:[~2024-05-21 18:40 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-21 18:37 [PATCH RFC v3 0/9] dt-bindings: hwinfo: Introduce board-id Elliot Berman
2024-05-21 18:37 ` [PATCH RFC v3 1/9] libfdt: board-id: Implement board-id scoring Elliot Berman
2024-05-21 19:28 ` Conor Dooley
2024-05-22 23:57 ` Elliot Berman
2024-05-21 18:37 ` [PATCH RFC v3 2/9] dt-bindings: board: Introduce board-id Elliot Berman
2024-05-21 19:19 ` Rob Herring (Arm)
2024-05-21 19:21 ` Conor Dooley
2024-05-21 19:25 ` Conor Dooley
2024-05-21 21:32 ` Rob Herring
2024-05-21 21:47 ` Conor Dooley
2024-05-22 23:47 ` Elliot Berman
2024-05-22 23:54 ` Elliot Berman
2024-05-23 1:23 ` Rob Herring (Arm)
2024-05-25 16:54 ` Conor Dooley
2024-05-29 15:43 ` Elliot Berman
2024-05-21 18:38 ` [PATCH RFC v3 3/9] fdt-select-board: Add test tool for selecting dtbs based on board-id Elliot Berman
2024-05-21 18:38 ` [PATCH RFC v3 4/9] dt-bindings: arm: qcom: Update Devicetree identifiers Elliot Berman
2024-05-25 17:21 ` Conor Dooley
2024-05-29 15:34 ` Elliot Berman
2024-05-21 18:38 ` [PATCH RFC v3 5/9] dt-bindings: board: Document board-ids for Qualcomm devices Elliot Berman
2024-05-21 19:19 ` Rob Herring (Arm)
2024-05-25 17:08 ` Conor Dooley
2024-05-29 15:09 ` Elliot Berman
2024-05-21 18:38 ` [PATCH RFC v3 6/9] arm64: boot: dts: sm8650: Add board-id Elliot Berman
2024-06-05 8:18 ` Krzysztof Kozlowski
2024-05-21 18:38 ` [PATCH RFC v3 7/9] arm64: boot: dts: qcom: Use phandles for thermal_zones Elliot Berman
2024-05-21 18:38 ` [PATCH RFC v3 8/9] arm64: boot: dts: qcom: sm8550: Split into overlays Elliot Berman
2024-06-05 8:20 ` Krzysztof Kozlowski
2024-05-21 18:38 ` Elliot Berman [this message]
2024-05-21 19:00 ` [PATCH RFC v3 0/9] dt-bindings: hwinfo: Introduce board-id Dmitry Baryshkov
2024-05-24 15:51 ` Konrad Dybcio
2024-05-27 7:19 ` Michal Simek
2024-05-29 15:32 ` Elliot Berman
2024-05-30 14:12 ` Michal Simek
2024-06-05 13:17 ` Simon Glass
2024-06-05 17:17 ` Elliot Berman
2024-06-06 16:00 ` Simon Glass
2024-06-21 22:40 ` Elliot Berman
2024-06-22 7:18 ` Dmitry Baryshkov
2024-06-28 7:33 ` Simon Glass
2024-06-28 8:04 ` Simon Glass
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240521-board-ids-v3-9-e6c71d05f4d2@quicinc.com \
--to=quic_eberman@quicinc.com \
--cc=agross@kernel.org \
--cc=andersson@kernel.org \
--cc=boot-architecture@lists.linaro.org \
--cc=caleb.connolly@linaro.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=frowand.list@gmail.com \
--cc=j-humphreys@ti.com \
--cc=jonathanh@nvidia.org \
--cc=jwerner@chromium.org \
--cc=konrad.dybcio@linaro.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michal.simek@amd.com \
--cc=peter.griffin@linaro.org \
--cc=quic_amrianan@quicinc.com \
--cc=robh+dt@kernel.org \
--cc=sjg@chromium.org \
--cc=sumit.garg@linaro.org \
--cc=wenst@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).