Re: [PATCH v14 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-03-05 Thread Fu Wei
On 5 March 2016 at 03:47, Wim Van Sebroeck <w...@iguana.be> wrote:
> Hi Fu,
>
>> From: Fu Wei <fu@linaro.org>
>>
>> This patchset:
>> (1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
>> for FDT info of SBSA Generic Watchdog, and give two examples of
>> adding SBSA Generic Watchdog device node into the dts files:
>> foundation-v8.dts and amd-seattle-soc.dtsi.
>>
>> (2)Introduce ARM SBSA watchdog driver:
>> a.Use linux kernel watchdog framework;
>> b.Work with FDT on ARM64;
>> c.Support getting timeout from parameter and FDT at the driver
>>   init stage.
>> d.The driver works in two modes:
>>   (1) single stage timeout (ignore WS0 interrupt)
>>   (2) two stages timeout (register WS0 interrupt, do panic in 
>> routine)
>> e.User can config working mode by module parameter "action".
>>
>> This patchset has been tested with watchdog daemon
>> (ACPI/FDT, module/build-in) on the following platforms:
>> (1)ARM Foundation v8 model
>> (2)AMD Seattle platform
>>
>> This patchset has been tested with kdump successfully.
>>
>> Changelog:
>> v14:Fix a bug of registering interrupt routine: do a ping before
>> registering interrupt routine, in case where is a pending interrupt.
>> Reorder the initialization code to postpone registering interrupt 
>> routine.
>> Improve some code style:
>> (1)add some macro of string
>> (2)use watchdog_get_drvdata instead of to_sbsa_gwdt,
>>delete to_sbsa_gwdt.
>>
>> v13:https://lkml.org/lkml/2016/2/16/713
>> Fix a dev_warn message typo"signle"-->"single"
>> Add MODULE_ALIAS
>> Add more *ed-by in commit message.
>>
>> v12:https://lkml.org/lkml/2016/2/16/154
>> Fix a dev_warn message typo"fall"--"falling"
>> Remove unnecessary "status" in dts
>> Add more *ed-by in commit message.
>>
>> v11:https://lkml.org/lkml/2016/2/9/577
>> Merge patch 4 and 5.
>> Improve some comments.
>> The driver works in two modes, it's configured by "action"(instead of
>> panic_enabled).
>> Improve the initialization of the timeout limits.
>> Feeding dog by writing "0" to WRR.
>>
>> v10:https://lkml.org/lkml/2016/2/3/817
>> Delete pretimeout support.
>> Separate the driver to two parts:
>> (1) single stage timeout driver(ignore WS0 interrupt);
>> (2) register WS0 interrupt for the half timeout panic.
>> timeout == (enable --> WS1).
>>
>> v9: https://lkml.org/lkml/2015/11/9/57
>> Rebase to latest kernel version(4.3).
>> Update the Documentation of sbsa-gwdt device node info of FDT:
>> (1) move some introduction to pretimeout patch
>> (2) delete WS1 value from "interrupts" of binding documentation,
>> since WS1 won't be handled by Linux.
>>
>> v8: https://lkml.org/lkml/2015/10/27/466
>> Rebase to latest kernel version(4.3-rc7).
>> Separate the patches of GTDT support and arm_arch_timer. This
>> clocksource relevant patch will upstreamed in a individual patchset.
>> Update all the default timeout and pretimeout to 30s and 60s.
>> Improve documentation and inline comments.
>> Fix a bug in pretimeout support which makes timeout and pretimeout
>> parameters initialization fail.
>>
>> v7: https://lkml.org/lkml/2015/8/24/611
>> Rebase to latest kernel version(4.2-rc7).
>> Improve FDT support: geting resource by order, instead of name.
>> According to the FDT support, Update the example dts file, gtdt.c
>> and sbsa_gwdt.c.
>> Pass the sparse test, and fix the warning.
>> Fix the max_pretimeout and max_timeout value overflow bug.
>> Delete the WCV output value.
>>
>>
>> v6: https://lkml.org/lkml/2015/6/23/359
>> Improve the dtb example files: reduce the register frame size to 4K.
>> Improve pretimeout support:
>> (1) improve watchdog_init_timeouts function
>>   (2) rename watchdog_check_min_max_timeouts back to the original name
>> (1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
>> Add the new features in the sbsa_gwdt driver:
>>   (1) In the second stage, user can feed the dog without cleaning WS0.
>>   (2) In the second stage, user can trigger WS1 by setting pretimeou

Re: [PATCH v14 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-03-05 Thread Fu Wei
On 5 March 2016 at 03:47, Wim Van Sebroeck  wrote:
> Hi Fu,
>
>> From: Fu Wei 
>>
>> This patchset:
>> (1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
>> for FDT info of SBSA Generic Watchdog, and give two examples of
>> adding SBSA Generic Watchdog device node into the dts files:
>> foundation-v8.dts and amd-seattle-soc.dtsi.
>>
>> (2)Introduce ARM SBSA watchdog driver:
>> a.Use linux kernel watchdog framework;
>> b.Work with FDT on ARM64;
>> c.Support getting timeout from parameter and FDT at the driver
>>   init stage.
>> d.The driver works in two modes:
>>   (1) single stage timeout (ignore WS0 interrupt)
>>   (2) two stages timeout (register WS0 interrupt, do panic in 
>> routine)
>> e.User can config working mode by module parameter "action".
>>
>> This patchset has been tested with watchdog daemon
>> (ACPI/FDT, module/build-in) on the following platforms:
>> (1)ARM Foundation v8 model
>> (2)AMD Seattle platform
>>
>> This patchset has been tested with kdump successfully.
>>
>> Changelog:
>> v14:Fix a bug of registering interrupt routine: do a ping before
>> registering interrupt routine, in case where is a pending interrupt.
>> Reorder the initialization code to postpone registering interrupt 
>> routine.
>> Improve some code style:
>> (1)add some macro of string
>> (2)use watchdog_get_drvdata instead of to_sbsa_gwdt,
>>delete to_sbsa_gwdt.
>>
>> v13:https://lkml.org/lkml/2016/2/16/713
>> Fix a dev_warn message typo"signle"-->"single"
>> Add MODULE_ALIAS
>> Add more *ed-by in commit message.
>>
>> v12:https://lkml.org/lkml/2016/2/16/154
>> Fix a dev_warn message typo"fall"--"falling"
>> Remove unnecessary "status" in dts
>> Add more *ed-by in commit message.
>>
>> v11:https://lkml.org/lkml/2016/2/9/577
>> Merge patch 4 and 5.
>> Improve some comments.
>> The driver works in two modes, it's configured by "action"(instead of
>> panic_enabled).
>> Improve the initialization of the timeout limits.
>> Feeding dog by writing "0" to WRR.
>>
>> v10:https://lkml.org/lkml/2016/2/3/817
>> Delete pretimeout support.
>> Separate the driver to two parts:
>> (1) single stage timeout driver(ignore WS0 interrupt);
>> (2) register WS0 interrupt for the half timeout panic.
>> timeout == (enable --> WS1).
>>
>> v9: https://lkml.org/lkml/2015/11/9/57
>> Rebase to latest kernel version(4.3).
>> Update the Documentation of sbsa-gwdt device node info of FDT:
>> (1) move some introduction to pretimeout patch
>> (2) delete WS1 value from "interrupts" of binding documentation,
>> since WS1 won't be handled by Linux.
>>
>> v8: https://lkml.org/lkml/2015/10/27/466
>> Rebase to latest kernel version(4.3-rc7).
>> Separate the patches of GTDT support and arm_arch_timer. This
>> clocksource relevant patch will upstreamed in a individual patchset.
>> Update all the default timeout and pretimeout to 30s and 60s.
>> Improve documentation and inline comments.
>> Fix a bug in pretimeout support which makes timeout and pretimeout
>> parameters initialization fail.
>>
>> v7: https://lkml.org/lkml/2015/8/24/611
>> Rebase to latest kernel version(4.2-rc7).
>> Improve FDT support: geting resource by order, instead of name.
>> According to the FDT support, Update the example dts file, gtdt.c
>> and sbsa_gwdt.c.
>> Pass the sparse test, and fix the warning.
>> Fix the max_pretimeout and max_timeout value overflow bug.
>> Delete the WCV output value.
>>
>>
>> v6: https://lkml.org/lkml/2015/6/23/359
>> Improve the dtb example files: reduce the register frame size to 4K.
>> Improve pretimeout support:
>> (1) improve watchdog_init_timeouts function
>>   (2) rename watchdog_check_min_max_timeouts back to the original name
>> (1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
>> Add the new features in the sbsa_gwdt driver:
>>   (1) In the second stage, user can feed the dog without cleaning WS0.
>>   (2) In the second stage, user can trigger WS1 by setting pretimeout = 
>> 0.
>>   (3) expand the

[PATCH v14 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-29 Thread fu . wei
From: Fu Wei <fu@linaro.org>

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.
More details about the hardware specification of this device:
ARM DEN0029B - Server Base System Architecture (SBSA)

This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
or a two stages watchdog, it's set up by the module parameter "action".
In the single stage mode, when the timeout is reached, your system
will be reset by WS1. The first signal (WS0) is ignored.
In the two stages mode, when the timeout is reached, the first signal (WS0)
will trigger panic. If the system is getting into trouble and cannot be reset
by panic or restart properly by the kdump kernel(if supported), then the
second stage (as long as the first stage) will be reached, system will be
reset by WS1. This function can help administrator to backup the system
context info by panic console output or kdump.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Graeme Gregory <graeme.greg...@linaro.org>
Tested-by: Pratyush Anand <pan...@redhat.com>
Acked-by: Timur Tabi <ti...@codeaurora.org>
Reviewed-by: Mathieu Poirier <mathieu.poir...@linaro.org>
Tested-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
Reviewed-by: Guenter Roeck <li...@roeck-us.net>
---
 drivers/watchdog/Kconfig |  20 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 408 +++
 3 files changed, 429 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 0f6d851..38a7f5c 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -202,6 +202,26 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This driver can operate ARM SBSA Generic Watchdog as a single stage
+ or a two stages watchdog, it depends on the module parameter "action".
+
+ Note: the maximum timeout in the two stages mode is half of that in
+ the single stage mode.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..d3e23b6
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,408 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei <fu@linaro.org>
+ * Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
+ * Al Stone <al.st...@linaro.org>
+ * Timur Tabi <ti...@codeaurora.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * ARM SBSA Generic Watchdog has two stage timeouts:
+ * the first signal (WS0) is for alerting the system by interrupt,
+ * the second one (WS1) is a real hardware reset.
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
+ * or a two stages watchdog, it's set up by the module par

[PATCH v14 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-29 Thread fu . wei
From: Fu Wei 

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.
More details about the hardware specification of this device:
ARM DEN0029B - Server Base System Architecture (SBSA)

This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
or a two stages watchdog, it's set up by the module parameter "action".
In the single stage mode, when the timeout is reached, your system
will be reset by WS1. The first signal (WS0) is ignored.
In the two stages mode, when the timeout is reached, the first signal (WS0)
will trigger panic. If the system is getting into trouble and cannot be reset
by panic or restart properly by the kdump kernel(if supported), then the
second stage (as long as the first stage) will be reached, system will be
reset by WS1. This function can help administrator to backup the system
context info by panic console output or kdump.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei 
Reviewed-by: Graeme Gregory 
Tested-by: Pratyush Anand 
Acked-by: Timur Tabi 
Reviewed-by: Mathieu Poirier 
Tested-by: Suravee Suthikulpanit 
Reviewed-by: Guenter Roeck 
---
 drivers/watchdog/Kconfig |  20 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 408 +++
 3 files changed, 429 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 0f6d851..38a7f5c 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -202,6 +202,26 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This driver can operate ARM SBSA Generic Watchdog as a single stage
+ or a two stages watchdog, it depends on the module parameter "action".
+
+ Note: the maximum timeout in the two stages mode is half of that in
+ the single stage mode.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..d3e23b6
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,408 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei 
+ * Suravee Suthikulpanit 
+ * Al Stone 
+ * Timur Tabi 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * ARM SBSA Generic Watchdog has two stage timeouts:
+ * the first signal (WS0) is for alerting the system by interrupt,
+ * the second one (WS1) is a real hardware reset.
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
+ * or a two stages watchdog, it's set up by the module parameter "action".
+ * In the single stage mode, when the timeout is reached, your system
+ * will be reset by WS1. The first signal (WS0) is ignored.
+ * In the two stages mode, when the timeout is reached, the first signal (WS0)
+ * will trigger panic. If the system is getting into trouble and cannot be 
reset
+ * by panic or

[PATCH v14 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-29 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Guenter Roeck <li...@roeck-us.net>
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..0a8ca1d 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,14 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <15>;
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v14 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-29 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Suravee Suthikulpanit 
Signed-off-by: Fu Wei 
Reviewed-by: Guenter Roeck 
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..0a8ca1d 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,14 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <15>;
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v14 1/4] Documentation: add sbsa-gwdt driver documentation

2016-02-29 Thread fu . wei
From: Fu Wei <fu@linaro.org>

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann <a...@arndb.de>
Acked-by: Rob Herring <r...@kernel.org>
Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Guenter Roeck <li...@roeck-us.net>
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 31 ++
 Documentation/watchdog/watchdog-parameters.txt |  7 +
 2 files changed, 38 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..6f2d5f9
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,31 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..ce7ae4e 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,13 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 10s)
+action: Watchdog action at the first stage timeout,
+   set to 0 to ignore, 1 to panic. (default=0)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



[PATCH v14 1/4] Documentation: add sbsa-gwdt driver documentation

2016-02-29 Thread fu . wei
From: Fu Wei 

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann 
Acked-by: Rob Herring 
Signed-off-by: Fu Wei 
Reviewed-by: Guenter Roeck 
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 31 ++
 Documentation/watchdog/watchdog-parameters.txt |  7 +
 2 files changed, 38 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..6f2d5f9
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,31 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..ce7ae4e 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,13 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 10s)
+action: Watchdog action at the first stage timeout,
+   set to 0 to ignore, 1 to panic. (default=0)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



[PATCH v14 2/4] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-29 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Guenter Roeck <li...@roeck-us.net>
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..66cb9aa 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,11 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   };
 };
-- 
2.5.0



[PATCH v14 2/4] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-29 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Fu Wei 
Reviewed-by: Guenter Roeck 
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..66cb9aa 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,11 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   };
 };
-- 
2.5.0



[PATCH v14 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-29 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.The driver works in two modes:
  (1) single stage timeout (ignore WS0 interrupt)
  (2) two stages timeout (register WS0 interrupt, do panic in routine)
e.User can config working mode by module parameter "action".

This patchset has been tested with watchdog daemon
(ACPI/FDT, module/build-in) on the following platforms:
(1)ARM Foundation v8 model
(2)AMD Seattle platform

This patchset has been tested with kdump successfully.

Changelog:
v14:Fix a bug of registering interrupt routine: do a ping before
registering interrupt routine, in case where is a pending interrupt.
Reorder the initialization code to postpone registering interrupt routine.
Improve some code style:
(1)add some macro of string
(2)use watchdog_get_drvdata instead of to_sbsa_gwdt,
   delete to_sbsa_gwdt.

v13:https://lkml.org/lkml/2016/2/16/713
Fix a dev_warn message typo"signle"-->"single"
Add MODULE_ALIAS
Add more *ed-by in commit message.

v12:https://lkml.org/lkml/2016/2/16/154
Fix a dev_warn message typo"fall"--"falling"
Remove unnecessary "status" in dts
Add more *ed-by in commit message.

v11:https://lkml.org/lkml/2016/2/9/577
Merge patch 4 and 5.
Improve some comments.
The driver works in two modes, it's configured by "action"(instead of
panic_enabled).
Improve the initialization of the timeout limits.
Feeding dog by writing "0" to WRR.

v10:https://lkml.org/lkml/2016/2/3/817
Delete pretimeout support.
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt);
(2) register WS0 interrupt for the half timeout panic.
timeout == (enable --> WS1).

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit chec

[PATCH v14 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-29 Thread fu . wei
From: Fu Wei 

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.The driver works in two modes:
  (1) single stage timeout (ignore WS0 interrupt)
  (2) two stages timeout (register WS0 interrupt, do panic in routine)
e.User can config working mode by module parameter "action".

This patchset has been tested with watchdog daemon
(ACPI/FDT, module/build-in) on the following platforms:
(1)ARM Foundation v8 model
(2)AMD Seattle platform

This patchset has been tested with kdump successfully.

Changelog:
v14:Fix a bug of registering interrupt routine: do a ping before
registering interrupt routine, in case where is a pending interrupt.
Reorder the initialization code to postpone registering interrupt routine.
Improve some code style:
(1)add some macro of string
(2)use watchdog_get_drvdata instead of to_sbsa_gwdt,
   delete to_sbsa_gwdt.

v13:https://lkml.org/lkml/2016/2/16/713
Fix a dev_warn message typo"signle"-->"single"
Add MODULE_ALIAS
Add more *ed-by in commit message.

v12:https://lkml.org/lkml/2016/2/16/154
Fix a dev_warn message typo"fall"--"falling"
Remove unnecessary "status" in dts
Add more *ed-by in commit message.

v11:https://lkml.org/lkml/2016/2/9/577
Merge patch 4 and 5.
Improve some comments.
The driver works in two modes, it's configured by "action"(instead of
panic_enabled).
Improve the initialization of the timeout limits.
Feeding dog by writing "0" to WRR.

