lib: utils: Add fdt_parse_max_hart_id() API

We add fdt_parse_max_hart_id() API which return max HART id based
on CPU DT nodes. This will be used by generic FDT based drivers in
subsequent patches.

Signed-off-by: Anup Patel <anup.patel@wdc.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
Anup Patel
2020-04-24 15:08:19 +05:30
committed by Anup Patel
parent 19e966b862
commit 44dd7be3b2
2 changed files with 30 additions and 0 deletions

View File

@@ -41,6 +41,8 @@ int fdt_get_node_addr_size(void *fdt, int node, unsigned long *addr,
int fdt_parse_hart_id(void *fdt, int cpu_offset, u32 *hartid);
int fdt_parse_max_hart_id(void *fdt, u32 *max_hartid);
int fdt_parse_sifive_uart_node(void *fdt, int nodeoffset,
struct platform_uart_data *uart);

View File

@@ -132,6 +132,34 @@ int fdt_parse_hart_id(void *fdt, int cpu_offset, u32 *hartid)
return 0;
}
int fdt_parse_max_hart_id(void *fdt, u32 *max_hartid)
{
u32 hartid;
int err, cpu_offset, cpus_offset;
if (!fdt)
return SBI_EINVAL;
if (!max_hartid)
return 0;
*max_hartid = 0;
cpus_offset = fdt_path_offset(fdt, "/cpus");
if (cpus_offset < 0)
return cpus_offset;
fdt_for_each_subnode(cpu_offset, fdt, cpus_offset) {
err = fdt_parse_hart_id(fdt, cpu_offset, &hartid);
if (err)
continue;
if (hartid > *max_hartid)
*max_hartid = hartid;
}
return 0;
}
int fdt_parse_sifive_uart_node(void *fdt, int nodeoffset,
struct platform_uart_data *uart)
{