From f45cc044a52cb73efabff334c1220604c02fbf1a Mon Sep 17 00:00:00 2001 From: Yeoh Ee Peng Date: Wed, 11 Sep 2019 09:21:49 +0800 Subject: oeqa/runtime/microcode: Enable microcode update test With iucode-tool, identified the selected microcode to be used for microcode update by the specific processor. Compared the updated microcode from dmesg to the selected microcode, test failed if the updated microcode revision does not match the available selected microcode revision from the iucode-tool. Compute int from hexadecimal for comparison based on Naveen Kumar suggestion. Signed-off-by: Yeoh Ee Peng Signed-off-by: Anuj Mittal --- lib/oeqa/runtime/cases/microcode.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 lib/oeqa/runtime/cases/microcode.py diff --git a/lib/oeqa/runtime/cases/microcode.py b/lib/oeqa/runtime/cases/microcode.py new file mode 100644 index 00000000..6ce36a6f --- /dev/null +++ b/lib/oeqa/runtime/cases/microcode.py @@ -0,0 +1,36 @@ +from oeqa.runtime.case import OERuntimeTestCase +from oeqa.runtime.decorator.package import OEHasPackage +import re + +class MicrocodeTest(OERuntimeTestCase): + + def get_revision_from_microcode_string_list(self, microcode_string_list, re_pattern): + re_compile = re.compile(re_pattern) + rev_list = [] + for s in microcode_string_list: + matched_revs = re_compile.findall(s) + if matched_revs: + for mr in matched_revs: + rev_list.append(int(mr, 16)) + return rev_list + + @OEHasPackage(["iucode-tool"]) + def test_microcode_update(self): + (status, output) = self.target.run('iucode_tool /lib/firmware/intel-ucode/ -tb -lS | grep rev') + if status: + self.skipTest("The iucode_tool detected no microcode for update.") + + selected_microcodes = output.splitlines() + selected_rev_list = self.get_revision_from_microcode_string_list(selected_microcodes, "rev (\w*)") + self.assertTrue(selected_rev_list, msg="Could not find any rev from iucode_tool selected microcode.") + + (status, output) = self.target.run('dmesg | grep microcode') + self.assertEqual(status, 0, msg='status and output: %s and %s' % (status, output)) + + updated_microcodes = output.splitlines() + updated_rev_list = self.get_revision_from_microcode_string_list(updated_microcodes, "revision=(\w*)") + self.assertTrue(updated_rev_list, msg="Could not find any updated revision from microcode dmesg.") + + for ul in updated_rev_list: + self.assertTrue(ul in selected_rev_list, msg="Updated revision, %s, not in selected revision list (%s)" % + (ul, selected_rev_list)) -- cgit v1.2.3-54-g00ecf