Simon Glass | 2574ef6 | 2016-11-25 20:15:51 -0700 | [diff] [blame] | 1 | # |
| 2 | # Copyright (c) 2016 Google, Inc |
| 3 | # Written by Simon Glass <sjg@chromium.org> |
| 4 | # |
| 5 | # SPDX-License-Identifier: GPL-2.0+ |
| 6 | # |
| 7 | # Test for the fdt modules |
| 8 | |
| 9 | import os |
| 10 | import sys |
| 11 | import tempfile |
| 12 | import unittest |
| 13 | |
Simon Glass | d022a7d | 2017-05-27 07:38:21 -0600 | [diff] [blame^] | 14 | import fdt |
Simon Glass | 2574ef6 | 2016-11-25 20:15:51 -0700 | [diff] [blame] | 15 | from fdt_select import FdtScan |
| 16 | import fdt_util |
| 17 | import tools |
| 18 | |
| 19 | class TestFdt(unittest.TestCase): |
| 20 | @classmethod |
| 21 | def setUpClass(self): |
| 22 | self._binman_dir = os.path.dirname(os.path.realpath(sys.argv[0])) |
| 23 | self._indir = tempfile.mkdtemp(prefix='binmant.') |
| 24 | tools.PrepareOutputDir(self._indir, True) |
| 25 | |
| 26 | def TestFile(self, fname): |
| 27 | return os.path.join(self._binman_dir, 'test', fname) |
| 28 | |
| 29 | def GetCompiled(self, fname): |
| 30 | return fdt_util.EnsureCompiled(self.TestFile(fname)) |
| 31 | |
Simon Glass | 28c7105 | 2017-05-27 07:38:20 -0600 | [diff] [blame] | 32 | def _DeleteProp(self, dt): |
| 33 | node = dt.GetNode('/microcode/update@0') |
Simon Glass | 2574ef6 | 2016-11-25 20:15:51 -0700 | [diff] [blame] | 34 | node.DeleteProp('data') |
| 35 | |
| 36 | def testFdtNormal(self): |
| 37 | fname = self.GetCompiled('34_x86_ucode.dts') |
Simon Glass | 28c7105 | 2017-05-27 07:38:20 -0600 | [diff] [blame] | 38 | dt = FdtScan(fname) |
| 39 | self._DeleteProp(dt) |
Simon Glass | 2574ef6 | 2016-11-25 20:15:51 -0700 | [diff] [blame] | 40 | |
Simon Glass | d022a7d | 2017-05-27 07:38:21 -0600 | [diff] [blame^] | 41 | def testFdtNormalProp(self): |
| 42 | fname = self.GetCompiled('45_prop_test.dts') |
| 43 | dt = FdtScan(fname) |
| 44 | node = dt.GetNode('/binman/intel-me') |
| 45 | self.assertEquals('intel-me', node.name) |
| 46 | val = fdt_util.GetString(node, 'filename') |
| 47 | self.assertEquals(str, type(val)) |
| 48 | self.assertEquals('me.bin', val) |
| 49 | |
| 50 | prop = node.props['intval'] |
| 51 | self.assertEquals(fdt.TYPE_INT, prop.type) |
| 52 | self.assertEquals(3, fdt_util.GetInt(node, 'intval')) |
| 53 | |
| 54 | prop = node.props['intarray'] |
| 55 | self.assertEquals(fdt.TYPE_INT, prop.type) |
| 56 | self.assertEquals(list, type(prop.value)) |
| 57 | self.assertEquals(2, len(prop.value)) |
| 58 | self.assertEquals([5, 6], |
| 59 | [fdt_util.fdt32_to_cpu(val) for val in prop.value]) |
| 60 | |
| 61 | prop = node.props['byteval'] |
| 62 | self.assertEquals(fdt.TYPE_BYTE, prop.type) |
| 63 | self.assertEquals(chr(8), prop.value) |
| 64 | |
| 65 | prop = node.props['bytearray'] |
| 66 | self.assertEquals(fdt.TYPE_BYTE, prop.type) |
| 67 | self.assertEquals(list, type(prop.value)) |
| 68 | self.assertEquals(str, type(prop.value[0])) |
| 69 | self.assertEquals(3, len(prop.value)) |
| 70 | self.assertEquals([chr(1), '#', '4'], prop.value) |
| 71 | |
| 72 | prop = node.props['longbytearray'] |
| 73 | self.assertEquals(fdt.TYPE_INT, prop.type) |
| 74 | self.assertEquals(0x090a0b0c, fdt_util.GetInt(node, 'longbytearray')) |
| 75 | |
| 76 | prop = node.props['stringval'] |
| 77 | self.assertEquals(fdt.TYPE_STRING, prop.type) |
| 78 | self.assertEquals('message2', fdt_util.GetString(node, 'stringval')) |
| 79 | |
| 80 | prop = node.props['stringarray'] |
| 81 | self.assertEquals(fdt.TYPE_STRING, prop.type) |
| 82 | self.assertEquals(list, type(prop.value)) |
| 83 | self.assertEquals(3, len(prop.value)) |
| 84 | self.assertEquals(['another', 'multi-word', 'message'], prop.value) |
| 85 | |
Simon Glass | 2574ef6 | 2016-11-25 20:15:51 -0700 | [diff] [blame] | 86 | def testFdtFallback(self): |
| 87 | fname = self.GetCompiled('34_x86_ucode.dts') |
Simon Glass | 28c7105 | 2017-05-27 07:38:20 -0600 | [diff] [blame] | 88 | dt = FdtScan(fname, True) |
| 89 | dt.GetProp('/microcode/update@0', 'data') |
Simon Glass | 2574ef6 | 2016-11-25 20:15:51 -0700 | [diff] [blame] | 90 | self.assertEqual('fred', |
Simon Glass | 28c7105 | 2017-05-27 07:38:20 -0600 | [diff] [blame] | 91 | dt.GetProp('/microcode/update@0', 'none', default='fred')) |
Simon Glass | 2574ef6 | 2016-11-25 20:15:51 -0700 | [diff] [blame] | 92 | self.assertEqual('12345678 12345679', |
Simon Glass | 28c7105 | 2017-05-27 07:38:20 -0600 | [diff] [blame] | 93 | dt.GetProp('/microcode/update@0', 'data', typespec='x')) |
| 94 | self._DeleteProp(dt) |