]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dtoc: Support ACPI paths in of-platdata
authorSimon Glass <sjg@chromium.org>
Wed, 8 Jul 2020 03:32:06 +0000 (21:32 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Fri, 17 Jul 2020 06:32:24 +0000 (14:32 +0800)
The start of an ACPI path typically has backslashes in it. These are not
preserved during the translation from device tree to C code, since dtc
(correctly) uses the first backslash as an escape character, and dtoc
therefore leaves it out of the C string.

Fix this with special-case handling.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/dtoc/dtb_platdata.py
tools/dtoc/dtoc_test_simple.dts
tools/dtoc/test_dtoc.py

index c148c49625ecf4ab036aa68622e21ee503d6d7a5..8ba8f1636961e19377fe5e6469d3c8ac10d44c81 100644 (file)
@@ -104,7 +104,9 @@ def get_value(ftype, value):
     elif ftype == fdt.TYPE_BYTE:
         return '%#x' % tools.ToByte(value[0])
     elif ftype == fdt.TYPE_STRING:
-        return '"%s"' % value
+        # Handle evil ACPI backslashes by adding another backslash before them.
+        # So "\\_SB.GPO0" in the device tree effectively stays like that in C
+        return '"%s"' % value.replace('\\', '\\\\')
     elif ftype == fdt.TYPE_BOOL:
         return 'true'
     elif ftype == fdt.TYPE_INT64:
index 165680bd4bf0cc1422b8bf7b38a65ef1c9414d04..11bfc4c47aa163ae634d6aa898bd68b37d4719fd 100644 (file)
@@ -34,6 +34,7 @@
                longbytearray = [09 0a 0b 0c];
                stringval = "message2";
                stringarray = "another", "multi-word", "message";
+               acpi-name =  "\\_SB.GPO0";
        };
 
        spl-test3 {
index 3c8e343b1ff8f71a2b30ffe7175a702d3d555e96..08b02d484383cbc21110f7856ae84f68e8ca1b49 100755 (executable)
@@ -72,6 +72,7 @@ class TestDtoc(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         tools.PrepareOutputDir(None)
+        cls.maxDiff = None
 
     @classmethod
     def tearDownClass(cls):
@@ -188,6 +189,7 @@ struct dtd_sandbox_pmic_test {
 \tfdt64_t\t\treg[2];
 };
 struct dtd_sandbox_spl_test {
+\tconst char * acpi_name;
 \tbool\t\tboolval;
 \tunsigned char\tbytearray[3];
 \tunsigned char\tbyteval;
@@ -225,6 +227,7 @@ U_BOOT_DEVICE(spl_test) = {
 };
 
 static struct dtd_sandbox_spl_test dtv_spl_test2 = {
+\t.acpi_name\t\t= "\\\\_SB.GPO0",
 \t.bytearray\t\t= {0x1, 0x23, 0x34},
 \t.byteval\t\t= 0x8,
 \t.intarray\t\t= {0x5, 0x0, 0x0, 0x0},