2023-03-30 10:21:56

by Keguang Zhang

[permalink] [raw]
Subject: [PATCH 0/2] Move Loongson1 restart handler to watchdog driver

Move Loongson1 restart handler to watchdog driver
and update the Makefile accordingly.

Keguang Zhang (2):
MIPS: Loongson32: Remove reset.c
watchdog: loongson1_wdt: Implement restart handler

.../include/asm/mach-loongson32/regs-wdt.h | 15 ------
arch/mips/loongson32/common/Makefile | 2 +-
arch/mips/loongson32/common/reset.c | 51 -------------------
drivers/watchdog/loongson1_wdt.c | 19 ++++++-
4 files changed, 19 insertions(+), 68 deletions(-)
delete mode 100644 arch/mips/include/asm/mach-loongson32/regs-wdt.h
delete mode 100644 arch/mips/loongson32/common/reset.c


base-commit: cf3be7e82b129ed34f811f116f2b113f6299d449
--
2.34.1


2023-03-30 10:22:42

by Keguang Zhang

[permalink] [raw]
Subject: [PATCH 1/2] MIPS: Loongson32: Remove reset.c

The Loongson-1 restart handler will be moved to watchdog driver,
then _machine_restart is no longer needed.
The _machine_halt and pm_power_off are also unnecessary,
which contain no hardware operations.

Therefore, remove the entire reset.c and related header file.
Update the Makefile accordingly.

Signed-off-by: Keguang Zhang <[email protected]>
---
.../include/asm/mach-loongson32/regs-wdt.h | 15 ------
arch/mips/loongson32/common/Makefile | 2 +-
arch/mips/loongson32/common/reset.c | 51 -------------------
3 files changed, 1 insertion(+), 67 deletions(-)
delete mode 100644 arch/mips/include/asm/mach-loongson32/regs-wdt.h
delete mode 100644 arch/mips/loongson32/common/reset.c

diff --git a/arch/mips/include/asm/mach-loongson32/regs-wdt.h b/arch/mips/include/asm/mach-loongson32/regs-wdt.h
deleted file mode 100644
index c6d345fe13f2..000000000000
--- a/arch/mips/include/asm/mach-loongson32/regs-wdt.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Copyright (c) 2011 Zhang, Keguang <[email protected]>
- *
- * Loongson 1 Watchdog Register Definitions.
- */
-
-#ifndef __ASM_MACH_LOONGSON32_REGS_WDT_H
-#define __ASM_MACH_LOONGSON32_REGS_WDT_H
-
-#define WDT_EN 0x0
-#define WDT_TIMER 0x4
-#define WDT_SET 0x8
-
-#endif /* __ASM_MACH_LOONGSON32_REGS_WDT_H */
diff --git a/arch/mips/loongson32/common/Makefile b/arch/mips/loongson32/common/Makefile
index 7b49c8260706..f3950d308187 100644
--- a/arch/mips/loongson32/common/Makefile
+++ b/arch/mips/loongson32/common/Makefile
@@ -3,4 +3,4 @@
# Makefile for common code of loongson1 based machines.
#

-obj-y += time.o irq.o platform.o prom.o reset.o setup.o
+obj-y += time.o irq.o platform.o prom.o setup.o
diff --git a/arch/mips/loongson32/common/reset.c b/arch/mips/loongson32/common/reset.c
deleted file mode 100644
index 0c7399b303fb..000000000000
--- a/arch/mips/loongson32/common/reset.c
+++ /dev/null
@@ -1,51 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (c) 2011 Zhang, Keguang <[email protected]>
- */
-
-#include <linux/io.h>
-#include <linux/pm.h>
-#include <linux/sizes.h>
-#include <asm/idle.h>
-#include <asm/reboot.h>
-
-#include <loongson1.h>
-
-static void __iomem *wdt_reg_base;
-
-static void ls1x_halt(void)
-{
- while (1) {
- if (cpu_wait)
- cpu_wait();
- }
-}
-
-static void ls1x_restart(char *command)
-{
- __raw_writel(0x1, wdt_reg_base + WDT_EN);
- __raw_writel(0x1, wdt_reg_base + WDT_TIMER);
- __raw_writel(0x1, wdt_reg_base + WDT_SET);
-
- ls1x_halt();
-}
-
-static void ls1x_power_off(void)
-{
- ls1x_halt();
-}
-
-static int __init ls1x_reboot_setup(void)
-{
- wdt_reg_base = ioremap(LS1X_WDT_BASE, (SZ_4 + SZ_8));
- if (!wdt_reg_base)
- panic("Failed to remap watchdog registers");
-
- _machine_restart = ls1x_restart;
- _machine_halt = ls1x_halt;
- pm_power_off = ls1x_power_off;
-
- return 0;
-}
-
-arch_initcall(ls1x_reboot_setup);
--
2.34.1

2023-03-30 10:22:46