v10:https://lkml.org/lkml/2016/2/3/817
Delete pretimeout support.
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt);
(2) register WS0 interrupt for the half timeout panic.
timeout == (enable --> WS1).

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(

Re: [PATCH v12 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-28 Thread Fu Wei
Hi Timur,

On 27 February 2016 at 03:27, Timur Tabi <ti...@codeaurora.org> wrote:
> fu@linaro.org wrote:
>>
>> +   if (action) {
>> +   irq = platform_get_irq(pdev, 0);
>> +   if (irq < 0) {
>> +   action = 0;
>> +   dev_warn(dev, "unable to get ws0 interrupt.\n");
>> +   } else {
>> +   if (devm_request_irq(dev, irq,
>> sbsa_gwdt_interrupt, 0,
>> +pdev->name, gwdt)) {
>> +   action = 0;
>> +   dev_warn(dev, "unable to request IRQ
>> %d.\n",
>> +irq);
>> +   }
>> +   }
>> +   if (!action)
>> +   dev_warn(dev, "falling back to signle stage
>> mode.\n");
>> +   }
>> +
>> +   /*
>> +* Get the frequency of system counter from the cp15 interface of
>> ARM
>> +* Generic timer. We don't need to check it, because if it returns
>> "0",
>> +* system would panic in very early stage.
>> +*/
>> +   gwdt->clk = arch_timer_get_cntfrq();
>> +   gwdt->refresh_base = rf_base;
>> +   gwdt->control_base = cf_base;
>
>
> I think you need to ping the watchdog before enabling the interrupt, in case
> there is a pending interrupt.  This just happened to me in testing, so I
> recommend this:
>
>> /*
>>  * Get the frequency of system counter from the cp15 interface of
>> ARM
>>  * Generic timer. We don't need to check it, because if it returns
>> "0",
>>  * system would panic in very early stage.
>>  */
>> gwdt->clk = arch_timer_get_cntfrq();
>> gwdt->refresh_base = rf_base;
>> gwdt->control_base = cf_base;
>>
>> if (action) {
>> irq = platform_get_irq(pdev, 0);
>> if (irq < 0) {
>> action = 0;
>> dev_warn(dev, "unable to get ws0 interrupt.\n");
>> } else {
>> sbsa_gwdt_keepalive(>wdd);
>> if (devm_request_irq(dev, irq,
>> sbsa_gwdt_interrupt, 0,
>>  pdev->name, gwdt)) {
>> action = 0;
>> dev_warn(dev, "unable to request IRQ
>> %d.\n",
>>  irq);
>> }
>> }
>> if (!action)
>> dev_warn(dev, "falling back to single stage
>> mode.\n");
>> }
>
>
> In fact, I think you need to move the "if (action) {" block near the end of
> sbsa_gwdt_probe().  We don't want to enable the interrupt until the watchdog
> is fully initialized.
>

Good point! Thanks for your testing :-)

Will post v14 for this change.

> --
> Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> Forum, a Linux Foundation collaborative project.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v12 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-28 Thread Fu Wei
Hi Timur,

On 27 February 2016 at 03:27, Timur Tabi  wrote:
> fu@linaro.org wrote:
>>
>> +   if (action) {
>> +   irq = platform_get_irq(pdev, 0);
>> +   if (irq < 0) {
>> +   action = 0;
>> +   dev_warn(dev, "unable to get ws0 interrupt.\n");
>> +   } else {
>> +   if (devm_request_irq(dev, irq,
>> sbsa_gwdt_interrupt, 0,
>> +pdev->name, gwdt)) {
>> +   action = 0;
>> +   dev_warn(dev, "unable to request IRQ
>> %d.\n",
>> +irq);
>> +   }
>> +   }
>> +   if (!action)
>> +   dev_warn(dev, "falling back to signle stage
>> mode.\n");
>> +   }
>> +
>> +   /*
>> +* Get the frequency of system counter from the cp15 interface of
>> ARM
>> +* Generic timer. We don't need to check it, because if it returns
>> "0",
>> +* system would panic in very early stage.
>> +*/
>> +   gwdt->clk = arch_timer_get_cntfrq();
>> +   gwdt->refresh_base = rf_base;
>> +   gwdt->control_base = cf_base;
>
>
> I think you need to ping the watchdog before enabling the interrupt, in case
> there is a pending interrupt.  This just happened to me in testing, so I
> recommend this:
>
>> /*
>>  * Get the frequency of system counter from the cp15 interface of
>> ARM
>>  * Generic timer. We don't need to check it, because if it returns
>> "0",
>>  * system would panic in very early stage.
>>  */
>> gwdt->clk = arch_timer_get_cntfrq();
>> gwdt->refresh_base = rf_base;
>> gwdt->control_base = cf_base;
>>
>> if (action) {
>> irq = platform_get_irq(pdev, 0);
>> if (irq < 0) {
>> action = 0;
>> dev_warn(dev, "unable to get ws0 interrupt.\n");
>> } else {
>> sbsa_gwdt_keepalive(>wdd);
>> if (devm_request_irq(dev, irq,
>> sbsa_gwdt_interrupt, 0,
>>  pdev->name, gwdt)) {
>> action = 0;
>> dev_warn(dev, "unable to request IRQ
>> %d.\n",
>>  irq);
>> }
>> }
>> if (!action)
>> dev_warn(dev, "falling back to single stage
>> mode.\n");
>> }
>
>
> In fact, I think you need to move the "if (action) {" block near the end of
> sbsa_gwdt_probe().  We don't want to enable the interrupt until the watchdog
> is fully initialized.
>

Good point! Thanks for your testing :-)

Will post v14 for this change.

> --
> Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> Forum, a Linux Foundation collaborative project.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v3 6/6] kvm: arm64: Add ACPI support for virt arch timer

2016-02-21 Thread Fu Wei
Hi Marc

On 9 February 2016 at 01:10, Marc Zyngier <marc.zyng...@arm.com> wrote:
> On 01/02/16 20:26, fu@linaro.org wrote:
>> From: Fu Wei <fu@linaro.org>
>>
>> This patch adds ACPI/GTDT support for virt arch timer
>> using the API in GTDT driver.
>>
>> Signed-off-by: Fu Wei <fu@linaro.org>
>> ---
>>  virt/kvm/arm/arch_timer.c | 8 
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
>> index 0a279d3..4077347 100644
>> --- a/virt/kvm/arm/arch_timer.c
>> +++ b/virt/kvm/arm/arch_timer.c
>> @@ -385,6 +385,9 @@ static int kvm_timer_get_ppi(unsigned int *ppi)
>>  {
>>   struct device_node *np;
>>   int ret = -EINVAL;
>> +#ifdef CONFIG_ACPI_GTDT
>> + struct arch_timer_data data;
>> +#endif
>>
>>   np = of_find_matching_node(NULL, arch_timer_of_match);
>>   if (!np) {
>> @@ -397,6 +400,11 @@ static int kvm_timer_get_ppi(unsigned int *ppi)
>>   of_node_put(np);
>>
>>  skip_of:
>> +#ifdef CONFIG_ACPI_GTDT
>> + if (!*ppi && !gtdt_arch_timer_data_init(NULL, ))
>> + *ppi = data.virt_ppi;
>> +#endif
>> +
>>   if (*ppi)
>>   return 0;
>>
>>
>
> As I already pointed out in another thread hacking some KVM ACPI stuff,
> this is the wrong approach.
>
> We should have a *common* accessor in the timer code that exports the
> relevant information, whatever the firmware "du jour" is.
>
> See Julien's series, which seems to address the issue in a much more
> convincing way:
>
> https://lists.cs.columbia.edu/pipermail/kvmarm/2016-February/018531.html
>

Thanks for your info, I have read through Julien's patchset in mailing list.
This patch is a improvement from Wei Huang's patch using my GTDT driver,
because his approach is getting info from DTB or ACPI directly.

But It seems Wei Huang is helping Julien on his patchset and trying to
provide Tested-by,
So I will delete these two patches(about kvm), and test Julien's patch also.

> Thanks,
>
> M.
> --
> Jazz is not dead. It just smells funny...



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v3 6/6] kvm: arm64: Add ACPI support for virt arch timer

2016-02-21 Thread Fu Wei
Hi Marc

On 9 February 2016 at 01:10, Marc Zyngier  wrote:
> On 01/02/16 20:26, fu@linaro.org wrote:
>> From: Fu Wei 
>>
>> This patch adds ACPI/GTDT support for virt arch timer
>> using the API in GTDT driver.
>>
>> Signed-off-by: Fu Wei 
>> ---
>>  virt/kvm/arm/arch_timer.c | 8 
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
>> index 0a279d3..4077347 100644
>> --- a/virt/kvm/arm/arch_timer.c
>> +++ b/virt/kvm/arm/arch_timer.c
>> @@ -385,6 +385,9 @@ static int kvm_timer_get_ppi(unsigned int *ppi)
>>  {
>>   struct device_node *np;
>>   int ret = -EINVAL;
>> +#ifdef CONFIG_ACPI_GTDT
>> + struct arch_timer_data data;
>> +#endif
>>
>>   np = of_find_matching_node(NULL, arch_timer_of_match);
>>   if (!np) {
>> @@ -397,6 +400,11 @@ static int kvm_timer_get_ppi(unsigned int *ppi)
>>   of_node_put(np);
>>
>>  skip_of:
>> +#ifdef CONFIG_ACPI_GTDT
>> + if (!*ppi && !gtdt_arch_timer_data_init(NULL, ))
>> + *ppi = data.virt_ppi;
>> +#endif
>> +
>>   if (*ppi)
>>   return 0;
>>
>>
>
> As I already pointed out in another thread hacking some KVM ACPI stuff,
> this is the wrong approach.
>
> We should have a *common* accessor in the timer code that exports the
> relevant information, whatever the firmware "du jour" is.
>
> See Julien's series, which seems to address the issue in a much more
> convincing way:
>
> https://lists.cs.columbia.edu/pipermail/kvmarm/2016-February/018531.html
>

Thanks for your info, I have read through Julien's patchset in mailing list.
This patch is a improvement from Wei Huang's patch using my GTDT driver,
because his approach is getting info from DTB or ACPI directly.

But It seems Wei Huang is helping Julien on his patchset and trying to
provide Tested-by,
So I will delete these two patches(about kvm), and test Julien's patch also.

> Thanks,
>
> M.
> --
> Jazz is not dead. It just smells funny...



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


[PATCH v13 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.The driver works in two modes:
  (1) single stage timeout (ignore WS0 interrupt)
  (2) two stages timeout (register WS0 interrupt, do panic in routine)
e.User can config working mode by module parameter "action".

This patchset has been tested with watchdog daemon
(ACPI/FDT, module/build-in) on the following platforms:
(1)ARM Foundation v8 model
(2)AMD Seattle platform

This patchset has been tested with kdump successfully.

Changelog:
v13:Fix a dev_warn message typo"signle"-->"single"
Add MODULE_ALIAS
Add more *ed-by in commit message.

v12:https://lkml.org/lkml/2016/2/16/154
Fix a dev_warn message typo"fall"--"falling"
Remove unnecessary "status" in dts
Add more *ed-by in commit message.

v11:https://lkml.org/lkml/2016/2/9/577
Merge patch 4 and 5.
Improve some comments.
The driver works in two modes, it's configured by "action"(instead of
panic_enabled).
Improve the initialization of the timeout limits.
Feeding dog by writing "0" to WRR.

v10:https://lkml.org/lkml/2016/2/3/817
Delete pretimeout support.
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt);
(2) register WS0 interrupt for the half timeout panic.
timeout == (enable --> WS1).

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(5)sbsa_gwdt_set_wcv function.

v3: https://lkml.org/lkml/2015/5/25/111
Delete "export arch_timer_get_rate" patch.
Driver back to use arch_timer_get_cntfrq.
Improve watchdog_init_timeouts function and update relevant documentation.
Improve watchdog_timeout_invalid and watchdog_pretimeout_invalid.
Improve foundation-v8.dts: delete the unnecessary tag of dev

[PATCH v13 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread fu . wei
From: Fu Wei 

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.The driver works in two modes:
  (1) single stage timeout (ignore WS0 interrupt)
  (2) two stages timeout (register WS0 interrupt, do panic in routine)
e.User can config working mode by module parameter "action".

This patchset has been tested with watchdog daemon
(ACPI/FDT, module/build-in) on the following platforms:
(1)ARM Foundation v8 model
(2)AMD Seattle platform

This patchset has been tested with kdump successfully.

Changelog:
v13:Fix a dev_warn message typo"signle"-->"single"
Add MODULE_ALIAS
Add more *ed-by in commit message.

v12:https://lkml.org/lkml/2016/2/16/154
Fix a dev_warn message typo"fall"--"falling"
Remove unnecessary "status" in dts
Add more *ed-by in commit message.

v11:https://lkml.org/lkml/2016/2/9/577
Merge patch 4 and 5.
Improve some comments.
The driver works in two modes, it's configured by "action"(instead of
panic_enabled).
Improve the initialization of the timeout limits.
Feeding dog by writing "0" to WRR.

v10:https://lkml.org/lkml/2016/2/3/817
Delete pretimeout support.
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt);
(2) register WS0 interrupt for the half timeout panic.
timeout == (enable --> WS1).

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(5)sbsa_gwdt_set_wcv function.

v3: https://lkml.org/lkml/2015/5/25/111
Delete "export arch_timer_get_rate" patch.
Driver back to use arch_timer_get_cntfrq.
Improve watchdog_init_timeouts function and update relevant documentation.
Improve watchdog_timeout_invalid and watchdog_pretimeout_invalid.
Improve foundation-v8.dts: delete the unnecessary tag of device node.
Remove "

[PATCH v13 1/4] Documentation: add sbsa-gwdt driver documentation

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann <a...@arndb.de>
Acked-by: Rob Herring <r...@kernel.org>
Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Guenter Roeck <li...@roeck-us.net>
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 31 ++
 Documentation/watchdog/watchdog-parameters.txt |  7 +
 2 files changed, 38 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..6f2d5f9
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,31 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..ce7ae4e 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,13 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 10s)
+action: Watchdog action at the first stage timeout,
+   set to 0 to ignore, 1 to panic. (default=0)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



[PATCH v13 1/4] Documentation: add sbsa-gwdt driver documentation

2016-02-16 Thread fu . wei
From: Fu Wei 

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann 
Acked-by: Rob Herring 
Signed-off-by: Fu Wei 
Reviewed-by: Guenter Roeck 
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 31 ++
 Documentation/watchdog/watchdog-parameters.txt |  7 +
 2 files changed, 38 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..6f2d5f9
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,31 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..ce7ae4e 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,13 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 10s)
+action: Watchdog action at the first stage timeout,
+   set to 0 to ignore, 1 to panic. (default=0)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



[PATCH v13 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Guenter Roeck <li...@roeck-us.net>
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..0a8ca1d 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,14 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <15>;
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v13 2/4] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Guenter Roeck <li...@roeck-us.net>
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..66cb9aa 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,11 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   };
 };
-- 
2.5.0



[PATCH v13 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-16 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Suravee Suthikulpanit 
Signed-off-by: Fu Wei 
Reviewed-by: Guenter Roeck 
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..0a8ca1d 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,14 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <15>;
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v13 2/4] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-16 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Fu Wei 
Reviewed-by: Guenter Roeck 
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..66cb9aa 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,11 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   };
 };
-- 
2.5.0



