summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGuo Ren <[email protected]>2023-10-12 04:59:13 -0400
committerAnup Patel <[email protected]>2023-11-16 16:25:23 +0530
commitd1e0f7f25b2f1527425942dfc327f1d4a61bbff4 (patch)
tree4b15c4cc03657432ea12e5157c3affc2f1564613 /lib
parentfccdf41d32877eca0cef3789d12a197cba73c2e2 (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/Kconfig4
-rw-r--r--lib/utils/reset/fdt_reset_thead.c134
-rw-r--r--lib/utils/reset/fdt_reset_thead.h23
-rw-r--r--lib/utils/reset/fdt_reset_thead_asm.S47
-rw-r--r--lib/utils/reset/objects.mk4
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