From 043d088e3964ec64b091f739e2282f53f7d264fb Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Thu, 22 Apr 2021 11:53:32 +0530 Subject: lib: sbi: Simplify system reset platform operations Instead of having system_reset_check() and system_reset() callbacks in platform operations, it will be much simpler for reset driver to directly register these operations as a device to the sbi_system implementation. Signed-off-by: Anup Patel Reviewed-by: Alistair Francis --- lib/utils/reset/fdt_reset.c | 14 -------------- lib/utils/reset/fdt_reset_htif.c | 9 +++++++-- lib/utils/reset/fdt_reset_sifive.c | 2 -- lib/utils/reset/fdt_reset_thead.c | 34 +++++++++++++++++++++------------- lib/utils/sys/htif.c | 18 ++++++++++++++++-- lib/utils/sys/sifive_test.c | 12 ++++++++++-- 6 files changed, 54 insertions(+), 35 deletions(-) (limited to 'lib/utils') diff --git a/lib/utils/reset/fdt_reset.c b/lib/utils/reset/fdt_reset.c index 82532c2..b01b0d1 100644 --- a/lib/utils/reset/fdt_reset.c +++ b/lib/utils/reset/fdt_reset.c @@ -23,20 +23,6 @@ static struct fdt_reset *reset_drivers[] = { static struct fdt_reset *current_driver = NULL; -int fdt_system_reset_check(u32 reset_type, u32 reset_reason) -{ - if (current_driver && current_driver->system_reset_check) - return current_driver->system_reset_check(reset_type, - reset_reason); - return 0; -} - -void fdt_system_reset(u32 reset_type, u32 reset_reason) -{ - if (current_driver && current_driver->system_reset) - current_driver->system_reset(reset_type, reset_reason); -} - int fdt_reset_init(void) { int pos, noff, rc; diff --git a/lib/utils/reset/fdt_reset_htif.c b/lib/utils/reset/fdt_reset_htif.c index 587e7d6..dd08660 100644 --- a/lib/utils/reset/fdt_reset_htif.c +++ b/lib/utils/reset/fdt_reset_htif.c @@ -11,6 +11,12 @@ #include #include +static int htif_reset_init(void *fdt, int nodeoff, + const struct fdt_match *match) +{ + return htif_system_reset_init(); +} + static const struct fdt_match htif_reset_match[] = { { .compatible = "ucb,htif0" }, { }, @@ -18,6 +24,5 @@ static const struct fdt_match htif_reset_match[] = { struct fdt_reset fdt_reset_htif = { .match_table = htif_reset_match, - .system_reset_check = htif_system_reset_check, - .system_reset = htif_system_reset + .init = htif_reset_init }; diff --git a/lib/utils/reset/fdt_reset_sifive.c b/lib/utils/reset/fdt_reset_sifive.c index 38b520c..928dee9 100644 --- a/lib/utils/reset/fdt_reset_sifive.c +++ b/lib/utils/reset/fdt_reset_sifive.c @@ -33,6 +33,4 @@ static const struct fdt_match sifive_test_reset_match[] = { struct fdt_reset fdt_reset_sifive = { .match_table = sifive_test_reset_match, .init = sifive_test_reset_init, - .system_reset_check = sifive_test_system_reset_check, - .system_reset = sifive_test_system_reset }; diff --git a/lib/utils/reset/fdt_reset_thead.c b/lib/utils/reset/fdt_reset_thead.c index ea81fc9..95f8c36 100644 --- a/lib/utils/reset/fdt_reset_thead.c +++ b/lib/utils/reset/fdt_reset_thead.c @@ -7,8 +7,10 @@ #include #include #include +#include #include #include + #include "fdt_reset_thead.h" struct custom_csr custom_csr[MAX_CUSTOM_CSR]; @@ -37,6 +39,22 @@ static void clone_csrs(int cnt) } } +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) @@ -106,17 +124,9 @@ static int thead_reset_init(void *fdt, int nodeoff, } } - return 0; -} - -int thead_system_reset_check(u32 type, u32 reason) -{ - return 1; -} + sbi_system_reset_set_device(&thead_reset); -void thead_system_reset(u32 type, u32 reason) -{ - ebreak(); + return 0; } static const struct fdt_match thead_reset_match[] = { @@ -126,7 +136,5 @@ static const struct fdt_match thead_reset_match[] = { struct fdt_reset fdt_reset_thead = { .match_table = thead_reset_match, - .init = thead_reset_init, - .system_reset_check = thead_system_reset_check, - .system_reset = thead_system_reset + .init = thead_reset_init }; diff --git a/lib/utils/sys/htif.c b/lib/utils/sys/htif.c index 2fd38a7..330a9a6 100644 --- a/lib/utils/sys/htif.c +++ b/lib/utils/sys/htif.c @@ -7,6 +7,7 @@ #include #include +#include #include #define HTIF_DATA_BITS 48 @@ -154,15 +155,28 @@ int htif_serial_init(void) return 0; } -int htif_system_reset_check(u32 type, u32 reason) +static int htif_system_reset_check(u32 type, u32 reason) { return 1; } -void htif_system_reset(u32 type, u32 reason) +static void htif_system_reset(u32 type, u32 reason) { while (1) { fromhost = 0; tohost = 1; } } + +static struct sbi_system_reset_device htif_reset = { + .name = "htif", + .system_reset_check = htif_system_reset_check, + .system_reset = htif_system_reset +}; + +int htif_system_reset_init(void) +{ + sbi_system_reset_set_device(&htif_reset); + + return 0; +} diff --git a/lib/utils/sys/sifive_test.c b/lib/utils/sys/sifive_test.c index fdf3169..4533954 100644 --- a/lib/utils/sys/sifive_test.c +++ b/lib/utils/sys/sifive_test.c @@ -9,6 +9,7 @@ #include #include +#include #include #define FINISHER_FAIL 0x3333 @@ -17,7 +18,7 @@ static void *sifive_test_base; -int sifive_test_system_reset_check(u32 type, u32 reason) +static int sifive_test_system_reset_check(u32 type, u32 reason) { switch (type) { case SBI_SRST_RESET_TYPE_SHUTDOWN: @@ -29,7 +30,7 @@ int sifive_test_system_reset_check(u32 type, u32 reason) return 0; } -void sifive_test_system_reset(u32 type, u32 reason) +static void sifive_test_system_reset(u32 type, u32 reason) { /* * Tell the "finisher" that the simulation @@ -49,9 +50,16 @@ void sifive_test_system_reset(u32 type, u32 reason) } } +static struct sbi_system_reset_device sifive_test_reset = { + .name = "sifive_test", + .system_reset_check = sifive_test_system_reset_check, + .system_reset = sifive_test_system_reset +}; + int sifive_test_init(unsigned long base) { sifive_test_base = (void *)base; + sbi_system_reset_set_device(&sifive_test_reset); return 0; } -- cgit v1.2.3