[PATCH v13 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.
More details about the hardware specification of this device:
ARM DEN0029B - Server Base System Architecture (SBSA)

This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
or a two stages watchdog, it's set up by the module parameter "action".
In the single stage mode, when the timeout is reached, your system
will be reset by WS1. The first signal (WS0) is ignored.
In the two stages mode, when the timeout is reached, the first signal (WS0)
will trigger panic. If the system is getting into trouble and cannot be reset
by panic or restart properly by the kdump kernel(if supported), then the
second stage (as long as the first stage) will be reached, system will be
reset by WS1. This function can help administrator to backup the system
context info by panic console output or kdump.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Graeme Gregory <graeme.greg...@linaro.org>
Tested-by: Pratyush Anand <pan...@redhat.com>
Acked-by: Timur Tabi <ti...@codeaurora.org>
Reviewed-by: Mathieu Poirier <mathieu.poir...@linaro.org>
Tested-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
---
 drivers/watchdog/Kconfig |  20 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 404 +++
 3 files changed, 425 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 0f6d851..38a7f5c 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -202,6 +202,26 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This driver can operate ARM SBSA Generic Watchdog as a single stage
+ or a two stages watchdog, it depends on the module parameter "action".
+
+ Note: the maximum timeout in the two stages mode is half of that in
+ the single stage mode.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..4a5260f
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,404 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei <fu@linaro.org>
+ * Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
+ * Al Stone <al.st...@linaro.org>
+ * Timur Tabi <ti...@codeaurora.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * ARM SBSA Generic Watchdog has two stage timeouts:
+ * the first signal (WS0) is for alerting the system by interrupt,
+ * the second one (WS1) is a real hardware reset.
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
+ * or a two stages watchdog, it's set up by the module parameter "action".
+ * In the single stage mode, 

[PATCH v13 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread fu . wei
From: Fu Wei 

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.
More details about the hardware specification of this device:
ARM DEN0029B - Server Base System Architecture (SBSA)

This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
or a two stages watchdog, it's set up by the module parameter "action".
In the single stage mode, when the timeout is reached, your system
will be reset by WS1. The first signal (WS0) is ignored.
In the two stages mode, when the timeout is reached, the first signal (WS0)
will trigger panic. If the system is getting into trouble and cannot be reset
by panic or restart properly by the kdump kernel(if supported), then the
second stage (as long as the first stage) will be reached, system will be
reset by WS1. This function can help administrator to backup the system
context info by panic console output or kdump.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei 
Reviewed-by: Graeme Gregory 
Tested-by: Pratyush Anand 
Acked-by: Timur Tabi 
Reviewed-by: Mathieu Poirier 
Tested-by: Suravee Suthikulpanit 
---
 drivers/watchdog/Kconfig |  20 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 404 +++
 3 files changed, 425 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 0f6d851..38a7f5c 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -202,6 +202,26 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This driver can operate ARM SBSA Generic Watchdog as a single stage
+ or a two stages watchdog, it depends on the module parameter "action".
+
+ Note: the maximum timeout in the two stages mode is half of that in
+ the single stage mode.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..4a5260f
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,404 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei 
+ * Suravee Suthikulpanit 
+ * Al Stone 
+ * Timur Tabi 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * ARM SBSA Generic Watchdog has two stage timeouts:
+ * the first signal (WS0) is for alerting the system by interrupt,
+ * the second one (WS1) is a real hardware reset.
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
+ * or a two stages watchdog, it's set up by the module parameter "action".
+ * In the single stage mode, when the timeout is reached, your system
+ * will be reset by WS1. The first signal (WS0) is ignored.
+ * In the two stages mode, when the timeout is reached, the first signal (WS0)
+ * will trigger panic. If the system is getting into trouble and cannot be 
reset
+ * by panic or restart properly by the kdump kernel

Re: [PATCH v12 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread Fu Wei
On 16 February 2016 at 23:54, Fu Wei <fu@linaro.org> wrote:
> On 16 February 2016 at 23:29, Guenter Roeck <li...@roeck-us.net> wrote:
>> On 02/16/2016 12:36 AM, fu@linaro.org wrote:
>>>
>>> From: Fu Wei <fu@linaro.org>
>>>
>>> According to Server Base System Architecture (SBSA) specification,
>>> the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
>>> is for alerting the system by interrupt, the second one (WS1) is a real
>>> hardware reset.
>>> More details about the hardware specification of this device:
>>> ARM DEN0029B - Server Base System Architecture (SBSA)
>>>
>>> This driver can operate ARM SBSA Generic Watchdog as a single stage
>>> watchdog
>>> or a two stages watchdog, it's set up by the module parameter "action".
>>> In the single stage mode, when the timeout is reached, your system
>>> will be reset by WS1. The first signal (WS0) is ignored.
>>> In the two stages mode, when the timeout is reached, the first signal
>>> (WS0)
>>> will trigger panic. If the system is getting into trouble and cannot be
>>> reset
>>> by panic or restart properly by the kdump kernel(if supported), then the
>>> second stage (as long as the first stage) will be reached, system will be
>>> reset by WS1. This function can help administrator to backup the system
>>> context info by panic console output or kdump.
>>>
>>> This driver bases on linux kernel watchdog framework, so it can get
>>> timeout from module parameter and FDT at the driver init stage.
>>>
>>> Signed-off-by: Fu Wei <fu@linaro.org>
>>> Reviewed-by: Graeme Gregory <graeme.greg...@linaro.org>
>>> Tested-by: Pratyush Anand <pan...@redhat.com>
>>> Acked-by: Timur Tabi <ti...@codeaurora.org>
>>> Reviewed-by: Mathieu Poirier <mathieu.poir...@linaro.org>
>>> ---
>>>   drivers/watchdog/Kconfig |  20 +++
>>>   drivers/watchdog/Makefile|   1 +
>>>   drivers/watchdog/sbsa_gwdt.c | 403
>>> +++
>>>   3 files changed, 424 insertions(+)
>>>
>>> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>>> index 0f6d851..ed9a5cb 100644
>>> --- a/drivers/watchdog/Kconfig
>>> +++ b/drivers/watchdog/Kconfig
>>
>>
>> [ ... ]
>>
>>> +
>>> +static int sbsa_gwdt_probe(struct platform_device *pdev)
>>> +{
>>
>>
>> [ ... ]
>>
>>> +   if (!action)
>>> +   dev_warn(dev, "falling back to signle stage
>>> mode.\n");
>>
>>
>> Still:
>>
>> s/signle/single/
>
> sorry, my bad, will fix it
>
>>
>> [ ... ]
>>
>>> +
>>> +MODULE_DESCRIPTION("SBSA Generic Watchdog Driver");
>>> +MODULE_AUTHOR("Fu Wei <fu@linaro.org>");
>>> +MODULE_AUTHOR("Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>");
>>> +MODULE_AUTHOR("Al Stone <al.st...@linaro.org>");
>>> +MODULE_AUTHOR("Timur Tabi <ti...@codeaurora.org>");
>>> +MODULE_LICENSE("GPL v2");
>>>
>> Do you need a MODULE_ALIAS ?
>
> For now, I thinks we don't need it, Hope I didn't miss something :-)
> Because this module can be mounted automatically with dtb or ACPI(if
> apply my GTDT patch).
> Do you have any suggestion or concern? :-)

re-think  about that , will add
MODULE_ALIAS("platform:sbsa-gwdt");

Do you agree ?  :-)

>
>>
>> Guenter
>>
>
>
>
> --
> Best regards,
>
> Fu Wei
> Software Engineer
> Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
> Ph: +86 21 61221326(direct)
> Ph: +86 186 2020 4684 (mobile)
> Room 1512, Regus One Corporate Avenue,Level 15,
> One Corporate Avenue,222 Hubin Road,Huangpu District,
> Shanghai,China 200021



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v12 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread Fu Wei
On 16 February 2016 at 23:54, Fu Wei  wrote:
> On 16 February 2016 at 23:29, Guenter Roeck  wrote:
>> On 02/16/2016 12:36 AM, fu@linaro.org wrote:
>>>
>>> From: Fu Wei 
>>>
>>> According to Server Base System Architecture (SBSA) specification,
>>> the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
>>> is for alerting the system by interrupt, the second one (WS1) is a real
>>> hardware reset.
>>> More details about the hardware specification of this device:
>>> ARM DEN0029B - Server Base System Architecture (SBSA)
>>>
>>> This driver can operate ARM SBSA Generic Watchdog as a single stage
>>> watchdog
>>> or a two stages watchdog, it's set up by the module parameter "action".
>>> In the single stage mode, when the timeout is reached, your system
>>> will be reset by WS1. The first signal (WS0) is ignored.
>>> In the two stages mode, when the timeout is reached, the first signal
>>> (WS0)
>>> will trigger panic. If the system is getting into trouble and cannot be
>>> reset
>>> by panic or restart properly by the kdump kernel(if supported), then the
>>> second stage (as long as the first stage) will be reached, system will be
>>> reset by WS1. This function can help administrator to backup the system
>>> context info by panic console output or kdump.
>>>
>>> This driver bases on linux kernel watchdog framework, so it can get
>>> timeout from module parameter and FDT at the driver init stage.
>>>
>>> Signed-off-by: Fu Wei 
>>> Reviewed-by: Graeme Gregory 
>>> Tested-by: Pratyush Anand 
>>> Acked-by: Timur Tabi 
>>> Reviewed-by: Mathieu Poirier 
>>> ---
>>>   drivers/watchdog/Kconfig |  20 +++
>>>   drivers/watchdog/Makefile|   1 +
>>>   drivers/watchdog/sbsa_gwdt.c | 403
>>> +++
>>>   3 files changed, 424 insertions(+)
>>>
>>> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>>> index 0f6d851..ed9a5cb 100644
>>> --- a/drivers/watchdog/Kconfig
>>> +++ b/drivers/watchdog/Kconfig
>>
>>
>> [ ... ]
>>
>>> +
>>> +static int sbsa_gwdt_probe(struct platform_device *pdev)
>>> +{
>>
>>
>> [ ... ]
>>
>>> +   if (!action)
>>> +   dev_warn(dev, "falling back to signle stage
>>> mode.\n");
>>
>>
>> Still:
>>
>> s/signle/single/
>
> sorry, my bad, will fix it
>
>>
>> [ ... ]
>>
>>> +
>>> +MODULE_DESCRIPTION("SBSA Generic Watchdog Driver");
>>> +MODULE_AUTHOR("Fu Wei ");
>>> +MODULE_AUTHOR("Suravee Suthikulpanit ");
>>> +MODULE_AUTHOR("Al Stone ");
>>> +MODULE_AUTHOR("Timur Tabi ");
>>> +MODULE_LICENSE("GPL v2");
>>>
>> Do you need a MODULE_ALIAS ?
>
> For now, I thinks we don't need it, Hope I didn't miss something :-)
> Because this module can be mounted automatically with dtb or ACPI(if
> apply my GTDT patch).
> Do you have any suggestion or concern? :-)

re-think  about that , will add
MODULE_ALIAS("platform:sbsa-gwdt");

Do you agree ?  :-)

>
>>
>> Guenter
>>
>
>
>
> --
> Best regards,
>
> Fu Wei
> Software Engineer
> Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
> Ph: +86 21 61221326(direct)
> Ph: +86 186 2020 4684 (mobile)
> Room 1512, Regus One Corporate Avenue,Level 15,
> One Corporate Avenue,222 Hubin Road,Huangpu District,
> Shanghai,China 200021



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v12 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread Fu Wei
On 16 February 2016 at 23:29, Guenter Roeck <li...@roeck-us.net> wrote:
> On 02/16/2016 12:36 AM, fu@linaro.org wrote:
>>
>> From: Fu Wei <fu@linaro.org>
>>
>> According to Server Base System Architecture (SBSA) specification,
>> the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
>> is for alerting the system by interrupt, the second one (WS1) is a real
>> hardware reset.
>> More details about the hardware specification of this device:
>> ARM DEN0029B - Server Base System Architecture (SBSA)
>>
>> This driver can operate ARM SBSA Generic Watchdog as a single stage
>> watchdog
>> or a two stages watchdog, it's set up by the module parameter "action".
>> In the single stage mode, when the timeout is reached, your system
>> will be reset by WS1. The first signal (WS0) is ignored.
>> In the two stages mode, when the timeout is reached, the first signal
>> (WS0)
>> will trigger panic. If the system is getting into trouble and cannot be
>> reset
>> by panic or restart properly by the kdump kernel(if supported), then the
>> second stage (as long as the first stage) will be reached, system will be
>> reset by WS1. This function can help administrator to backup the system
>> context info by panic console output or kdump.
>>
>> This driver bases on linux kernel watchdog framework, so it can get
>> timeout from module parameter and FDT at the driver init stage.
>>
>> Signed-off-by: Fu Wei <fu@linaro.org>
>> Reviewed-by: Graeme Gregory <graeme.greg...@linaro.org>
>> Tested-by: Pratyush Anand <pan...@redhat.com>
>> Acked-by: Timur Tabi <ti...@codeaurora.org>
>> Reviewed-by: Mathieu Poirier <mathieu.poir...@linaro.org>
>> ---
>>   drivers/watchdog/Kconfig |  20 +++
>>   drivers/watchdog/Makefile|   1 +
>>   drivers/watchdog/sbsa_gwdt.c | 403
>> +++
>>   3 files changed, 424 insertions(+)
>>
>> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>> index 0f6d851..ed9a5cb 100644
>> --- a/drivers/watchdog/Kconfig
>> +++ b/drivers/watchdog/Kconfig
>
>
> [ ... ]
>
>> +
>> +static int sbsa_gwdt_probe(struct platform_device *pdev)
>> +{
>
>
> [ ... ]
>
>> +   if (!action)
>> +   dev_warn(dev, "falling back to signle stage
>> mode.\n");
>
>
> Still:
>
> s/signle/single/

sorry, my bad, will fix it

>
> [ ... ]
>
>> +
>> +MODULE_DESCRIPTION("SBSA Generic Watchdog Driver");
>> +MODULE_AUTHOR("Fu Wei <fu@linaro.org>");
>> +MODULE_AUTHOR("Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>");
>> +MODULE_AUTHOR("Al Stone <al.st...@linaro.org>");
>> +MODULE_AUTHOR("Timur Tabi <ti...@codeaurora.org>");
>> +MODULE_LICENSE("GPL v2");
>>
> Do you need a MODULE_ALIAS ?

For now, I thinks we don't need it, Hope I didn't miss something :-)
Because this module can be mounted automatically with dtb or ACPI(if
apply my GTDT patch).
Do you have any suggestion or concern? :-)

>
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v12 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread Fu Wei
On 16 February 2016 at 23:29, Guenter Roeck  wrote:
> On 02/16/2016 12:36 AM, fu@linaro.org wrote:
>>
>> From: Fu Wei 
>>
>> According to Server Base System Architecture (SBSA) specification,
>> the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
>> is for alerting the system by interrupt, the second one (WS1) is a real
>> hardware reset.
>> More details about the hardware specification of this device:
>> ARM DEN0029B - Server Base System Architecture (SBSA)
>>
>> This driver can operate ARM SBSA Generic Watchdog as a single stage
>> watchdog
>> or a two stages watchdog, it's set up by the module parameter "action".
>> In the single stage mode, when the timeout is reached, your system
>> will be reset by WS1. The first signal (WS0) is ignored.
>> In the two stages mode, when the timeout is reached, the first signal
>> (WS0)
>> will trigger panic. If the system is getting into trouble and cannot be
>> reset
>> by panic or restart properly by the kdump kernel(if supported), then the
>> second stage (as long as the first stage) will be reached, system will be
>> reset by WS1. This function can help administrator to backup the system
>> context info by panic console output or kdump.
>>
>> This driver bases on linux kernel watchdog framework, so it can get
>> timeout from module parameter and FDT at the driver init stage.
>>
>> Signed-off-by: Fu Wei 
>> Reviewed-by: Graeme Gregory 
>> Tested-by: Pratyush Anand 
>> Acked-by: Timur Tabi 
>> Reviewed-by: Mathieu Poirier 
>> ---
>>   drivers/watchdog/Kconfig |  20 +++
>>   drivers/watchdog/Makefile|   1 +
>>   drivers/watchdog/sbsa_gwdt.c | 403
>> +++
>>   3 files changed, 424 insertions(+)
>>
>> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>> index 0f6d851..ed9a5cb 100644
>> --- a/drivers/watchdog/Kconfig
>> +++ b/drivers/watchdog/Kconfig
>
>
> [ ... ]
>
>> +
>> +static int sbsa_gwdt_probe(struct platform_device *pdev)
>> +{
>
>
> [ ... ]
>
>> +   if (!action)
>> +   dev_warn(dev, "falling back to signle stage
>> mode.\n");
>
>
> Still:
>
> s/signle/single/

sorry, my bad, will fix it

>
> [ ... ]
>
>> +
>> +MODULE_DESCRIPTION("SBSA Generic Watchdog Driver");
>> +MODULE_AUTHOR("Fu Wei ");
>> +MODULE_AUTHOR("Suravee Suthikulpanit ");
>> +MODULE_AUTHOR("Al Stone ");
>> +MODULE_AUTHOR("Timur Tabi ");
>> +MODULE_LICENSE("GPL v2");
>>
> Do you need a MODULE_ALIAS ?

For now, I thinks we don't need it, Hope I didn't miss something :-)
Because this module can be mounted automatically with dtb or ACPI(if
apply my GTDT patch).
Do you have any suggestion or concern? :-)

>
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


[PATCH v12 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.
More details about the hardware specification of this device:
ARM DEN0029B - Server Base System Architecture (SBSA)

This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
or a two stages watchdog, it's set up by the module parameter "action".
In the single stage mode, when the timeout is reached, your system
will be reset by WS1. The first signal (WS0) is ignored.
In the two stages mode, when the timeout is reached, the first signal (WS0)
will trigger panic. If the system is getting into trouble and cannot be reset
by panic or restart properly by the kdump kernel(if supported), then the
second stage (as long as the first stage) will be reached, system will be
reset by WS1. This function can help administrator to backup the system
context info by panic console output or kdump.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Graeme Gregory <graeme.greg...@linaro.org>
Tested-by: Pratyush Anand <pan...@redhat.com>
Acked-by: Timur Tabi <ti...@codeaurora.org>
Reviewed-by: Mathieu Poirier <mathieu.poir...@linaro.org>
---
 drivers/watchdog/Kconfig |  20 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 403 +++
 3 files changed, 424 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 0f6d851..ed9a5cb 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -202,6 +202,26 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This driver can operate ARM SBSA Generic Watchdog as a single stage
+ or a two stages watchdog, it depends on the module parameter "action".
+
+ Note: the maximum timeout in the two stages mode is half of that in
+ the single stage mode.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..789444e
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,403 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei <fu@linaro.org>
+ * Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
+ * Al Stone <al.st...@linaro.org>
+ * Timur Tabi <ti...@codeaurora.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * ARM SBSA Generic Watchdog has two stage timeouts:
+ * the first signal (WS0) is for alerting the system by interrupt,
+ * the second one (WS1) is a real hardware reset.
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
+ * or a two stages watchdog, it's set up by the module parameter "action".
+ * In the single stage mode, when the timeout is reached, your system
+ * will be reset by WS1. The

[PATCH v12 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread fu . wei
From: Fu Wei 

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.
More details about the hardware specification of this device:
ARM DEN0029B - Server Base System Architecture (SBSA)

This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
or a two stages watchdog, it's set up by the module parameter "action".
In the single stage mode, when the timeout is reached, your system
will be reset by WS1. The first signal (WS0) is ignored.
In the two stages mode, when the timeout is reached, the first signal (WS0)
will trigger panic. If the system is getting into trouble and cannot be reset
by panic or restart properly by the kdump kernel(if supported), then the
second stage (as long as the first stage) will be reached, system will be
reset by WS1. This function can help administrator to backup the system
context info by panic console output or kdump.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei 
Reviewed-by: Graeme Gregory 
Tested-by: Pratyush Anand 
Acked-by: Timur Tabi 
Reviewed-by: Mathieu Poirier 
---
 drivers/watchdog/Kconfig |  20 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 403 +++
 3 files changed, 424 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 0f6d851..ed9a5cb 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -202,6 +202,26 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This driver can operate ARM SBSA Generic Watchdog as a single stage
+ or a two stages watchdog, it depends on the module parameter "action".
+
+ Note: the maximum timeout in the two stages mode is half of that in
+ the single stage mode.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..789444e
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,403 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei 
+ * Suravee Suthikulpanit 
+ * Al Stone 
+ * Timur Tabi 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * ARM SBSA Generic Watchdog has two stage timeouts:
+ * the first signal (WS0) is for alerting the system by interrupt,
+ * the second one (WS1) is a real hardware reset.
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
+ * or a two stages watchdog, it's set up by the module parameter "action".
+ * In the single stage mode, when the timeout is reached, your system
+ * will be reset by WS1. The first signal (WS0) is ignored.
+ * In the two stages mode, when the timeout is reached, the first signal (WS0)
+ * will trigger panic. If the system is getting into trouble and cannot be 
reset
+ * by panic or restart properly by the kdump kernel(if supported), then the
+ * second 

[PATCH v12 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..0a8ca1d 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,14 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <15>;
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v12 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-16 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Suravee Suthikulpanit 
Signed-off-by: Fu Wei 
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..0a8ca1d 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,14 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <15>;
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v12 2/4] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..66cb9aa 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,11 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   };
 };
-- 
2.5.0



[PATCH v12 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.The driver works in two modes:
  (1) single stage timeout (ignore WS0 interrupt)
  (2) two stages timeout (register WS0 interrupt, do panic in routine)
e.User can config working mode by module parameter "action".

This patchset has been tested with watchdog daemon
(ACPI/FDT, module/build-in) on the following platforms:
(1)ARM Foundation v8 model
(2)AMD Seattle platform

This patchset has been tested with kdump successfully.

Changelog:
v12:Fix a dev_warn message typo
Remove unnecessary "status" in dts
Add more *ed-by in commit message.

v11:https://lkml.org/lkml/2016/2/9/577
Merge patch 4 and 5.
Improve some comments.
The driver works in two modes, it's configured by "action"(instead of
panic_enabled).
Improve the initialization of the timeout limits.
Feeding dog by writing "0" to WRR.

v10:https://lkml.org/lkml/2016/2/3/817
Delete pretimeout support.
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt);
(2) register WS0 interrupt for the half timeout panic.
timeout == (enable --> WS1).

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(5)sbsa_gwdt_set_wcv function.

v3: https://lkml.org/lkml/2015/5/25/111
Delete "export arch_timer_get_rate" patch.
Driver back to use arch_timer_get_cntfrq.
Improve watchdog_init_timeouts function and update relevant documentation.
Improve watchdog_timeout_invalid and watchdog_pretimeout_invalid.
Improve foundation-v8.dts: delete the unnecessary tag of device node.
Remove "ARM64 || COMPILE_TEST" from Kconfig.
Add comments in arch/arm64/kernel/acpi.c
Fix typoes and incorrect comments.

v2: https://lkml.org/lkml/2015/5/21/172
Im

[PATCH v12 2/4] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-16 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Fu Wei 
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..66cb9aa 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,11 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   };
 };
-- 
2.5.0



[PATCH v12 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-16 Thread fu . wei
From: Fu Wei 

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.The driver works in two modes:
  (1) single stage timeout (ignore WS0 interrupt)
  (2) two stages timeout (register WS0 interrupt, do panic in routine)
e.User can config working mode by module parameter "action".

This patchset has been tested with watchdog daemon
(ACPI/FDT, module/build-in) on the following platforms:
(1)ARM Foundation v8 model
(2)AMD Seattle platform

This patchset has been tested with kdump successfully.

Changelog:
v12:Fix a dev_warn message typo
Remove unnecessary "status" in dts
Add more *ed-by in commit message.

v11:https://lkml.org/lkml/2016/2/9/577
Merge patch 4 and 5.
Improve some comments.
The driver works in two modes, it's configured by "action"(instead of
panic_enabled).
Improve the initialization of the timeout limits.
Feeding dog by writing "0" to WRR.

v10:https://lkml.org/lkml/2016/2/3/817
Delete pretimeout support.
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt);
(2) register WS0 interrupt for the half timeout panic.
timeout == (enable --> WS1).

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(5)sbsa_gwdt_set_wcv function.

v3: https://lkml.org/lkml/2015/5/25/111
Delete "export arch_timer_get_rate" patch.
Driver back to use arch_timer_get_cntfrq.
Improve watchdog_init_timeouts function and update relevant documentation.
Improve watchdog_timeout_invalid and watchdog_pretimeout_invalid.
Improve foundation-v8.dts: delete the unnecessary tag of device node.
Remove "ARM64 || COMPILE_TEST" from Kconfig.
Add comments in arch/arm64/kernel/acpi.c
Fix typoes and incorrect comments.

v2: https://lkml.org/lkml/2015/5/21/172
Improve watchdog-kernel-api.txt docume

[PATCH v12 1/4] Documentation: add sbsa-gwdt driver documentation

2016-02-16 Thread fu . wei
From: Fu Wei <fu@linaro.org>

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann <a...@arndb.de>
Acked-by: Rob Herring <r...@kernel.org>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 31 ++
 Documentation/watchdog/watchdog-parameters.txt |  7 +
 2 files changed, 38 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..6f2d5f9
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,31 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..ce7ae4e 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,13 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 10s)
+action: Watchdog action at the first stage timeout,
+   set to 0 to ignore, 1 to panic. (default=0)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



[PATCH v12 1/4] Documentation: add sbsa-gwdt driver documentation

2016-02-16 Thread fu . wei
From: Fu Wei 

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann 
Acked-by: Rob Herring 
Signed-off-by: Fu Wei 
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 31 ++
 Documentation/watchdog/watchdog-parameters.txt |  7 +
 2 files changed, 38 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..6f2d5f9
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,31 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..ce7ae4e 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,13 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 10s)
+action: Watchdog action at the first stage timeout,
+   set to 0 to ignore, 1 to panic. (default=0)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



Re: [PATCH] Documentation: Chinese translation of arm64/silicon-errata.txt

2016-02-14 Thread Fu Wei

Hi Harry,

Thanks for your rapid response :-)

On 02/15/2016 03:23 AM, Weiwei Jia wrote:

2016-02-14 3:40 GMT+08:00  <w...@redhat.com>:

From: Fu Wei <w...@redhat.com>

This is a Chinese translated version of Documentation/arm64/silicon-errata.txt

Signed-off-by: Fu Wei <w...@redhat.com>


Reviewed-by: Weiwei Jia <harryxi...@gmail.com>


---
  Documentation/zh_CN/arm64/silicon-errata.txt | 74 
  1 file changed, 74 insertions(+)
  create mode 100644 Documentation/zh_CN/arm64/silicon-errata.txt

diff --git a/Documentation/zh_CN/arm64/silicon-errata.txt 
b/Documentation/zh_CN/arm64/silicon-errata.txt
new file mode 100644
index 000..0584bd6
--- /dev/null
+++ b/Documentation/zh_CN/arm64/silicon-errata.txt
@@ -0,0 +1,74 @@
+Chinese translated version of Documentation/arm64/silicon-errata.txt
+
+If you have any comment or update to the content, please contact the
+original document maintainer directly.  However, if you have a problem
+communicating in English you can also ask the Chinese maintainer for
+help.  Contact the Chinese maintainer if this translation is outdated
+or if there is a problem with the translation.
+
+M: Will Deacon <will.dea...@arm.com>
+zh_CN: Fu Wei <w...@redhat.com>
+C: e835a65f7ab143acf9aee6f9a98ef1c7afd2a835
+-
+Documentation/arm64/silicon-errata.txt 的中文翻译
+
+如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
+交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
+译存在问题,请联系中文版维护者。
+
+英文版维护者: Will Deacon <will.dea...@arm.com>
+中文版维护者: 傅炜  Fu Wei <w...@redhat.com>
+中文版翻译者: 傅炜  Fu Wei <w...@redhat.com>
+中文版校译者: 傅炜  Fu Wei <w...@redhat.com>
+本文翻译提交时的 Git 检出点为: e835a65f7ab143acf9aee6f9a98ef1c7afd2a835
+
+以下为正文
+-
+芯片勘误和软件解决办法
+==
+
+作者: Will Deacon <will.dea...@arm.com>
+日期: 2015年11月27日
+
+一个不幸的现实:硬件经常带有一些所谓的“错误(errata)”,致使其在
+某些特定的情况下会违背构架定义的行为。对基于 ARM 的硬件,这些错误
+大体被分为以下几类:
+
+  A 类:无可行解决方法的严重错误。
+  B 类:有可接受的解决方法的重大或严重错误。
+  C 类:在正常操作中不会显现的小错误。
+
+更多资讯,请在 infocenter.arm.com (需注册)中查阅“软件开发者勘误
+笔记”(“Software Developers Errata Notice”)文档。
+
+对于 Linux 而言,B 类错误可能需要操作系统的某些特别处理。例如,避免
+一个特殊的代码序列,或是以一种特定的方式配置处理器。在某种不太常见的
+情况下,为将 A 类错误当作 C 类处理,可能需要用类似手段。这些手段被
+统称为“软件解决办法”,且仅在少数情况需要(例如,那些需要一个在非安全


I am thinking about a better translation of "workaround"
变通方法
修补方案
替代办法
修正方案

Which one does look better to you? or do you have any suggestion?

:-)


+异常级运行的解决方法 *且* 能被 Linux 触发的情况)。


I think it may be better like this.

(例如,那些需要在一个非安全异常级别运行的解决方法 *并且* 能被 Linux 触发的情况)


How about this?
(例如,那些需要一个运行在非安全异常级的解决方法 *并且* 能被 Linux 触发 
的情况)


Because 一个*解决方法 and "运行在非安全异常级的" is adjective。




