lib: utils: Add fdt_parse_plic_node() function
authorAnup Patel <anup.patel@wdc.com>
Wed, 29 Apr 2020 08:51:52 +0000 (14:21 +0530)
committerAnup Patel <anup@brainfault.org>
Fri, 1 May 2020 04:15:53 +0000 (09:45 +0530)
We add fdt_parse_plic_node() function which will allow us to parse
a particular DT node as PLIC node. This will be useful in parsing
the DT node which we have found by matching compatible string.

Signed-off-by: Anup Patel <anup.patel@wdc.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
include/sbi_utils/fdt/fdt_helper.h
lib/utils/fdt/fdt_helper.c

index 5a0a719..6be942a 100644 (file)
@@ -52,6 +52,9 @@ int fdt_parse_uart8250_node(void *fdt, int nodeoffset,
 int fdt_parse_uart8250(void *fdt, struct platform_uart_data *uart,
                       const char *compatible);
 
+int fdt_parse_plic_node(void *fdt, int nodeoffset,
+                       struct platform_plic_data *plic);
+
 int fdt_parse_plic(void *fdt, struct platform_plic_data *plic,
                   const char *compatible);
 
index 2d79f75..ee733e7 100644 (file)
@@ -259,16 +259,15 @@ int fdt_parse_uart8250(void *fdt, struct platform_uart_data *uart,
        return fdt_parse_uart8250_node(fdt, nodeoffset, uart);
 }
 
-int fdt_parse_plic(void *fdt, struct platform_plic_data *plic,
-                  const char *compatible)
+int fdt_parse_plic_node(void *fdt, int nodeoffset,
+                       struct platform_plic_data *plic)
 {
-       int nodeoffset, len, rc;
+       int len, rc;
        const fdt32_t *val;
        unsigned long reg_addr, reg_size;
 
-       nodeoffset = fdt_node_offset_by_compatible(fdt, -1, compatible);
-       if (nodeoffset < 0)
-               return nodeoffset;
+       if (nodeoffset < 0 || !plic || !fdt)
+               return SBI_ENODEV;
 
        rc = fdt_get_node_addr_size(fdt, nodeoffset, &reg_addr, &reg_size);
        if (rc < 0 || !reg_addr || !reg_size)
@@ -282,6 +281,21 @@ int fdt_parse_plic(void *fdt, struct platform_plic_data *plic,
        return 0;
 }
 
+int fdt_parse_plic(void *fdt, struct platform_plic_data *plic,
+                  const char *compatible)
+{
+       int nodeoffset;
+
+       if (!compatible || !plic || !fdt)
+               return SBI_ENODEV;
+
+       nodeoffset = fdt_node_offset_by_compatible(fdt, -1, compatible);
+       if (nodeoffset < 0)
+               return nodeoffset;
+
+       return fdt_parse_plic_node(fdt, nodeoffset, plic);
+}
+
 int fdt_parse_compat_addr(void *fdt, unsigned long *addr,
                          const char *compatible)
 {