[PATCH 5/5] sysreset: Support reset via Renesas RAA215300 PMIC
Marek Vasut
marek.vasut at mailbox.org
Sun Nov 19 21:17:40 CET 2023
On 11/15/23 18:40, Paul Barker wrote:
> This patch allows us to reset the RZ/G2L board via the RAA215300 PMIC.
>
> Note that the RAA215300 documentation names the available reset types
> differently to u-boot:
>
> - A "warm" reset via the RAA215300 PMIC will fully reset the SoC
> (CPU & GPIOs), so this corresponds to SYSRESET_COLD.
>
> - A "cold" reset via the RAA215300 PMIC will cycle all power supply
> rails, so this corresponds to SYSRESET_POWER.
>
> Signed-off-by: Paul Barker <paul.barker.ct at bp.renesas.com>
> ---
> board/renesas/rzg2l/rzg2l.c | 8 ----
> configs/renesas_rzg2l_smarc_defconfig | 2 +
> drivers/power/pmic/raa215300.c | 17 ++++++++
> drivers/sysreset/Kconfig | 6 +++
> drivers/sysreset/Makefile | 1 +
> drivers/sysreset/sysreset_raa215300.c | 58 +++++++++++++++++++++++++++
> 6 files changed, 84 insertions(+), 8 deletions(-)
> create mode 100644 drivers/sysreset/sysreset_raa215300.c
>
> diff --git a/board/renesas/rzg2l/rzg2l.c b/board/renesas/rzg2l/rzg2l.c
> index 73201a8c69e5..0f6d6e7f514f 100644
> --- a/board/renesas/rzg2l/rzg2l.c
> +++ b/board/renesas/rzg2l/rzg2l.c
> @@ -56,11 +56,3 @@ int board_init(void)
> {
> return 0;
> }
> -
> -void reset_cpu(void)
> -{
> - /*
> - * TODO: Implement reset support once TrustedFirmware supports
> - * the appropriate call.
> - */
> -}
Board change -- separate patch please.
> diff --git a/configs/renesas_rzg2l_smarc_defconfig b/configs/renesas_rzg2l_smarc_defconfig
> index b62eae4ee0a4..ba96e746df9e 100644
> --- a/configs/renesas_rzg2l_smarc_defconfig
> +++ b/configs/renesas_rzg2l_smarc_defconfig
> @@ -55,3 +55,5 @@ CONFIG_PMIC_RAA215300=y
> CONFIG_DM_REGULATOR=y
> CONFIG_DM_REGULATOR_FIXED=y
> CONFIG_DM_REGULATOR_GPIO=y
> +CONFIG_SYSRESET=y
> +CONFIG_SYSRESET_RAA215300=y
> diff --git a/drivers/power/pmic/raa215300.c b/drivers/power/pmic/raa215300.c
> index 9c0b720994b2..7f68f95f25cf 100644
> --- a/drivers/power/pmic/raa215300.c
> +++ b/drivers/power/pmic/raa215300.c
> @@ -27,9 +27,26 @@ static const struct udevice_id raa215300_ids[] = {
> { /* sentinel */ }
> };
>
> +static int raa215300_bind(struct udevice *dev)
> +{
> + struct driver *drv;
> +
> + if (IS_ENABLED(CONFIG_SYSRESET_RAA215300)) {
> + drv = lists_driver_lookup_name("raa215300_sysreset");
> + if (!drv)
> + return -ENOENT;
> +
> + return device_bind(dev, drv, dev->name, NULL, dev_ofnode(dev),
> + NULL);
> + }
> +
> + return 0;
> +}
Driver change should be squashed in 4/5.
> U_BOOT_DRIVER(raa215300_pmic) = {
> .name = "raa215300_pmic",
> .id = UCLASS_PMIC,
> .of_match = raa215300_ids,
> + .bind = raa215300_bind,
> .ops = &raa215300_ops,
> };
> diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
> index 0e52f996283c..49c0787b26d8 100644
> --- a/drivers/sysreset/Kconfig
> +++ b/drivers/sysreset/Kconfig
> @@ -229,6 +229,12 @@ config SYSRESET_MPC83XX
> help
> Reboot support for NXP MPC83xx SoCs.
>
> +config SYSRESET_RAA215300
> + bool "Support sysreset via Renesas RAA215300 PMIC"
> + depends on PMIC_RAA215300
> + help
> + Add support for the system reboot via the Renesas RAA215300 PMIC.
> +
> endif
Sysreset driver should be separate patch .
> endmenu
> diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
> index c9f1c625aebb..e0e732205df3 100644
> --- a/drivers/sysreset/Makefile
> +++ b/drivers/sysreset/Makefile
> @@ -27,4 +27,5 @@ obj-$(CONFIG_SYSRESET_WATCHDOG) += sysreset_watchdog.o
> obj-$(CONFIG_SYSRESET_RESETCTL) += sysreset_resetctl.o
> obj-$(CONFIG_$(SPL_TPL_)SYSRESET_AT91) += sysreset_at91.o
> obj-$(CONFIG_$(SPL_TPL_)SYSRESET_X86) += sysreset_x86.o
> +obj-$(CONFIG_SYSRESET_RAA215300) += sysreset_raa215300.o
> obj-$(CONFIG_TARGET_XTFPGA) += sysreset_xtfpga.o
> diff --git a/drivers/sysreset/sysreset_raa215300.c b/drivers/sysreset/sysreset_raa215300.c
> new file mode 100644
> index 000000000000..32dfcb0aec84
> --- /dev/null
> +++ b/drivers/sysreset/sysreset_raa215300.c
> @@ -0,0 +1,58 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2023 Renesas Electronics Corporation
> + */
> +
> +#include <dm.h>
> +#include <power/pmic.h>
> +#include <sysreset.h>
> +
> +#define RAA215300_REG_SWRESET 0x6D
> +#define RAA215300_COLD_RESET BIT(0)
> +#define RAA215300_WARM_RESET BIT(1)
> +
> +static int raa215300_sysreset_request(struct udevice *dev, enum sysreset_t type)
> +{
> + struct udevice *pmic = dev_get_parent(dev);
> + int ret;
> + u8 val;
> +
> + /*
> + * The RAA215300 documentation names the available reset types
> + * differently to u-boot:
> + *
> + * - A "warm" reset via the RAA215300 PMIC will fully reset the SoC
> + * (CPU & GPIOs), so this corresponds to SYSRESET_COLD.
> + *
> + * - A "cold" reset via the RAA215300 PMIC will cycle all power supply
> + * rails, so this corresponds to SYSRESET_POWER.
> + */
> + switch (type) {
> + case SYSRESET_COLD:
> + val = RAA215300_WARM_RESET;
> + break;
> +
> + case SYSRESET_POWER:
> + val = RAA215300_COLD_RESET;
> + break;
> +
> + default:
> + return -EPROTONOSUPPORT;
> + }
> +
> + ret = pmic_reg_write(pmic, RAA215300_REG_SWRESET, val);
> + if (ret)
> + return ret;
> +
> + return -EINPROGRESS;
> +}
> +
> +static struct sysreset_ops raa215300_sysreset_ops = {
> + .request = raa215300_sysreset_request,
> +};
> +
> +U_BOOT_DRIVER(raa215300_sysreset) = {
> + .name = "raa215300_sysreset",
> + .id = UCLASS_SYSRESET,
> + .ops = &raa215300_sysreset_ops,
> +};
Looks good otherwise.
More information about the U-Boot
mailing list