Re: [PATCH v3 2/2] lib: utils/reset: Add Metanoia MT2824 system reset driver

Anup Patel <[email protected]>
Newsgroups org.infradead.lists.opensbi
Message-ID <CAAhSdy0wikDjM=5e8N=yuCz1zTeRvw6P0uxmhgz11T6+8fXnNg@mail.gmail.com>
On Fri, Jul 24, 2026 at 9:05 PM Benoît Monin <[email protected]> wrote:
>
> Add a driver for the system reset function found in Metanoia MT2824 SoC
> and enable it in the generic platform configuration.
>
> Originally-by: Jun Chang <[email protected]>
> Signed-off-by: Benoît Monin <[email protected]>
> ---
>  lib/utils/reset/Kconfig              |  4 ++
>  lib/utils/reset/fdt_reset_metanoia.c | 72 ++++++++++++++++++++++++++++++++++++
>  lib/utils/reset/objects.mk           |  3 ++
>  platform/generic/configs/defconfig   |  1 +
>  4 files changed, 80 insertions(+)
>
> diff --git a/lib/utils/reset/Kconfig b/lib/utils/reset/Kconfig
> index b2ac120e..8988548c 100644
> --- a/lib/utils/reset/Kconfig
> +++ b/lib/utils/reset/Kconfig
> @@ -29,6 +29,10 @@ config FDT_RESET_LITEX
>         depends on FDT_GPIO
>         default n
>
> +config FDT_RESET_METANOIA
> +       bool "Metanoia FDT reset driver"
> +       default n
> +
>  config FDT_RESET_RPMI
>         bool "RPMI FDT reset driver"
>         depends on FDT_MAILBOX && RPMI_MAILBOX
> diff --git a/lib/utils/reset/fdt_reset_metanoia.c b/lib/utils/reset/fdt_reset_metanoia.c
> new file mode 100644
> index 00000000..628cd8b6
> --- /dev/null
> +++ b/lib/utils/reset/fdt_reset_metanoia.c
> @@ -0,0 +1,72 @@
> +/*
> + * SPDX-License-Identifier: BSD-2-Clause
> + *
> + * Copyright (c) 2026 Metanoia Communications Inc.
> + *
> + */
> +
> +#include <sbi/riscv_io.h>
> +#include <sbi/sbi_platform.h>
> +#include <sbi/sbi_system.h>
> +#include <sbi_utils/fdt/fdt_helper.h>
> +#include <sbi_utils/fdt/fdt_driver.h>
> +
> +#define SWRSTREQ_CTRL_REG_OFFSET 0x00
> +#define SWRSTREQ_REG_OFFSET 0x04
> +
> +struct reset_metanoia_data {
> +       u8 *reg_base;
> +};
> +
> +static struct reset_metanoia_data reset_data;
> +
> +static int metanoia_system_reset_check(u32 type, u32 reason)
> +{
> +       switch (type) {
> +       case SBI_SRST_RESET_TYPE_WARM_REBOOT:
> +       case SBI_SRST_RESET_TYPE_COLD_REBOOT:
> +               return 1;
> +       case SBI_SRST_RESET_TYPE_SHUTDOWN:
> +       default:
> +               return 0;
> +       }
> +}
> +
> +static void metanoia_system_reset(u32 type, u32 reason)
> +{
> +       writew(0x1, reset_data.reg_base + SWRSTREQ_CTRL_REG_OFFSET);
> +       writew(0x1, reset_data.reg_base + SWRSTREQ_REG_OFFSET);
> +}
> +
> +static struct sbi_system_reset_device metanoia_reset = {
> +       .name               = "metanoia-mt2824-reboot",
> +       .system_reset_check = metanoia_system_reset_check,
> +       .system_reset       = metanoia_system_reset,
> +};
> +
> +static int metanoia_reset_init(const void *fdt, int nodeoff,
> +                              const struct fdt_match *match)
> +{
> +       u64 reg_addr;
> +       int rc;
> +
> +       rc = fdt_get_node_addr_size(fdt, nodeoff, 0, &reg_addr, NULL);
> +       if (rc < 0 || !reg_addr)
> +               return SBI_ENODEV;
> +
> +       reset_data.reg_base = (u8 *)reg_addr;

This needs to be "(u8 *)(ulong)" typecast to avoid compile errors for RV32.
I will update at the time of merging this patch.

> +
> +       sbi_system_reset_add_device(&metanoia_reset);
> +
> +       return 0;
> +}
> +
> +static const struct fdt_match metanoia_reset_match[] = {
> +       { .compatible = "metanoia,mt2824-reboot" },
> +       { /* sentinel */ }
> +};
> +
> +const struct fdt_driver fdt_reset_metanoia = {
> +       .match_table = metanoia_reset_match,
> +       .init        = metanoia_reset_init,
> +};
> diff --git a/lib/utils/reset/objects.mk b/lib/utils/reset/objects.mk
> index 38b4e306..a9b6edad 100644
> --- a/lib/utils/reset/objects.mk
> +++ b/lib/utils/reset/objects.mk
> @@ -20,6 +20,9 @@ libsbiutils-objs-$(CONFIG_FDT_RESET_HTIF) += reset/fdt_reset_htif.o
>  carray-fdt_early_drivers-$(CONFIG_FDT_RESET_LITEX) += fdt_reset_litex
>  libsbiutils-objs-$(CONFIG_FDT_RESET_LITEX) += reset/fdt_reset_litex.o
>
> +carray-fdt_early_drivers-$(CONFIG_FDT_RESET_METANOIA) += fdt_reset_metanoia
> +libsbiutils-objs-$(CONFIG_FDT_RESET_METANOIA) += reset/fdt_reset_metanoia.o
> +
>  carray-fdt_early_drivers-$(CONFIG_FDT_RESET_SG2042_HWMON_MCU) += fdt_reset_sg2042_mcu
>  libsbiutils-objs-$(CONFIG_FDT_RESET_SG2042_HWMON_MCU) += reset/fdt_reset_sg2042_hwmon_mcu.o
>
> diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
> index 820c98b6..ac76eb27 100644
> --- a/platform/generic/configs/defconfig
> +++ b/platform/generic/configs/defconfig
> @@ -52,6 +52,7 @@ CONFIG_FDT_RESET_ATCWDT200=y
>  CONFIG_FDT_RESET_GPIO=y
>  CONFIG_FDT_RESET_LITEX=y
>  CONFIG_FDT_RESET_HTIF=y
> +CONFIG_FDT_RESET_METANOIA=y
>  CONFIG_FDT_RESET_RPMI=y
>  CONFIG_FDT_RESET_SG2042_HWMON_MCU=y
>  CONFIG_FDT_RESET_SPACEMIT_P1=y
>
> --
> 2.55.0
>
>
> --
> opensbi mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/opensbi

Otherwise LGTM.

Reviewed-by: Anup Patel <[email protected]>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

-- 
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.