+
+对于尚在讨论中的可能对未受错误影响的系统产生不利影响的软件解决办法,
+有一个相应的内核配置(Kconfig)选项被加在 “内核特性(Kernel Features)”
+- > “基于可选方案框架的 ARM 错误解决办法(ARM errata workarounds via
+the alternatives framework)"。这些选项被默认开启,若探测到受影响的CPU,
+补丁将在运行时被打入。对于对系统运行影响较小的解决办法,内核配置选项
+并不存在,且代码以一种避开错误的方式被构造(带注释为宜)。
+
+这种做法对于在任意内核源代码树中准确地判断出哪个错误已被软件方法所解决
+稍微有点麻烦,所以这个文件在 Linux 内核中作为软件解决办法的注册表,
+并将在新的软件解决办法被提交和反向移植到稳定内核时被更新。
+
+| 实现者 | 受影响的组件| 勘误编号| 内核配置|
+++-+-+-+
+| ARM| Cortex-A53  | #826319 | ARM64_ERRATUM_826319
|
+| ARM| Cortex-A53  | #827319 | ARM64_ERRATUM_827319
|
+| ARM| Cortex-A53  | #824069 | ARM64_ERRATUM_824069
|
+| ARM| Cortex-A53  | #819472 | ARM64_ERRATUM_819472
|
+| ARM| Cortex-A53  | #845719 | ARM64_ERRATUM_845719
|
+| ARM| Cortex-A53  | #843419 | ARM64_ERRATUM_843419
|
+| ARM| Cortex-A57  | #832075 | ARM64_ERRATUM_832075
|
+| ARM| Cortex-A57  | #852523 | N/A 
|
+| ARM| Cortex-A57  | #834220 | ARM64_ERRATUM_834220
|
+|| | | 
|
+| Cavium | ThunderX ITS| #22375, #24313  | CAVIUM_ERRATUM_22375
|
+| Cavium | ThunderX GICv3  | #23154  | CAVIUM_ERRATUM_23154
|
--
2.5.0



Re: [PATCH] Documentation: Chinese translation of arm64/silicon-errata.txt

2016-02-14 Thread Fu Wei

Hi Harry,

Thanks for your rapid response :-)

On 02/15/2016 03:23 AM, Weiwei Jia wrote:

2016-02-14 3:40 GMT+08:00  :

From: Fu Wei 

This is a Chinese translated version of Documentation/arm64/silicon-errata.txt

Signed-off-by: Fu Wei 


Reviewed-by: Weiwei Jia 


---
  Documentation/zh_CN/arm64/silicon-errata.txt | 74 
  1 file changed, 74 insertions(+)
  create mode 100644 Documentation/zh_CN/arm64/silicon-errata.txt

diff --git a/Documentation/zh_CN/arm64/silicon-errata.txt 
b/Documentation/zh_CN/arm64/silicon-errata.txt
new file mode 100644
index 000..0584bd6
--- /dev/null
+++ b/Documentation/zh_CN/arm64/silicon-errata.txt
@@ -0,0 +1,74 @@
+Chinese translated version of Documentation/arm64/silicon-errata.txt
+
+If you have any comment or update to the content, please contact the
+original document maintainer directly.  However, if you have a problem
+communicating in English you can also ask the Chinese maintainer for
+help.  Contact the Chinese maintainer if this translation is outdated
+or if there is a problem with the translation.
+
+M: Will Deacon 
+zh_CN: Fu Wei 
+C: e835a65f7ab143acf9aee6f9a98ef1c7afd2a835
+-
+Documentation/arm64/silicon-errata.txt 的中文翻译
+
+如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
+交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
+译存在问题,请联系中文版维护者。
+
+英文版维护者: Will Deacon 
+中文版维护者: 傅炜  Fu Wei 
+中文版翻译者: 傅炜  Fu Wei 
+中文版校译者: 傅炜  Fu Wei 
+本文翻译提交时的 Git 检出点为: e835a65f7ab143acf9aee6f9a98ef1c7afd2a835
+
+以下为正文
+-
+芯片勘误和软件解决办法
+==
+
+作者: Will Deacon 
+日期: 2015年11月27日
+
+一个不幸的现实:硬件经常带有一些所谓的“错误(errata)”,致使其在
+某些特定的情况下会违背构架定义的行为。对基于 ARM 的硬件,这些错误
+大体被分为以下几类:
+
+  A 类:无可行解决方法的严重错误。
+  B 类:有可接受的解决方法的重大或严重错误。
+  C 类:在正常操作中不会显现的小错误。
+
+更多资讯,请在 infocenter.arm.com (需注册)中查阅“软件开发者勘误
+笔记”(“Software Developers Errata Notice”)文档。
+
+对于 Linux 而言,B 类错误可能需要操作系统的某些特别处理。例如,避免
+一个特殊的代码序列,或是以一种特定的方式配置处理器。在某种不太常见的
+情况下,为将 A 类错误当作 C 类处理,可能需要用类似手段。这些手段被
+统称为“软件解决办法”,且仅在少数情况需要(例如,那些需要一个在非安全


I am thinking about a better translation of "workaround"
变通方法
修补方案
替代办法
修正方案

Which one does look better to you? or do you have any suggestion?

:-)


+异常级运行的解决方法 *且* 能被 Linux 触发的情况)。


I think it may be better like this.

(例如,那些需要在一个非安全异常级别运行的解决方法 *并且* 能被 Linux 触发的情况)


How about this?
(例如,那些需要一个运行在非安全异常级的解决方法 *并且* 能被 Linux 触发 
的情况)


Because 一个*解决方法 and "运行在非安全异常级的" is adjective。




+
+对于尚在讨论中的可能对未受错误影响的系统产生不利影响的软件解决办法,
+有一个相应的内核配置(Kconfig)选项被加在 “内核特性(Kernel Features)”
+- > “基于可选方案框架的 ARM 错误解决办法(ARM errata workarounds via
+the alternatives framework)"。这些选项被默认开启,若探测到受影响的CPU,
+补丁将在运行时被打入。对于对系统运行影响较小的解决办法,内核配置选项
+并不存在,且代码以一种避开错误的方式被构造(带注释为宜)。
+
+这种做法对于在任意内核源代码树中准确地判断出哪个错误已被软件方法所解决
+稍微有点麻烦,所以这个文件在 Linux 内核中作为软件解决办法的注册表,
+并将在新的软件解决办法被提交和反向移植到稳定内核时被更新。
+
+| 实现者 | 受影响的组件| 勘误编号| 内核配置|
+++-+-+-+
+| ARM| Cortex-A53  | #826319 | ARM64_ERRATUM_826319
|
+| ARM| Cortex-A53  | #827319 | ARM64_ERRATUM_827319
|
+| ARM| Cortex-A53  | #824069 | ARM64_ERRATUM_824069
|
+| ARM| Cortex-A53  | #819472 | ARM64_ERRATUM_819472
|
+| ARM| Cortex-A53  | #845719 | ARM64_ERRATUM_845719
|
+| ARM| Cortex-A53  | #843419 | ARM64_ERRATUM_843419
|
+| ARM| Cortex-A57  | #832075 | ARM64_ERRATUM_832075
|
+| ARM| Cortex-A57  | #852523 | N/A 
|
+| ARM| Cortex-A57  | #834220 | ARM64_ERRATUM_834220
|
+|| | | 
|
+| Cavium | ThunderX ITS| #22375, #24313  | CAVIUM_ERRATUM_22375
|
+| Cavium | ThunderX GICv3  | #23154  | CAVIUM_ERRATUM_23154
|
--
2.5.0



Re: [PATCH v11 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-14 Thread Fu Wei
Hi Suravee,

On 11 February 2016 at 04:56, Suravee Suthikulpanit
 wrote:
> Hi Fu Wei,
>
> On 2/10/16 00:00, fu@linaro.org wrote:
>>
>> From: Fu Wei 
>>
>> This can be a example of adding SBSA Generic Watchdog device node
>> into some dts files for the Soc which contains SBSA Generic Watchdog.
>>
>> Acked-by: Arnd Bergmann 
>> Signed-off-by: Suravee Suthikulpanit 
>> Signed-off-by: Fu Wei 
>> ---
>>   arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 9 +
>>   1 file changed, 9 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
>> b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
>> index 2874d92..67eb636 100644
>> --- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
>> +++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
>> @@ -84,6 +84,15 @@
>> clock-names = "uartclk", "apb_pclk";
>> };
>>
>> +   watchdog0: watchdog@e0bb {
>> +   compatible = "arm,sbsa-gwdt";
>> +   reg = <0x0 0xe0bc 0 0x1000>,
>> +   <0x0 0xe0bb 0 0x1000>;
>> +   interrupts = <0 337 4>;
>> +   timeout-sec = <15>;
>> +   status = "disabled";
>
>
> Could you please remove this status line? I do not think it is necessary for
> this one here anymore.

OK, will do
:-)

>
> Thanks,
> Suravee
>
>
>> +   };
>> +
>> spi0: ssp@e102 {
>> status = "disabled";
>> compatible = "arm,pl022", "arm,primecell";
>>
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v11 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-14 Thread Fu Wei
Hi Suravee,

On 11 February 2016 at 04:56, Suravee Suthikulpanit
<suravee.suthikulpa...@amd.com> wrote:
> Hi Fu Wei,
>
> On 2/10/16 00:00, fu@linaro.org wrote:
>>
>> From: Fu Wei <fu@linaro.org>
>>
>> This can be a example of adding SBSA Generic Watchdog device node
>> into some dts files for the Soc which contains SBSA Generic Watchdog.
>>
>> Acked-by: Arnd Bergmann <a...@arndb.de>
>> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
>> Signed-off-by: Fu Wei <fu@linaro.org>
>> ---
>>   arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 9 +
>>   1 file changed, 9 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
>> b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
>> index 2874d92..67eb636 100644
>> --- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
>> +++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
>> @@ -84,6 +84,15 @@
>> clock-names = "uartclk", "apb_pclk";
>> };
>>
>> +   watchdog0: watchdog@e0bb {
>> +   compatible = "arm,sbsa-gwdt";
>> +   reg = <0x0 0xe0bc 0 0x1000>,
>> +   <0x0 0xe0bb 0 0x1000>;
>> +   interrupts = <0 337 4>;
>> +   timeout-sec = <15>;
>> +   status = "disabled";
>
>
> Could you please remove this status line? I do not think it is necessary for
> this one here anymore.

OK, will do
:-)

>
> Thanks,
> Suravee
>
>
>> +   };
>> +
>> spi0: ssp@e102 {
>> status = "disabled";
>> compatible = "arm,pl022", "arm,primecell";
>>
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v11 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-09 Thread Fu Wei
Hi Timur,

On 10 February 2016 at 01:39, Timur Tabi  wrote:
> fu@linaro.org wrote:
>
>> +   if (!action)
>> +   dev_warn(dev, "fall back to signle stage
>> mode.\n");
>
>
> "falling back to single stage mode"

Thanks for your correction.  :-)
Will fixed it

>
> Acked-by: Timur Tabi 
>

Thanks, will add this

> The whole "calculate the timeouts different if 'action' is enabled" seems
> clunky to me, but I can't think of a better way to handle it.
>
> --
> Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> Forum, a Linux Foundation collaborative project.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


[PATCH v11 1/4] Documentation: add sbsa-gwdt driver documentation

2016-02-09 Thread fu . wei
From: Fu Wei 

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann 
Acked-by: Rob Herring 
Signed-off-by: Fu Wei 
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 35 ++
 Documentation/watchdog/watchdog-parameters.txt |  7 +
 2 files changed, 42 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..73a5d0d
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,35 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+- status: Indicates the device is not available for use. Should be "okay"
+  or "disabled" for available/unavailable. Default is "okay".
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   status = "okay";
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..ce7ae4e 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,13 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 10s)
+action: Watchdog action at the first stage timeout,
+   set to 0 to ignore, 1 to panic. (default=0)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



[PATCH v11 2/4] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-09 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Fu Wei 
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..75da16b 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,12 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   status = "okay";
+   };
 };
-- 
2.5.0



[PATCH v11 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-09 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Suravee Suthikulpanit 
Signed-off-by: Fu Wei 
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 9 +
 1 file changed, 9 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..67eb636 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,15 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <15>;
+   status = "disabled";
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v11 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-09 Thread fu . wei
From: Fu Wei 

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.
More details about the hardware specification of this device:
ARM DEN0029B - Server Base System Architecture (SBSA)

This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
or a two stages watchdog, it's set up by the module parameter "action".
In the single stage mode, when the timeout is reached, your system
will be reset by WS1. The first signal (WS0) is ignored.
In the two stages mode, when the timeout is reached, the first signal (WS0)
will trigger panic. If the system is getting into trouble and cannot be reset
by panic or restart properly by the kdump kernel(if supported), then the
second stage (as long as the first stage) will be reached, system will be
reset by WS1. This function can help administrator to backup the system
context info by panic console output or kdump.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei 
Reviewed-by: Graeme Gregory 
Tested-by: Pratyush Anand 
---
 drivers/watchdog/Kconfig |  20 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 403 +++
 3 files changed, 424 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 0f6d851..ed9a5cb 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -202,6 +202,26 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This driver can operate ARM SBSA Generic Watchdog as a single stage
+ or a two stages watchdog, it depends on the module parameter "action".
+
+ Note: the maximum timeout in the two stages mode is half of that in
+ the single stage mode.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..f506762
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,403 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei 
+ * Suravee Suthikulpanit 
+ * Al Stone 
+ * Timur Tabi 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * ARM SBSA Generic Watchdog has two stage timeouts:
+ * the first signal (WS0) is for alerting the system by interrupt,
+ * the second one (WS1) is a real hardware reset.
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
+ * or a two stages watchdog, it's set up by the module parameter "action".
+ * In the single stage mode, when the timeout is reached, your system
+ * will be reset by WS1. The first signal (WS0) is ignored.
+ * In the two stages mode, when the timeout is reached, the first signal (WS0)
+ * will trigger panic. If the system is getting into trouble and cannot be 
reset
+ * by panic or restart properly by the kdump kernel(if supported), then the
+ * second stage (as long as the first stage) will be reached, syste

[PATCH v11 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-09 Thread fu . wei
From: Fu Wei 

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.The driver works in two modes:
  (1) single stage timeout (ignore WS0 interrupt)
  (2) two stages timeout (register WS0 interrupt, do panic in routine)
e.User can config working mode by module parameter "action".

This patchset has been tested with watchdog daemon
(ACPI/FDT, module/build-in) on the following platforms:
(1)ARM Foundation v8 model
(2)AMD Seattle platform

This patchset has been tested with kdump successfully.

Changelog:
v11:Merge patch 4 and 5.
Improve some comments.
The driver works in two modes, it's configured by "action"(instead of
panic_enabled).
Improve the initialization of the timeout limits.
Feeding dog by writing "0" to WRR.

v10:https://lkml.org/lkml/2016/2/3/817
Delete pretimeout support.
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt);
(2) register WS0 interrupt for the half timeout panic.
timeout == (enable --> WS1).

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(5)sbsa_gwdt_set_wcv function.

v3: https://lkml.org/lkml/2015/5/25/111
Delete "export arch_timer_get_rate" patch.
Driver back to use arch_timer_get_cntfrq.
Improve watchdog_init_timeouts function and update relevant documentation.
Improve watchdog_timeout_invalid and watchdog_pretimeout_invalid.
Improve foundation-v8.dts: delete the unnecessary tag of device node.
Remove "ARM64 || COMPILE_TEST" from Kconfig.
Add comments in arch/arm64/kernel/acpi.c
Fix typoes and incorrect comments.

v2: https://lkml.org/lkml/2015/5/21/172
Improve watchdog-kernel-api.txt documentation for pretimeout support.
Export "arch_timer_get_rate" in arm_arch_timer.c.
Add watchdog_init_timeouts API for pretimeout support in framework.
 

[PATCH v11 0/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-09 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.The driver works in two modes:
  (1) single stage timeout (ignore WS0 interrupt)
  (2) two stages timeout (register WS0 interrupt, do panic in routine)
e.User can config working mode by module parameter "action".

This patchset has been tested with watchdog daemon
(ACPI/FDT, module/build-in) on the following platforms:
(1)ARM Foundation v8 model
(2)AMD Seattle platform

This patchset has been tested with kdump successfully.

Changelog:
v11:Merge patch 4 and 5.
Improve some comments.
The driver works in two modes, it's configured by "action"(instead of
panic_enabled).
Improve the initialization of the timeout limits.
Feeding dog by writing "0" to WRR.

v10:https://lkml.org/lkml/2016/2/3/817
Delete pretimeout support.
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt);
(2) register WS0 interrupt for the half timeout panic.
timeout == (enable --> WS1).

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(5)sbsa_gwdt_set_wcv function.

v3: https://lkml.org/lkml/2015/5/25/111
Delete "export arch_timer_get_rate" patch.
Driver back to use arch_timer_get_cntfrq.
Improve watchdog_init_timeouts function and update relevant documentation.
Improve watchdog_timeout_invalid and watchdog_pretimeout_invalid.
Improve foundation-v8.dts: delete the unnecessary tag of device node.
Remove "ARM64 || COMPILE_TEST" from Kconfig.
Add comments in arch/arm64/kernel/acpi.c
Fix typoes and incorrect comments.

v2: https://lkml.org/lkml/2015/5/21/172
Improve watchdog-kernel-api.txt documentation for pretimeout support.
Export "arch_timer_get_rate" in arm_arch_timer.c.
Add watchdog_init_timeouts API for preti

[PATCH v11 1/4] Documentation: add sbsa-gwdt driver documentation

2016-02-09 Thread fu . wei
From: Fu Wei <fu@linaro.org>

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann <a...@arndb.de>
Acked-by: Rob Herring <r...@kernel.org>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 35 ++
 Documentation/watchdog/watchdog-parameters.txt |  7 +
 2 files changed, 42 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..73a5d0d
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,35 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+- status: Indicates the device is not available for use. Should be "okay"
+  or "disabled" for available/unavailable. Default is "okay".
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   status = "okay";
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..ce7ae4e 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,13 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 10s)
+action: Watchdog action at the first stage timeout,
+   set to 0 to ignore, 1 to panic. (default=0)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



[PATCH v11 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-09 Thread fu . wei
From: Fu Wei <fu@linaro.org>

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.
More details about the hardware specification of this device:
ARM DEN0029B - Server Base System Architecture (SBSA)

This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
or a two stages watchdog, it's set up by the module parameter "action".
In the single stage mode, when the timeout is reached, your system
will be reset by WS1. The first signal (WS0) is ignored.
In the two stages mode, when the timeout is reached, the first signal (WS0)
will trigger panic. If the system is getting into trouble and cannot be reset
by panic or restart properly by the kdump kernel(if supported), then the
second stage (as long as the first stage) will be reached, system will be
reset by WS1. This function can help administrator to backup the system
context info by panic console output or kdump.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Graeme Gregory <graeme.greg...@linaro.org>
Tested-by: Pratyush Anand <pan...@redhat.com>
---
 drivers/watchdog/Kconfig |  20 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 403 +++
 3 files changed, 424 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 0f6d851..ed9a5cb 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -202,6 +202,26 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This driver can operate ARM SBSA Generic Watchdog as a single stage
+ or a two stages watchdog, it depends on the module parameter "action".
+
+ Note: the maximum timeout in the two stages mode is half of that in
+ the single stage mode.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..f506762
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,403 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei <fu@linaro.org>
+ * Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
+ * Al Stone <al.st...@linaro.org>
+ * Timur Tabi <ti...@codeaurora.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * ARM SBSA Generic Watchdog has two stage timeouts:
+ * the first signal (WS0) is for alerting the system by interrupt,
+ * the second one (WS1) is a real hardware reset.
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * This driver can operate ARM SBSA Generic Watchdog as a single stage watchdog
+ * or a two stages watchdog, it's set up by the module parameter "action".
+ * In the single stage mode, when the timeout is reached, your system
+ * will be reset by WS1. The first signal (WS0) is ignored.
+ * In the two stages mode, when the timeout is reached, the first signal (WS

[PATCH v11 2/4] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-09 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..75da16b 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,12 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   status = "okay";
+   };
 };
-- 
2.5.0



[PATCH v11 3/4] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-09 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 9 +
 1 file changed, 9 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..67eb636 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,15 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <15>;
+   status = "disabled";
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



Re: [PATCH v11 4/4] Watchdog: introduce ARM SBSA watchdog driver

2016-02-09 Thread Fu Wei
Hi Timur,

On 10 February 2016 at 01:39, Timur Tabi <ti...@codeaurora.org> wrote:
> fu@linaro.org wrote:
>
>> +   if (!action)
>> +   dev_warn(dev, "fall back to signle stage
>> mode.\n");
>
>
> "falling back to single stage mode"

Thanks for your correction.  :-)
Will fixed it

>
> Acked-by: Timur Tabi <ti...@codeaurora.org>
>

Thanks, will add this

