dtc: Correct invalid dts output with mixed phandles and integers
The handling of "type preservation" dts output is based on the idea of "phandles with arguments" in properties, which isn't really a thing, other than a fairly common convention about how bindings are written. There's nothing preventing a binding which freely mixes phandles and other integers in an array of cells. Currently write_propval() handles this incorrectly: specifically the case of a phandle which follows a regular integer in a 32-bit cell array, but without a new '< >' delimited causing an extra TYPE_UINT32 marker to be inserted. In this case it omits the necessary space between the integer and the phandle reference, leading to output which can't be sent back into dtc and parsed. Correct this, and update tests to match. I think this is more or less correct for now, but really write_propval() is a big mess :(. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>main
parent
d4888958d6
commit
3b02a94b48
|
@ -15,6 +15,7 @@
|
|||
a-string-with-nulls: ["foo\0bar", "baz"]
|
||||
a-phandle: [[!phandle 0x1]]
|
||||
a-phandle-with-args: [[!phandle 0x1, 0x0, 0x1], [!phandle 0x1, 0x2, 0x3]]
|
||||
mixed-ints-and-phandles: [[0x1, !phandle 0x1, 0x2, !phandle 0x1]]
|
||||
subsubnode:
|
||||
compatible: ["subsubnode1", "subsubnode"]
|
||||
phandle: [[0x1]]
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
a-string-with-nulls = "foo\0bar", "baz";
|
||||
a-phandle = <&subsub1>;
|
||||
a-phandle-with-args = <&subsub1 0x00 0x01>, <&subsub1 0x02 0x03>;
|
||||
mixed-ints-and-phandles = <0x01 &subsub1 0x02 &subsub1>;
|
||||
|
||||
subsub1: subsubnode {
|
||||
compatible = "subsubnode1", "subsubnode";
|
||||
|
|
|
@ -241,6 +241,8 @@ static void write_propval(FILE *f, struct property *prop)
|
|||
} else {
|
||||
write_propval_int(f, p, chunk_len, 4);
|
||||
}
|
||||
if (data_len > chunk_len)
|
||||
fputc(' ', f);
|
||||
break;
|
||||
case TYPE_UINT64:
|
||||
write_propval_int(f, p, chunk_len, 8);
|
||||
|
|
Loading…
Reference in New Issue