[Pdbg] [PATCH 09/13] libpdbg: Instead of dt_find_property(), use pdbg_target_property()
Amitay Isaacs
amitay at ozlabs.org
Wed Jan 15 16:18:57 AEDT 2020
This avoids the use of struct dt_property, which will be removed later.
Signed-off-by: Amitay Isaacs <amitay at 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)
--
2.21.1
More information about the Pdbg
mailing list