> The whole "calculate the timeouts different if 'action' is enabled" seems
> clunky to me, but I can't think of a better way to handle it.
>
> --
> Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> Forum, a Linux Foundation collaborative project.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-06 Thread Fu Wei
On 7 February 2016 at 02:57, Guenter Roeck  wrote:
> On 02/06/2016 10:02 AM, Fu Wei wrote:
>>
>> Hi Guenter,
>>
>> On 6 February 2016 at 07:54, Guenter Roeck  wrote:
>>>
>>> On 02/05/2016 10:21 AM, Fu Wei wrote:
>>>>
>>>>
>>>> On 5 February 2016 at 22:42, Guenter Roeck  wrote:
>>>>>
>>>>>
>>>>> On 02/05/2016 01:51 AM, Fu Wei wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hi Guenter,
>>>>>>
>>>>>> On 4 February 2016 at 13:17, Guenter Roeck  wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 02/03/2016 03:00 PM, Fu Wei wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 4 February 2016 at 02:45, Timur Tabi 
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Fu Wei wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> As you know I have made the pre-timeout support patch, If people
>>>>>>>>>> like
>>>>>>>>>> it, i am happy to go on upstream it separately.
>>>>>>>>>>
>>>>>>>>>> If we want to use pre-timeout here, user only can use
>>>>>>>>>> get_pretimeout
>>>>>>>>>> and disable panic by setting pretimeout to 0
>>>>>>>>>> but user can not really set pretimeout, because "pre-timeout  ==
>>>>>>>>>> timeout / 2 (always)".
>>>>>>>>>> if user want to change pretimeout, he/she has to set_time instead.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Ok, I think patches 4 and 5 should be combined, and I think the
>>>>>>>>> Kconfig
>>>>>>>>> entry should be removed and just use panic_enabled.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Agreed.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> np, will do
>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> NP, will update this patchset like that ,  thanks :-)
>>>>>>>>
>>>>>>>
>>>>>>> Also, if panic is enabled, the timeout needs to be adjusted
>>>>>>> accordingly
>>>>>>> (to only panic after the entire timeout period has expired, not after
>>>>>>> half of it). We can not panic the system after timeout / 2.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> OK, my thought is
>>>>>>
>>>>>> if panic is enabled :
>>>>>> |WOR---WS0WOR---WS1
>>>>>> |--timeout--(panic)--timeout-reset
>>>>>>
>>>>>> if panic is disabled .
>>>>>> |WOR---WS0WOR---WS1
>>>>>> |-timeout-reset
>>>>>>
>>>>>> panic_enabled only can be configured when module is loaded by
>>>>>> module
>>>>>> parameter
>>>>>>
>>>>>> But user should know that max_timeout(panic_enable) =
>>>>>> max_timeout(panic_disable) / 2
>>>>>>
>>>>>
>>>>> That means you'll have to update max_timeout accordingly.
>>>>
>>>>
>>>>
>>>> panic_enabled only can be configured when module is loaded, so we
>>>> don't need to update it.
>>>>
>>>> max_timeout will only be set up in the init stage.
>>>>
>>>> Does it make sense ? :-)
>>>>
>>> Not sure I understand your problem or question.
>>>
>>> max_timeout will have to reflect the correct maximum timeout, under
>>> all circumstances. It will have to be set to the correct value before
>>> the watchdog driver is registered.
>>
>>
>> yes, understood,  my thought is :
>>
>> in  static int sbsa_gwdt_probe(struct platform_device *pdev)
>>
>> if (action) {
>>  wdd->min_timeout = 1;
>>  wdd->max_timeout = U32_MAX / gwdt->clk;
>> } else {
>>  wdd->min_timeout = 2;
>>  wdd->max_timeout = U32_MAX / gwdt->clk * 2;
>
>
> Pretty much, though you would also have to adjust all calculations
> using gwdt->clk, in both set_timeout() and get_timeout(). Wonder if
> you could adjust gwdt->clk instead.
>
> Does min_timeout really have to be 2 if panic is disabled ?
> The only reason seems to be the calculation in sbsa_gwdt_set_timeout().
>
> writel(timeout / 2 * gwdt->clk, gwdt->control_base + SBSA_GWDT_WOR);
>
> Maybe you could use something like
>
> writel(timeout * (gwdt->clk / 2), ...);
>
> instead. Or, as mentioned above, adjust the value of gwdt->clk
> to include the factor.

yes,  Thanks for pointing it out.
I will fix that following your suggestion.

>
> Thanks,
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-06 Thread Fu Wei
On 7 February 2016 at 02:55, Timur Tabi  wrote:
> Fu Wei wrote:
>>
>> if (action) {
>>  wdd->min_timeout = 1;
>>  wdd->max_timeout = U32_MAX / gwdt->clk;
>> } else {
>>  wdd->min_timeout = 2;
>>  wdd->max_timeout = U32_MAX / gwdt->clk * 2;
>> }
>
>
> Why would the minimum timeout be 2?  You can program WOR to timeout in half
> a second, can't you?

Yes, I think we can.
you are right, will fix that.

>
>
> --
> Sent by an employee of the Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the
> Code Aurora Forum, hosted by The Linux Foundation.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-06 Thread Fu Wei
Hi Guenter,

On 6 February 2016 at 07:54, Guenter Roeck  wrote:
> On 02/05/2016 10:21 AM, Fu Wei wrote:
>>
>> On 5 February 2016 at 22:42, Guenter Roeck  wrote:
>>>
>>> On 02/05/2016 01:51 AM, Fu Wei wrote:
>>>>
>>>>
>>>> Hi Guenter,
>>>>
>>>> On 4 February 2016 at 13:17, Guenter Roeck  wrote:
>>>>>
>>>>>
>>>>> On 02/03/2016 03:00 PM, Fu Wei wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 4 February 2016 at 02:45, Timur Tabi  wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Fu Wei wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> As you know I have made the pre-timeout support patch, If people
>>>>>>>> like
>>>>>>>> it, i am happy to go on upstream it separately.
>>>>>>>>
>>>>>>>> If we want to use pre-timeout here, user only can use get_pretimeout
>>>>>>>> and disable panic by setting pretimeout to 0
>>>>>>>> but user can not really set pretimeout, because "pre-timeout  ==
>>>>>>>> timeout / 2 (always)".
>>>>>>>> if user want to change pretimeout, he/she has to set_time instead.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Ok, I think patches 4 and 5 should be combined, and I think the
>>>>>>> Kconfig
>>>>>>> entry should be removed and just use panic_enabled.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Agreed.
>>>>
>>>>
>>>>
>>>> np, will do
>>>>
>>>>>>
>>>>>>
>>>>>> NP, will update this patchset like that ,  thanks :-)
>>>>>>
>>>>>
>>>>> Also, if panic is enabled, the timeout needs to be adjusted accordingly
>>>>> (to only panic after the entire timeout period has expired, not after
>>>>> half of it). We can not panic the system after timeout / 2.
>>>>
>>>>
>>>>
>>>> OK, my thought is
>>>>
>>>> if panic is enabled :
>>>> |WOR---WS0WOR---WS1
>>>> |--timeout--(panic)--timeout-reset
>>>>
>>>> if panic is disabled .
>>>> |WOR---WS0WOR---WS1
>>>> |-timeout-reset
>>>>
>>>>panic_enabled only can be configured when module is loaded by module
>>>> parameter
>>>>
>>>> But user should know that max_timeout(panic_enable) =
>>>> max_timeout(panic_disable) / 2
>>>>
>>>
>>> That means you'll have to update max_timeout accordingly.
>>
>>
>> panic_enabled only can be configured when module is loaded, so we
>> don't need to update it.
>>
>> max_timeout will only be set up in the init stage.
>>
>> Does it make sense ? :-)
>>
> Not sure I understand your problem or question.
>
> max_timeout will have to reflect the correct maximum timeout, under
> all circumstances. It will have to be set to the correct value before
> the watchdog driver is registered.

yes, understood,  my thought is :

in  static int sbsa_gwdt_probe(struct platform_device *pdev)

if (action) {
wdd->min_timeout = 1;
wdd->max_timeout = U32_MAX / gwdt->clk;
} else {
wdd->min_timeout = 2;
wdd->max_timeout = U32_MAX / gwdt->clk * 2;
}



>
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-06 Thread Fu Wei
Hi Guenter,

On 6 February 2016 at 07:54, Guenter Roeck <li...@roeck-us.net> wrote:
> On 02/05/2016 10:21 AM, Fu Wei wrote:
>>
>> On 5 February 2016 at 22:42, Guenter Roeck <li...@roeck-us.net> wrote:
>>>
>>> On 02/05/2016 01:51 AM, Fu Wei wrote:
>>>>
>>>>
>>>> Hi Guenter,
>>>>
>>>> On 4 February 2016 at 13:17, Guenter Roeck <li...@roeck-us.net> wrote:
>>>>>
>>>>>
>>>>> On 02/03/2016 03:00 PM, Fu Wei wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 4 February 2016 at 02:45, Timur Tabi <ti...@codeaurora.org> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Fu Wei wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> As you know I have made the pre-timeout support patch, If people
>>>>>>>> like
>>>>>>>> it, i am happy to go on upstream it separately.
>>>>>>>>
>>>>>>>> If we want to use pre-timeout here, user only can use get_pretimeout
>>>>>>>> and disable panic by setting pretimeout to 0
>>>>>>>> but user can not really set pretimeout, because "pre-timeout  ==
>>>>>>>> timeout / 2 (always)".
>>>>>>>> if user want to change pretimeout, he/she has to set_time instead.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Ok, I think patches 4 and 5 should be combined, and I think the
>>>>>>> Kconfig
>>>>>>> entry should be removed and just use panic_enabled.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Agreed.
>>>>
>>>>
>>>>
>>>> np, will do
>>>>
>>>>>>
>>>>>>
>>>>>> NP, will update this patchset like that ,  thanks :-)
>>>>>>
>>>>>
>>>>> Also, if panic is enabled, the timeout needs to be adjusted accordingly
>>>>> (to only panic after the entire timeout period has expired, not after
>>>>> half of it). We can not panic the system after timeout / 2.
>>>>
>>>>
>>>>
>>>> OK, my thought is
>>>>
>>>> if panic is enabled :
>>>> |WOR---WS0WOR---WS1
>>>> |--timeout--(panic)--timeout-----reset
>>>>
>>>> if panic is disabled .
>>>> |WOR---WS0WOR---WS1
>>>> |-timeout-reset
>>>>
>>>>panic_enabled only can be configured when module is loaded by module
>>>> parameter
>>>>
>>>> But user should know that max_timeout(panic_enable) =
>>>> max_timeout(panic_disable) / 2
>>>>
>>>
>>> That means you'll have to update max_timeout accordingly.
>>
>>
>> panic_enabled only can be configured when module is loaded, so we
>> don't need to update it.
>>
>> max_timeout will only be set up in the init stage.
>>
>> Does it make sense ? :-)
>>
> Not sure I understand your problem or question.
>
> max_timeout will have to reflect the correct maximum timeout, under
> all circumstances. It will have to be set to the correct value before
> the watchdog driver is registered.

yes, understood,  my thought is :

in  static int sbsa_gwdt_probe(struct platform_device *pdev)

if (action) {
wdd->min_timeout = 1;
wdd->max_timeout = U32_MAX / gwdt->clk;
} else {
wdd->min_timeout = 2;
wdd->max_timeout = U32_MAX / gwdt->clk * 2;
}



>
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-06 Thread Fu Wei
On 7 February 2016 at 02:55, Timur Tabi <ti...@codeaurora.org> wrote:
> Fu Wei wrote:
>>
>> if (action) {
>>  wdd->min_timeout = 1;
>>  wdd->max_timeout = U32_MAX / gwdt->clk;
>> } else {
>>  wdd->min_timeout = 2;
>>  wdd->max_timeout = U32_MAX / gwdt->clk * 2;
>> }
>
>
> Why would the minimum timeout be 2?  You can program WOR to timeout in half
> a second, can't you?

Yes, I think we can.
you are right, will fix that.

>
>
> --
> Sent by an employee of the Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the
> Code Aurora Forum, hosted by The Linux Foundation.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-06 Thread Fu Wei
On 7 February 2016 at 02:57, Guenter Roeck <li...@roeck-us.net> wrote:
> On 02/06/2016 10:02 AM, Fu Wei wrote:
>>
>> Hi Guenter,
>>
>> On 6 February 2016 at 07:54, Guenter Roeck <li...@roeck-us.net> wrote:
>>>
>>> On 02/05/2016 10:21 AM, Fu Wei wrote:
>>>>
>>>>
>>>> On 5 February 2016 at 22:42, Guenter Roeck <li...@roeck-us.net> wrote:
>>>>>
>>>>>
>>>>> On 02/05/2016 01:51 AM, Fu Wei wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hi Guenter,
>>>>>>
>>>>>> On 4 February 2016 at 13:17, Guenter Roeck <li...@roeck-us.net> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 02/03/2016 03:00 PM, Fu Wei wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 4 February 2016 at 02:45, Timur Tabi <ti...@codeaurora.org>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Fu Wei wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> As you know I have made the pre-timeout support patch, If people
>>>>>>>>>> like
>>>>>>>>>> it, i am happy to go on upstream it separately.
>>>>>>>>>>
>>>>>>>>>> If we want to use pre-timeout here, user only can use
>>>>>>>>>> get_pretimeout
>>>>>>>>>> and disable panic by setting pretimeout to 0
>>>>>>>>>> but user can not really set pretimeout, because "pre-timeout  ==
>>>>>>>>>> timeout / 2 (always)".
>>>>>>>>>> if user want to change pretimeout, he/she has to set_time instead.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Ok, I think patches 4 and 5 should be combined, and I think the
>>>>>>>>> Kconfig
>>>>>>>>> entry should be removed and just use panic_enabled.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Agreed.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> np, will do
>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> NP, will update this patchset like that ,  thanks :-)
>>>>>>>>
>>>>>>>
>>>>>>> Also, if panic is enabled, the timeout needs to be adjusted
>>>>>>> accordingly
>>>>>>> (to only panic after the entire timeout period has expired, not after
>>>>>>> half of it). We can not panic the system after timeout / 2.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> OK, my thought is
>>>>>>
>>>>>> if panic is enabled :
>>>>>> |WOR---WS0WOR---WS1
>>>>>> |--timeout--(panic)--timeout-reset
>>>>>>
>>>>>> if panic is disabled .
>>>>>> |WOR---WS0WOR---WS1
>>>>>> |-timeout-reset
>>>>>>
>>>>>> panic_enabled only can be configured when module is loaded by
>>>>>> module
>>>>>> parameter
>>>>>>
>>>>>> But user should know that max_timeout(panic_enable) =
>>>>>> max_timeout(panic_disable) / 2
>>>>>>
>>>>>
>>>>> That means you'll have to update max_timeout accordingly.
>>>>
>>>>
>>>>
>>>> panic_enabled only can be configured when module is loaded, so we
>>>> don't need to update it.
>>>>
>>>> max_timeout will only be set up in the init stage.
>>>>
>>>> Does it make sense ? :-)
>>>>
>>> Not sure I understand your problem or question.
>>>
>>> max_timeout will have to reflect the correct maximum timeout, under
>>> all circumstances. It will have to be set to the correct value before
>>> the watchdog driver is registered.
>>
>>
>> yes, understood,  my thought is :
>>
>> in  static int sbsa_gwdt_probe(struct platform_device *pdev)
>>
>> if (action) {
>>  wdd->min_timeout = 1;
>>  wdd->max_timeout = U32_MAX / gwdt->clk;
>> } else {
>>  wdd->min_timeout = 2;
>>  wdd->max_timeout = U32_MAX / gwdt->clk * 2;
>
>
> Pretty much, though you would also have to adjust all calculations
> using gwdt->clk, in both set_timeout() and get_timeout(). Wonder if
> you could adjust gwdt->clk instead.
>
> Does min_timeout really have to be 2 if panic is disabled ?
> The only reason seems to be the calculation in sbsa_gwdt_set_timeout().
>
> writel(timeout / 2 * gwdt->clk, gwdt->control_base + SBSA_GWDT_WOR);
>
> Maybe you could use something like
>
> writel(timeout * (gwdt->clk / 2), ...);
>
> instead. Or, as mentioned above, adjust the value of gwdt->clk
> to include the factor.

yes,  Thanks for pointing it out.
I will fix that following your suggestion.

>
> Thanks,
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-05 Thread Fu Wei
On 5 February 2016 at 22:42, Guenter Roeck  wrote:
> On 02/05/2016 01:51 AM, Fu Wei wrote:
>>
>> Hi Guenter,
>>
>> On 4 February 2016 at 13:17, Guenter Roeck  wrote:
>>>
>>> On 02/03/2016 03:00 PM, Fu Wei wrote:
>>>>
>>>>
>>>> On 4 February 2016 at 02:45, Timur Tabi  wrote:
>>>>>
>>>>>
>>>>> Fu Wei wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> As you know I have made the pre-timeout support patch, If people like
>>>>>> it, i am happy to go on upstream it separately.
>>>>>>
>>>>>> If we want to use pre-timeout here, user only can use get_pretimeout
>>>>>> and disable panic by setting pretimeout to 0
>>>>>> but user can not really set pretimeout, because "pre-timeout  ==
>>>>>> timeout / 2 (always)".
>>>>>> if user want to change pretimeout, he/she has to set_time instead.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Ok, I think patches 4 and 5 should be combined, and I think the Kconfig
>>>>> entry should be removed and just use panic_enabled.
>>>
>>>
>>>
>>> Agreed.
>>
>>
>> np, will do
>>
>>>>
>>>>
>>>> NP, will update this patchset like that ,  thanks :-)
>>>>
>>>
>>> Also, if panic is enabled, the timeout needs to be adjusted accordingly
>>> (to only panic after the entire timeout period has expired, not after
>>> half of it). We can not panic the system after timeout / 2.
>>
>>
>> OK, my thought is
>>
>> if panic is enabled :
>> |WOR---WS0WOR---WS1
>> |--timeout--(panic)--timeout-reset
>>
>> if panic is disabled .
>> |WOR---WS0WOR---WS1
>> |-timeout-reset
>>
>>   panic_enabled only can be configured when module is loaded by module
>> parameter
>>
>> But user should know that max_timeout(panic_enable) =
>> max_timeout(panic_disable) / 2
>>
>
> That means you'll have to update max_timeout accordingly.

panic_enabled only can be configured when module is loaded, so we
don't need to update it.

max_timeout will only be set up in the init stage.

Does it make sense ? :-)

>
>>>
>>> I am not too happy with the parameter name (panic_enabled). How about
>>> "action", to match machzwd ?
>>
>>
>> yes, makes sense. Maybe we can do something  like this:
>>
>> /*
>>   * action refers to action taken when watchdog gets WS0
>>   * 0 = SKIP
>>   * 1 = PANIC
>>   * defaults to SKIP (0)
>>   */
>> static int action;
>> module_param(action, int, 0);
>> MODULE_PARM_DESC(action, "after watchdog gets WS0 interrupt, do: "
>> "0 = SKIP(*)  1 = PANIC");
>>
> Yes, though I would suggest to use lower case letters.

yes,  NP, will do , Thanks :-)

>
> Thanks,
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-05 Thread Fu Wei
Hi Guenter,

On 4 February 2016 at 13:17, Guenter Roeck  wrote:
> On 02/03/2016 03:00 PM, Fu Wei wrote:
>>
>> On 4 February 2016 at 02:45, Timur Tabi  wrote:
>>>
>>> Fu Wei wrote:
>>>>
>>>>
>>>> As you know I have made the pre-timeout support patch, If people like
>>>> it, i am happy to go on upstream it separately.
>>>>
>>>> If we want to use pre-timeout here, user only can use get_pretimeout
>>>> and disable panic by setting pretimeout to 0
>>>> but user can not really set pretimeout, because "pre-timeout  ==
>>>> timeout / 2 (always)".
>>>> if user want to change pretimeout, he/she has to set_time instead.
>>>
>>>
>>>
>>> Ok, I think patches 4 and 5 should be combined, and I think the Kconfig
>>> entry should be removed and just use panic_enabled.
>
>
> Agreed.

np, will do

>>
>>
>> NP, will update this patchset like that ,  thanks :-)
>>
>
> Also, if panic is enabled, the timeout needs to be adjusted accordingly
> (to only panic after the entire timeout period has expired, not after
> half of it). We can not panic the system after timeout / 2.

OK, my thought is

if panic is enabled :
|WOR---WS0WOR---WS1
|--timeout--(panic)--timeout-reset

if panic is disabled .
|WOR---WS0WOR---WS1
|-timeout-reset

 panic_enabled only can be configured when module is loaded by module parameter

But user should know that max_timeout(panic_enable) =
max_timeout(panic_disable) / 2

>
> I am not too happy with the parameter name (panic_enabled). How about
> "action", to match machzwd ?

yes, makes sense. Maybe we can do something  like this:

/*
 * action refers to action taken when watchdog gets WS0
 * 0 = SKIP
 * 1 = PANIC
 * defaults to SKIP (0)
 */
static int action;
module_param(action, int, 0);
MODULE_PARM_DESC(action, "after watchdog gets WS0 interrupt, do: "
"0 = SKIP(*)  1 = PANIC");


>
> Thanks,
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-05 Thread Fu Wei
On 5 February 2016 at 00:43, Timur Tabi  wrote:
> Mathieu Poirier wrote:
>>>
>>> >+#ifdef CONFIG_ARM_SBSA_WATCHDOG_PANIC
>>> >+   irq = platform_get_irq(pdev, 0);
>>> >+   if (irq < 0) {
>>> >+   dev_err(dev, "unable to get ws0 interrupt.\n");
>>> >+   return irq;
>>> >+   }
>>> >+#endif
>>> >+
>>
>> Can't the driver revert to single stage mode if platform_get_irq()
>> fails?  That way the value of 'irq' can be tested throughout the
>> _probe() function and the #ifdefs removed.
>
>
> I like that idea.  The same can be done with the devm_request_irq() call.
> It should definitely still display a warning if the command-line option is
> set but no interrupt is available.

