|
@@ -689,29 +689,40 @@ class TestFunctional(unittest.TestCase):
|
|
|
self.assertEqual(X86_START16_DATA, data[:len(X86_START16_DATA)])
|
|
|
|
|
|
def _RunMicrocodeTest(self, dts_fname, nodtb_data):
|
|
|
+ """Handle running a test for insertion of microcode
|
|
|
+
|
|
|
+ Args:
|
|
|
+ dts_fname: Name of test .dts file
|
|
|
+ nodtb_data: Data that we expect in the first section
|
|
|
+
|
|
|
+ Returns:
|
|
|
+ Tuple:
|
|
|
+ Contents of first region (U-Boot or SPL)
|
|
|
+ Position and size components of microcode pointer, as inserted
|
|
|
+ in the above (two 4-byte words)
|
|
|
+ """
|
|
|
data = self._DoReadFile(dts_fname, True)
|
|
|
|
|
|
# Now check the device tree has no microcode
|
|
|
- second = data[len(nodtb_data):]
|
|
|
+ dtb_with_ucode = data[len(nodtb_data):]
|
|
|
+ fdt_len = self.GetFdtLen(dtb_with_ucode)
|
|
|
+ ucode_content = dtb_with_ucode[fdt_len:]
|
|
|
+ ucode_pos = len(nodtb_data) + fdt_len
|
|
|
fname = tools.GetOutputFilename('test.dtb')
|
|
|
with open(fname, 'wb') as fd:
|
|
|
- fd.write(second)
|
|
|
+ fd.write(dtb_with_ucode)
|
|
|
dtb = fdt.FdtScan(fname)
|
|
|
ucode = dtb.GetNode('/microcode')
|
|
|
self.assertTrue(ucode)
|
|
|
for node in ucode.subnodes:
|
|
|
self.assertFalse(node.props.get('data'))
|
|
|
|
|
|
- fdt_len = self.GetFdtLen(second)
|
|
|
- third = second[fdt_len:]
|
|
|
-
|
|
|
# Check that the microcode appears immediately after the Fdt
|
|
|
# This matches the concatenation of the data properties in
|
|
|
# the /microcode/update@xxx nodes in 34_x86_ucode.dts.
|
|
|
ucode_data = struct.pack('>4L', 0x12345678, 0x12345679, 0xabcd0000,
|
|
|
0x78235609)
|
|
|
- self.assertEqual(ucode_data, third[:len(ucode_data)])
|
|
|
- ucode_pos = len(nodtb_data) + fdt_len
|
|
|
+ self.assertEqual(ucode_data, ucode_content[:len(ucode_data)])
|
|
|
|
|
|
# Check that the microcode pointer was inserted. It should match the
|
|
|
# expected position and size
|