From: Fabio Porcedda Date: Mon, 6 Mar 2017 16:45:04 +0000 (+0100) Subject: configs/telit_evk_pro3: bump barebox to 2017.01.0 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bafe9bc093d5d3140a298a2983a1cc52207d1e96;p=buildroot.git 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 Signed-off-by: Thomas Petazzoni --- diff --git a/board/telit/evk-pro3/barebox-2013.04.0-0001-watchdog-add-keep-alive-support.patch b/board/telit/evk-pro3/barebox-2013.04.0-0001-watchdog-add-keep-alive-support.patch deleted file mode 100644 index 1551546031..0000000000 --- a/board/telit/evk-pro3/barebox-2013.04.0-0001-watchdog-add-keep-alive-support.patch +++ /dev/null @@ -1,88 +0,0 @@ -From b5e57a9f158a293b1151638336478af8a5aad0f0 Mon Sep 17 00:00:00 2001 -From: Jean-Christophe PLAGNIOL-VILLARD -Date: Wed, 14 Nov 2012 19:16:35 +0800 -Subject: [PATCH 1/5] watchdog: add keep alive support - -this will allow to ping the watchdog via poller - -Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD ---- - drivers/watchdog/Kconfig | 1 + - drivers/watchdog/wd_core.c | 21 +++++++++++++++++++++ - include/watchdog.h | 2 ++ - 3 files changed, 24 insertions(+) - -diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig -index 2e2900c..0b4dc84 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 3d0cfc6..a1b9e28 100644 ---- a/drivers/watchdog/wd_core.c -+++ b/drivers/watchdog/wd_core.c -@@ -17,18 +17,39 @@ - #include - #include - #include -+#include - - /* - * Note: this simple framework supports one watchdog only. - */ - static struct watchdog *watchdog; - -+static void watchdog_poller_func(struct poller_struct *poller) -+{ -+ watchdog->keep_alive(watchdog); -+} -+ -+static struct poller_struct watchdog_poller = { -+ .func = watchdog_poller_func, -+}; -+ - int watchdog_register(struct watchdog *wd) - { - if (watchdog != NULL) - return -EBUSY; - - watchdog = wd; -+ -+ if (watchdog->keep_alive) { -+ int ret; -+ -+ ret = poller_register(&watchdog_poller); -+ if (ret) { -+ watchdog = NULL; -+ return ret; -+ } -+ } -+ - return 0; - } - EXPORT_SYMBOL(watchdog_register); -diff --git a/include/watchdog.h b/include/watchdog.h -index 3e2d08e..d5ecf2f 100644 ---- a/include/watchdog.h -+++ b/include/watchdog.h -@@ -13,8 +13,10 @@ - #ifndef INCLUDE_WATCHDOG_H - # define INCLUDE_WATCHDOG_H - -+ - struct watchdog { - int (*set_timeout)(struct watchdog *, unsigned); -+ void (*keep_alive)(struct watchdog *); - }; - - int watchdog_register(struct watchdog *); --- -1.8.1.4 - diff --git a/board/telit/evk-pro3/barebox-2013.04.0-0002-watchdog-add-at91sam9-watchdog-support.patch b/board/telit/evk-pro3/barebox-2013.04.0-0002-watchdog-add-at91sam9-watchdog-support.patch deleted file mode 100644 index 1ca87695a4..0000000000 --- a/board/telit/evk-pro3/barebox-2013.04.0-0002-watchdog-add-at91sam9-watchdog-support.patch +++ /dev/null @@ -1,228 +0,0 @@ -From e1d54ffb987c346c45c20968be34c50c62a91c07 Mon Sep 17 00:00:00 2001 -From: Jean-Christophe PLAGNIOL-VILLARD -Date: Wed, 14 Nov 2012 19:17:47 +0800 -Subject: [PATCH 2/5] watchdog: add at91sam9 watchdog support - -with keep alive support - -Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD ---- - drivers/watchdog/Kconfig | 7 +++ - drivers/watchdog/Makefile | 1 + - drivers/watchdog/at91sam9_wdt.c | 131 ++++++++++++++++++++++++++++++++++++++++ - drivers/watchdog/at91sam9_wdt.h | 38 ++++++++++++ - 4 files changed, 177 insertions(+) - create mode 100644 drivers/watchdog/at91sam9_wdt.c - create mode 100644 drivers/watchdog/at91sam9_wdt.h - -diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig -index 0b4dc84..98a21d7 100644 ---- a/drivers/watchdog/Kconfig -+++ b/drivers/watchdog/Kconfig -@@ -11,6 +11,13 @@ menuconfig WATCHDOG - - if WATCHDOG - -+config WATCHDOG_AT91SAM9X -+ tristate "AT91SAM9X / AT91CAP9 watchdog" -+ depends on ARCH_AT91 -+ help -+ Watchdog timer embedded into AT91SAM9X and AT91CAP9 chips. This will -+ reboot your system when the timeout is reached. -+ - config WATCHDOG_MXS28 - bool "i.MX28" - depends on ARCH_IMX28 -diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile -index f522b88..3d15d52 100644 ---- a/drivers/watchdog/Makefile -+++ b/drivers/watchdog/Makefile -@@ -1,3 +1,4 @@ - obj-$(CONFIG_WATCHDOG) += wd_core.o -+obj-$(CONFIG_WATCHDOG_AT91SAM9X) += at91sam9_wdt.o - obj-$(CONFIG_WATCHDOG_MXS28) += im28wd.o - obj-$(CONFIG_WATCHDOG_IMX_RESET_SOURCE) += imxwd.o -diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c -new file mode 100644 -index 0000000..203d83a ---- /dev/null -+++ b/drivers/watchdog/at91sam9_wdt.c -@@ -0,0 +1,131 @@ -+/* -+ * (c) 2012 Juergen Beisert -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * Note: this driver works for the i.MX28 SoC. It might work for the -+ * i.MX23 Soc as well, but is not tested yet. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "at91sam9_wdt.h" -+ -+struct at91sam9_wdt { -+ struct watchdog wdt; -+ void __iomem *base; -+}; -+ -+#define to_at91sam9_wdt(h) container_of(h, struct at91sam9_wdt, wdt) -+ -+#define wdt_read(at91wdt, field) \ -+ __raw_readl(at91wdt->base + field) -+#define wdt_write(at91wdt, field, val) \ -+ __raw_writel((val), at91wdt->base + field) -+ -+static void at91sam9_wdt_keep_alive(struct watchdog *wdt) -+{ -+ struct at91sam9_wdt *at91wdt = to_at91sam9_wdt(wdt); -+ -+ wdt_write(at91wdt, AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT); -+} -+ -+static int at91sam9_wdt_settimeout(struct watchdog *wdt, unsigned int timeout) -+{ -+ struct at91sam9_wdt *at91wdt = to_at91sam9_wdt(wdt); -+ unsigned int reg; -+ unsigned int mr; -+ -+ /* Check if disabled */ -+ mr = wdt_read(at91wdt, AT91_WDT_MR); -+ if (mr & AT91_WDT_WDDIS) { -+ pr_err("sorry, watchdog is disabled\n"); -+ return -EIO; -+ } -+ -+ if (!timeout) { -+ wdt_write(at91wdt, AT91_WDT_MR, AT91_WDT_WDDIS); -+ return 0; -+ } -+ -+ /* -+ * All counting occurs at SLOW_CLOCK / 128 = 256 Hz -+ * -+ * Since WDV is a 12-bit counter, the maximum period is -+ * 4096 / 256 = 16 seconds. -+ */ -+ reg = AT91_WDT_WDRSTEN /* causes watchdog reset */ -+ /* | AT91_WDT_WDRPROC causes processor reset only */ -+ | AT91_WDT_WDDBGHLT /* disabled in debug mode */ -+ | AT91_WDT_WDD /* restart at any time */ -+ | (timeout & AT91_WDT_WDV); /* timer value */ -+ wdt_write(at91wdt, AT91_WDT_MR, reg); -+ -+ return 0; -+} -+ -+static int at91sam9_wdt_probe(struct device_d *dev) -+{ -+ struct at91sam9_wdt *priv; -+ struct watchdog *wdt; -+ int ret; -+ unsigned int mr; -+ -+ priv = xzalloc(sizeof(struct at91sam9_wdt)); -+ priv->base = dev_request_mem_region(dev, 0); -+ wdt = &priv->wdt; -+ -+ wdt->set_timeout = at91sam9_wdt_settimeout; -+ wdt->keep_alive = at91sam9_wdt_keep_alive; -+ -+ /* Check if disabled */ -+ mr = wdt_read(priv, AT91_WDT_MR); -+ if (mr & AT91_WDT_WDDIS) { -+ dev_err(dev, "sorry, watchdog is disabled\n"); -+ ret = -EIO; -+ goto err; -+ } -+ -+ ret = watchdog_register(wdt); -+ if (ret != 0) -+ goto err; -+ -+ dev->priv = priv; -+ return 0; -+ -+err: -+ free(priv); -+ return ret; -+} -+ -+static void at91sam9_wdt_remove(struct device_d *dev) -+{ -+ struct at91sam9_wdt *priv= dev->priv; -+ watchdog_deregister(&priv->wdt); -+ free(priv); -+} -+ -+static struct driver_d at91sam9_wdt_driver = { -+ .name = "at91sam9_wdt", -+ .probe = at91sam9_wdt_probe, -+ .remove = at91sam9_wdt_remove, -+}; -+ -+static int at91sam9_wdt_init(void) -+{ -+ return platform_driver_register(&at91sam9_wdt_driver); -+} -+coredevice_initcall(at91sam9_wdt_init); -diff --git a/drivers/watchdog/at91sam9_wdt.h b/drivers/watchdog/at91sam9_wdt.h -new file mode 100644 -index 0000000..2b68c1a ---- /dev/null -+++ b/drivers/watchdog/at91sam9_wdt.h -@@ -0,0 +1,38 @@ -+/* -+ * drivers/watchdog/at91sam9_wdt.h -+ * -+ * Copyright (C) 2007 Andrew Victor -+ * Copyright (C) 2007 Atmel Corporation. -+ * -+ * Watchdog Timer (WDT) - System peripherals regsters. -+ * Based on AT91SAM9261 datasheet revision D. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef AT91_WDT_H -+#define AT91_WDT_H -+ -+#define AT91_WDT_CR 0x00 /* Watchdog Control Register */ -+#define AT91_WDT_WDRSTT (1 << 0) /* Restart */ -+#define AT91_WDT_KEY (0xa5 << 24) /* KEY Password */ -+ -+#define AT91_WDT_MR 0x04 /* Watchdog Mode Register */ -+#define AT91_WDT_WDV (0xfff << 0) /* Counter Value */ -+#define AT91_WDT_WDFIEN (1 << 12) /* Fault Interrupt Enable */ -+#define AT91_WDT_WDRSTEN (1 << 13) /* Reset Processor */ -+#define AT91_WDT_WDRPROC (1 << 14) /* Timer Restart */ -+#define AT91_WDT_WDDIS (1 << 15) /* Watchdog Disable */ -+#define AT91_WDT_WDD (0xfff << 16) /* Delta Value */ -+#define AT91_WDT_WDDBGHLT (1 << 28) /* Debug Halt */ -+#define AT91_WDT_WDIDLEHLT (1 << 29) /* Idle Halt */ -+ -+#define AT91_WDT_SR 0x08 /* Watchdog Status Register */ -+#define AT91_WDT_WDUNF (1 << 0) /* Watchdog Underflow */ -+#define AT91_WDT_WDERR (1 << 1) /* Watchdog Error */ -+ -+ -+#endif --- -1.8.1.4 - diff --git a/board/telit/evk-pro3/barebox-2013.04.0-0003-at91sam9260-9g20-add-wathdog-support.patch b/board/telit/evk-pro3/barebox-2013.04.0-0003-at91sam9260-9g20-add-wathdog-support.patch deleted file mode 100644 index bf97200308..0000000000 --- a/board/telit/evk-pro3/barebox-2013.04.0-0003-at91sam9260-9g20-add-wathdog-support.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 3338bcb05479f1149420d4a0ea3904cb9e42eef5 Mon Sep 17 00:00:00 2001 -From: Jean-Christophe PLAGNIOL-VILLARD -Date: Wed, 14 Nov 2012 19:18:22 +0800 -Subject: [PATCH 3/5] at91sam9260/9g20: add wathdog support - -Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD ---- - arch/arm/mach-at91/at91sam9260_devices.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c -index 1c375ee..5885f91 100644 ---- a/arch/arm/mach-at91/at91sam9260_devices.c -+++ b/arch/arm/mach-at91/at91sam9260_devices.c -@@ -10,6 +10,7 @@ - * - */ - #include -+#include - #include - #include - #include -@@ -397,3 +398,14 @@ void at91_add_device_mci(short mmc_id, struct atmel_mci_platform_data *data) - #else - void at91_add_device_mci(short mmc_id, struct atmel_mci_platform_data *data) {} - #endif -+ -+#ifdef CONFIG_WATCHDOG_AT91SAM9X -+static int at91_add_device_watchdog(void) -+{ -+ add_generic_device("at91sam9_wdt", DEVICE_ID_SINGLE, NULL, -+ AT91_WDT + AT91_BASE_SYS, 16, IORESOURCE_MEM, NULL); -+ -+ return 0; -+} -+coredevice_initcall(at91_add_device_watchdog); -+#endif --- -1.8.1.4 - diff --git a/board/telit/evk-pro3/barebox-2013.04.0-0004-at91sam9260-9g20-fix-wathdog-support.patch b/board/telit/evk-pro3/barebox-2013.04.0-0004-at91sam9260-9g20-fix-wathdog-support.patch deleted file mode 100644 index cdfd026adf..0000000000 --- a/board/telit/evk-pro3/barebox-2013.04.0-0004-at91sam9260-9g20-fix-wathdog-support.patch +++ /dev/null @@ -1,26 +0,0 @@ -From e03bf0e3ad24898019b89eb9a6935d159c60268f Mon Sep 17 00:00:00 2001 -From: Fabio Porcedda -Date: Thu, 17 Jan 2013 11:32:35 +0100 -Subject: [PATCH 4/5] at91sam9260/9g20: fix wathdog support - -Signed-off-by: Fabio Porcedda ---- - arch/arm/mach-at91/at91sam9260_devices.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c -index 5885f91..df675d2 100644 ---- a/arch/arm/mach-at91/at91sam9260_devices.c -+++ b/arch/arm/mach-at91/at91sam9260_devices.c -@@ -403,7 +403,7 @@ void at91_add_device_mci(short mmc_id, struct atmel_mci_platform_data *data) {} - static int at91_add_device_watchdog(void) - { - add_generic_device("at91sam9_wdt", DEVICE_ID_SINGLE, NULL, -- AT91_WDT + AT91_BASE_SYS, 16, IORESOURCE_MEM, NULL); -+ AT91_BASE_WDT, 16, IORESOURCE_MEM, NULL); - - return 0; - } --- -1.8.1.4 - diff --git a/board/telit/evk-pro3/barebox-2013.04.0-0005-watchdog-enable-for-evk-pro3.patch b/board/telit/evk-pro3/barebox-2013.04.0-0005-watchdog-enable-for-evk-pro3.patch deleted file mode 100644 index 837e8c632a..0000000000 --- a/board/telit/evk-pro3/barebox-2013.04.0-0005-watchdog-enable-for-evk-pro3.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 98c96ea36a4b3bb9b92dde849db5e8d6918b5168 Mon Sep 17 00:00:00 2001 -From: Fabio Porcedda -Date: Thu, 17 Jan 2013 11:32:59 +0100 -Subject: [PATCH 5/5] watchdog: enable for evk-pro3 - -Signed-off-by: Fabio Porcedda ---- - arch/arm/configs/telit_evk_pro3_defconfig | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/arm/configs/telit_evk_pro3_defconfig b/arch/arm/configs/telit_evk_pro3_defconfig -index 050d176..436cecf 100644 ---- a/arch/arm/configs/telit_evk_pro3_defconfig -+++ b/arch/arm/configs/telit_evk_pro3_defconfig -@@ -68,6 +68,8 @@ CONFIG_MCI_ATMEL=y - CONFIG_LED=y - CONFIG_LED_GPIO=y - CONFIG_LED_TRIGGERS=y -+CONFIG_WATCHDOG=y -+CONFIG_WATCHDOG_AT91SAM9X=y - CONFIG_FS_TFTP=y - CONFIG_FS_FAT=y - CONFIG_FS_FAT_LFN=y --- -1.8.1.4 - diff --git a/board/telit/evk-pro3/barebox.fragment b/board/telit/evk-pro3/barebox.fragment new file mode 100644 index 0000000000..750ad19cd8 --- /dev/null +++ b/board/telit/evk-pro3/barebox.fragment @@ -0,0 +1,2 @@ +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_AT91SAM9X=y diff --git a/board/telit/evk-pro3/patches/barebox/0001-watchdog-add-keep-alive-support.patch b/board/telit/evk-pro3/patches/barebox/0001-watchdog-add-keep-alive-support.patch new file mode 100644 index 0000000000..80bd459b56 --- /dev/null +++ b/board/telit/evk-pro3/patches/barebox/0001-watchdog-add-keep-alive-support.patch @@ -0,0 +1,99 @@ +From 76e2b190803484db033153fe8a97b381a567ed25 Mon Sep 17 00:00:00 2001 +From: Jean-Christophe PLAGNIOL-VILLARD +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 +Signed-off-by: Fabio Porcedda +--- + 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 + #include + #include ++#include + + 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 + diff --git a/board/telit/evk-pro3/patches/barebox/0002-watchdog-add-at91sam9-watchdog-support.patch b/board/telit/evk-pro3/patches/barebox/0002-watchdog-add-at91sam9-watchdog-support.patch new file mode 100644 index 0000000000..b97c126954 --- /dev/null +++ b/board/telit/evk-pro3/patches/barebox/0002-watchdog-add-at91sam9-watchdog-support.patch @@ -0,0 +1,237 @@ +From 24d99ffc4b22e45721e74bfc10717cc5bacdbfc4 Mon Sep 17 00:00:00 2001 +From: Jean-Christophe PLAGNIOL-VILLARD +Date: Wed, 14 Nov 2012 19:17:47 +0800 +Subject: [PATCH 2/4] watchdog: add at91sam9 watchdog support + +with keep alive support + +Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD +Signed-off-by: Fabio Porcedda +--- + drivers/watchdog/Kconfig | 8 +++ + drivers/watchdog/Makefile | 1 + + drivers/watchdog/at91sam9_wdt.c | 131 ++++++++++++++++++++++++++++++++++++++++ + drivers/watchdog/at91sam9_wdt.h | 38 ++++++++++++ + 4 files changed, 178 insertions(+) + create mode 100644 drivers/watchdog/at91sam9_wdt.c + create mode 100644 drivers/watchdog/at91sam9_wdt.h + +diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig +index 7ebff89b9..479e737f0 100644 +--- a/drivers/watchdog/Kconfig ++++ b/drivers/watchdog/Kconfig +@@ -11,12 +11,20 @@ menuconfig WATCHDOG + + if WATCHDOG + ++config WATCHDOG_AT91SAM9X ++ tristate "AT91SAM9X / AT91CAP9 watchdog" ++ depends on ARCH_AT91 ++ help ++ Watchdog timer embedded into AT91SAM9X and AT91CAP9 chips. This will ++ reboot your system when the timeout is reached. ++ + config WATCHDOG_DAVINCI + bool "TI Davinci" + depends on ARCH_DAVINCI + help + Add support for watchdog on the TI Davinci SoC. + ++ + config WATCHDOG_DW + bool "Synopsys DesignWare watchdog" + select RESET_CONTROLLER +diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile +index 5fca4c368..245a5c84a 100644 +--- a/drivers/watchdog/Makefile ++++ b/drivers/watchdog/Makefile +@@ -1,4 +1,5 @@ + obj-$(CONFIG_WATCHDOG) += wd_core.o ++obj-$(CONFIG_WATCHDOG_AT91SAM9X) += at91sam9_wdt.o + obj-$(CONFIG_WATCHDOG_DAVINCI) += davinci_wdt.o + obj-$(CONFIG_WATCHDOG_OMAP) += omap_wdt.o + obj-$(CONFIG_WATCHDOG_MXS28) += im28wd.o +diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c +new file mode 100644 +index 000000000..203d83aff +--- /dev/null ++++ b/drivers/watchdog/at91sam9_wdt.c +@@ -0,0 +1,131 @@ ++/* ++ * (c) 2012 Juergen Beisert ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * Note: this driver works for the i.MX28 SoC. It might work for the ++ * i.MX23 Soc as well, but is not tested yet. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "at91sam9_wdt.h" ++ ++struct at91sam9_wdt { ++ struct watchdog wdt; ++ void __iomem *base; ++}; ++ ++#define to_at91sam9_wdt(h) container_of(h, struct at91sam9_wdt, wdt) ++ ++#define wdt_read(at91wdt, field) \ ++ __raw_readl(at91wdt->base + field) ++#define wdt_write(at91wdt, field, val) \ ++ __raw_writel((val), at91wdt->base + field) ++ ++static void at91sam9_wdt_keep_alive(struct watchdog *wdt) ++{ ++ struct at91sam9_wdt *at91wdt = to_at91sam9_wdt(wdt); ++ ++ wdt_write(at91wdt, AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT); ++} ++ ++static int at91sam9_wdt_settimeout(struct watchdog *wdt, unsigned int timeout) ++{ ++ struct at91sam9_wdt *at91wdt = to_at91sam9_wdt(wdt); ++ unsigned int reg; ++ unsigned int mr; ++ ++ /* Check if disabled */ ++ mr = wdt_read(at91wdt, AT91_WDT_MR); ++ if (mr & AT91_WDT_WDDIS) { ++ pr_err("sorry, watchdog is disabled\n"); ++ return -EIO; ++ } ++ ++ if (!timeout) { ++ wdt_write(at91wdt, AT91_WDT_MR, AT91_WDT_WDDIS); ++ return 0; ++ } ++ ++ /* ++ * All counting occurs at SLOW_CLOCK / 128 = 256 Hz ++ * ++ * Since WDV is a 12-bit counter, the maximum period is ++ * 4096 / 256 = 16 seconds. ++ */ ++ reg = AT91_WDT_WDRSTEN /* causes watchdog reset */ ++ /* | AT91_WDT_WDRPROC causes processor reset only */ ++ | AT91_WDT_WDDBGHLT /* disabled in debug mode */ ++ | AT91_WDT_WDD /* restart at any time */ ++ | (timeout & AT91_WDT_WDV); /* timer value */ ++ wdt_write(at91wdt, AT91_WDT_MR, reg); ++ ++ return 0; ++} ++ ++static int at91sam9_wdt_probe(struct device_d *dev) ++{ ++ struct at91sam9_wdt *priv; ++ struct watchdog *wdt; ++ int ret; ++ unsigned int mr; ++ ++ priv = xzalloc(sizeof(struct at91sam9_wdt)); ++ priv->base = dev_request_mem_region(dev, 0); ++ wdt = &priv->wdt; ++ ++ wdt->set_timeout = at91sam9_wdt_settimeout; ++ wdt->keep_alive = at91sam9_wdt_keep_alive; ++ ++ /* Check if disabled */ ++ mr = wdt_read(priv, AT91_WDT_MR); ++ if (mr & AT91_WDT_WDDIS) { ++ dev_err(dev, "sorry, watchdog is disabled\n"); ++ ret = -EIO; ++ goto err; ++ } ++ ++ ret = watchdog_register(wdt); ++ if (ret != 0) ++ goto err; ++ ++ dev->priv = priv; ++ return 0; ++ ++err: ++ free(priv); ++ return ret; ++} ++ ++static void at91sam9_wdt_remove(struct device_d *dev) ++{ ++ struct at91sam9_wdt *priv= dev->priv; ++ watchdog_deregister(&priv->wdt); ++ free(priv); ++} ++ ++static struct driver_d at91sam9_wdt_driver = { ++ .name = "at91sam9_wdt", ++ .probe = at91sam9_wdt_probe, ++ .remove = at91sam9_wdt_remove, ++}; ++ ++static int at91sam9_wdt_init(void) ++{ ++ return platform_driver_register(&at91sam9_wdt_driver); ++} ++coredevice_initcall(at91sam9_wdt_init); +diff --git a/drivers/watchdog/at91sam9_wdt.h b/drivers/watchdog/at91sam9_wdt.h +new file mode 100644 +index 000000000..2b68c1a2a +--- /dev/null ++++ b/drivers/watchdog/at91sam9_wdt.h +@@ -0,0 +1,38 @@ ++/* ++ * drivers/watchdog/at91sam9_wdt.h ++ * ++ * Copyright (C) 2007 Andrew Victor ++ * Copyright (C) 2007 Atmel Corporation. ++ * ++ * Watchdog Timer (WDT) - System peripherals regsters. ++ * Based on AT91SAM9261 datasheet revision D. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ */ ++ ++#ifndef AT91_WDT_H ++#define AT91_WDT_H ++ ++#define AT91_WDT_CR 0x00 /* Watchdog Control Register */ ++#define AT91_WDT_WDRSTT (1 << 0) /* Restart */ ++#define AT91_WDT_KEY (0xa5 << 24) /* KEY Password */ ++ ++#define AT91_WDT_MR 0x04 /* Watchdog Mode Register */ ++#define AT91_WDT_WDV (0xfff << 0) /* Counter Value */ ++#define AT91_WDT_WDFIEN (1 << 12) /* Fault Interrupt Enable */ ++#define AT91_WDT_WDRSTEN (1 << 13) /* Reset Processor */ ++#define AT91_WDT_WDRPROC (1 << 14) /* Timer Restart */ ++#define AT91_WDT_WDDIS (1 << 15) /* Watchdog Disable */ ++#define AT91_WDT_WDD (0xfff << 16) /* Delta Value */ ++#define AT91_WDT_WDDBGHLT (1 << 28) /* Debug Halt */ ++#define AT91_WDT_WDIDLEHLT (1 << 29) /* Idle Halt */ ++ ++#define AT91_WDT_SR 0x08 /* Watchdog Status Register */ ++#define AT91_WDT_WDUNF (1 << 0) /* Watchdog Underflow */ ++#define AT91_WDT_WDERR (1 << 1) /* Watchdog Error */ ++ ++ ++#endif +-- +2.12.0 + diff --git a/board/telit/evk-pro3/patches/barebox/0003-at91sam9260-9g20-add-wathdog-support.patch b/board/telit/evk-pro3/patches/barebox/0003-at91sam9260-9g20-add-wathdog-support.patch new file mode 100644 index 0000000000..6f4efaba1e --- /dev/null +++ b/board/telit/evk-pro3/patches/barebox/0003-at91sam9260-9g20-add-wathdog-support.patch @@ -0,0 +1,36 @@ +From 60110b93a5cbc6ec3d92035d9daf86a30a7fd791 Mon Sep 17 00:00:00 2001 +From: Jean-Christophe PLAGNIOL-VILLARD +Date: Wed, 14 Nov 2012 19:18:22 +0800 +Subject: [PATCH 3/4] at91sam9260/9g20: add wathdog support + +Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD +Signed-off-by: Fabio Porcedda +--- + arch/arm/mach-at91/at91sam9260_devices.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c +index 67c4ea860..51852a9a8 100644 +--- a/arch/arm/mach-at91/at91sam9260_devices.c ++++ b/arch/arm/mach-at91/at91sam9260_devices.c +@@ -400,6 +400,17 @@ void at91_add_device_mci(short mmc_id, struct atmel_mci_platform_data *data) + void at91_add_device_mci(short mmc_id, struct atmel_mci_platform_data *data) {} + #endif + ++#ifdef CONFIG_WATCHDOG_AT91SAM9X ++static int at91_add_device_watchdog(void) ++{ ++ add_generic_device("at91sam9_wdt", DEVICE_ID_SINGLE, NULL, ++ AT91_WDT + AT91_BASE_SYS, 16, IORESOURCE_MEM, NULL); ++ ++ return 0; ++} ++coredevice_initcall(at91_add_device_watchdog); ++#endif ++ + static int at91_fixup_device(void) + { + at91_rtt_irq_fixup(IOMEM(AT91SAM9260_BASE_RTT)); +-- +2.12.0 + diff --git a/board/telit/evk-pro3/patches/barebox/0004-at91sam9260-9g20-fix-wathdog-support.patch b/board/telit/evk-pro3/patches/barebox/0004-at91sam9260-9g20-fix-wathdog-support.patch new file mode 100644 index 0000000000..edc1ea4d5b --- /dev/null +++ b/board/telit/evk-pro3/patches/barebox/0004-at91sam9260-9g20-fix-wathdog-support.patch @@ -0,0 +1,26 @@ +From d8231b1726a020733d87c2685ec1631403e050cf Mon Sep 17 00:00:00 2001 +From: Fabio Porcedda +Date: Thu, 17 Jan 2013 11:32:35 +0100 +Subject: [PATCH 4/4] at91sam9260/9g20: fix wathdog support + +Signed-off-by: Fabio Porcedda +--- + arch/arm/mach-at91/at91sam9260_devices.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c +index 51852a9a8..20c8cac9d 100644 +--- a/arch/arm/mach-at91/at91sam9260_devices.c ++++ b/arch/arm/mach-at91/at91sam9260_devices.c +@@ -404,7 +404,7 @@ void at91_add_device_mci(short mmc_id, struct atmel_mci_platform_data *data) {} + static int at91_add_device_watchdog(void) + { + add_generic_device("at91sam9_wdt", DEVICE_ID_SINGLE, NULL, +- AT91_WDT + AT91_BASE_SYS, 16, IORESOURCE_MEM, NULL); ++ AT91_BASE_WDT, 16, IORESOURCE_MEM, NULL); + + return 0; + } +-- +2.12.0 + diff --git a/configs/telit_evk_pro3_defconfig b/configs/telit_evk_pro3_defconfig index 946c2f04a6..d2fd7d5a8a 100644 --- a/configs/telit_evk_pro3_defconfig +++ b/configs/telit_evk_pro3_defconfig @@ -2,6 +2,9 @@ BR2_arm=y BR2_arm926t=y +# Patches +BR2_GLOBAL_PATCH_DIR="board/telit/evk-pro3/patches" + # Linux headers same as kernel, a 3.9 series BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_9=y @@ -15,9 +18,9 @@ BR2_TARGET_ROOTFS_UBI=y # Bootloader BR2_TARGET_BAREBOX=y BR2_TARGET_BAREBOX_CUSTOM_VERSION=y -BR2_TARGET_BAREBOX_CUSTOM_VERSION_VALUE="2013.04.0" -BR2_TARGET_BAREBOX_CUSTOM_PATCH_DIR="board/telit/evk-pro3" +BR2_TARGET_BAREBOX_CUSTOM_VERSION_VALUE="2017.01.0" BR2_TARGET_BAREBOX_BOARD_DEFCONFIG="telit_evk_pro3" +BR2_TARGET_BAREBOX_CONFIG_FRAGMENT_FILES="board/telit/evk-pro3/barebox.fragment" # Kernel BR2_LINUX_KERNEL=y