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