[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCHv9 5/7] plat/common: Introduce fdt_node_offset_by_compatible_list helper
From: Jianyong Wu <jianyong.wu@xxxxxxx> For most of devices that will use the device tree will have one or more compatible strings. This helper will avoid implement a function to match compatible list everywhere. The valid compatible strings array should be ended with NULL. E.g. static const char * const gic_device_list[] = { "arm,cortex-a15-gic", "arm,cortex-a7-gic", "arm,cortex-a9-gic", NULL} Signed-off-by: Wei Chen <wei.chen@xxxxxxx> Signed-off-by: Jianyong Wu <jianyong.wu@xxxxxxx> Signed-off-by: Jia He <justin.he@xxxxxxx> Reviewed-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx> --- plat/drivers/include/ofw/fdt.h | 26 ++++++++++++++++++++++++++ plat/drivers/ofw/fdt.c | 15 +++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/plat/drivers/include/ofw/fdt.h b/plat/drivers/include/ofw/fdt.h index cb941b6..f67d966 100644 --- a/plat/drivers/include/ofw/fdt.h +++ b/plat/drivers/include/ofw/fdt.h @@ -91,4 +91,30 @@ static inline uint64_t fdt_reg_read_number(const fdt32_t *regs, uint32_t size) */ int fdt_get_address(const void *fdt, int nodeoffset, uint32_t index, uint64_t *addr, uint64_t *size); + +/** + * fdt_node_offset_by_compatible_list - find nodes with a given + * 'compatible' list value + * @fdt: pointer to the device tree blob + * @startoffset: only find nodes after this offset + * @compatibles: a list of 'compatible' string to match, should be ended + * with NULL string. + * fdt_node_offset_by_compatible_list() returns the offset of the + * first matched node after startoffset, which has a 'compatible' + * property which lists the given compatible string; or if + * startoffset is -1, the very first such node in the tree. + * + * returns: + * structure block offset of the located node (>= 0, >startoffset), + * on success + * -FDT_ERR_NOTFOUND, no node matching the criterion exists in the + * tree after startoffset + * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, standard meanings + */ +int fdt_node_offset_by_compatible_list(const void *fdt, int startoffset, + const char * const compatibles[]); #endif diff --git a/plat/drivers/ofw/fdt.c b/plat/drivers/ofw/fdt.c index f5102b4..ab0c815 100644 --- a/plat/drivers/ofw/fdt.c +++ b/plat/drivers/ofw/fdt.c @@ -241,3 +241,18 @@ int fdt_get_address(const void *fdt, int nodeoffset, uint32_t index, return -FDT_ERR_NOTFOUND; return 0; } + +int fdt_node_offset_by_compatible_list(const void *fdt, int startoffset, + const char * const compatibles[]) +{ + int idx, offset; + + for (idx = 0; compatibles[idx] != NULL; idx++) { + offset = fdt_node_offset_by_compatible(fdt, startoffset, + compatibles[idx]); + if (offset >= 0) + return offset; + } + + return -FDT_ERR_NOTFOUND; +} -- 2.17.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |