mirror of
https://github.com/dgibson/dtc.git
synced 2025-10-13 16:27:39 -04:00
treesource: Maintain phandle label/path on output
The dts output will just output phandle integer values, but often the necessary markers are present with path or label references. Improve the output and maintain phandle label or path references when present in dts output. Signed-off-by: Rob Herring <robh@kernel.org> Message-Id: <20210727183023.3212077-6-robh@kernel.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
e33ce1d6a8
commit
37fd700685
3 changed files with 25 additions and 6 deletions
25
treesource.c
25
treesource.c
|
@ -208,26 +208,39 @@ static void write_propval(FILE *f, struct property *prop)
|
|||
size_t chunk_len = (m->next ? m->next->offset : len) - m->offset;
|
||||
size_t data_len = type_marker_length(m) ? : len - m->offset;
|
||||
const char *p = &prop->val.val[m->offset];
|
||||
struct marker *m_phandle;
|
||||
|
||||
if (is_type_marker(m->type)) {
|
||||
emit_type = m->type;
|
||||
fprintf(f, " %s", delim_start[emit_type]);
|
||||
} else if (m->type == LABEL)
|
||||
fprintf(f, " %s:", m->ref);
|
||||
else if (m->offset)
|
||||
fputc(' ', f);
|
||||
|
||||
if (emit_type == TYPE_NONE) {
|
||||
assert(chunk_len == 0);
|
||||
if (emit_type == TYPE_NONE || chunk_len == 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
switch(emit_type) {
|
||||
case TYPE_UINT16:
|
||||
write_propval_int(f, p, chunk_len, 2);
|
||||
break;
|
||||
case TYPE_UINT32:
|
||||
write_propval_int(f, p, chunk_len, 4);
|
||||
m_phandle = prop->val.markers;
|
||||
for_each_marker_of_type(m_phandle, REF_PHANDLE)
|
||||
if (m->offset == m_phandle->offset)
|
||||
break;
|
||||
|
||||
if (m_phandle) {
|
||||
if (m_phandle->ref[0] == '/')
|
||||
fprintf(f, "&{%s}", m_phandle->ref);
|
||||
else
|
||||
fprintf(f, "&%s", m_phandle->ref);
|
||||
if (chunk_len > 4) {
|
||||
fputc(' ', f);
|
||||
write_propval_int(f, p + 4, chunk_len - 4, 4);
|
||||
}
|
||||
} else {
|
||||
write_propval_int(f, p, chunk_len, 4);
|
||||
}
|
||||
break;
|
||||
case TYPE_UINT64:
|
||||
write_propval_int(f, p, chunk_len, 8);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue