diff options
| author | Guo Ren <[email protected]> | 2023-10-12 04:59:13 -0400 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2023-11-16 16:25:23 +0530 |
| commit | d1e0f7f25b2f1527425942dfc327f1d4a61bbff4 (patch) | |
| tree | 4b15c4cc03657432ea12e5157c3affc2f1564613 /lib | |
| parent | fccdf41d32877eca0cef3789d12a197cba73c2e2 (diff) | |
utils/reset: Remove fdt_reset_thead
In the past, we used fdt_reset_thead to help customers with prototype
verification. However, with the emergence of the Big-little SoC system,
it can no longer meet the demand. Therefore, we use zero_stage_boot
instead of fdt_reset_thead. It cleans up the opensbi code and ends the
disputation of reset_sample's dts.
This patch removes the fdt_reset_thead component and updates the related
doc.
Signed-off-by: Guo Ren <[email protected]>
Signed-off-by: Guo Ren <[email protected]>
Reviewed-by: Anup Patel <[email protected]>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/utils/reset/Kconfig | 4 | ||||
| -rw-r--r-- | lib/utils/reset/fdt_reset_thead.c | 134 | ||||
| -rw-r--r-- | lib/utils/reset/fdt_reset_thead.h | 23 | ||||
| -rw-r--r-- | lib/utils/reset/fdt_reset_thead_asm.S | 47 | ||||
| -rw-r--r-- | lib/utils/reset/objects.mk | 4 |
5 files changed, 0 insertions, 212 deletions
diff --git a/lib/utils/reset/Kconfig b/lib/utils/reset/Kconfig index 23f50c4d..b26260db 100644 --- a/lib/utils/reset/Kconfig +++ b/lib/utils/reset/Kconfig @@ -33,10 +33,6 @@ config FDT_RESET_SYSCON depends on FDT_REGMAP default n -config FDT_RESET_THEAD - bool "T-HEAD FDT reset driver" - default n - endif endmenu diff --git a/lib/utils/reset/fdt_reset_thead.c b/lib/utils/reset/fdt_reset_thead.c deleted file mode 100644 index e1d6885d..00000000 --- a/lib/utils/reset/fdt_reset_thead.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include <libfdt.h> -#include <sbi/riscv_io.h> -#include <sbi/sbi_bitops.h> -#include <sbi/sbi_hart.h> -#include <sbi/sbi_scratch.h> -#include <sbi/sbi_system.h> -#include <sbi_utils/fdt/fdt_helper.h> -#include <sbi_utils/reset/fdt_reset.h> - -#include "fdt_reset_thead.h" - -struct custom_csr custom_csr[MAX_CUSTOM_CSR]; - -#define CSR_OPCODE 0x39073 -static void clone_csrs(int cnt) -{ - unsigned long i; - - for (i = 0; i < cnt; i++) { - /* Write csr BIT[31 - 20] to stub */ - __reset_thead_csr_stub[3*i + 1] = - CSR_OPCODE | (custom_csr[i].index << 20); - - /* Mask csr BIT[31 - 20] */ - *(u32 *)&__fdt_reset_thead_csrr &= BIT(20) - 1; - smp_mb(); - - /* Write csr BIT[31 - 20] to __fdt_reset_thead_csrr */ - *(u32 *)&__fdt_reset_thead_csrr |= custom_csr[i].index << 20; - smp_mb(); - - RISCV_FENCE_I; - - custom_csr[i].value = __fdt_reset_thead_csrr(); - } -} - -static int thead_system_reset_check(u32 type, u32 reason) -{ - return 1; -} - -static void thead_system_reset(u32 type, u32 reason) -{ - ebreak(); -} - -static struct sbi_system_reset_device thead_reset = { - .name = "thead_reset", - .system_reset_check = thead_system_reset_check, - .system_reset = thead_system_reset -}; - -extern void __thead_pre_start_warm(void); -static int thead_reset_init(void *fdt, int nodeoff, - const struct fdt_match *match) -{ - char *p; - const fdt64_t *val; - const fdt32_t *val_w; - int len, i; - u32 t, tmp = 0; - - /* Prepare clone csrs */ - val_w = fdt_getprop(fdt, nodeoff, "csr-copy", &len); - if (len > 0 && val_w) { - int cnt; - - cnt = len / sizeof(fdt32_t); - if (cnt > MAX_CUSTOM_CSR) - sbi_hart_hang(); - - for (i = 0; i < cnt; i++) { - custom_csr[i].index = fdt32_to_cpu(val_w[i]); - } - - if (cnt) - clone_csrs(cnt); - } - - /* Old reset method for secondary harts */ - if (fdt_getprop(fdt, nodeoff, "using-csr-reset", &len)) { - csr_write(0x7c7, (ulong)&__thead_pre_start_warm); - csr_write(0x7c6, -1); - } - - /* Custom reset method for secondary harts */ - val = fdt_getprop(fdt, nodeoff, "entry-reg", &len); - if (len > 0 && val) { - p = (char *)(ulong)fdt64_to_cpu(*val); - - val_w = fdt_getprop(fdt, nodeoff, "entry-cnt", &len); - if (len > 0 && val_w) { - tmp = fdt32_to_cpu(*val_w); - - for (i = 0; i < tmp; i++) { - t = (ulong)&__thead_pre_start_warm; - writel(t, p + (8 * i)); - t = (u64)(ulong)&__thead_pre_start_warm >> 32; - writel(t, p + (8 * i) + 4); - } - } - - val = fdt_getprop(fdt, nodeoff, "control-reg", &len); - if (len > 0 && val) { - p = (void *)(ulong)fdt64_to_cpu(*val); - - val_w = fdt_getprop(fdt, nodeoff, "control-val", &len); - if (len > 0 && val_w) { - tmp = fdt32_to_cpu(*val_w); - tmp |= readl(p); - writel(tmp, p); - } - } - } - - sbi_system_reset_add_device(&thead_reset); - - return 0; -} - -static const struct fdt_match thead_reset_match[] = { - { .compatible = "thead,reset-sample" }, - { }, -}; - -struct fdt_reset fdt_reset_thead = { - .match_table = thead_reset_match, - .init = thead_reset_init -}; diff --git a/lib/utils/reset/fdt_reset_thead.h b/lib/utils/reset/fdt_reset_thead.h deleted file mode 100644 index d7a686ec..00000000 --- a/lib/utils/reset/fdt_reset_thead.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: BSD-2-Clause - */ - -#ifndef __FDT_RESET_THEAD_H__ -#define __FDT_RESET_THEAD_H__ - -#define MAX_CUSTOM_CSR 32 - -#ifndef __ASSEMBLER__ -struct custom_csr { - unsigned long index; - unsigned long value; -}; - -u64 __fdt_reset_thead_csrr(void); - -extern struct custom_csr custom_csr[MAX_CUSTOM_CSR]; -extern u32 __reset_thead_csr_stub[]; - -#endif /* __ASSEMBLER__ */ - -#endif /* __FDT_RESET_THEAD_H__ */ diff --git a/lib/utils/reset/fdt_reset_thead_asm.S b/lib/utils/reset/fdt_reset_thead_asm.S deleted file mode 100644 index 8237951f..00000000 --- a/lib/utils/reset/fdt_reset_thead_asm.S +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include <sbi/riscv_asm.h> -#include "fdt_reset_thead.h" - -/* - * csrrs rd, csr, rs1 - * |31 20|19 15|14 12|11 7|6 0| - * csr rs1 010 rd 1110011 - */ -#define CSR_STUB addi x0, x0, 0 - - .option norvc - .align 3 - .global __fdt_reset_thead_csrr -__fdt_reset_thead_csrr: - csrrs a0, 0, x0 - ret - - .align 3 - .global __thead_pre_start_warm -__thead_pre_start_warm: - /* - * Clear L1 cache & BTB & BHT ... - */ - li t1, 0x70013 - csrw 0x7c2, t1 - fence rw,rw - - lla t1, custom_csr - - .global __reset_thead_csr_stub -__reset_thead_csr_stub: -.rept MAX_CUSTOM_CSR - REG_L t2, 8(t1) - CSR_STUB - addi t1, t1, 16 -.endr - /* - * Clear L1 cache & BTB & BHT ... - */ - li t1, 0x70013 - csrw 0x7c2, t1 - fence rw,rw - j _start_warm diff --git a/lib/utils/reset/objects.mk b/lib/utils/reset/objects.mk index ea9cedcd..b5222347 100644 --- a/lib/utils/reset/objects.mk +++ b/lib/utils/reset/objects.mk @@ -26,7 +26,3 @@ libsbiutils-objs-$(CONFIG_FDT_RESET_SUNXI_WDT) += reset/fdt_reset_sunxi_wdt.o carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_SYSCON) += fdt_syscon_poweroff carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_SYSCON) += fdt_syscon_reboot libsbiutils-objs-$(CONFIG_FDT_RESET_SYSCON) += reset/fdt_reset_syscon.o - -carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_THEAD) += fdt_reset_thead -libsbiutils-objs-$(CONFIG_FDT_RESET_THEAD) += reset/fdt_reset_thead.o -libsbiutils-objs-$(CONFIG_FDT_RESET_THEAD) += reset/fdt_reset_thead_asm.o |
