diff options
Diffstat (limited to 'lib/utils/ipi/fdt_ipi_plicsw.c')
-rw-r--r-- | lib/utils/ipi/fdt_ipi_plicsw.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/utils/ipi/fdt_ipi_plicsw.c b/lib/utils/ipi/fdt_ipi_plicsw.c new file mode 100644 index 0000000..bf29bfc --- /dev/null +++ b/lib/utils/ipi/fdt_ipi_plicsw.c @@ -0,0 +1,47 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2022 Andes Technology Corporation + * + * Authors: + * Zong Li <zong@andestech.com> + * Nylon Chen <nylon7@andestech.com> + * Leo Yu-Chi Liang <ycliang@andestech.com> + * Yu Chien Peter Lin <peterlin@andestech.com> + */ + +#include <sbi/riscv_io.h> +#include <sbi_utils/fdt/fdt_helper.h> +#include <sbi_utils/ipi/fdt_ipi.h> +#include <sbi_utils/ipi/andes_plicsw.h> + +extern struct plicsw_data plicsw; + +int fdt_plicsw_cold_ipi_init(void *fdt, int nodeoff, + const struct fdt_match *match) +{ + int rc; + + rc = fdt_parse_plicsw_node(fdt, nodeoff, &plicsw.addr, &plicsw.size, + &plicsw.hart_count); + if (rc) + return rc; + + rc = plicsw_cold_ipi_init(&plicsw); + if (rc) + return rc; + + return 0; +} + +static const struct fdt_match ipi_plicsw_match[] = { + { .compatible = "andestech,plicsw" }, + {}, +}; + +struct fdt_ipi fdt_ipi_plicsw = { + .match_table = ipi_plicsw_match, + .cold_init = fdt_plicsw_cold_ipi_init, + .warm_init = plicsw_warm_ipi_init, + .exit = NULL, +}; |