xref: /openbmc/u-boot/tools/binman/fdt_test.py (revision cf033e04)
183d290c5STom Rini# SPDX-License-Identifier: GPL-2.0+
2bf7fd50bSSimon Glass# Copyright (c) 2016 Google, Inc
3bf7fd50bSSimon Glass# Written by Simon Glass <sjg@chromium.org>
4bf7fd50bSSimon Glass#
5bf7fd50bSSimon Glass# Test for the fdt modules
6bf7fd50bSSimon Glass
7bf7fd50bSSimon Glassimport os
8bf7fd50bSSimon Glassimport sys
9bf7fd50bSSimon Glassimport tempfile
10bf7fd50bSSimon Glassimport unittest
11bf7fd50bSSimon Glass
124a28b007SSimon Glassimport fdt
1399ed4a2eSSimon Glassfrom fdt import FdtScan
14bf7fd50bSSimon Glassimport fdt_util
15bf7fd50bSSimon Glassimport tools
16bf7fd50bSSimon Glass
17bf7fd50bSSimon Glassclass TestFdt(unittest.TestCase):
18bf7fd50bSSimon Glass    @classmethod
19bf7fd50bSSimon Glass    def setUpClass(self):
20bf7fd50bSSimon Glass        self._binman_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
21bf7fd50bSSimon Glass        self._indir = tempfile.mkdtemp(prefix='binmant.')
22bf7fd50bSSimon Glass        tools.PrepareOutputDir(self._indir, True)
23bf7fd50bSSimon Glass
24e0e6275fSSimon Glass    @classmethod
25e0e6275fSSimon Glass    def tearDownClass(self):
26e0e6275fSSimon Glass        tools._FinaliseForTest()
27e0e6275fSSimon Glass
28bf7fd50bSSimon Glass    def TestFile(self, fname):
29bf7fd50bSSimon Glass        return os.path.join(self._binman_dir, 'test', fname)
30bf7fd50bSSimon Glass
31bf7fd50bSSimon Glass    def GetCompiled(self, fname):
32bf7fd50bSSimon Glass        return fdt_util.EnsureCompiled(self.TestFile(fname))
33bf7fd50bSSimon Glass
341d88ebb2SSimon Glass    def _DeleteProp(self, dt):
351d88ebb2SSimon Glass        node = dt.GetNode('/microcode/update@0')
36bf7fd50bSSimon Glass        node.DeleteProp('data')
37bf7fd50bSSimon Glass
38bf7fd50bSSimon Glass    def testFdtNormal(self):
39*741f2d62SSimon Glass        fname = self.GetCompiled('034_x86_ucode.dts')
401d88ebb2SSimon Glass        dt = FdtScan(fname)
411d88ebb2SSimon Glass        self._DeleteProp(dt)
42bf7fd50bSSimon Glass
434a28b007SSimon Glass    def testFdtNormalProp(self):
44*741f2d62SSimon Glass        fname = self.GetCompiled('045_prop_test.dts')
454a28b007SSimon Glass        dt = FdtScan(fname)
464a28b007SSimon Glass        node = dt.GetNode('/binman/intel-me')
474a28b007SSimon Glass        self.assertEquals('intel-me', node.name)
484a28b007SSimon Glass        val = fdt_util.GetString(node, 'filename')
494a28b007SSimon Glass        self.assertEquals(str, type(val))
504a28b007SSimon Glass        self.assertEquals('me.bin', val)
514a28b007SSimon Glass
524a28b007SSimon Glass        prop = node.props['intval']
534a28b007SSimon Glass        self.assertEquals(fdt.TYPE_INT, prop.type)
544a28b007SSimon Glass        self.assertEquals(3, fdt_util.GetInt(node, 'intval'))
554a28b007SSimon Glass
564a28b007SSimon Glass        prop = node.props['intarray']
574a28b007SSimon Glass        self.assertEquals(fdt.TYPE_INT, prop.type)
584a28b007SSimon Glass        self.assertEquals(list, type(prop.value))
594a28b007SSimon Glass        self.assertEquals(2, len(prop.value))
604a28b007SSimon Glass        self.assertEquals([5, 6],
614a28b007SSimon Glass                          [fdt_util.fdt32_to_cpu(val) for val in prop.value])
624a28b007SSimon Glass
634a28b007SSimon Glass        prop = node.props['byteval']
644a28b007SSimon Glass        self.assertEquals(fdt.TYPE_BYTE, prop.type)
654a28b007SSimon Glass        self.assertEquals(chr(8), prop.value)
664a28b007SSimon Glass
674a28b007SSimon Glass        prop = node.props['bytearray']
684a28b007SSimon Glass        self.assertEquals(fdt.TYPE_BYTE, prop.type)
694a28b007SSimon Glass        self.assertEquals(list, type(prop.value))
704a28b007SSimon Glass        self.assertEquals(str, type(prop.value[0]))
714a28b007SSimon Glass        self.assertEquals(3, len(prop.value))
724a28b007SSimon Glass        self.assertEquals([chr(1), '#', '4'], prop.value)
734a28b007SSimon Glass
744a28b007SSimon Glass        prop = node.props['longbytearray']
754a28b007SSimon Glass        self.assertEquals(fdt.TYPE_INT, prop.type)
764a28b007SSimon Glass        self.assertEquals(0x090a0b0c, fdt_util.GetInt(node, 'longbytearray'))
774a28b007SSimon Glass
784a28b007SSimon Glass        prop = node.props['stringval']
794a28b007SSimon Glass        self.assertEquals(fdt.TYPE_STRING, prop.type)
804a28b007SSimon Glass        self.assertEquals('message2', fdt_util.GetString(node, 'stringval'))
814a28b007SSimon Glass
824a28b007SSimon Glass        prop = node.props['stringarray']
834a28b007SSimon Glass        self.assertEquals(fdt.TYPE_STRING, prop.type)
844a28b007SSimon Glass        self.assertEquals(list, type(prop.value))
854a28b007SSimon Glass        self.assertEquals(3, len(prop.value))
864a28b007SSimon Glass        self.assertEquals(['another', 'multi-word', 'message'], prop.value)
87