device_tree: Add support for reading device tree properties
Add support for reading device tree properties (both generic and single-cell ones) to QEMU's convenience wrapper layer. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Peter A. G. Crosthwaite <peter.crosthwaite@petalogix.com>
This commit is contained in:
parent
3871481c0a
commit
f0aa713f65
|
@ -178,6 +178,36 @@ int qemu_devtree_setprop_string(void *fdt, const char *node_path,
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const void *qemu_devtree_getprop(void *fdt, const char *node_path,
|
||||||
|
const char *property, int *lenp)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
const void *r;
|
||||||
|
if (!lenp) {
|
||||||
|
lenp = &len;
|
||||||
|
}
|
||||||
|
r = fdt_getprop(fdt, findnode_nofail(fdt, node_path), property, lenp);
|
||||||
|
if (!r) {
|
||||||
|
fprintf(stderr, "%s: Couldn't get %s/%s: %s\n", __func__,
|
||||||
|
node_path, property, fdt_strerror(*lenp));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t qemu_devtree_getprop_cell(void *fdt, const char *node_path,
|
||||||
|
const char *property)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
const uint32_t *p = qemu_devtree_getprop(fdt, node_path, property, &len);
|
||||||
|
if (len != 4) {
|
||||||
|
fprintf(stderr, "%s: %s/%s not 4 bytes long (not a cell?)\n",
|
||||||
|
__func__, node_path, property);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
return be32_to_cpu(*p);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t qemu_devtree_get_phandle(void *fdt, const char *path)
|
uint32_t qemu_devtree_get_phandle(void *fdt, const char *path)
|
||||||
{
|
{
|
||||||
uint32_t r;
|
uint32_t r;
|
||||||
|
|
|
@ -28,6 +28,10 @@ int qemu_devtree_setprop_string(void *fdt, const char *node_path,
|
||||||
int qemu_devtree_setprop_phandle(void *fdt, const char *node_path,
|
int qemu_devtree_setprop_phandle(void *fdt, const char *node_path,
|
||||||
const char *property,
|
const char *property,
|
||||||
const char *target_node_path);
|
const char *target_node_path);
|
||||||
|
const void *qemu_devtree_getprop(void *fdt, const char *node_path,
|
||||||
|
const char *property, int *lenp);
|
||||||
|
uint32_t qemu_devtree_getprop_cell(void *fdt, const char *node_path,
|
||||||
|
const char *property);
|
||||||
uint32_t qemu_devtree_get_phandle(void *fdt, const char *path);
|
uint32_t qemu_devtree_get_phandle(void *fdt, const char *path);
|
||||||
uint32_t qemu_devtree_alloc_phandle(void *fdt);
|
uint32_t qemu_devtree_alloc_phandle(void *fdt);
|
||||||
int qemu_devtree_nop_node(void *fdt, const char *node_path);
|
int qemu_devtree_nop_node(void *fdt, const char *node_path);
|
||||||
|
|
Loading…
Reference in New Issue