Message ID | 20200115051901.17514-10-amitay@ozlabs.org |
---|---|
State | Accepted |
Headers | show |
Series | Use fdt properties directly | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch master (8b4611b5d8e7e2279fe4aa80c892fcfe10aa398d) |
snowpatch_ozlabs/apply_patch | fail | Failed to apply to any branch |
Reviewed-by: Alistair Popple <alistair@popple.id.au> On Wednesday, 15 January 2020 4:18:57 PM AEDT Amitay Isaacs wrote: > This avoids the use of struct dt_property, which will be removed later. > > Signed-off-by: Amitay Isaacs <amitay@ozlabs.org> > --- > libpdbg/device.c | 54 ++++++++++++++++++++++++------------------------ > 1 file changed, 27 insertions(+), 27 deletions(-) > > diff --git a/libpdbg/device.c b/libpdbg/device.c > index 76d6b3e..b60b0aa 100644 > --- a/libpdbg/device.c > +++ b/libpdbg/device.c > @@ -320,17 +320,6 @@ again: > return target_to_real(root, false); > } > > -static struct dt_property *dt_find_property(const struct pdbg_target *node, > - const char *name) > -{ > - struct dt_property *i = NULL; > - > - list_for_each(&node->properties, i, list) > - if (strcmp(i->name, name) == 0) > - return i; > - return NULL; > -} > - > static void dt_add_phandle(struct pdbg_target *node, const char *name, > const void *val, size_t size) > { > @@ -387,11 +376,11 @@ const void *pdbg_target_property(struct pdbg_target > *target, const char *name, s return buf; > } > > -static u32 dt_property_get_cell(const struct dt_property *prop, u32 index) > +static u32 dt_property_get_cell(const void *prop, size_t len, u32 index) > { > - assert(prop->len >= (index+1)*sizeof(u32)); > + assert(len >= (index+1)*sizeof(u32)); > /* Always aligned, so this works. */ > - return fdt32_to_cpu(((const u32 *)prop->prop)[index]); > + return fdt32_to_cpu(((const u32 *)prop)[index]); > } > > /* First child of this node. */ > @@ -420,11 +409,14 @@ static struct pdbg_target *dt_next(const struct > pdbg_target *root, return NULL; > } > > -static const struct dt_property *dt_require_property(struct pdbg_target > *node, - const char *name, int wanted_len) > +static const void *dt_require_property(struct pdbg_target *node, > + const char *name, int wanted_len, > + size_t *prop_len) > { > - const struct dt_property *p = dt_find_property(node, name); > + const void *p; > + size_t len; > > + p = pdbg_target_property(node, name, &len); > if (!p) { > const char *path = dt_get_path(node); > > @@ -432,16 +424,19 @@ static const struct dt_property > *dt_require_property(struct pdbg_target *node, path, name); > assert(false); > } > - if (wanted_len >= 0 && p->len != wanted_len) { > + if (wanted_len >= 0 && len != wanted_len) { > const char *path = dt_get_path(node); > > prerror("DT: Unexpected property length %s/%s\n", > path, name); > prerror("DT: Expected len: %d got len: %zu\n", > - wanted_len, p->len); > + wanted_len, len); > assert(false); > } > > + if (prop_len) { > + *prop_len = len; > + } > return p; > } > > @@ -478,15 +473,18 @@ struct pdbg_target *__pdbg_next_compatible_node(struct > pdbg_target *root, return NULL; > } > > -static uint32_t dt_prop_get_u32_def(const struct pdbg_target *node, > +static uint32_t dt_prop_get_u32_def(struct pdbg_target *node, > const char *prop, uint32_t def) > { > - const struct dt_property *p = dt_find_property(node, prop); > + const void *p; > + size_t len; > > + p = pdbg_target_property(node, prop, &len); > if (!p) > return def; > > - return dt_property_get_cell(p, 0); > + > + return dt_property_get_cell(p, len, 0); > } > > static enum pdbg_target_status str_to_status(const char *status) > @@ -602,17 +600,19 @@ static u32 dt_n_size_cells(const struct pdbg_target > *node) > > uint64_t pdbg_target_address(struct pdbg_target *target, uint64_t > *out_size) { > - const struct dt_property *p; > + const void *p; > + size_t len; > + > u32 na = dt_n_address_cells(target); > u32 ns = dt_n_size_cells(target); > u32 n; > > - p = dt_require_property(target, "reg", -1); > + p = dt_require_property(target, "reg", -1, &len); > n = (na + ns) * sizeof(u32); > - assert(n <= p->len); > + assert(n <= len); > if (out_size) > - *out_size = dt_get_number(p->prop + na * sizeof(u32), ns); > - return dt_get_number(p->prop, na); > + *out_size = dt_get_number(p + na * sizeof(u32), ns); > + return dt_get_number(p, na); > } > > static struct pdbg_target *dt_new_virtual(struct pdbg_target *root, const > char *system_path)
diff --git a/libpdbg/device.c b/libpdbg/device.c index 76d6b3e..b60b0aa 100644 --- a/libpdbg/device.c +++ b/libpdbg/device.c @@ -320,17 +320,6 @@ again: return target_to_real(root, false); } -static struct dt_property *dt_find_property(const struct pdbg_target *node, - const char *name) -{ - struct dt_property *i = NULL; - - list_for_each(&node->properties, i, list) - if (strcmp(i->name, name) == 0) - return i; - return NULL; -} - static void dt_add_phandle(struct pdbg_target *node, const char *name, const void *val, size_t size) { @@ -387,11 +376,11 @@ const void *pdbg_target_property(struct pdbg_target *target, const char *name, s return buf; } -static u32 dt_property_get_cell(const struct dt_property *prop, u32 index) +static u32 dt_property_get_cell(const void *prop, size_t len, u32 index) { - assert(prop->len >= (index+1)*sizeof(u32)); + assert(len >= (index+1)*sizeof(u32)); /* Always aligned, so this works. */ - return fdt32_to_cpu(((const u32 *)prop->prop)[index]); + return fdt32_to_cpu(((const u32 *)prop)[index]); } /* First child of this node. */ @@ -420,11 +409,14 @@ static struct pdbg_target *dt_next(const struct pdbg_target *root, return NULL; } -static const struct dt_property *dt_require_property(struct pdbg_target *node, - const char *name, int wanted_len) +static const void *dt_require_property(struct pdbg_target *node, + const char *name, int wanted_len, + size_t *prop_len) { - const struct dt_property *p = dt_find_property(node, name); + const void *p; + size_t len; + p = pdbg_target_property(node, name, &len); if (!p) { const char *path = dt_get_path(node); @@ -432,16 +424,19 @@ static const struct dt_property *dt_require_property(struct pdbg_target *node, path, name); assert(false); } - if (wanted_len >= 0 && p->len != wanted_len) { + if (wanted_len >= 0 && len != wanted_len) { const char *path = dt_get_path(node); prerror("DT: Unexpected property length %s/%s\n", path, name); prerror("DT: Expected len: %d got len: %zu\n", - wanted_len, p->len); + wanted_len, len); assert(false); } + if (prop_len) { + *prop_len = len; + } return p; } @@ -478,15 +473,18 @@ struct pdbg_target *__pdbg_next_compatible_node(struct pdbg_target *root, return NULL; } -static uint32_t dt_prop_get_u32_def(const struct pdbg_target *node, +static uint32_t dt_prop_get_u32_def(struct pdbg_target *node, const char *prop, uint32_t def) { - const struct dt_property *p = dt_find_property(node, prop); + const void *p; + size_t len; + p = pdbg_target_property(node, prop, &len); if (!p) return def; - return dt_property_get_cell(p, 0); + + return dt_property_get_cell(p, len, 0); } static enum pdbg_target_status str_to_status(const char *status) @@ -602,17 +600,19 @@ static u32 dt_n_size_cells(const struct pdbg_target *node) uint64_t pdbg_target_address(struct pdbg_target *target, uint64_t *out_size) { - const struct dt_property *p; + const void *p; + size_t len; + u32 na = dt_n_address_cells(target); u32 ns = dt_n_size_cells(target); u32 n; - p = dt_require_property(target, "reg", -1); + p = dt_require_property(target, "reg", -1, &len); n = (na + ns) * sizeof(u32); - assert(n <= p->len); + assert(n <= len); if (out_size) - *out_size = dt_get_number(p->prop + na * sizeof(u32), ns); - return dt_get_number(p->prop, na); + *out_size = dt_get_number(p + na * sizeof(u32), ns); + return dt_get_number(p, na); } static struct pdbg_target *dt_new_virtual(struct pdbg_target *root, const char *system_path)
This avoids the use of struct dt_property, which will be removed later. Signed-off-by: Amitay Isaacs <amitay@ozlabs.org> --- libpdbg/device.c | 54 ++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 27 deletions(-)