diff options
Diffstat (limited to 'roms/opensbi/include/sbi_utils/fdt/fdt_helper.h')
-rw-r--r-- | roms/opensbi/include/sbi_utils/fdt/fdt_helper.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/roms/opensbi/include/sbi_utils/fdt/fdt_helper.h b/roms/opensbi/include/sbi_utils/fdt/fdt_helper.h new file mode 100644 index 000000000..f5222deb4 --- /dev/null +++ b/roms/opensbi/include/sbi_utils/fdt/fdt_helper.h @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: BSD-2-Clause +/* + * fdt_helper.h - Flat Device Tree parsing helper routines + * Implement helper routines to parse FDT nodes on top of + * libfdt for OpenSBI usage + * + * Copyright (C) 2020 Bin Meng <bmeng.cn@gmail.com> + */ + +#ifndef __FDT_HELPER_H__ +#define __FDT_HELPER_H__ + +#include <sbi/sbi_types.h> + +struct fdt_match { + const char *compatible; + void *data; +}; + +struct platform_uart_data { + unsigned long addr; + unsigned long freq; + unsigned long baud; + unsigned long reg_shift; + unsigned long reg_io_width; +}; + +const struct fdt_match *fdt_match_node(void *fdt, int nodeoff, + const struct fdt_match *match_table); + +int fdt_find_match(void *fdt, int startoff, + const struct fdt_match *match_table, + const struct fdt_match **out_match); + +int fdt_get_node_addr_size(void *fdt, int node, unsigned long *addr, + unsigned long *size); + +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_shakti_uart_node(void *fdt, int nodeoffset, + struct platform_uart_data *uart); + +int fdt_parse_sifive_uart_node(void *fdt, int nodeoffset, + struct platform_uart_data *uart); + +int fdt_parse_uart8250_node(void *fdt, int nodeoffset, + struct platform_uart_data *uart); + +int fdt_parse_uart8250(void *fdt, struct platform_uart_data *uart, + const char *compatible); + +struct plic_data; + +int fdt_parse_plic_node(void *fdt, int nodeoffset, struct plic_data *plic); + +int fdt_parse_plic(void *fdt, struct plic_data *plic, const char *compat); + +struct clint_data; + +int fdt_parse_clint_node(void *fdt, int nodeoffset, bool for_timer, + struct clint_data *clint); + +int fdt_parse_compat_addr(void *fdt, unsigned long *addr, + const char *compatible); + +#endif /* __FDT_HELPER_H__ */ |