On Wed, Sep 18, 2019 at 01:35:34PM -0500, Rob Herring wrote: > The dts syntax allows for '<>' around phandles and arg cells or not > which it didn't matter until adding type information. However, the YAML > encoding expects each phandle + args to be bracketed. > > If TYPE_UINT32 markers are not present before each REF_PHANDLE, fix up > the markers and add the TYPE_UINT32 markers. This allows the subsequent > YAML emitting code to work as-is. > > Adding the markers at an earlier stage doesn't work because of > possible labels in dts output. We'd have to define the ordering of > labels and brackets. Also, it is probably best to have dts output match > the input. > > Signed-off-by: Rob Herring <robh@xxxxxxxxxx> I've applied this. Gotta say, though, it feels like a fragile hack occasioned by the fact that the yaml format has information that the base tree format simply doesn't (clients have to combine it with the binding to get that). > --- > yamltree.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/yamltree.c b/yamltree.c > index 5b6ea8ea862f..43ca869dd6a8 100644 > --- a/yamltree.c > +++ b/yamltree.c > @@ -138,6 +138,27 @@ static void yaml_propval(yaml_emitter_t *emitter, struct property *prop) > (yaml_char_t *)YAML_SEQ_TAG, 1, YAML_FLOW_SEQUENCE_STYLE); > yaml_emitter_emit_or_die(emitter, &event); > > + /* Ensure we have a type marker before any phandle */ > + for_each_marker(m) { > + int last_offset = 0; > + struct marker *type_m; > + > + if (m->type >= TYPE_UINT8) > + last_offset = m->offset; > + > + if (!(m->next && m->next->type == REF_PHANDLE && > + last_offset < m->next->offset)) > + continue; > + > + type_m = xmalloc(sizeof(*type_m)); > + type_m->offset = m->next->offset; > + type_m->type = TYPE_UINT32; > + type_m->ref = NULL; > + type_m->next = m->next; > + m->next = type_m; > + } > + > + m = prop->val.markers; > for_each_marker(m) { > int chunk_len; > char *data = &prop->val.val[m->offset]; -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Attachment:
signature.asc
Description: PGP signature