Skip to contentSkip to conversation

Move Loongson1 restart handler to watchdog driver

PATCH Superseded Keguang Zhang 2 participants 5 messages Mar 30, 2023 – Apr 17, 2023

Subsystems (3)

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

Keguang Zhang

author maintainer
#0 lore raw

cover 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

Signature · 1 line
2.34.1
author maintainer
#1 lore raw

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.

---
 .../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
arch/mips/include/asm/mach-loongson32/regs-wdt.h deleted +0 -15
deleted file mode 100644
index c6d345fe13f2..000000000000
@@ -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 */
arch/mips/loongson32/common/Makefile +1 -1
index 7b49c8260706..f3950d308187 100644
@@ -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
arch/mips/loongson32/common/reset.c deleted +0 -51

51 lines not on this page · raw message

Signature · 1 line
2.34.1
maintainer Acked-by on v1 1/2
#2 lore raw

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

Quoted 8 lines · Keguang Zhang

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.

Quoted 8 lines
---
 .../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
Signature · 2 lines
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]
author maintainer
#3 lore raw

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

Quoted 19 lines · Thomas Bogendoerfer
Quoted 8 lines · Keguang Zhang

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.

Quoted 8 lines
---
 .../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
Quoted 2 lines

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!

Quoted 3 lines

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

--
Best regards,

Keguang Zhang

author maintainer
#4 lore raw

PATCH 2/2 watchdog: loongson1_wdt: Implement restart handler

In reply to Keguang Zhang

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

---
 drivers/watchdog/loongson1_wdt.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)
drivers/watchdog/loongson1_wdt.c +18 -1
index bb3d075c0633..a0b6fe62e516 100644
@@ -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)
Signature · 1 line
2.34.1