Yes, I agree with that too, brilliant idea, this will be in v11 patchset



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-05 Thread Fu Wei
On 5 February 2016 at 00:25, Mathieu Poirier  wrote:
> On 3 February 2016 at 10:18,   wrote:
>> From: Fu Wei 
>>
>> According to Server Base System Architecture (SBSA) specification,
>> the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
>> is for alerting the system by interrupt, the second one (WS1) is a real
>> hardware reset.
>>
>> This patch initially implements a simple single stage watchdog driver:
>> when the timeout is reached, your system will be reset by the second
>> signal (WS1).
>> The first signal (WS0) is ignored in this driver.
>>
>> This driver bases on linux kernel watchdog framework, so it can get
>> timeout from module parameter and FDT at the driver init stage.
>>
>> Signed-off-by: Fu Wei 
>> Reviewed-by: Graeme Gregory 
>> Tested-by: Pratyush Anand 
>> ---
>>  drivers/watchdog/Kconfig |  17 +++
>>  drivers/watchdog/Makefile|   1 +
>>  drivers/watchdog/sbsa_gwdt.c | 322 
>> +++
>>  3 files changed, 340 insertions(+)
>>
>> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>> index 4f0e7be..4ab1b05 100644
>> --- a/drivers/watchdog/Kconfig
>> +++ b/drivers/watchdog/Kconfig
>> @@ -201,6 +201,23 @@ config ARM_SP805_WATCHDOG
>>   ARM Primecell SP805 Watchdog timer. This will reboot your system 
>> when
>>   the timeout is reached.
>>
>> +config ARM_SBSA_WATCHDOG
>> +   tristate "ARM SBSA Generic Watchdog"
>> +   depends on ARM64
>> +   depends on ARM_ARCH_TIMER
>> +   select WATCHDOG_CORE
>> +   help
>> + ARM SBSA Generic Watchdog has two stage timeouts:
>> + the first signal (WS0) is for alerting the system by interrupt,
>> + the second one (WS1) is a real hardware reset.
>> + More details: ARM DEN0029B - Server Base System Architecture (SBSA)
>> +
>> + This is a simple single stage driver: when the timeout is reached,
>> + your system will be reset by WS1. The first signal (WS0) is 
>> ignored.
>> +
>> + To compile this driver as module, choose M here: The module
>> + will be called sbsa_gwdt.
>> +
>>  config ASM9260_WATCHDOG
>> tristate "Alphascale ASM9260 watchdog"
>> depends on MACH_ASM9260
>> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
>> index f566753..f9826d4 100644
>> --- a/drivers/watchdog/Makefile
>> +++ b/drivers/watchdog/Makefile
>> @@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
>>
>>  # ARM Architecture
>>  obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
>> +obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
>>  obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
>>  obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
>>  obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
>> diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
>> new file mode 100644
>> index 000..5a2dba3
>> --- /dev/null
>> +++ b/drivers/watchdog/sbsa_gwdt.c
>> @@ -0,0 +1,322 @@
>> +/*
>> + * SBSA(Server Base System Architecture) Generic Watchdog driver
>> + *
>> + * Copyright (c) 2015, Linaro Ltd.
>> + * Author: Fu Wei 
>> + * Suravee Suthikulpanit 
>> + * Al Stone 
>> + * Timur Tabi 
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License 2 as published
>> + * by the Free Software Foundation.
>> + *
>> + * 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.
>> + *
>> + * This SBSA Generic watchdog driver is a single stage timeout version.
>> + * Since this watchdog timer has two stages, and each stage is determined
>> + * by WOR. So the timeout is (WOR * 2).
>> + * When first timeout is reached, WS0 is triggered, the interrupt
>> + * triggered by WS0 will be ignored, then the second watch period starts;
>> + * when second timeout is reached, then WS1 is triggered, system reset.
>> + *
>> + * More details about the hardware specification of this device:
>> + * ARM DEN0029B - Server Base System Architecture (SBSA)
>> + *
>> + * SBSA GWDT: |WOR---WS0WOR---WS1
>> + *|timeou

Re: [PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-05 Thread Fu Wei
Hi

On 5 February 2016 at 00:46, Guenter Roeck  wrote:
> On 02/04/2016 08:37 AM, Timur Tabi wrote:
>>
>> Will Deacon wrote:
>>>>
>>>> +static int sbsa_gwdt_keepalive(struct watchdog_device *wdd)
>>>> >+{
>>>> >+struct sbsa_gwdt *gwdt = to_sbsa_gwdt(wdd);
>>>> >+
>>>> >+/*
>>>> >+* Writing WRR for an explicit watchdog refresh.
>>>> >+* You can write anyting(like 0xc0ffee).
>>>> >+*/
>>>> >+writel(0xc0ffee, gwdt->refresh_base + SBSA_GWDT_WRR);
>>>> >+
>>>> >+return 0;
>>>> >+}
>>>
>>> You might get in trouble for that. 0xd09f00d is probably less poisonous.
>>>
>>> http://www.petpoisonhelpline.com/poison/caffeine/
>>
>>
>> Any reason why we can't just keep it simple and write 0?
>
>
> +1

yes, we can, just "0" would be fine, will do.

Thanks :-)

>
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-05 Thread Fu Wei
On 5 February 2016 at 22:42, Guenter Roeck <li...@roeck-us.net> wrote:
> On 02/05/2016 01:51 AM, Fu Wei wrote:
>>
>> Hi Guenter,
>>
>> On 4 February 2016 at 13:17, Guenter Roeck <li...@roeck-us.net> wrote:
>>>
>>> On 02/03/2016 03:00 PM, Fu Wei wrote:
>>>>
>>>>
>>>> On 4 February 2016 at 02:45, Timur Tabi <ti...@codeaurora.org> wrote:
>>>>>
>>>>>
>>>>> Fu Wei wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> As you know I have made the pre-timeout support patch, If people like
>>>>>> it, i am happy to go on upstream it separately.
>>>>>>
>>>>>> If we want to use pre-timeout here, user only can use get_pretimeout
>>>>>> and disable panic by setting pretimeout to 0
>>>>>> but user can not really set pretimeout, because "pre-timeout  ==
>>>>>> timeout / 2 (always)".
>>>>>> if user want to change pretimeout, he/she has to set_time instead.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Ok, I think patches 4 and 5 should be combined, and I think the Kconfig
>>>>> entry should be removed and just use panic_enabled.
>>>
>>>
>>>
>>> Agreed.
>>
>>
>> np, will do
>>
>>>>
>>>>
>>>> NP, will update this patchset like that ,  thanks :-)
>>>>
>>>
>>> Also, if panic is enabled, the timeout needs to be adjusted accordingly
>>> (to only panic after the entire timeout period has expired, not after
>>> half of it). We can not panic the system after timeout / 2.
>>
>>
>> OK, my thought is
>>
>> if panic is enabled :
>> |WOR---WS0WOR---WS1
>> |--timeout--(panic)--timeout-reset
>>
>> if panic is disabled .
>> |WOR---WS0WOR---WS1
>> |-timeout-reset
>>
>>   panic_enabled only can be configured when module is loaded by module
>> parameter
>>
>> But user should know that max_timeout(panic_enable) =
>> max_timeout(panic_disable) / 2
>>
>
> That means you'll have to update max_timeout accordingly.

panic_enabled only can be configured when module is loaded, so we
don't need to update it.

max_timeout will only be set up in the init stage.

Does it make sense ? :-)

>
>>>
>>> I am not too happy with the parameter name (panic_enabled). How about
>>> "action", to match machzwd ?
>>
>>
>> yes, makes sense. Maybe we can do something  like this:
>>
>> /*
>>   * action refers to action taken when watchdog gets WS0
>>   * 0 = SKIP
>>   * 1 = PANIC
>>   * defaults to SKIP (0)
>>   */
>> static int action;
>> module_param(action, int, 0);
>> MODULE_PARM_DESC(action, "after watchdog gets WS0 interrupt, do: "
>> "0 = SKIP(*)  1 = PANIC");
>>
> Yes, though I would suggest to use lower case letters.

yes,  NP, will do , Thanks :-)

>
> Thanks,
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-05 Thread Fu Wei
Hi Guenter,

On 4 February 2016 at 13:17, Guenter Roeck <li...@roeck-us.net> wrote:
> On 02/03/2016 03:00 PM, Fu Wei wrote:
>>
>> On 4 February 2016 at 02:45, Timur Tabi <ti...@codeaurora.org> wrote:
>>>
>>> Fu Wei wrote:
>>>>
>>>>
>>>> As you know I have made the pre-timeout support patch, If people like
>>>> it, i am happy to go on upstream it separately.
>>>>
>>>> If we want to use pre-timeout here, user only can use get_pretimeout
>>>> and disable panic by setting pretimeout to 0
>>>> but user can not really set pretimeout, because "pre-timeout  ==
>>>> timeout / 2 (always)".
>>>> if user want to change pretimeout, he/she has to set_time instead.
>>>
>>>
>>>
>>> Ok, I think patches 4 and 5 should be combined, and I think the Kconfig
>>> entry should be removed and just use panic_enabled.
>
>
> Agreed.

np, will do

>>
>>
>> NP, will update this patchset like that ,  thanks :-)
>>
>
> Also, if panic is enabled, the timeout needs to be adjusted accordingly
> (to only panic after the entire timeout period has expired, not after
> half of it). We can not panic the system after timeout / 2.

OK, my thought is

if panic is enabled :
|WOR---WS0WOR---WS1
|--timeout--(panic)--timeout-reset

if panic is disabled .
|WOR---WS0WOR---WS1
|-timeout-reset

 panic_enabled only can be configured when module is loaded by module parameter

But user should know that max_timeout(panic_enable) =
max_timeout(panic_disable) / 2

>
> I am not too happy with the parameter name (panic_enabled). How about
> "action", to match machzwd ?

yes, makes sense. Maybe we can do something  like this:

/*
 * action refers to action taken when watchdog gets WS0
 * 0 = SKIP
 * 1 = PANIC
 * defaults to SKIP (0)
 */
static int action;
module_param(action, int, 0);
MODULE_PARM_DESC(action, "after watchdog gets WS0 interrupt, do: "
"0 = SKIP(*)  1 = PANIC");


>
> Thanks,
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-05 Thread Fu Wei
On 5 February 2016 at 00:25, Mathieu Poirier <mathieu.poir...@linaro.org> wrote:
> On 3 February 2016 at 10:18,  <fu@linaro.org> wrote:
>> From: Fu Wei <fu@linaro.org>
>>
>> According to Server Base System Architecture (SBSA) specification,
>> the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
>> is for alerting the system by interrupt, the second one (WS1) is a real
>> hardware reset.
>>
>> This patch initially implements a simple single stage watchdog driver:
>> when the timeout is reached, your system will be reset by the second
>> signal (WS1).
>> The first signal (WS0) is ignored in this driver.
>>
>> This driver bases on linux kernel watchdog framework, so it can get
>> timeout from module parameter and FDT at the driver init stage.
>>
>> Signed-off-by: Fu Wei <fu@linaro.org>
>> Reviewed-by: Graeme Gregory <graeme.greg...@linaro.org>
>> Tested-by: Pratyush Anand <pan...@redhat.com>
>> ---
>>  drivers/watchdog/Kconfig |  17 +++
>>  drivers/watchdog/Makefile|   1 +
>>  drivers/watchdog/sbsa_gwdt.c | 322 
>> +++
>>  3 files changed, 340 insertions(+)
>>
>> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
>> index 4f0e7be..4ab1b05 100644
>> --- a/drivers/watchdog/Kconfig
>> +++ b/drivers/watchdog/Kconfig
>> @@ -201,6 +201,23 @@ config ARM_SP805_WATCHDOG
>>   ARM Primecell SP805 Watchdog timer. This will reboot your system 
>> when
>>   the timeout is reached.
>>
>> +config ARM_SBSA_WATCHDOG
>> +   tristate "ARM SBSA Generic Watchdog"
>> +   depends on ARM64
>> +   depends on ARM_ARCH_TIMER
>> +   select WATCHDOG_CORE
>> +   help
>> + ARM SBSA Generic Watchdog has two stage timeouts:
>> + the first signal (WS0) is for alerting the system by interrupt,
>> + the second one (WS1) is a real hardware reset.
>> + More details: ARM DEN0029B - Server Base System Architecture (SBSA)
>> +
>> + This is a simple single stage driver: when the timeout is reached,
>> + your system will be reset by WS1. The first signal (WS0) is 
>> ignored.
>> +
>> + To compile this driver as module, choose M here: The module
>> + will be called sbsa_gwdt.
>> +
>>  config ASM9260_WATCHDOG
>> tristate "Alphascale ASM9260 watchdog"
>> depends on MACH_ASM9260
>> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
>> index f566753..f9826d4 100644
>> --- a/drivers/watchdog/Makefile
>> +++ b/drivers/watchdog/Makefile
>> @@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
>>
>>  # ARM Architecture
>>  obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
>> +obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
>>  obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
>>  obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
>>  obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
>> diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
>> new file mode 100644
>> index 000..5a2dba3
>> --- /dev/null
>> +++ b/drivers/watchdog/sbsa_gwdt.c
>> @@ -0,0 +1,322 @@
>> +/*
>> + * SBSA(Server Base System Architecture) Generic Watchdog driver
>> + *
>> + * Copyright (c) 2015, Linaro Ltd.
>> + * Author: Fu Wei <fu@linaro.org>
>> + * Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
>> + * Al Stone <al.st...@linaro.org>
>> + * Timur Tabi <ti...@codeaurora.org>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License 2 as published
>> + * by the Free Software Foundation.
>> + *
>> + * 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.
>> + *
>> + * This SBSA Generic watchdog driver is a single stage timeout version.
>> + * Since this watchdog timer has two stages, and each stage is determined
>> + * by WOR. So the timeout is (WOR * 2).
>> + * When first timeout is reached, WS0 is triggered, the interrupt
>> + * triggered by WS0 will be ignored, then the second watch period starts;
>> + * when second timeout is reached, then WS1 is triggered, sys

Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-05 Thread Fu Wei
On 5 February 2016 at 00:43, Timur Tabi <ti...@codeaurora.org> wrote:
> Mathieu Poirier wrote:
>>>
>>> >+#ifdef CONFIG_ARM_SBSA_WATCHDOG_PANIC
>>> >+   irq = platform_get_irq(pdev, 0);
>>> >+   if (irq < 0) {
>>> >+   dev_err(dev, "unable to get ws0 interrupt.\n");
>>> >+   return irq;
>>> >+   }
>>> >+#endif
>>> >+
>>
>> Can't the driver revert to single stage mode if platform_get_irq()
>> fails?  That way the value of 'irq' can be tested throughout the
>> _probe() function and the #ifdefs removed.
>
>
> I like that idea.  The same can be done with the devm_request_irq() call.
> It should definitely still display a warning if the command-line option is
> set but no interrupt is available.

Yes, I agree with that too, brilliant idea, this will be in v11 patchset



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-05 Thread Fu Wei
Hi

On 5 February 2016 at 00:46, Guenter Roeck <li...@roeck-us.net> wrote:
> On 02/04/2016 08:37 AM, Timur Tabi wrote:
>>
>> Will Deacon wrote:
>>>>
>>>> +static int sbsa_gwdt_keepalive(struct watchdog_device *wdd)
>>>> >+{
>>>> >+struct sbsa_gwdt *gwdt = to_sbsa_gwdt(wdd);
>>>> >+
>>>> >+/*
>>>> >+* Writing WRR for an explicit watchdog refresh.
>>>> >+* You can write anyting(like 0xc0ffee).
>>>> >+*/
>>>> >+writel(0xc0ffee, gwdt->refresh_base + SBSA_GWDT_WRR);
>>>> >+
>>>> >+return 0;
>>>> >+}
>>>
>>> You might get in trouble for that. 0xd09f00d is probably less poisonous.
>>>
>>> http://www.petpoisonhelpline.com/poison/caffeine/
>>
>>
>> Any reason why we can't just keep it simple and write 0?
>
>
> +1

yes, we can, just "0" would be fine, will do.

Thanks :-)

>
> Guenter
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
On 4 February 2016 at 02:45, Timur Tabi  wrote:
> Fu Wei wrote:
>>
>> As you know I have made the pre-timeout support patch, If people like
>> it, i am happy to go on upstream it separately.
>>
>> If we want to use pre-timeout here, user only can use get_pretimeout
>> and disable panic by setting pretimeout to 0
>> but user can not really set pretimeout, because "pre-timeout  ==
>> timeout / 2 (always)".
>> if user want to change pretimeout, he/she has to set_time instead.
>
>
> Ok, I think patches 4 and 5 should be combined, and I think the Kconfig
> entry should be removed and just use panic_enabled.

NP, will update this patchset like that ,  thanks :-)


-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
On 4 February 2016 at 02:26, Timur Tabi  wrote:
> Fu Wei wrote:
>>
>> Actually,
>> the SBSA watchdog driver should support only  half-timeout for panic
>> the user cannot configure the length of "panic time",  He can only
>> enable it, and it is automatically set to 1/2 timeout.
>>
>> we don't need pre-timeout here.
>>
>> Hope I understand you correctly:-)  sorry for your confusion
>>
>>> >
>>> >So when pre-timeout occurs, the interrupt handler calls panic() or
>>> > whatever
>>> >it's supposed to do.
>>
>> Actually,
>> So when 1/2 timeout occurs, the interrupt handler calls panic() or
>> whatever it's supposed to do.
>>
>
> I understand all that.  What I'm saying is that, in the future, when
> pre-timeout support is added to the watchdog layer, I think it makes sense
> to modify this driver to use pre-timeout support.

As you know I have made the pre-timeout support patch, If people like
it, i am happy to go on upstream it separately.

If we want to use pre-timeout here, user only can use get_pretimeout
and disable panic by setting pretimeout to 0
but user can not really set pretimeout, because "pre-timeout  ==
timeout / 2 (always)".
if user want to change pretimeout, he/she has to set_time instead.




-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
On 4 February 2016 at 02:08, Timur Tabi  wrote:
> Fu Wei wrote:
>>
>> Actually I am taking your suggestion to avoid touching WCV in
>> interrupt routine.
>> So even we have pre-timeout support , it is useless for this
>> panic-on-half-timeout feature,
>> because pre-timeout  == timeout / 2 (always).
>>
>> So maybe I misunderstand your suggestion,
>> could you let me know : why we want pre-timeout here?
>
>
> Maybe I'm confused.
>
> For pre-timeout, I think the SBSA watchdog driver should support only
> half-timeout.  That is, the user cannot configure the length of the
> pre-timeout with this driver.  He can only enable it, and it is
> automatically set to 1/2 timeout.

Actually,
the SBSA watchdog driver should support only  half-timeout for panic
the user cannot configure the length of "panic time",  He can only
enable it, and it is automatically set to 1/2 timeout.

we don't need pre-timeout here.

Hope I understand you correctly :-) sorry for your confusion

>
> So when pre-timeout occurs, the interrupt handler calls panic() or whatever
> it's supposed to do.

Actually,
So when 1/2 timeout occurs, the interrupt handler calls panic() or
whatever it's supposed to do.

>
> So "pre-timeout  == timeout / 2 (always)" is exactly what we want.

our patchset is doing this way.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-03 Thread Fu Wei
On 4 February 2016 at 01:58, Timur Tabi  wrote:
> Fu Wei wrote:
>>
>> I have posted  GTDT support separately :https://lkml.org/lkml/2016/2/1/660
>>
>> devicetree driver and GTDT driver both export sbsa gwdt info to
>> "platform resource".
>>
>> this driver get hardware info from platform resource.
>
>
> I must be missing something.  How does the driver probe?  It only has an

maybe you miss a  line of code for platform resource :

-
static const struct platform_device_id sbsa_gwdt_pdev_match[] = {
 { .name = "sbsa-gwdt", },
 {},
};
MODULE_DEVICE_TABLE(platform, sbsa_gwdt_pdev_match);
-

> entry for device tree:
>
> +   .of_match_table = sbsa_gwdt_of_match,
>
> Doesn't there need to be an ACPI match table to probe on an ACPI system?

No, we don't. And this have been tested.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
Hi Timur

On 4 February 2016 at 01:53, Timur Tabi  wrote:
> Fu Wei wrote:
>>
>> sorry, are you saying : using pre-timeout instead of this half timeout?
>>
>> But even we have pre-timeout support, pre-timeout  == timeout / 2, it
>> can not be configured without touch timeout.
>>
>> if you want pre-timeout  != timeout / 2, we have to modify WCV in the
>> interrupt routine.
>>   (because of the explicit watchdog refresh  mechanism)
>>
>> Could you let me know why we need pre-timeout  here ??:-)
>
>
> What I meant was that if we had full-blown pre-timeout support in the
> watchdog layer, then you could use that to implement the
> panic-on-half-timeout feature.
>
> When pre-timeout is implemented, will you modify the interrupt handler to
> use it?

Sorry I am little confused.

Actually I am taking your suggestion to avoid touching WCV in
interrupt routine.
So even we have pre-timeout support , it is useless for this
panic-on-half-timeout feature,
because pre-timeout  == timeout / 2 (always).

So maybe I misunderstand your suggestion,
could you let me know : why we want pre-timeout here?


