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