kumquat-buildroot/board/telit/evk-pro3/patches/barebox/0001-watchdog-add-keep-alive-support.patch
Fabio Porcedda bafe9bc093 configs/telit_evk_pro3: bump barebox to 2017.01.0
This bump fix the build failure with gcc5 for barebox.

Some changes were made to the first patch to align to the latest
barebox api.

Also done the following changes:
- Use "BR2_TARGET_BAREBOX_CONFIG_FRAGMENT_FILES" instead of patching
  the barebox sources.
- Use "BR2_GLOBAL_PATCH_DIR" instead of
  "BR2_TARGET_BAREBOX_CUSTOM_PATCH_DIR".

Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-03-06 21:18:05 +01:00

100 lines
2.5 KiB
Diff

From 76e2b190803484db033153fe8a97b381a567ed25 Mon Sep 17 00:00:00 2001
From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Date: Wed, 14 Nov 2012 19:16:35 +0800
Subject: [PATCH 1/4] watchdog: add keep alive support
this will allow to ping the watchdog via poller
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
drivers/watchdog/Kconfig | 1 +
drivers/watchdog/wd_core.c | 25 +++++++++++++++++++++++++
include/watchdog.h | 2 ++
3 files changed, 28 insertions(+)
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 63fb1a8c5..7ebff89b9 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -4,6 +4,7 @@ config WATCHDOG_IMX_RESET_SOURCE
menuconfig WATCHDOG
bool "Watchdog support"
+ select GENERIC_POLLER
help
Many platforms support a watchdog to keep track of a working machine.
This framework provides routines to handle these watchdogs.
diff --git a/drivers/watchdog/wd_core.c b/drivers/watchdog/wd_core.c
index 3a3f51964..52537afef 100644
--- a/drivers/watchdog/wd_core.c
+++ b/drivers/watchdog/wd_core.c
@@ -18,6 +18,7 @@
#include <errno.h>
#include <linux/ctype.h>
#include <watchdog.h>
+#include <poller.h>
static LIST_HEAD(watchdog_list);
@@ -31,6 +32,20 @@ static const char *watchdog_name(struct watchdog *wd)
return "unknown";
}
+static struct watchdog *watchdog_get_default(void);
+
+static void watchdog_poller_func(struct poller_struct *poller)
+{
+ struct watchdog *wd = watchdog_get_default();
+
+ if (wd)
+ wd->keep_alive(wd);
+}
+
+static struct poller_struct watchdog_poller = {
+ .func = watchdog_poller_func,
+};
+
int watchdog_register(struct watchdog *wd)
{
if (!wd->priority)
@@ -41,6 +56,16 @@ int watchdog_register(struct watchdog *wd)
pr_debug("registering watchdog %s with priority %d\n", watchdog_name(wd),
wd->priority);
+
+ if (wd->keep_alive) {
+ int ret;
+
+ ret = poller_register(&watchdog_poller);
+ if (ret) {
+ return ret;
+ }
+ }
+
return 0;
}
EXPORT_SYMBOL(watchdog_register);
diff --git a/include/watchdog.h b/include/watchdog.h
index 3e8a487a4..a2660c2e0 100644
--- a/include/watchdog.h
+++ b/include/watchdog.h
@@ -13,12 +13,14 @@
#ifndef INCLUDE_WATCHDOG_H
# define INCLUDE_WATCHDOG_H
+
struct watchdog {
int (*set_timeout)(struct watchdog *, unsigned);
const char *name;
struct device_d *dev;
unsigned int priority;
struct list_head list;
+ void (*keep_alive)(struct watchdog *);
};
#ifdef CONFIG_WATCHDOG
--
2.12.0