xref: /rk3399_rockchip-uboot/tools/dtoc/test_dtoc.py (revision a28bfcc35587bf3d3f86eb49fb81c9570ddfcc4b)
1c0791928SSimon Glass#
2c0791928SSimon Glass# Copyright (c) 2012 The Chromium OS Authors.
3c0791928SSimon Glass#
4c0791928SSimon Glass# SPDX-License-Identifier:	GPL-2.0+
5c0791928SSimon Glass#
6c0791928SSimon Glass
7c0791928SSimon Glass"""Tests for the dtb_platdata module
8c0791928SSimon Glass
9c0791928SSimon GlassThis includes unit tests for some functions and functional tests for
10c0791928SSimon Glass"""
11c0791928SSimon Glass
12c0791928SSimon Glassimport collections
13c0791928SSimon Glassimport os
14c0791928SSimon Glassimport struct
15c0791928SSimon Glassimport unittest
16c0791928SSimon Glass
17c0791928SSimon Glassimport dtb_platdata
18c0791928SSimon Glassfrom dtb_platdata import conv_name_to_c
19c0791928SSimon Glassfrom dtb_platdata import get_compat_name
20c0791928SSimon Glassfrom dtb_platdata import get_value
21c0791928SSimon Glassfrom dtb_platdata import tab_to
22c0791928SSimon Glassimport fdt
23c0791928SSimon Glassimport fdt_util
24c0791928SSimon Glassimport tools
25c0791928SSimon Glass
26c0791928SSimon Glassour_path = os.path.dirname(os.path.realpath(__file__))
27c0791928SSimon Glass
28c0791928SSimon Glass
29c0791928SSimon Glassdef get_dtb_file(dts_fname):
30c0791928SSimon Glass    """Compile a .dts file to a .dtb
31c0791928SSimon Glass
32c0791928SSimon Glass    Args:
33c0791928SSimon Glass        dts_fname: Filename of .dts file in the current directory
34c0791928SSimon Glass
35c0791928SSimon Glass    Returns:
36c0791928SSimon Glass        Filename of compiled file in output directory
37c0791928SSimon Glass    """
38c0791928SSimon Glass    return fdt_util.EnsureCompiled(os.path.join(our_path, dts_fname))
39c0791928SSimon Glass
40c0791928SSimon Glass
41c0791928SSimon Glassclass TestDtoc(unittest.TestCase):
42c0791928SSimon Glass    """Tests for dtoc"""
43c0791928SSimon Glass    @classmethod
44c0791928SSimon Glass    def setUpClass(cls):
45c0791928SSimon Glass        tools.PrepareOutputDir(None)
46c0791928SSimon Glass
47c0791928SSimon Glass    @classmethod
48c0791928SSimon Glass    def tearDownClass(cls):
49c0791928SSimon Glass        tools._RemoveOutputDir()
50c0791928SSimon Glass
51c0791928SSimon Glass    def test_name(self):
52c0791928SSimon Glass        """Test conversion of device tree names to C identifiers"""
53c0791928SSimon Glass        self.assertEqual('serial_at_0x12', conv_name_to_c('serial@0x12'))
54c0791928SSimon Glass        self.assertEqual('vendor_clock_frequency',
55c0791928SSimon Glass                         conv_name_to_c('vendor,clock-frequency'))
56c0791928SSimon Glass        self.assertEqual('rockchip_rk3399_sdhci_5_1',
57c0791928SSimon Glass                         conv_name_to_c('rockchip,rk3399-sdhci-5.1'))
58c0791928SSimon Glass
59c0791928SSimon Glass    def test_tab_to(self):
60c0791928SSimon Glass        """Test operation of tab_to() function"""
61c0791928SSimon Glass        self.assertEqual('fred ', tab_to(0, 'fred'))
62c0791928SSimon Glass        self.assertEqual('fred\t', tab_to(1, 'fred'))
63c0791928SSimon Glass        self.assertEqual('fred was here ', tab_to(1, 'fred was here'))
64c0791928SSimon Glass        self.assertEqual('fred was here\t\t', tab_to(3, 'fred was here'))
65c0791928SSimon Glass        self.assertEqual('exactly8 ', tab_to(1, 'exactly8'))
66c0791928SSimon Glass        self.assertEqual('exactly8\t', tab_to(2, 'exactly8'))
67c0791928SSimon Glass
68c0791928SSimon Glass    def test_get_value(self):
69c0791928SSimon Glass        """Test operation of get_value() function"""
70c0791928SSimon Glass        self.assertEqual('0x45',
71c0791928SSimon Glass                         get_value(fdt.TYPE_INT, struct.pack('>I', 0x45)))
72c0791928SSimon Glass        self.assertEqual('0x45',
73c0791928SSimon Glass                         get_value(fdt.TYPE_BYTE, struct.pack('<I', 0x45)))
74c0791928SSimon Glass        self.assertEqual('0x0',
75c0791928SSimon Glass                         get_value(fdt.TYPE_BYTE, struct.pack('>I', 0x45)))
76c0791928SSimon Glass        self.assertEqual('"test"', get_value(fdt.TYPE_STRING, 'test'))
77c0791928SSimon Glass        self.assertEqual('true', get_value(fdt.TYPE_BOOL, None))
78c0791928SSimon Glass
79c0791928SSimon Glass    def test_get_compat_name(self):
80c0791928SSimon Glass        """Test operation of get_compat_name() function"""
81c0791928SSimon Glass        Prop = collections.namedtuple('Prop', ['value'])
82c0791928SSimon Glass        Node = collections.namedtuple('Node', ['props'])
83c0791928SSimon Glass
84c0791928SSimon Glass        prop = Prop(['rockchip,rk3399-sdhci-5.1', 'arasan,sdhci-5.1'])
85c0791928SSimon Glass        node = Node({'compatible': prop})
86c0791928SSimon Glass        self.assertEqual(('rockchip_rk3399_sdhci_5_1', ['arasan_sdhci_5_1']),
87c0791928SSimon Glass                         get_compat_name(node))
88c0791928SSimon Glass
89c0791928SSimon Glass        prop = Prop(['rockchip,rk3399-sdhci-5.1'])
90c0791928SSimon Glass        node = Node({'compatible': prop})
91c0791928SSimon Glass        self.assertEqual(('rockchip_rk3399_sdhci_5_1', []),
92c0791928SSimon Glass                         get_compat_name(node))
93c0791928SSimon Glass
94c0791928SSimon Glass        prop = Prop(['rockchip,rk3399-sdhci-5.1', 'arasan,sdhci-5.1', 'third'])
95c0791928SSimon Glass        node = Node({'compatible': prop})
96c0791928SSimon Glass        self.assertEqual(('rockchip_rk3399_sdhci_5_1',
97c0791928SSimon Glass                          ['arasan_sdhci_5_1', 'third']),
98c0791928SSimon Glass                         get_compat_name(node))
99c0791928SSimon Glass
100c0791928SSimon Glass    def test_empty_file(self):
101c0791928SSimon Glass        """Test output from a device tree file with no nodes"""
102c0791928SSimon Glass        dtb_file = get_dtb_file('dtoc_test_empty.dts')
103c0791928SSimon Glass        output = tools.GetOutputFilename('output')
104c0791928SSimon Glass        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
105c0791928SSimon Glass        with open(output) as infile:
106c0791928SSimon Glass            lines = infile.read().splitlines()
107c0791928SSimon Glass        self.assertEqual(['#include <stdbool.h>', '#include <libfdt.h>'], lines)
108c0791928SSimon Glass
109c0791928SSimon Glass        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
110c0791928SSimon Glass        with open(output) as infile:
111c0791928SSimon Glass            lines = infile.read().splitlines()
112c0791928SSimon Glass        self.assertEqual(['#include <common.h>', '#include <dm.h>',
113c0791928SSimon Glass                          '#include <dt-structs.h>', ''], lines)
114c0791928SSimon Glass
115c0791928SSimon Glass    def test_simple(self):
116c0791928SSimon Glass        """Test output from some simple nodes with various types of data"""
117c0791928SSimon Glass        dtb_file = get_dtb_file('dtoc_test_simple.dts')
118c0791928SSimon Glass        output = tools.GetOutputFilename('output')
119c0791928SSimon Glass        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
120c0791928SSimon Glass        with open(output) as infile:
121c0791928SSimon Glass            data = infile.read()
122c0791928SSimon Glass        self.assertEqual('''#include <stdbool.h>
123c0791928SSimon Glass#include <libfdt.h>
124c0791928SSimon Glassstruct dtd_sandbox_spl_test {
125c0791928SSimon Glass\tbool\t\tboolval;
126c0791928SSimon Glass\tunsigned char\tbytearray[3];
127c0791928SSimon Glass\tunsigned char\tbyteval;
128c0791928SSimon Glass\tfdt32_t\t\tintarray[4];
129c0791928SSimon Glass\tfdt32_t\t\tintval;
130c0791928SSimon Glass\tunsigned char\tlongbytearray[9];
131c0791928SSimon Glass\tconst char *\tstringarray[3];
132c0791928SSimon Glass\tconst char *\tstringval;
133c0791928SSimon Glass};
134c0791928SSimon Glassstruct dtd_sandbox_spl_test_2 {
135c0791928SSimon Glass};
136c0791928SSimon Glass''', data)
137c0791928SSimon Glass
138c0791928SSimon Glass        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
139c0791928SSimon Glass        with open(output) as infile:
140c0791928SSimon Glass            data = infile.read()
141c0791928SSimon Glass        self.assertEqual('''#include <common.h>
142c0791928SSimon Glass#include <dm.h>
143c0791928SSimon Glass#include <dt-structs.h>
144c0791928SSimon Glass
145c0791928SSimon Glassstatic struct dtd_sandbox_spl_test dtv_spl_test = {
146c0791928SSimon Glass\t.bytearray\t\t= {0x6, 0x0, 0x0},
147c0791928SSimon Glass\t.byteval\t\t= 0x5,
148c0791928SSimon Glass\t.intval\t\t\t= 0x1,
14912a972efSSimon Glass\t.longbytearray\t\t= {0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,
15012a972efSSimon Glass\t\t0x11},
151c0791928SSimon Glass\t.stringval\t\t= "message",
152c0791928SSimon Glass\t.boolval\t\t= true,
153c0791928SSimon Glass\t.intarray\t\t= {0x2, 0x3, 0x4, 0x0},
154c0791928SSimon Glass\t.stringarray\t\t= {"multi-word", "message", ""},
155c0791928SSimon Glass};
156c0791928SSimon GlassU_BOOT_DEVICE(spl_test) = {
157c0791928SSimon Glass\t.name\t\t= "sandbox_spl_test",
158c0791928SSimon Glass\t.platdata\t= &dtv_spl_test,
159c0791928SSimon Glass\t.platdata_size\t= sizeof(dtv_spl_test),
160c0791928SSimon Glass};
161c0791928SSimon Glass
162c0791928SSimon Glassstatic struct dtd_sandbox_spl_test dtv_spl_test2 = {
163c0791928SSimon Glass\t.bytearray\t\t= {0x1, 0x23, 0x34},
164c0791928SSimon Glass\t.byteval\t\t= 0x8,
165c0791928SSimon Glass\t.intval\t\t\t= 0x3,
16612a972efSSimon Glass\t.longbytearray\t\t= {0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
16712a972efSSimon Glass\t\t0x0},
168c0791928SSimon Glass\t.stringval\t\t= "message2",
169c0791928SSimon Glass\t.intarray\t\t= {0x5, 0x0, 0x0, 0x0},
170c0791928SSimon Glass\t.stringarray\t\t= {"another", "multi-word", "message"},
171c0791928SSimon Glass};
172c0791928SSimon GlassU_BOOT_DEVICE(spl_test2) = {
173c0791928SSimon Glass\t.name\t\t= "sandbox_spl_test",
174c0791928SSimon Glass\t.platdata\t= &dtv_spl_test2,
175c0791928SSimon Glass\t.platdata_size\t= sizeof(dtv_spl_test2),
176c0791928SSimon Glass};
177c0791928SSimon Glass
178c0791928SSimon Glassstatic struct dtd_sandbox_spl_test dtv_spl_test3 = {
179c0791928SSimon Glass\t.stringarray\t\t= {"one", "", ""},
180c0791928SSimon Glass};
181c0791928SSimon GlassU_BOOT_DEVICE(spl_test3) = {
182c0791928SSimon Glass\t.name\t\t= "sandbox_spl_test",
183c0791928SSimon Glass\t.platdata\t= &dtv_spl_test3,
184c0791928SSimon Glass\t.platdata_size\t= sizeof(dtv_spl_test3),
185c0791928SSimon Glass};
186c0791928SSimon Glass
187c0791928SSimon Glassstatic struct dtd_sandbox_spl_test_2 dtv_spl_test4 = {
188c0791928SSimon Glass};
189c0791928SSimon GlassU_BOOT_DEVICE(spl_test4) = {
190c0791928SSimon Glass\t.name\t\t= "sandbox_spl_test_2",
191c0791928SSimon Glass\t.platdata\t= &dtv_spl_test4,
192c0791928SSimon Glass\t.platdata_size\t= sizeof(dtv_spl_test4),
193c0791928SSimon Glass};
194c0791928SSimon Glass
195c0791928SSimon Glass''', data)
196c0791928SSimon Glass
197c0791928SSimon Glass    def test_phandle(self):
198c0791928SSimon Glass        """Test output from a node containing a phandle reference"""
199c0791928SSimon Glass        dtb_file = get_dtb_file('dtoc_test_phandle.dts')
200c0791928SSimon Glass        output = tools.GetOutputFilename('output')
201c0791928SSimon Glass        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
202c0791928SSimon Glass        with open(output) as infile:
203c0791928SSimon Glass            data = infile.read()
204c0791928SSimon Glass        self.assertEqual('''#include <stdbool.h>
205c0791928SSimon Glass#include <libfdt.h>
206c0791928SSimon Glassstruct dtd_source {
207c0791928SSimon Glass\tstruct phandle_2_cell clocks[1];
208c0791928SSimon Glass};
209c0791928SSimon Glassstruct dtd_target {
210c0791928SSimon Glass\tfdt32_t\t\tintval;
211c0791928SSimon Glass};
212c0791928SSimon Glass''', data)
213c0791928SSimon Glass
214c0791928SSimon Glass        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
215c0791928SSimon Glass        with open(output) as infile:
216c0791928SSimon Glass            data = infile.read()
217c0791928SSimon Glass        self.assertEqual('''#include <common.h>
218c0791928SSimon Glass#include <dm.h>
219c0791928SSimon Glass#include <dt-structs.h>
220c0791928SSimon Glass
221c0791928SSimon Glassstatic struct dtd_target dtv_phandle_target = {
222c0791928SSimon Glass\t.intval\t\t\t= 0x1,
223c0791928SSimon Glass};
224c0791928SSimon GlassU_BOOT_DEVICE(phandle_target) = {
225c0791928SSimon Glass\t.name\t\t= "target",
226c0791928SSimon Glass\t.platdata\t= &dtv_phandle_target,
227c0791928SSimon Glass\t.platdata_size\t= sizeof(dtv_phandle_target),
228c0791928SSimon Glass};
229c0791928SSimon Glass
230c0791928SSimon Glassstatic struct dtd_source dtv_phandle_source = {
231c0791928SSimon Glass\t.clocks\t\t\t= {{&dtv_phandle_target, 1}},
232c0791928SSimon Glass};
233c0791928SSimon GlassU_BOOT_DEVICE(phandle_source) = {
234c0791928SSimon Glass\t.name\t\t= "source",
235c0791928SSimon Glass\t.platdata\t= &dtv_phandle_source,
236c0791928SSimon Glass\t.platdata_size\t= sizeof(dtv_phandle_source),
237c0791928SSimon Glass};
238c0791928SSimon Glass
239c0791928SSimon Glass''', data)
240c0791928SSimon Glass
241c0791928SSimon Glass    def test_aliases(self):
242c0791928SSimon Glass        """Test output from a node with multiple compatible strings"""
243c0791928SSimon Glass        dtb_file = get_dtb_file('dtoc_test_aliases.dts')
244c0791928SSimon Glass        output = tools.GetOutputFilename('output')
245c0791928SSimon Glass        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
246c0791928SSimon Glass        with open(output) as infile:
247c0791928SSimon Glass            data = infile.read()
248c0791928SSimon Glass        self.assertEqual('''#include <stdbool.h>
249c0791928SSimon Glass#include <libfdt.h>
250c0791928SSimon Glassstruct dtd_compat1 {
251c0791928SSimon Glass\tfdt32_t\t\tintval;
252c0791928SSimon Glass};
253c0791928SSimon Glass#define dtd_compat2_1_fred dtd_compat1
254c0791928SSimon Glass#define dtd_compat3 dtd_compat1
255c0791928SSimon Glass''', data)
256c0791928SSimon Glass
257c0791928SSimon Glass        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
258c0791928SSimon Glass        with open(output) as infile:
259c0791928SSimon Glass            data = infile.read()
260c0791928SSimon Glass        self.assertEqual('''#include <common.h>
261c0791928SSimon Glass#include <dm.h>
262c0791928SSimon Glass#include <dt-structs.h>
263c0791928SSimon Glass
264c0791928SSimon Glassstatic struct dtd_compat1 dtv_spl_test = {
265c0791928SSimon Glass\t.intval\t\t\t= 0x1,
266c0791928SSimon Glass};
267c0791928SSimon GlassU_BOOT_DEVICE(spl_test) = {
268c0791928SSimon Glass\t.name\t\t= "compat1",
269c0791928SSimon Glass\t.platdata\t= &dtv_spl_test,
270c0791928SSimon Glass\t.platdata_size\t= sizeof(dtv_spl_test),
271c0791928SSimon Glass};
272c0791928SSimon Glass
273c0791928SSimon Glass''', data)
274*a28bfcc3SSimon Glass
275*a28bfcc3SSimon Glass    def test_addresses64(self):
276*a28bfcc3SSimon Glass        """Test output from a node with a 'reg' property with na=2, ns=2"""
277*a28bfcc3SSimon Glass        dtb_file = get_dtb_file('dtoc_test_addr64.dts')
278*a28bfcc3SSimon Glass        output = tools.GetOutputFilename('output')
279*a28bfcc3SSimon Glass        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
280*a28bfcc3SSimon Glass        with open(output) as infile:
281*a28bfcc3SSimon Glass            data = infile.read()
282*a28bfcc3SSimon Glass        self.assertEqual('''#include <stdbool.h>
283*a28bfcc3SSimon Glass#include <libfdt.h>
284*a28bfcc3SSimon Glassstruct dtd_test1 {
285*a28bfcc3SSimon Glass\tfdt64_t\t\treg[2];
286*a28bfcc3SSimon Glass};
287*a28bfcc3SSimon Glassstruct dtd_test2 {
288*a28bfcc3SSimon Glass\tfdt64_t\t\treg[2];
289*a28bfcc3SSimon Glass};
290*a28bfcc3SSimon Glassstruct dtd_test3 {
291*a28bfcc3SSimon Glass\tfdt64_t\t\treg[4];
292*a28bfcc3SSimon Glass};
293*a28bfcc3SSimon Glass''', data)
294*a28bfcc3SSimon Glass
295*a28bfcc3SSimon Glass        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
296*a28bfcc3SSimon Glass        with open(output) as infile:
297*a28bfcc3SSimon Glass            data = infile.read()
298*a28bfcc3SSimon Glass        self.assertEqual('''#include <common.h>
299*a28bfcc3SSimon Glass#include <dm.h>
300*a28bfcc3SSimon Glass#include <dt-structs.h>
301*a28bfcc3SSimon Glass
302*a28bfcc3SSimon Glassstatic struct dtd_test1 dtv_test1 = {
303*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x1234, 0x5678},
304*a28bfcc3SSimon Glass};
305*a28bfcc3SSimon GlassU_BOOT_DEVICE(test1) = {
306*a28bfcc3SSimon Glass\t.name\t\t= "test1",
307*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test1,
308*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test1),
309*a28bfcc3SSimon Glass};
310*a28bfcc3SSimon Glass
311*a28bfcc3SSimon Glassstatic struct dtd_test2 dtv_test2 = {
312*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x1234567890123456, 0x9876543210987654},
313*a28bfcc3SSimon Glass};
314*a28bfcc3SSimon GlassU_BOOT_DEVICE(test2) = {
315*a28bfcc3SSimon Glass\t.name\t\t= "test2",
316*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test2,
317*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test2),
318*a28bfcc3SSimon Glass};
319*a28bfcc3SSimon Glass
320*a28bfcc3SSimon Glassstatic struct dtd_test3 dtv_test3 = {
321*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x1234567890123456, 0x9876543210987654, 0x2, 0x3},
322*a28bfcc3SSimon Glass};
323*a28bfcc3SSimon GlassU_BOOT_DEVICE(test3) = {
324*a28bfcc3SSimon Glass\t.name\t\t= "test3",
325*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test3,
326*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test3),
327*a28bfcc3SSimon Glass};
328*a28bfcc3SSimon Glass
329*a28bfcc3SSimon Glass''', data)
330*a28bfcc3SSimon Glass
331*a28bfcc3SSimon Glass    def test_addresses32(self):
332*a28bfcc3SSimon Glass        """Test output from a node with a 'reg' property with na=1, ns=1"""
333*a28bfcc3SSimon Glass        dtb_file = get_dtb_file('dtoc_test_addr32.dts')
334*a28bfcc3SSimon Glass        output = tools.GetOutputFilename('output')
335*a28bfcc3SSimon Glass        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
336*a28bfcc3SSimon Glass        with open(output) as infile:
337*a28bfcc3SSimon Glass            data = infile.read()
338*a28bfcc3SSimon Glass        self.assertEqual('''#include <stdbool.h>
339*a28bfcc3SSimon Glass#include <libfdt.h>
340*a28bfcc3SSimon Glassstruct dtd_test1 {
341*a28bfcc3SSimon Glass\tfdt32_t\t\treg[2];
342*a28bfcc3SSimon Glass};
343*a28bfcc3SSimon Glassstruct dtd_test2 {
344*a28bfcc3SSimon Glass\tfdt32_t\t\treg[4];
345*a28bfcc3SSimon Glass};
346*a28bfcc3SSimon Glass''', data)
347*a28bfcc3SSimon Glass
348*a28bfcc3SSimon Glass        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
349*a28bfcc3SSimon Glass        with open(output) as infile:
350*a28bfcc3SSimon Glass            data = infile.read()
351*a28bfcc3SSimon Glass        self.assertEqual('''#include <common.h>
352*a28bfcc3SSimon Glass#include <dm.h>
353*a28bfcc3SSimon Glass#include <dt-structs.h>
354*a28bfcc3SSimon Glass
355*a28bfcc3SSimon Glassstatic struct dtd_test1 dtv_test1 = {
356*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x1234, 0x5678},
357*a28bfcc3SSimon Glass};
358*a28bfcc3SSimon GlassU_BOOT_DEVICE(test1) = {
359*a28bfcc3SSimon Glass\t.name\t\t= "test1",
360*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test1,
361*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test1),
362*a28bfcc3SSimon Glass};
363*a28bfcc3SSimon Glass
364*a28bfcc3SSimon Glassstatic struct dtd_test2 dtv_test2 = {
365*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x12345678, 0x98765432, 0x2, 0x3},
366*a28bfcc3SSimon Glass};
367*a28bfcc3SSimon GlassU_BOOT_DEVICE(test2) = {
368*a28bfcc3SSimon Glass\t.name\t\t= "test2",
369*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test2,
370*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test2),
371*a28bfcc3SSimon Glass};
372*a28bfcc3SSimon Glass
373*a28bfcc3SSimon Glass''', data)
374*a28bfcc3SSimon Glass
375*a28bfcc3SSimon Glass    def test_addresses64_32(self):
376*a28bfcc3SSimon Glass        """Test output from a node with a 'reg' property with na=2, ns=1"""
377*a28bfcc3SSimon Glass        dtb_file = get_dtb_file('dtoc_test_addr64_32.dts')
378*a28bfcc3SSimon Glass        output = tools.GetOutputFilename('output')
379*a28bfcc3SSimon Glass        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
380*a28bfcc3SSimon Glass        with open(output) as infile:
381*a28bfcc3SSimon Glass            data = infile.read()
382*a28bfcc3SSimon Glass        self.assertEqual('''#include <stdbool.h>
383*a28bfcc3SSimon Glass#include <libfdt.h>
384*a28bfcc3SSimon Glassstruct dtd_test1 {
385*a28bfcc3SSimon Glass\tfdt64_t\t\treg[2];
386*a28bfcc3SSimon Glass};
387*a28bfcc3SSimon Glassstruct dtd_test2 {
388*a28bfcc3SSimon Glass\tfdt64_t\t\treg[2];
389*a28bfcc3SSimon Glass};
390*a28bfcc3SSimon Glassstruct dtd_test3 {
391*a28bfcc3SSimon Glass\tfdt64_t\t\treg[4];
392*a28bfcc3SSimon Glass};
393*a28bfcc3SSimon Glass''', data)
394*a28bfcc3SSimon Glass
395*a28bfcc3SSimon Glass        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
396*a28bfcc3SSimon Glass        with open(output) as infile:
397*a28bfcc3SSimon Glass            data = infile.read()
398*a28bfcc3SSimon Glass        self.assertEqual('''#include <common.h>
399*a28bfcc3SSimon Glass#include <dm.h>
400*a28bfcc3SSimon Glass#include <dt-structs.h>
401*a28bfcc3SSimon Glass
402*a28bfcc3SSimon Glassstatic struct dtd_test1 dtv_test1 = {
403*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x123400000000, 0x5678},
404*a28bfcc3SSimon Glass};
405*a28bfcc3SSimon GlassU_BOOT_DEVICE(test1) = {
406*a28bfcc3SSimon Glass\t.name\t\t= "test1",
407*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test1,
408*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test1),
409*a28bfcc3SSimon Glass};
410*a28bfcc3SSimon Glass
411*a28bfcc3SSimon Glassstatic struct dtd_test2 dtv_test2 = {
412*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x1234567890123456, 0x98765432},
413*a28bfcc3SSimon Glass};
414*a28bfcc3SSimon GlassU_BOOT_DEVICE(test2) = {
415*a28bfcc3SSimon Glass\t.name\t\t= "test2",
416*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test2,
417*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test2),
418*a28bfcc3SSimon Glass};
419*a28bfcc3SSimon Glass
420*a28bfcc3SSimon Glassstatic struct dtd_test3 dtv_test3 = {
421*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x1234567890123456, 0x98765432, 0x2, 0x3},
422*a28bfcc3SSimon Glass};
423*a28bfcc3SSimon GlassU_BOOT_DEVICE(test3) = {
424*a28bfcc3SSimon Glass\t.name\t\t= "test3",
425*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test3,
426*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test3),
427*a28bfcc3SSimon Glass};
428*a28bfcc3SSimon Glass
429*a28bfcc3SSimon Glass''', data)
430*a28bfcc3SSimon Glass
431*a28bfcc3SSimon Glass    def test_addresses32_64(self):
432*a28bfcc3SSimon Glass        """Test output from a node with a 'reg' property with na=1, ns=2"""
433*a28bfcc3SSimon Glass        dtb_file = get_dtb_file('dtoc_test_addr32_64.dts')
434*a28bfcc3SSimon Glass        output = tools.GetOutputFilename('output')
435*a28bfcc3SSimon Glass        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
436*a28bfcc3SSimon Glass        with open(output) as infile:
437*a28bfcc3SSimon Glass            data = infile.read()
438*a28bfcc3SSimon Glass        self.assertEqual('''#include <stdbool.h>
439*a28bfcc3SSimon Glass#include <libfdt.h>
440*a28bfcc3SSimon Glassstruct dtd_test1 {
441*a28bfcc3SSimon Glass\tfdt64_t\t\treg[2];
442*a28bfcc3SSimon Glass};
443*a28bfcc3SSimon Glassstruct dtd_test2 {
444*a28bfcc3SSimon Glass\tfdt64_t\t\treg[2];
445*a28bfcc3SSimon Glass};
446*a28bfcc3SSimon Glassstruct dtd_test3 {
447*a28bfcc3SSimon Glass\tfdt64_t\t\treg[4];
448*a28bfcc3SSimon Glass};
449*a28bfcc3SSimon Glass''', data)
450*a28bfcc3SSimon Glass
451*a28bfcc3SSimon Glass        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
452*a28bfcc3SSimon Glass        with open(output) as infile:
453*a28bfcc3SSimon Glass            data = infile.read()
454*a28bfcc3SSimon Glass        self.assertEqual('''#include <common.h>
455*a28bfcc3SSimon Glass#include <dm.h>
456*a28bfcc3SSimon Glass#include <dt-structs.h>
457*a28bfcc3SSimon Glass
458*a28bfcc3SSimon Glassstatic struct dtd_test1 dtv_test1 = {
459*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x1234, 0x567800000000},
460*a28bfcc3SSimon Glass};
461*a28bfcc3SSimon GlassU_BOOT_DEVICE(test1) = {
462*a28bfcc3SSimon Glass\t.name\t\t= "test1",
463*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test1,
464*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test1),
465*a28bfcc3SSimon Glass};
466*a28bfcc3SSimon Glass
467*a28bfcc3SSimon Glassstatic struct dtd_test2 dtv_test2 = {
468*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x12345678, 0x9876543210987654},
469*a28bfcc3SSimon Glass};
470*a28bfcc3SSimon GlassU_BOOT_DEVICE(test2) = {
471*a28bfcc3SSimon Glass\t.name\t\t= "test2",
472*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test2,
473*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test2),
474*a28bfcc3SSimon Glass};
475*a28bfcc3SSimon Glass
476*a28bfcc3SSimon Glassstatic struct dtd_test3 dtv_test3 = {
477*a28bfcc3SSimon Glass\t.reg\t\t\t= {0x12345678, 0x9876543210987654, 0x2, 0x3},
478*a28bfcc3SSimon Glass};
479*a28bfcc3SSimon GlassU_BOOT_DEVICE(test3) = {
480*a28bfcc3SSimon Glass\t.name\t\t= "test3",
481*a28bfcc3SSimon Glass\t.platdata\t= &dtv_test3,
482*a28bfcc3SSimon Glass\t.platdata_size\t= sizeof(dtv_test3),
483*a28bfcc3SSimon Glass};
484*a28bfcc3SSimon Glass
485*a28bfcc3SSimon Glass''', data)
486