|
@@ -48,6 +48,9 @@ C_HEADER = '''/*
|
|
|
#include <dt-structs.h>
|
|
|
'''
|
|
|
|
|
|
+C_EMPTY_POPULATE_PHANDLE_DATA = '''void dm_populate_phandle_data(void) {
|
|
|
+}
|
|
|
+'''
|
|
|
|
|
|
|
|
|
def get_dtb_file(dts_fname, capture_stderr=False):
|
|
@@ -167,7 +170,8 @@ class TestDtoc(unittest.TestCase):
|
|
|
self.run_test(['platdata'], dtb_file, output)
|
|
|
with open(output) as infile:
|
|
|
lines = infile.read().splitlines()
|
|
|
- self.assertEqual(C_HEADER.splitlines() + [''], lines)
|
|
|
+ self.assertEqual(C_HEADER.splitlines() + [''] +
|
|
|
+ C_EMPTY_POPULATE_PHANDLE_DATA.splitlines(), lines)
|
|
|
|
|
|
def test_simple(self):
|
|
|
"""Test output from some simple nodes with various types of data"""
|
|
@@ -202,7 +206,7 @@ struct dtd_sandbox_spl_test_2 {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_sandbox_spl_test dtv_spl_test = {
|
|
|
+static struct dtd_sandbox_spl_test dtv_spl_test = {
|
|
|
\t.boolval\t\t= true,
|
|
|
\t.bytearray\t\t= {0x6, 0x0, 0x0},
|
|
|
\t.byteval\t\t= 0x5,
|
|
@@ -220,7 +224,7 @@ U_BOOT_DEVICE(spl_test) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_spl_test),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_sandbox_spl_test dtv_spl_test2 = {
|
|
|
+static struct dtd_sandbox_spl_test dtv_spl_test2 = {
|
|
|
\t.bytearray\t\t= {0x1, 0x23, 0x34},
|
|
|
\t.byteval\t\t= 0x8,
|
|
|
\t.intarray\t\t= {0x5, 0x0, 0x0, 0x0},
|
|
@@ -236,7 +240,7 @@ U_BOOT_DEVICE(spl_test2) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_spl_test2),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_sandbox_spl_test dtv_spl_test3 = {
|
|
|
+static struct dtd_sandbox_spl_test dtv_spl_test3 = {
|
|
|
\t.stringarray\t\t= {"one", "", ""},
|
|
|
};
|
|
|
U_BOOT_DEVICE(spl_test3) = {
|
|
@@ -245,7 +249,7 @@ U_BOOT_DEVICE(spl_test3) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_spl_test3),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_sandbox_spl_test_2 dtv_spl_test4 = {
|
|
|
+static struct dtd_sandbox_spl_test_2 dtv_spl_test4 = {
|
|
|
};
|
|
|
U_BOOT_DEVICE(spl_test4) = {
|
|
|
\t.name\t\t= "sandbox_spl_test_2",
|
|
@@ -253,7 +257,7 @@ U_BOOT_DEVICE(spl_test4) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_spl_test4),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_sandbox_i2c_test dtv_i2c_at_0 = {
|
|
|
+static struct dtd_sandbox_i2c_test dtv_i2c_at_0 = {
|
|
|
};
|
|
|
U_BOOT_DEVICE(i2c_at_0) = {
|
|
|
\t.name\t\t= "sandbox_i2c_test",
|
|
@@ -261,7 +265,7 @@ U_BOOT_DEVICE(i2c_at_0) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_i2c_at_0),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_sandbox_pmic_test dtv_pmic_at_9 = {
|
|
|
+static struct dtd_sandbox_pmic_test dtv_pmic_at_9 = {
|
|
|
\t.low_power\t\t= true,
|
|
|
\t.reg\t\t\t= {0x9, 0x0},
|
|
|
};
|
|
@@ -271,7 +275,7 @@ U_BOOT_DEVICE(pmic_at_9) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_pmic_at_9),
|
|
|
};
|
|
|
|
|
|
-''', data)
|
|
|
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
|
|
|
|
|
|
def test_driver_alias(self):
|
|
|
"""Test output from a device tree file with a driver alias"""
|
|
@@ -293,7 +297,7 @@ struct dtd_sandbox_gpio {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_sandbox_gpio dtv_gpios_at_0 = {
|
|
|
+static struct dtd_sandbox_gpio dtv_gpios_at_0 = {
|
|
|
\t.gpio_bank_name\t\t= "a",
|
|
|
\t.gpio_controller\t= true,
|
|
|
\t.sandbox_gpio_count\t= 0x14,
|
|
@@ -304,6 +308,8 @@ U_BOOT_DEVICE(gpios_at_0) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_gpios_at_0),
|
|
|
};
|
|
|
|
|
|
+void dm_populate_phandle_data(void) {
|
|
|
+}
|
|
|
''', data)
|
|
|
|
|
|
def test_invalid_driver(self):
|
|
@@ -324,7 +330,7 @@ struct dtd_invalid {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_invalid dtv_spl_test = {
|
|
|
+static struct dtd_invalid dtv_spl_test = {
|
|
|
};
|
|
|
U_BOOT_DEVICE(spl_test) = {
|
|
|
\t.name\t\t= "invalid",
|
|
@@ -332,6 +338,8 @@ U_BOOT_DEVICE(spl_test) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_spl_test),
|
|
|
};
|
|
|
|
|
|
+void dm_populate_phandle_data(void) {
|
|
|
+}
|
|
|
''', data)
|
|
|
|
|
|
def test_phandle(self):
|
|
@@ -354,7 +362,7 @@ struct dtd_target {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_target dtv_phandle_target = {
|
|
|
+static struct dtd_target dtv_phandle_target = {
|
|
|
\t.intval\t\t\t= 0x0,
|
|
|
};
|
|
|
U_BOOT_DEVICE(phandle_target) = {
|
|
@@ -363,7 +371,7 @@ U_BOOT_DEVICE(phandle_target) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_phandle_target),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_target dtv_phandle2_target = {
|
|
|
+static struct dtd_target dtv_phandle2_target = {
|
|
|
\t.intval\t\t\t= 0x1,
|
|
|
};
|
|
|
U_BOOT_DEVICE(phandle2_target) = {
|
|
@@ -372,7 +380,7 @@ U_BOOT_DEVICE(phandle2_target) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_phandle2_target),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_target dtv_phandle3_target = {
|
|
|
+static struct dtd_target dtv_phandle3_target = {
|
|
|
\t.intval\t\t\t= 0x2,
|
|
|
};
|
|
|
U_BOOT_DEVICE(phandle3_target) = {
|
|
@@ -381,12 +389,12 @@ U_BOOT_DEVICE(phandle3_target) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_phandle3_target),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_source dtv_phandle_source = {
|
|
|
+static struct dtd_source dtv_phandle_source = {
|
|
|
\t.clocks\t\t\t= {
|
|
|
-\t\t\t{&dtv_phandle_target, {}},
|
|
|
-\t\t\t{&dtv_phandle2_target, {11}},
|
|
|
-\t\t\t{&dtv_phandle3_target, {12, 13}},
|
|
|
-\t\t\t{&dtv_phandle_target, {}},},
|
|
|
+\t\t\t{NULL, {}},
|
|
|
+\t\t\t{NULL, {11}},
|
|
|
+\t\t\t{NULL, {12, 13}},
|
|
|
+\t\t\t{NULL, {}},},
|
|
|
};
|
|
|
U_BOOT_DEVICE(phandle_source) = {
|
|
|
\t.name\t\t= "source",
|
|
@@ -394,9 +402,9 @@ U_BOOT_DEVICE(phandle_source) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_phandle_source),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_source dtv_phandle_source2 = {
|
|
|
+static struct dtd_source dtv_phandle_source2 = {
|
|
|
\t.clocks\t\t\t= {
|
|
|
-\t\t\t{&dtv_phandle_target, {}},},
|
|
|
+\t\t\t{NULL, {}},},
|
|
|
};
|
|
|
U_BOOT_DEVICE(phandle_source2) = {
|
|
|
\t.name\t\t= "source",
|
|
@@ -404,6 +412,13 @@ U_BOOT_DEVICE(phandle_source2) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_phandle_source2),
|
|
|
};
|
|
|
|
|
|
+void dm_populate_phandle_data(void) {
|
|
|
+\tdtv_phandle_source.clocks[0].node = DM_GET_DEVICE(phandle_target);
|
|
|
+\tdtv_phandle_source.clocks[1].node = DM_GET_DEVICE(phandle2_target);
|
|
|
+\tdtv_phandle_source.clocks[2].node = DM_GET_DEVICE(phandle3_target);
|
|
|
+\tdtv_phandle_source.clocks[3].node = DM_GET_DEVICE(phandle_target);
|
|
|
+\tdtv_phandle_source2.clocks[0].node = DM_GET_DEVICE(phandle_target);
|
|
|
+}
|
|
|
''', data)
|
|
|
|
|
|
def test_phandle_single(self):
|
|
@@ -430,7 +445,7 @@ struct dtd_target {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_target dtv_phandle_target = {
|
|
|
+static struct dtd_target dtv_phandle_target = {
|
|
|
};
|
|
|
U_BOOT_DEVICE(phandle_target) = {
|
|
|
\t.name\t\t= "target",
|
|
@@ -438,9 +453,9 @@ U_BOOT_DEVICE(phandle_target) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_phandle_target),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_source dtv_phandle_source2 = {
|
|
|
+static struct dtd_source dtv_phandle_source2 = {
|
|
|
\t.clocks\t\t\t= {
|
|
|
-\t\t\t{&dtv_phandle_target, {}},},
|
|
|
+\t\t\t{NULL, {}},},
|
|
|
};
|
|
|
U_BOOT_DEVICE(phandle_source2) = {
|
|
|
\t.name\t\t= "source",
|
|
@@ -448,6 +463,9 @@ U_BOOT_DEVICE(phandle_source2) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_phandle_source2),
|
|
|
};
|
|
|
|
|
|
+void dm_populate_phandle_data(void) {
|
|
|
+\tdtv_phandle_source2.clocks[0].node = DM_GET_DEVICE(phandle_target);
|
|
|
+}
|
|
|
''', data)
|
|
|
|
|
|
def test_phandle_bad(self):
|
|
@@ -489,7 +507,7 @@ struct dtd_compat1 {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_compat1 dtv_spl_test = {
|
|
|
+static struct dtd_compat1 dtv_spl_test = {
|
|
|
\t.intval\t\t\t= 0x1,
|
|
|
};
|
|
|
U_BOOT_DEVICE(spl_test) = {
|
|
@@ -498,7 +516,7 @@ U_BOOT_DEVICE(spl_test) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_spl_test),
|
|
|
};
|
|
|
|
|
|
-''', data)
|
|
|
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
|
|
|
|
|
|
def test_addresses64(self):
|
|
|
"""Test output from a node with a 'reg' property with na=2, ns=2"""
|
|
@@ -523,7 +541,7 @@ struct dtd_test3 {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_test1 dtv_test1 = {
|
|
|
+static struct dtd_test1 dtv_test1 = {
|
|
|
\t.reg\t\t\t= {0x1234, 0x5678},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test1) = {
|
|
@@ -532,7 +550,7 @@ U_BOOT_DEVICE(test1) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test1),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_test2 dtv_test2 = {
|
|
|
+static struct dtd_test2 dtv_test2 = {
|
|
|
\t.reg\t\t\t= {0x1234567890123456, 0x9876543210987654},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test2) = {
|
|
@@ -541,7 +559,7 @@ U_BOOT_DEVICE(test2) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test2),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_test3 dtv_test3 = {
|
|
|
+static struct dtd_test3 dtv_test3 = {
|
|
|
\t.reg\t\t\t= {0x1234567890123456, 0x9876543210987654, 0x2, 0x3},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test3) = {
|
|
@@ -550,7 +568,7 @@ U_BOOT_DEVICE(test3) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test3),
|
|
|
};
|
|
|
|
|
|
-''', data)
|
|
|
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
|
|
|
|
|
|
def test_addresses32(self):
|
|
|
"""Test output from a node with a 'reg' property with na=1, ns=1"""
|
|
@@ -572,7 +590,7 @@ struct dtd_test2 {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_test1 dtv_test1 = {
|
|
|
+static struct dtd_test1 dtv_test1 = {
|
|
|
\t.reg\t\t\t= {0x1234, 0x5678},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test1) = {
|
|
@@ -581,7 +599,7 @@ U_BOOT_DEVICE(test1) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test1),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_test2 dtv_test2 = {
|
|
|
+static struct dtd_test2 dtv_test2 = {
|
|
|
\t.reg\t\t\t= {0x12345678, 0x98765432, 0x2, 0x3},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test2) = {
|
|
@@ -590,7 +608,7 @@ U_BOOT_DEVICE(test2) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test2),
|
|
|
};
|
|
|
|
|
|
-''', data)
|
|
|
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
|
|
|
|
|
|
def test_addresses64_32(self):
|
|
|
"""Test output from a node with a 'reg' property with na=2, ns=1"""
|
|
@@ -615,7 +633,7 @@ struct dtd_test3 {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_test1 dtv_test1 = {
|
|
|
+static struct dtd_test1 dtv_test1 = {
|
|
|
\t.reg\t\t\t= {0x123400000000, 0x5678},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test1) = {
|
|
@@ -624,7 +642,7 @@ U_BOOT_DEVICE(test1) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test1),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_test2 dtv_test2 = {
|
|
|
+static struct dtd_test2 dtv_test2 = {
|
|
|
\t.reg\t\t\t= {0x1234567890123456, 0x98765432},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test2) = {
|
|
@@ -633,7 +651,7 @@ U_BOOT_DEVICE(test2) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test2),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_test3 dtv_test3 = {
|
|
|
+static struct dtd_test3 dtv_test3 = {
|
|
|
\t.reg\t\t\t= {0x1234567890123456, 0x98765432, 0x2, 0x3},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test3) = {
|
|
@@ -642,7 +660,7 @@ U_BOOT_DEVICE(test3) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test3),
|
|
|
};
|
|
|
|
|
|
-''', data)
|
|
|
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
|
|
|
|
|
|
def test_addresses32_64(self):
|
|
|
"""Test output from a node with a 'reg' property with na=1, ns=2"""
|
|
@@ -667,7 +685,7 @@ struct dtd_test3 {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_test1 dtv_test1 = {
|
|
|
+static struct dtd_test1 dtv_test1 = {
|
|
|
\t.reg\t\t\t= {0x1234, 0x567800000000},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test1) = {
|
|
@@ -676,7 +694,7 @@ U_BOOT_DEVICE(test1) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test1),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_test2 dtv_test2 = {
|
|
|
+static struct dtd_test2 dtv_test2 = {
|
|
|
\t.reg\t\t\t= {0x12345678, 0x9876543210987654},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test2) = {
|
|
@@ -685,7 +703,7 @@ U_BOOT_DEVICE(test2) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test2),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_test3 dtv_test3 = {
|
|
|
+static struct dtd_test3 dtv_test3 = {
|
|
|
\t.reg\t\t\t= {0x12345678, 0x9876543210987654, 0x2, 0x3},
|
|
|
};
|
|
|
U_BOOT_DEVICE(test3) = {
|
|
@@ -694,7 +712,7 @@ U_BOOT_DEVICE(test3) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_test3),
|
|
|
};
|
|
|
|
|
|
-''', data)
|
|
|
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
|
|
|
|
|
|
def test_bad_reg(self):
|
|
|
"""Test that a reg property with an invalid type generates an error"""
|
|
@@ -734,7 +752,7 @@ struct dtd_sandbox_spl_test {
|
|
|
with open(output) as infile:
|
|
|
data = infile.read()
|
|
|
self._CheckStrings(C_HEADER + '''
|
|
|
-static const struct dtd_sandbox_spl_test dtv_spl_test = {
|
|
|
+static struct dtd_sandbox_spl_test dtv_spl_test = {
|
|
|
\t.intval\t\t\t= 0x1,
|
|
|
};
|
|
|
U_BOOT_DEVICE(spl_test) = {
|
|
@@ -743,7 +761,7 @@ U_BOOT_DEVICE(spl_test) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_spl_test),
|
|
|
};
|
|
|
|
|
|
-static const struct dtd_sandbox_spl_test dtv_spl_test2 = {
|
|
|
+static struct dtd_sandbox_spl_test dtv_spl_test2 = {
|
|
|
\t.intarray\t\t= 0x5,
|
|
|
};
|
|
|
U_BOOT_DEVICE(spl_test2) = {
|
|
@@ -752,7 +770,7 @@ U_BOOT_DEVICE(spl_test2) = {
|
|
|
\t.platdata_size\t= sizeof(dtv_spl_test2),
|
|
|
};
|
|
|
|
|
|
-''', data)
|
|
|
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
|
|
|
|
|
|
def testStdout(self):
|
|
|
"""Test output to stdout"""
|