>
>>> >belong upstream.  But like I said, it's just my opinion, and I won't
>>> >complain if I'm outvoted.
>>
>>   I think this debugging feature is the  purpose of the two-stage
>> watchdog, if I understand correctly
>
>
> Hmmm... that make sense.  I think maybe you should drop the Kconfig option,
> and just have "static bool panic_enabled = false;"  Also, then do this:
>
> if (panic_enabled) {
> ret = devm_request_irq(dev, irq, sbsa_gwdt_interrupt, 0,
>pdev->name, gwdt);
> if (ret) {
> dev_err(dev, "unable to request IRQ %d\n", irq);
> return ret;
> }
> }

yes, agree

>
> That way, the interrupt handler is never registered if the command-line
> parameter is not specified.
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-03 Thread Fu Wei
Hi Timur,

On 4 February 2016 at 01:48, Timur Tabi  wrote:
> fu@linaro.org wrote:
>>
>> +static struct platform_driver sbsa_gwdt_driver = {
>> +   .driver = {
>> +   .name = "sbsa-gwdt",
>> +   .pm = _gwdt_pm_ops,
>> +   .of_match_table = sbsa_gwdt_of_match,
>> +   },
>> +   .probe = sbsa_gwdt_probe,
>> +   .remove = sbsa_gwdt_remove,
>> +   .shutdown = sbsa_gwdt_shutdown,
>> +   .id_table = sbsa_gwdt_pdev_match,
>> +};
>
>
> I just noticed you dropped ACPI support.  Server platforms are supposed to
> use ACPI, so that seems like a critical omission to me.  You had a GTDT
> parser in an older version of this patch.  What happened to it?

I have posted  GTDT support separately : https://lkml.org/lkml/2016/2/1/660

devicetree driver and GTDT driver both export sbsa gwdt info to
"platform resource".

this driver get hardware info from platform resource.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
Hi Timur,

Thanks for your rapid feedback :-)

On 4 February 2016 at 01:27, Timur Tabi  wrote:
> fu@linaro.org wrote:
>>
>> +#ifdef CONFIG_ARM_SBSA_WATCHDOG_PANIC
>> +static bool panic_enabled = true;
>
>
> I think this should default to 'false', because IMHO, this seems like an odd

yes, It make sense to make it default to 'false'.

> feature.  I'm not crazy about the fact that there's a Kconfig option for it
> either, but I'm not going to NACK this patch.
>
> I personally would prefer to drop this patch, and just wait for full-blown
> pre-timeout support.  It feels like a debugging feature that doesn't really

sorry, are you saying : using pre-timeout instead of this half timeout?

But even we have pre-timeout support, pre-timeout  == timeout / 2, it
can not be configured without touch timeout.

if you want pre-timeout  != timeout / 2, we have to modify WCV in the
interrupt routine.
 (because of the explicit watchdog refresh  mechanism)

Could you let me know why we need pre-timeout  here ?? :-)

> belong upstream.  But like I said, it's just my opinion, and I won't
> complain if I'm outvoted.

 I think this debugging feature is the  purpose of the two-stage
watchdog, if I understand correctly



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


[PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread fu . wei
From: Fu Wei 

This patch registers the WS0 interrupt routine to trigger panic,
when the watchdog reachs the first stage (the half timeout).
This function can help administrator to backup the system context
info by panic console output or kdump (if supported), once system
goes wrong (doesn't feed the watchdog in the half timeout).

User also can skip panic by setting panic_enabled (module parameter) as 0

Signed-off-by: Fu Wei 
---
 Documentation/watchdog/watchdog-parameters.txt |  1 +
 drivers/watchdog/Kconfig   | 10 +
 drivers/watchdog/sbsa_gwdt.c   | 54 +++---
 3 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 300eb4d..31641e2 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -286,6 +286,7 @@ nowayout: Watchdog cannot be stopped once started
 -
 sbsa_gwdt:
 timeout: Watchdog timeout in seconds. (default 20s)
+panic_enabled: Enable panic at half timeout. (default=true)
 nowayout: Watchdog cannot be stopped once started
(default=kernel config parameter)
 -
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 4ab1b05..42adfdf 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -218,6 +218,16 @@ config ARM_SBSA_WATCHDOG
  To compile this driver as module, choose M here: The module
  will be called sbsa_gwdt.
 
+config ARM_SBSA_WATCHDOG_PANIC
+   bool "ARM SBSA Generic Watchdog triggers panic at the half timeout"
+   depends on ARM_SBSA_WATCHDOG
+   help
+ ARM SBSA Generic Watchdog will trigger panic in the first signal
+ (WS0) interrupt routine when the half timeout is reached.
+ This function can help administrator to backup the system context
+ info by panic console output or kdump (if supported).
+ But user can skip panic by setting moduleparam panic_enabled as 0.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
index 5a2dba3..d18cf37 100644
--- a/drivers/watchdog/sbsa_gwdt.c
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -16,18 +16,22 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * This SBSA Generic watchdog driver is a single stage timeout version.
+ * This SBSA Generic watchdog driver is a two stages version.
  * Since this watchdog timer has two stages, and each stage is determined
  * by WOR. So the timeout is (WOR * 2).
- * When first timeout is reached, WS0 is triggered, the interrupt
- * triggered by WS0 will be ignored, then the second watch period starts;
- * when second timeout is reached, then WS1 is triggered, system reset.
+ * When the first stage(the half timeout) is reached, WS0 interrupt is
+ * triggered, at this moment the second watch period starts;
+ * In the WS0 interrupt routine, panic will be triggered for saving the
+ * system context.
+ * If the system is getting into trouble and cannot be reset by panic or
+ * restart properly by the kdump kernel(if supported), then the second
+ * stage (the timeout) will be reached, system will be reset by WS1.
  *
  * More details about the hardware specification of this device:
  * ARM DEN0029B - Server Base System Architecture (SBSA)
  *
  * SBSA GWDT: |WOR---WS0WOR---WS1
- *|timeoutreset
+ *|--half_timeout--(panic)--half_timeout--reset
  *
  */
 
@@ -84,6 +88,13 @@ MODULE_PARM_DESC(timeout,
 "Watchdog timeout in seconds. (>=0, default="
 __MODULE_STRING(DEFAULT_TIMEOUT) ")");
 
+#ifdef CONFIG_ARM_SBSA_WATCHDOG_PANIC
+static bool panic_enabled = true;
+module_param(panic_enabled, bool, 0);
+MODULE_PARM_DESC(panic_enabled,
+"enable panic at half timeout. (default=true)");
+#endif
+
 static bool nowayout = WATCHDOG_NOWAYOUT;
 module_param(nowayout, bool, S_IRUGO);
 MODULE_PARM_DESC(nowayout,
@@ -159,6 +170,16 @@ static int sbsa_gwdt_stop(struct watchdog_device *wdd)
return 0;
 }
 
+#ifdef CONFIG_ARM_SBSA_WATCHDOG_PANIC
+static irqreturn_t sbsa_gwdt_interrupt(int irq, void *dev_id)
+{
+   if (panic_enabled)
+   panic("SBSA Watchdog half timeout");
+
+   return IRQ_HANDLED;
+}
+#endif
+
 static struct watchdog_info sbsa_gwdt_info = {
.identity   = "SBSA Generic Watchdog",
.options= WDIOF_SETTIMEOUT |
@@ -186,6 +207,9 @@ static int sbsa_gwdt_probe(struct platform_device *pdev)
struct resource *res;
u32 status;
int ret;
+#ifd

[PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-03 Thread fu . wei
From: Fu Wei 

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.

This patch initially implements a simple single stage watchdog driver:
when the timeout is reached, your system will be reset by the second
signal (WS1).
The first signal (WS0) is ignored in this driver.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei 
Reviewed-by: Graeme Gregory 
Tested-by: Pratyush Anand 
---
 drivers/watchdog/Kconfig |  17 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 322 +++
 3 files changed, 340 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 4f0e7be..4ab1b05 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -201,6 +201,23 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This is a simple single stage driver: when the timeout is reached,
+ your system will be reset by WS1. The first signal (WS0) is ignored.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..5a2dba3
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,322 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei 
+ * Suravee Suthikulpanit 
+ * Al Stone 
+ * Timur Tabi 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * This SBSA Generic watchdog driver is a single stage timeout version.
+ * Since this watchdog timer has two stages, and each stage is determined
+ * by WOR. So the timeout is (WOR * 2).
+ * When first timeout is reached, WS0 is triggered, the interrupt
+ * triggered by WS0 will be ignored, then the second watch period starts;
+ * when second timeout is reached, then WS1 is triggered, system reset.
+ *
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * SBSA GWDT: |WOR---WS0WOR---WS1
+ *|timeoutreset
+ *
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* SBSA Generic Watchdog register definitions */
+/* refresh frame */
+#define SBSA_GWDT_WRR  0x000
+
+/* control frame */
+#define SBSA_GWDT_WCS  0x000
+#define SBSA_GWDT_WOR  0x008
+#define SBSA_GWDT_WCV  0x010
+
+/* refresh/control frame */
+#define SBSA_GWDT_W_IIDR   0xfcc
+#define SBSA_GWDT_IDR  0xfd0
+
+/* Watchdog Control and Status Register */
+#define SBSA_GWDT_WCS_EN   BIT(0)
+#define SBSA_GWDT_WCS_WS0  BIT(1)
+#define SBSA_GWDT_WCS_WS1  BIT(2)
+
+/**
+ * struct sbsa_gwdt - Internal representation of the SBSA GWDT
+ * @wdd:   kernel watchdog_device structure
+ * @clk:   store the System Counter clock frequency, in H

[PATCH v10 2/5] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-03 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Fu Wei 
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..75da16b 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,12 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   status = "okay";
+   };
 };
-- 
2.5.0



[PATCH v10 1/5] Documentation: add sbsa-gwdt driver documentation

2016-02-03 Thread fu . wei
From: Fu Wei 

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann 
Acked-by: Rob Herring 
Signed-off-by: Fu Wei 
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 35 ++
 Documentation/watchdog/watchdog-parameters.txt |  5 
 2 files changed, 40 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..73a5d0d
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,35 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+- status: Indicates the device is not available for use. Should be "okay"
+  or "disabled" for available/unavailable. Default is "okay".
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   status = "okay";
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..300eb4d 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,11 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 20s)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



[PATCH v10 3/5] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-03 Thread fu . wei
From: Fu Wei 

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann 
Signed-off-by: Suravee Suthikulpanit 
Signed-off-by: Fu Wei 
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 9 +
 1 file changed, 9 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..057e9c0 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,15 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <30>;
+   status = "disabled";
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v10 0/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-03 Thread fu . wei
From: Fu Wei 

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.Separate the driver to two parts:
  (1) single stage timeout driver(ignore WS0 interrupt)
  (2) register WS0 interrupt for the half timeout panic
e.Timeout is from watchdog enabled to WS1 triggered.
  User can disable "half timeout panic" by kernel config or
  module parameter panic_enabled.

Changelog:
v10:Delete pretimeout support
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt)
(2) register WS0 interrupt for the half timeout panic
timeout == (enable --> WS1)

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(5)sbsa_gwdt_set_wcv function.

v3: https://lkml.org/lkml/2015/5/25/111
Delete "export arch_timer_get_rate" patch.
Driver back to use arch_timer_get_cntfrq.
Improve watchdog_init_timeouts function and update relevant documentation.
Improve watchdog_timeout_invalid and watchdog_pretimeout_invalid.
Improve foundation-v8.dts: delete the unnecessary tag of device node.
Remove "ARM64 || COMPILE_TEST" from Kconfig.
Add comments in arch/arm64/kernel/acpi.c
Fix typoes and incorrect comments.

v2: https://lkml.org/lkml/2015/5/21/172
Improve watchdog-kernel-api.txt documentation for pretimeout support.
Export "arch_timer_get_rate" in arm_arch_timer.c.
Add watchdog_init_timeouts API for pretimeout support in framework.
Improve suspend and resume foundation in driver
Improve timeout/pretimeout values init code in driver.
Delete unnecessary items of the sbsa_gwdt struct and #define.
Delete all unnecessary debug info in driver.
Fix 64bit division bug.
Use the arch_timer interface to get watchdog clock rate.
Add MODULE_DEVICE_TABLE for platform device id.
Fix typoes.

v1: https://lkml.org/lkml/2015/5/15/279

Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
On 4 February 2016 at 02:45, Timur Tabi <ti...@codeaurora.org> wrote:
> Fu Wei wrote:
>>
>> As you know I have made the pre-timeout support patch, If people like
>> it, i am happy to go on upstream it separately.
>>
>> If we want to use pre-timeout here, user only can use get_pretimeout
>> and disable panic by setting pretimeout to 0
>> but user can not really set pretimeout, because "pre-timeout  ==
>> timeout / 2 (always)".
>> if user want to change pretimeout, he/she has to set_time instead.
>
>
> Ok, I think patches 4 and 5 should be combined, and I think the Kconfig
> entry should be removed and just use panic_enabled.

NP, will update this patchset like that ,  thanks :-)


-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
Hi Timur,

Thanks for your rapid feedback :-)

On 4 February 2016 at 01:27, Timur Tabi <ti...@codeaurora.org> wrote:
> fu@linaro.org wrote:
>>
>> +#ifdef CONFIG_ARM_SBSA_WATCHDOG_PANIC
>> +static bool panic_enabled = true;
>
>
> I think this should default to 'false', because IMHO, this seems like an odd

yes, It make sense to make it default to 'false'.

> feature.  I'm not crazy about the fact that there's a Kconfig option for it
> either, but I'm not going to NACK this patch.
>
> I personally would prefer to drop this patch, and just wait for full-blown
> pre-timeout support.  It feels like a debugging feature that doesn't really

sorry, are you saying : using pre-timeout instead of this half timeout?

But even we have pre-timeout support, pre-timeout  == timeout / 2, it
can not be configured without touch timeout.

if you want pre-timeout  != timeout / 2, we have to modify WCV in the
interrupt routine.
 (because of the explicit watchdog refresh  mechanism)

Could you let me know why we need pre-timeout  here ?? :-)

> belong upstream.  But like I said, it's just my opinion, and I won't
> complain if I'm outvoted.

 I think this debugging feature is the  purpose of the two-stage
watchdog, if I understand correctly



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-03 Thread Fu Wei
Hi Timur,

On 4 February 2016 at 01:48, Timur Tabi <ti...@codeaurora.org> wrote:
> fu@linaro.org wrote:
>>
>> +static struct platform_driver sbsa_gwdt_driver = {
>> +   .driver = {
>> +   .name = "sbsa-gwdt",
>> +   .pm = _gwdt_pm_ops,
>> +   .of_match_table = sbsa_gwdt_of_match,
>> +   },
>> +   .probe = sbsa_gwdt_probe,
>> +   .remove = sbsa_gwdt_remove,
>> +   .shutdown = sbsa_gwdt_shutdown,
>> +   .id_table = sbsa_gwdt_pdev_match,
>> +};
>
>
> I just noticed you dropped ACPI support.  Server platforms are supposed to
> use ACPI, so that seems like a critical omission to me.  You had a GTDT
> parser in an older version of this patch.  What happened to it?

I have posted  GTDT support separately : https://lkml.org/lkml/2016/2/1/660

devicetree driver and GTDT driver both export sbsa gwdt info to
"platform resource".

this driver get hardware info from platform resource.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
Hi Timur

On 4 February 2016 at 01:53, Timur Tabi <ti...@codeaurora.org> wrote:
> Fu Wei wrote:
>>
>> sorry, are you saying : using pre-timeout instead of this half timeout?
>>
>> But even we have pre-timeout support, pre-timeout  == timeout / 2, it
>> can not be configured without touch timeout.
>>
>> if you want pre-timeout  != timeout / 2, we have to modify WCV in the
>> interrupt routine.
>>   (because of the explicit watchdog refresh  mechanism)
>>
>> Could you let me know why we need pre-timeout  here ??:-)
>
>
> What I meant was that if we had full-blown pre-timeout support in the
> watchdog layer, then you could use that to implement the
> panic-on-half-timeout feature.
>
> When pre-timeout is implemented, will you modify the interrupt handler to
> use it?

Sorry I am little confused.

Actually I am taking your suggestion to avoid touching WCV in
interrupt routine.
So even we have pre-timeout support , it is useless for this
panic-on-half-timeout feature,
because pre-timeout  == timeout / 2 (always).

So maybe I misunderstand your suggestion,
could you let me know : why we want pre-timeout here?


>
>>> >belong upstream.  But like I said, it's just my opinion, and I won't
>>> >complain if I'm outvoted.
>>
>>   I think this debugging feature is the  purpose of the two-stage
>> watchdog, if I understand correctly
>
>
> Hmmm... that make sense.  I think maybe you should drop the Kconfig option,
> and just have "static bool panic_enabled = false;"  Also, then do this:
>
> if (panic_enabled) {
> ret = devm_request_irq(dev, irq, sbsa_gwdt_interrupt, 0,
>pdev->name, gwdt);
> if (ret) {
> dev_err(dev, "unable to request IRQ %d\n", irq);
> return ret;
> }
> }

yes, agree

>
> That way, the interrupt handler is never registered if the command-line
> parameter is not specified.
>



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-03 Thread Fu Wei
On 4 February 2016 at 01:58, Timur Tabi <ti...@codeaurora.org> wrote:
> Fu Wei wrote:
>>
>> I have posted  GTDT support separately :https://lkml.org/lkml/2016/2/1/660
>>
>> devicetree driver and GTDT driver both export sbsa gwdt info to
>> "platform resource".
>>
>> this driver get hardware info from platform resource.
>
>
> I must be missing something.  How does the driver probe?  It only has an

maybe you miss a  line of code for platform resource :

-
static const struct platform_device_id sbsa_gwdt_pdev_match[] = {
 { .name = "sbsa-gwdt", },
 {},
};
MODULE_DEVICE_TABLE(platform, sbsa_gwdt_pdev_match);
-

> entry for device tree:
>
> +   .of_match_table = sbsa_gwdt_of_match,
>
> Doesn't there need to be an ACPI match table to probe on an ACPI system?

No, we don't. And this have been tested.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


[PATCH v10 4/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-03 Thread fu . wei
From: Fu Wei <fu@linaro.org>

According to Server Base System Architecture (SBSA) specification,
the SBSA Generic Watchdog has two stage timeouts: the first signal (WS0)
is for alerting the system by interrupt, the second one (WS1) is a real
hardware reset.

This patch initially implements a simple single stage watchdog driver:
when the timeout is reached, your system will be reset by the second
signal (WS1).
The first signal (WS0) is ignored in this driver.

This driver bases on linux kernel watchdog framework, so it can get
timeout from module parameter and FDT at the driver init stage.

Signed-off-by: Fu Wei <fu@linaro.org>
Reviewed-by: Graeme Gregory <graeme.greg...@linaro.org>
Tested-by: Pratyush Anand <pan...@redhat.com>
---
 drivers/watchdog/Kconfig |  17 +++
 drivers/watchdog/Makefile|   1 +
 drivers/watchdog/sbsa_gwdt.c | 322 +++
 3 files changed, 340 insertions(+)

diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 4f0e7be..4ab1b05 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -201,6 +201,23 @@ config ARM_SP805_WATCHDOG
  ARM Primecell SP805 Watchdog timer. This will reboot your system when
  the timeout is reached.
 
+config ARM_SBSA_WATCHDOG
+   tristate "ARM SBSA Generic Watchdog"
+   depends on ARM64
+   depends on ARM_ARCH_TIMER
+   select WATCHDOG_CORE
+   help
+ ARM SBSA Generic Watchdog has two stage timeouts:
+ the first signal (WS0) is for alerting the system by interrupt,
+ the second one (WS1) is a real hardware reset.
+ More details: ARM DEN0029B - Server Base System Architecture (SBSA)
+
+ This is a simple single stage driver: when the timeout is reached,
+ your system will be reset by WS1. The first signal (WS0) is ignored.
+
+ To compile this driver as module, choose M here: The module
+ will be called sbsa_gwdt.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index f566753..f9826d4 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
 
 # ARM Architecture
 obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
+obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
 obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
 obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
 obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
new file mode 100644
index 000..5a2dba3
--- /dev/null
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -0,0 +1,322 @@
+/*
+ * SBSA(Server Base System Architecture) Generic Watchdog driver
+ *
+ * Copyright (c) 2015, Linaro Ltd.
+ * Author: Fu Wei <fu@linaro.org>
+ * Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
+ * Al Stone <al.st...@linaro.org>
+ * Timur Tabi <ti...@codeaurora.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * This SBSA Generic watchdog driver is a single stage timeout version.
+ * Since this watchdog timer has two stages, and each stage is determined
+ * by WOR. So the timeout is (WOR * 2).
+ * When first timeout is reached, WS0 is triggered, the interrupt
+ * triggered by WS0 will be ignored, then the second watch period starts;
+ * when second timeout is reached, then WS1 is triggered, system reset.
+ *
+ * More details about the hardware specification of this device:
+ * ARM DEN0029B - Server Base System Architecture (SBSA)
+ *
+ * SBSA GWDT: |WOR---WS0WOR---WS1
+ *|timeoutreset
+ *
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* SBSA Generic Watchdog register definitions */
+/* refresh frame */
+#define SBSA_GWDT_WRR  0x000
+
+/* control frame */
+#define SBSA_GWDT_WCS  0x000
+#define SBSA_GWDT_WOR  0x008
+#define SBSA_GWDT_WCV  0x010
+
+/* refresh/control frame */
+#define SBSA_GWDT_W_IIDR   0xfcc
+#define SBSA_GWDT_IDR  0xfd0
+
+/* Watchdog Control and Status Register */
+#define SBSA_GWDT_WCS_EN   BIT(0)
+#define SBSA_GWDT_WCS_WS0  BIT(1)
+#define SBSA_GWDT_WCS_WS1  

[PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This patch registers the WS0 interrupt routine to trigger panic,
when the watchdog reachs the first stage (the half timeout).
This function can help administrator to backup the system context
info by panic console output or kdump (if supported), once system
goes wrong (doesn't feed the watchdog in the half timeout).

User also can skip panic by setting panic_enabled (module parameter) as 0

Signed-off-by: Fu Wei <fu@linaro.org>
---
 Documentation/watchdog/watchdog-parameters.txt |  1 +
 drivers/watchdog/Kconfig   | 10 +
 drivers/watchdog/sbsa_gwdt.c   | 54 +++---
 3 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 300eb4d..31641e2 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -286,6 +286,7 @@ nowayout: Watchdog cannot be stopped once started
 -
 sbsa_gwdt:
 timeout: Watchdog timeout in seconds. (default 20s)
+panic_enabled: Enable panic at half timeout. (default=true)
 nowayout: Watchdog cannot be stopped once started
(default=kernel config parameter)
 -
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 4ab1b05..42adfdf 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -218,6 +218,16 @@ config ARM_SBSA_WATCHDOG
  To compile this driver as module, choose M here: The module
  will be called sbsa_gwdt.
 
+config ARM_SBSA_WATCHDOG_PANIC
+   bool "ARM SBSA Generic Watchdog triggers panic at the half timeout"
+   depends on ARM_SBSA_WATCHDOG
+   help
+ ARM SBSA Generic Watchdog will trigger panic in the first signal
+ (WS0) interrupt routine when the half timeout is reached.
+ This function can help administrator to backup the system context
+ info by panic console output or kdump (if supported).
+ But user can skip panic by setting moduleparam panic_enabled as 0.
+
 config ASM9260_WATCHDOG
tristate "Alphascale ASM9260 watchdog"
depends on MACH_ASM9260
diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
index 5a2dba3..d18cf37 100644
--- a/drivers/watchdog/sbsa_gwdt.c
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -16,18 +16,22 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * This SBSA Generic watchdog driver is a single stage timeout version.
+ * This SBSA Generic watchdog driver is a two stages version.
  * Since this watchdog timer has two stages, and each stage is determined
  * by WOR. So the timeout is (WOR * 2).
- * When first timeout is reached, WS0 is triggered, the interrupt
- * triggered by WS0 will be ignored, then the second watch period starts;
- * when second timeout is reached, then WS1 is triggered, system reset.
+ * When the first stage(the half timeout) is reached, WS0 interrupt is
+ * triggered, at this moment the second watch period starts;
+ * In the WS0 interrupt routine, panic will be triggered for saving the
+ * system context.
+ * If the system is getting into trouble and cannot be reset by panic or
+ * restart properly by the kdump kernel(if supported), then the second
+ * stage (the timeout) will be reached, system will be reset by WS1.
  *
  * More details about the hardware specification of this device:
  * ARM DEN0029B - Server Base System Architecture (SBSA)
  *
  * SBSA GWDT: |WOR---WS0WOR---WS1
- *|timeoutreset
+ *|--half_timeout--(panic)--half_timeout--reset
  *
  */
 
@@ -84,6 +88,13 @@ MODULE_PARM_DESC(timeout,
 "Watchdog timeout in seconds. (>=0, default="
 __MODULE_STRING(DEFAULT_TIMEOUT) ")");
 
+#ifdef CONFIG_ARM_SBSA_WATCHDOG_PANIC
+static bool panic_enabled = true;
+module_param(panic_enabled, bool, 0);
+MODULE_PARM_DESC(panic_enabled,
+"enable panic at half timeout. (default=true)");
+#endif
+
 static bool nowayout = WATCHDOG_NOWAYOUT;
 module_param(nowayout, bool, S_IRUGO);
 MODULE_PARM_DESC(nowayout,
@@ -159,6 +170,16 @@ static int sbsa_gwdt_stop(struct watchdog_device *wdd)
return 0;
 }
 
+#ifdef CONFIG_ARM_SBSA_WATCHDOG_PANIC
+static irqreturn_t sbsa_gwdt_interrupt(int irq, void *dev_id)
+{
+   if (panic_enabled)
+   panic("SBSA Watchdog half timeout");
+
+   return IRQ_HANDLED;
+}
+#endif
+
 static struct watchdog_info sbsa_gwdt_info = {
.identity   = "SBSA Generic Watchdog",
.options= WDIOF_SETTIMEOUT |
@@ -186,6 +207,9 @@ static int sbsa_gwdt_probe(struct platform_device *pdev)
struct resou

[PATCH v10 0/5] Watchdog: introduce ARM SBSA watchdog driver

2016-02-03 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This patchset:
(1)Introduce Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
for FDT info of SBSA Generic Watchdog, and give two examples of
adding SBSA Generic Watchdog device node into the dts files:
foundation-v8.dts and amd-seattle-soc.dtsi.

(2)Introduce ARM SBSA watchdog driver:
a.Use linux kernel watchdog framework;
b.Work with FDT on ARM64;
c.Support getting timeout from parameter and FDT at the driver
  init stage.
d.Separate the driver to two parts:
  (1) single stage timeout driver(ignore WS0 interrupt)
  (2) register WS0 interrupt for the half timeout panic
e.Timeout is from watchdog enabled to WS1 triggered.
  User can disable "half timeout panic" by kernel config or
  module parameter panic_enabled.

Changelog:
v10:Delete pretimeout support
Separate the driver to two parts:
(1) single stage timeout driver(ignore WS0 interrupt)
(2) register WS0 interrupt for the half timeout panic
timeout == (enable --> WS1)

v9: https://lkml.org/lkml/2015/11/9/57
Rebase to latest kernel version(4.3).
Update the Documentation of sbsa-gwdt device node info of FDT:
(1) move some introduction to pretimeout patch
(2) delete WS1 value from "interrupts" of binding documentation,
since WS1 won't be handled by Linux.

v8: https://lkml.org/lkml/2015/10/27/466
Rebase to latest kernel version(4.3-rc7).
Separate the patches of GTDT support and arm_arch_timer. This
clocksource relevant patch will upstreamed in a individual patchset.
Update all the default timeout and pretimeout to 30s and 60s.
Improve documentation and inline comments.
Fix a bug in pretimeout support which makes timeout and pretimeout
parameters initialization fail.

v7: https://lkml.org/lkml/2015/8/24/611
Rebase to latest kernel version(4.2-rc7).
Improve FDT support: geting resource by order, instead of name.
According to the FDT support, Update the example dts file, gtdt.c
and sbsa_gwdt.c.
Pass the sparse test, and fix the warning.
Fix the max_pretimeout and max_timeout value overflow bug.
Delete the WCV output value.


v6: https://lkml.org/lkml/2015/6/23/359
Improve the dtb example files: reduce the register frame size to 4K.
Improve pretimeout support:
(1) improve watchdog_init_timeouts function
(2) rename watchdog_check_min_max_timeouts back to the original name
(1) improve watchdog_timeout_invalid/watchdog_pretimeout_invalid
Add the new features in the sbsa_gwdt driver:
(1) In the second stage, user can feed the dog without cleaning WS0.
(2) In the second stage, user can trigger WS1 by setting pretimeout = 0.
(3) expand the max value of pretimeout, in case 10 second is not enough
for a kdump kernel reboot in panic.

v5: https://lkml.org/lkml/2015/6/10/357
Improve pretimeout support:
(1)fix typo in documentation and comments.
(2)fix the timeout limits validation bug.
Simplify sbsa_gwdt driver:
(1)integrate all the registers access functions into caller.

v4: https://lkml.org/lkml/2015/6/2/4
Refactor GTDT support code: remove it from arch/arm64/kernel/acpi.c,
put it into drivers/acpi/gtdt.c file.
Integrate the GTDT code of drivers/clocksource/arm_arch_timer.c into
drivers/acpi/gtdt.c.
Improve pretimeout support, fix "pretimeout == 0" problem.
Simplify sbsa_gwdt driver:
(1)timeout/pretimeout limits setup;
(2)keepalive function;
(3)delete "clk == 0" check;
(4)delete WS0 status bit check in interrupt routine;
(5)sbsa_gwdt_set_wcv function.

v3: https://lkml.org/lkml/2015/5/25/111
Delete "export arch_timer_get_rate" patch.
Driver back to use arch_timer_get_cntfrq.
Improve watchdog_init_timeouts function and update relevant documentation.
Improve watchdog_timeout_invalid and watchdog_pretimeout_invalid.
Improve foundation-v8.dts: delete the unnecessary tag of device node.
Remove "ARM64 || COMPILE_TEST" from Kconfig.
Add comments in arch/arm64/kernel/acpi.c
Fix typoes and incorrect comments.

v2: https://lkml.org/lkml/2015/5/21/172
Improve watchdog-kernel-api.txt documentation for pretimeout support.
Export "arch_timer_get_rate" in arm_arch_timer.c.
Add watchdog_init_timeouts API for pretimeout support in framework.
Improve suspend and resume foundation in driver
Improve timeout/pretimeout values init code in driver.
Delete unnecessary items of the sbsa_gwdt struct and #define.
Delete all unnecessary debug info in driver.
Fix 64bit division bug.
Use the arch_timer interface to get watchdog clock rate.
Add MODULE_DEVICE_TABLE for platform device id.
Fix typoes.

v1: https://lkml.org/l

[PATCH v10 3/5] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi

2016-02-03 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi | 9 +
 1 file changed, 9 insertions(+)

diff --git a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi 
b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
index 2874d92..057e9c0 100644
--- a/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
+++ b/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
@@ -84,6 +84,15 @@
clock-names = "uartclk", "apb_pclk";
};
 
+   watchdog0: watchdog@e0bb {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0xe0bc 0 0x1000>,
+   <0x0 0xe0bb 0 0x1000>;
+   interrupts = <0 337 4>;
+   timeout-sec = <30>;
+   status = "disabled";
+   };
+
spi0: ssp@e102 {
status = "disabled";
compatible = "arm,pl022", "arm,primecell";
-- 
2.5.0



[PATCH v10 2/5] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts

2016-02-03 Thread fu . wei
From: Fu Wei <fu@linaro.org>

This can be a example of adding SBSA Generic Watchdog device node
into some dts files for the Soc which contains SBSA Generic Watchdog.

Acked-by: Arnd Bergmann <a...@arndb.de>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 arch/arm64/boot/dts/arm/foundation-v8.dts | 8 
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts 
b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 4eac8dc..75da16b 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -237,4 +237,12 @@
};
};
};
+   watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+   <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   status = "okay";
+   };
 };
-- 
2.5.0



[PATCH v10 1/5] Documentation: add sbsa-gwdt driver documentation

2016-02-03 Thread fu . wei
From: Fu Wei <fu@linaro.org>

The sbsa-gwdt.txt documentation in devicetree/bindings/watchdog is for
introducing SBSA(Server Base System Architecture) Generic Watchdog
device node info into FDT.

Also add sbsa-gwdt introduction in watchdog-parameters.txt

Acked-by: Arnd Bergmann <a...@arndb.de>
Acked-by: Rob Herring <r...@kernel.org>
Signed-off-by: Fu Wei <fu@linaro.org>
---
 .../devicetree/bindings/watchdog/sbsa-gwdt.txt | 35 ++
 Documentation/watchdog/watchdog-parameters.txt |  5 
 2 files changed, 40 insertions(+)

diff --git a/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt 
b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
new file mode 100644
index 000..73a5d0d
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/sbsa-gwdt.txt
@@ -0,0 +1,35 @@
+* SBSA (Server Base System Architecture) Generic Watchdog
+
+The SBSA Generic Watchdog Timer is used to force a reset of the system
+after two stages of timeout have elapsed.  A detailed definition of the
+watchdog timer can be found in the ARM document: ARM-DEN-0029 - Server
+Base System Architecture (SBSA)
+
+Required properties:
+- compatible: Should at least contain "arm,sbsa-gwdt".
+
+- reg: Each entry specifies the base physical address of a register frame
+  and the length of that frame; currently, two frames must be defined,
+  in this order:
+  1: Watchdog control frame;
+  2: Refresh frame.
+
+- interrupts: Should contain the Watchdog Signal 0 (WS0) SPI (Shared
+  Peripheral Interrupt) number of SBSA Generic Watchdog.
+
+Optional properties
+- timeout-sec: Watchdog timeout values (in seconds).
+
+- status: Indicates the device is not available for use. Should be "okay"
+  or "disabled" for available/unavailable. Default is "okay".
+
+Example for FVP Foundation Model v8:
+
+watchdog@2a44 {
+   compatible = "arm,sbsa-gwdt";
+   reg = <0x0 0x2a44 0 0x1000>,
+ <0x0 0x2a45 0 0x1000>;
+   interrupts = <0 27 4>;
+   timeout-sec = <30>;
+   status = "okay";
+};
diff --git a/Documentation/watchdog/watchdog-parameters.txt 
b/Documentation/watchdog/watchdog-parameters.txt
index 9f9ec9f..300eb4d 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -284,6 +284,11 @@ sbc_fitpc2_wdt:
 margin: Watchdog margin in seconds (default 60s)
 nowayout: Watchdog cannot be stopped once started
 -
+sbsa_gwdt:
+timeout: Watchdog timeout in seconds. (default 20s)
+nowayout: Watchdog cannot be stopped once started
+   (default=kernel config parameter)
+-
 sc1200wdt:
 isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
 io: io port
-- 
2.5.0



Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
On 4 February 2016 at 02:08, Timur Tabi <ti...@codeaurora.org> wrote:
> Fu Wei wrote:
>>
>> Actually I am taking your suggestion to avoid touching WCV in
>> interrupt routine.
>> So even we have pre-timeout support , it is useless for this
>> panic-on-half-timeout feature,
>> because pre-timeout  == timeout / 2 (always).
>>
>> So maybe I misunderstand your suggestion,
>> could you let me know : why we want pre-timeout here?
>
>
> Maybe I'm confused.
>
> For pre-timeout, I think the SBSA watchdog driver should support only
> half-timeout.  That is, the user cannot configure the length of the
> pre-timeout with this driver.  He can only enable it, and it is
> automatically set to 1/2 timeout.

Actually,
the SBSA watchdog driver should support only  half-timeout for panic
the user cannot configure the length of "panic time",  He can only
enable it, and it is automatically set to 1/2 timeout.

we don't need pre-timeout here.

Hope I understand you correctly :-) sorry for your confusion

>
> So when pre-timeout occurs, the interrupt handler calls panic() or whatever
> it's supposed to do.

Actually,
So when 1/2 timeout occurs, the interrupt handler calls panic() or
whatever it's supposed to do.

>
> So "pre-timeout  == timeout / 2 (always)" is exactly what we want.

our patchset is doing this way.



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


Re: [PATCH v10 5/5] Watchdog: ARM SBSA Generic Watchdog half timeout panic support

2016-02-03 Thread Fu Wei
On 4 February 2016 at 02:26, Timur Tabi <ti...@codeaurora.org> wrote:
> Fu Wei wrote:
>>
>> Actually,
>> the SBSA watchdog driver should support only  half-timeout for panic
>> the user cannot configure the length of "panic time",  He can only
>> enable it, and it is automatically set to 1/2 timeout.
>>
>> we don't need pre-timeout here.
>>
>> Hope I understand you correctly:-)  sorry for your confusion
>>
>>> >
>>> >So when pre-timeout occurs, the interrupt handler calls panic() or
>>> > whatever
>>> >it's supposed to do.
>>
>> Actually,
>> So when 1/2 timeout occurs, the interrupt handler calls panic() or
>> whatever it's supposed to do.
>>
>
> I understand all that.  What I'm saying is that, in the future, when
> pre-timeout support is added to the watchdog layer, I think it makes sense
> to modify this driver to use pre-timeout support.

