xref: /rk3399_rockchip-uboot/tools/binman/fdt_test.py (revision dd31be21bf8117df054f9ad072784bfc4df9e76f)
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
144a28b007SSimon Glassimport fdt
15*99ed4a2eSSimon Glassfrom fdt 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
414a28b007SSimon Glass    def testFdtNormalProp(self):
424a28b007SSimon Glass        fname = self.GetCompiled('45_prop_test.dts')
434a28b007SSimon Glass        dt = FdtScan(fname)
444a28b007SSimon Glass        node = dt.GetNode('/binman/intel-me')
454a28b007SSimon Glass        self.assertEquals('intel-me', node.name)
464a28b007SSimon Glass        val = fdt_util.GetString(node, 'filename')
474a28b007SSimon Glass        self.assertEquals(str, type(val))
484a28b007SSimon Glass        self.assertEquals('me.bin', val)
494a28b007SSimon Glass
504a28b007SSimon Glass        prop = node.props['intval']
514a28b007SSimon Glass        self.assertEquals(fdt.TYPE_INT, prop.type)
524a28b007SSimon Glass        self.assertEquals(3, fdt_util.GetInt(node, 'intval'))
534a28b007SSimon Glass
544a28b007SSimon Glass        prop = node.props['intarray']
554a28b007SSimon Glass        self.assertEquals(fdt.TYPE_INT, prop.type)
564a28b007SSimon Glass        self.assertEquals(list, type(prop.value))
574a28b007SSimon Glass        self.assertEquals(2, len(prop.value))
584a28b007SSimon Glass        self.assertEquals([5, 6],
594a28b007SSimon Glass                          [fdt_util.fdt32_to_cpu(val) for val in prop.value])
604a28b007SSimon Glass
614a28b007SSimon Glass        prop = node.props['byteval']
624a28b007SSimon Glass        self.assertEquals(fdt.TYPE_BYTE, prop.type)
634a28b007SSimon Glass        self.assertEquals(chr(8), prop.value)
644a28b007SSimon Glass
654a28b007SSimon Glass        prop = node.props['bytearray']
664a28b007SSimon Glass        self.assertEquals(fdt.TYPE_BYTE, prop.type)
674a28b007SSimon Glass        self.assertEquals(list, type(prop.value))
684a28b007SSimon Glass        self.assertEquals(str, type(prop.value[0]))
694a28b007SSimon Glass        self.assertEquals(3, len(prop.value))
704a28b007SSimon Glass        self.assertEquals([chr(1), '#', '4'], prop.value)
714a28b007SSimon Glass
724a28b007SSimon Glass        prop = node.props['longbytearray']
734a28b007SSimon Glass        self.assertEquals(fdt.TYPE_INT, prop.type)
744a28b007SSimon Glass        self.assertEquals(0x090a0b0c, fdt_util.GetInt(node, 'longbytearray'))
754a28b007SSimon Glass
764a28b007SSimon Glass        prop = node.props['stringval']
774a28b007SSimon Glass        self.assertEquals(fdt.TYPE_STRING, prop.type)
784a28b007SSimon Glass        self.assertEquals('message2', fdt_util.GetString(node, 'stringval'))
794a28b007SSimon Glass
804a28b007SSimon Glass        prop = node.props['stringarray']
814a28b007SSimon Glass        self.assertEquals(fdt.TYPE_STRING, prop.type)
824a28b007SSimon Glass        self.assertEquals(list, type(prop.value))
834a28b007SSimon Glass        self.assertEquals(3, len(prop.value))
844a28b007SSimon Glass        self.assertEquals(['another', 'multi-word', 'message'], prop.value)
85