forked from Mirrors/opensbi

Different DT based platforms from the sam family may reuse IP blocks with different configurations. These different configurations can be obtained by parsing the device tree. Add a FDT parser framework that can parse various device configurations from device tree. Currently, the parsing algorithms doesn't cover all the use cases or possible combination of DT configurations. It will be improved over time. Signed-off-by: Atish Patra <atish.patra@wdc.com> Reviewed-by: Anup Patel <anup.patel@wdc.com>
84 lines
2.3 KiB
C
84 lines
2.3 KiB
C
// SPDX-License-Identifier: BSD-2-Clause
|
|
/*
|
|
* fdt_helper.h - Flat Device Tree manipulation helper routines
|
|
* Implement helper routines on top of libfdt for OpenSBI usage
|
|
*
|
|
* Copyright (C) 2020 Bin Meng <bmeng.cn@gmail.com>
|
|
*/
|
|
|
|
#ifndef __FDT_HELPER_H__
|
|
#define __FDT_HELPER_H__
|
|
|
|
struct platform_uart_data {
|
|
unsigned long addr;
|
|
unsigned long freq;
|
|
unsigned long baud;
|
|
};
|
|
|
|
struct platform_plic_data {
|
|
unsigned long addr;
|
|
unsigned long num_src;
|
|
};
|
|
|
|
int fdt_parse_uart8250(void *fdt, struct platform_uart_data *uart,
|
|
const char *compatible);
|
|
|
|
int fdt_parse_plic(void *fdt, struct platform_plic_data *plic,
|
|
const char *compatible);
|
|
|
|
int fdt_parse_clint(void *fdt, unsigned long *clint_addr,
|
|
const char *compatible);
|
|
|
|
/**
|
|
* Fix up the CPU node in the device tree
|
|
*
|
|
* This routine updates the "status" property of a CPU node in the device tree
|
|
* to "disabled" if that hart is in disabled state in OpenSBI.
|
|
*
|
|
* It is recommended that platform codes call this helper in their final_init()
|
|
*
|
|
* @param fdt: device tree blob
|
|
*/
|
|
void fdt_cpu_fixup(void *fdt);
|
|
|
|
/**
|
|
* Fix up the PLIC node in the device tree
|
|
*
|
|
* This routine updates the "interrupt-extended" property of the PLIC node in
|
|
* the device tree to hide the M-mode external interrupt from CPUs.
|
|
*
|
|
* It is recommended that platform codes call this helper in their final_init()
|
|
*
|
|
* @param fdt: device tree blob
|
|
* @param compat: PLIC node compatible string
|
|
*/
|
|
void fdt_plic_fixup(void *fdt, const char *compat);
|
|
|
|
/**
|
|
* Fix up the reserved memory node in the device tree
|
|
*
|
|
* This routine inserts a child node of the reserved memory node in the device
|
|
* tree that describes the protected memory region done by OpenSBI via PMP.
|
|
*
|
|
* It is recommended that platform codes call this helper in their final_init()
|
|
*
|
|
* @param fdt: device tree blob
|
|
* @return zero on success and -ve on failure
|
|
*/
|
|
int fdt_reserved_memory_fixup(void *fdt);
|
|
|
|
/**
|
|
* General device tree fix-up
|
|
*
|
|
* This routine do all required device tree fix-ups for a typical platform.
|
|
* It fixes up the PLIC node and the reserved memory node in the device tree
|
|
* by calling the corresponding helper routines to accomplish the task.
|
|
*
|
|
* It is recommended that platform codes call this helper in their final_init()
|
|
*
|
|
* @param fdt: device tree blob
|
|
*/
|
|
void fdt_fixups(void *fdt);
|
|
|
|
#endif /* __FDT_HELPER_H__ */
|