As you know I have made the pre-timeout support patch, If people like
it, i am happy to go on upstream it separately.

If we want to use pre-timeout here, user only can use get_pretimeout
and disable panic by setting pretimeout to 0
but user can not really set pretimeout, because "pre-timeout  ==
timeout / 2 (always)".
if user want to change pretimeout, he/she has to set_time instead.




-- 
Best regards,

Fu Wei
Software Engineer
Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch
Ph: +86 21 61221326(direct)
Ph: +86 186 2020 4684 (mobile)
Room 1512, Regus One Corporate Avenue,Level 15,
One Corporate Avenue,222 Hubin Road,Huangpu District,
Shanghai,China 200021


[PATCH v3 5/6] kvm: arm64: wrapping DT support for virt arch timer

2016-02-01 Thread fu . wei
From: Wei Huang 

This patches wrapping DT support for virt arch timer into a function.

[Fu Wei: improve the DT support, and separate ACPI support]

Signed-off-by: Alexander Spyridaki 
Signed-off-by: Wei Huang 
Signed-off-by: Graeme Gregory 
Signed-off-by: Fu Wei 
---
 virt/kvm/arm/arch_timer.c | 49 +++
 1 file changed, 32 insertions(+), 17 deletions(-)

diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
index 69bca185..0a279d3 100644
--- a/virt/kvm/arm/arch_timer.c
+++ b/virt/kvm/arm/arch_timer.c
@@ -381,9 +381,30 @@ static const struct of_device_id arch_timer_of_match[] = {
{},
 };
 
-int kvm_timer_hyp_init(void)
+static int kvm_timer_get_ppi(unsigned int *ppi)
 {
struct device_node *np;
+   int ret = -EINVAL;
+
+   np = of_find_matching_node(NULL, arch_timer_of_match);
+   if (!np) {
+   ret = -ENODEV;
+   *ppi = 0;
+   goto skip_of;
+   }
+
+   *ppi = irq_of_parse_and_map(np, VIRT_PPI);
+   of_node_put(np);
+
+skip_of:
+   if (*ppi)
+   return 0;
+
+   return ret;
+}
+
+int kvm_timer_hyp_init(void)
+{
unsigned int ppi;
int err;
 
@@ -391,17 +412,11 @@ int kvm_timer_hyp_init(void)
if (!timecounter)
return -ENODEV;
 
-   np = of_find_matching_node(NULL, arch_timer_of_match);
-   if (!np) {
-   kvm_err("kvm_arch_timer: can't find DT node\n");
-   return -ENODEV;
-   }
-
-   ppi = irq_of_parse_and_map(np, 2);
-   if (!ppi) {
-   kvm_err("kvm_arch_timer: no virtual timer interrupt\n");
-   err = -EINVAL;
-   goto out;
+   err = kvm_timer_get_ppi();
+   if (err) {
+   kvm_err("kvm_arch_timer: can't find virtual timer info or "
+   "config virtual timer interrupt.\n");
+   return err;
}
 
err = request_percpu_irq(ppi, kvm_arch_timer_handler,
@@ -409,7 +424,7 @@ int kvm_timer_hyp_init(void)
if (err) {
kvm_err("kvm_arch_timer: can't request interrupt %d (%d)\n",
ppi, err);
-   goto out;
+   return err;
}
 
host_vtimer_irq = ppi;
@@ -426,14 +441,14 @@ int kvm_timer_hyp_init(void)
goto out_free;
}
 
-   kvm_info("%s IRQ%d\n", np->name, ppi);
+   kvm_info("timer IRQ%d.\n", ppi);
on_each_cpu(kvm_timer_init_interrupt, NULL, 1);
 
-   goto out;
+   return 0;
+
 out_free:
free_percpu_irq(ppi, kvm_get_running_vcpus());
-out:
-   of_node_put(np);
+
return err;
 }
 
-- 
2.5.0



[PATCH v3 6/6] kvm: arm64: Add ACPI support for virt arch timer

2016-02-01 Thread fu . wei
From: Fu Wei 

This patch adds ACPI/GTDT support for virt arch timer
using the API in GTDT driver.

Signed-off-by: Fu Wei 
---
 virt/kvm/arm/arch_timer.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
index 0a279d3..4077347 100644
--- a/virt/kvm/arm/arch_timer.c
+++ b/virt/kvm/arm/arch_timer.c
@@ -385,6 +385,9 @@ static int kvm_timer_get_ppi(unsigned int *ppi)
 {
struct device_node *np;
int ret = -EINVAL;
+#ifdef CONFIG_ACPI_GTDT
+   struct arch_timer_data data;
+#endif
 
np = of_find_matching_node(NULL, arch_timer_of_match);
if (!np) {
@@ -397,6 +400,11 @@ static int kvm_timer_get_ppi(unsigned int *ppi)
of_node_put(np);
 
 skip_of:
+#ifdef CONFIG_ACPI_GTDT
+   if (!*ppi && !gtdt_arch_timer_data_init(NULL, ))
+   *ppi = data.virt_ppi;
+#endif
+
if (*ppi)
return 0;
 
-- 
2.5.0



<    4   5   6   7   8   9   10   11   12   13   >