by Keguang Zhang

[permalink] [raw]
Subject: [PATCH 2/2] watchdog: loongson1_wdt: Implement restart handler

Implement restart handler for the Loongson-1 watchdog driver and
define the watchdog registers instead of including the legacy header.

Signed-off-by: Keguang Zhang <[email protected]>
---
drivers/watchdog/loongson1_wdt.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/drivers/watchdog/loongson1_wdt.c b/drivers/watchdog/loongson1_wdt.c
index bb3d075c0633..a0b6fe62e516 100644
--- a/drivers/watchdog/loongson1_wdt.c
+++ b/drivers/watchdog/loongson1_wdt.c
@@ -7,7 +7,11 @@
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/watchdog.h>
-#include <loongson1.h>
+
+/* Loongson 1 Watchdog Register Definitions */
+#define WDT_EN 0x0
+#define WDT_TIMER 0x4
+#define WDT_SET 0x8

#define DEFAULT_HEARTBEAT 30

@@ -66,6 +70,18 @@ static int ls1x_wdt_stop(struct watchdog_device *wdt_dev)
return 0;
}

+static int ls1x_wdt_restart(struct watchdog_device *wdt_dev,
+ unsigned long action, void *data)
+{
+ struct ls1x_wdt_drvdata *drvdata = watchdog_get_drvdata(wdt_dev);
+
+ writel(0x1, drvdata->base + WDT_EN);
+ writel(0x1, drvdata->base + WDT_TIMER);
+ writel(0x1, drvdata->base + WDT_SET);
+
+ return 0;
+}
+
static const struct watchdog_info ls1x_wdt_info = {
.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
.identity = "Loongson1 Watchdog",
@@ -77,6 +93,7 @@ static const struct watchdog_ops ls1x_wdt_ops = {
.stop = ls1x_wdt_stop,
.ping = ls1x_wdt_ping,
.set_timeout = ls1x_wdt_set_timeout,
+ .restart = ls1x_wdt_restart,
};

static void ls1x_clk_disable_unprepare(void *data)
--
2.34.1

2023-03-30 11:40:48

by Thomas Bogendoerfer

[permalink] [raw]
Subject: Re: [PATCH 1/2] MIPS: Loongson32: Remove reset.c

On Thu, Mar 30, 2023 at 06:20:12PM +0800, Keguang Zhang wrote:
> The Loongson-1 restart handler will be moved to watchdog driver,
> then _machine_restart is no longer needed.
> The _machine_halt and pm_power_off are also unnecessary,
> which contain no hardware operations.
>
> Therefore, remove the entire reset.c and related header file.
> Update the Makefile accordingly.
>
> Signed-off-by: Keguang Zhang <[email protected]>
> ---
> .../include/asm/mach-loongson32/regs-wdt.h | 15 ------
> arch/mips/loongson32/common/Makefile | 2 +-
> arch/mips/loongson32/common/reset.c | 51 -------------------
> 3 files changed, 1 insertion(+), 67 deletions(-)
> delete mode 100644 arch/mips/include/asm/mach-loongson32/regs-wdt.h
> delete mode 100644 arch/mips/loongson32/common/reset.c

Acked-by: Thomas Bogendoerfer <[email protected]>

--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]

2023-04-17 03:30:13

by Keguang Zhang

[permalink] [raw]
Subject: Re: [PATCH 1/2] MIPS: Loongson32: Remove reset.c

On Thu, Mar 30, 2023 at 7:33 PM Thomas Bogendoerfer
<[email protected]> wrote:
>
> On Thu, Mar 30, 2023 at 06:20:12PM +0800, Keguang Zhang wrote:
> > The Loongson-1 restart handler will be moved to watchdog driver,
> > then _machine_restart is no longer needed.
> > The _machine_halt and pm_power_off are also unnecessary,
> > which contain no hardware operations.
> >
> > Therefore, remove the entire reset.c and related header file.
> > Update the Makefile accordingly.
> >
> > Signed-off-by: Keguang Zhang <[email protected]>
> > ---
> > .../include/asm/mach-loongson32/regs-wdt.h | 15 ------
> > arch/mips/loongson32/common/Makefile | 2 +-
> > arch/mips/loongson32/common/reset.c | 51 -------------------
> > 3 files changed, 1 insertion(+), 67 deletions(-)
> > delete mode 100644 arch/mips/include/asm/mach-loongson32/regs-wdt.h
> > delete mode 100644 arch/mips/loongson32/common/reset.c
>
> Acked-by: Thomas Bogendoerfer <[email protected]>
>
Thomas,
Sorry! I forgot to remove the reference to regs-wdt.h, which will
cause a build error.
Could you please review v2:
https://lore.kernel.org/all/[email protected]/
Thanks very much!

> --
> Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
> good idea. [ RFC1925, 2.3 ]



--
Best regards,

Keguang Zhang