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