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