开发指南
============

设备树
----------

在设备树中增加看门狗的硬件信息描述

.. code::

	watchdog0: wdt@30100000 {
		status = "okay";
		compatible = "snps,hb_wdt";
		reg = <0x0 0x30100000 0x0 0x1000>;
		interrupt-parent = <&gic>;
		interrupts = <GIC_SPI CPUSYS_CLUSTER_MP4_WWDT_WDT_INTR_0 IRQ_TYPE_LEVEL_HIGH>, //watchdog window interrupt
		<GIC_SPI CPUSYS_CLUSTER_MP4_WWDT_SYS_RST_INTR_0 IRQ_TYPE_EDGE_RISING>; //watchdog timeout interrupt
		resets = <&smc_reset RST_IDX_IP_CPU0_WWDT_PAUSE0>, //pause
					<&smc_reset RST_IDX_IP_CPU0_WWDT_0>;  //reset
		clocks = <&scmi_clk CLK_IDX_TOP_CPU0_TIMER_WDT>;  //clock
		snps,mode = "sw";
		usage = "default";
		timeout = <20648>;
		moduleid-ofst = <4>;
		regmap-reg = <&cpu_mp4_sys_reg>;
	};


编译选项
------------

.. code::

    #
    # WDT Config
    #
    CONFIG_HB_WATCHDOG=y   //J6X Watchdog总编译选项
    CONFIG_HB_WATCHDOG_MODULE=m //J6X Watchdog是否编译成模块,m为模块，y为built-in
    CONFIG_HB_DW_WATCHDOG=y //Watchdog是否为DW_WATCHDOG，J6X Watchdog均为DW_WATCHDOG
    CONFIG_HB_WATCHDOG_MON=y     //J6X监控功能
    CONFIG_HB_WATCHDOG_IRQ_MON=y //J6X IRQ监控功能
    CONFIG_HB_WATCHDOG_KTHREAD_MON=y //J6X kthread监控功能

用户开发
------------

目前WDT1用于监控内核关中断超时，WDT2用于监控内核线程，其余WDT0、WDT3、WDT4和WDT5均支持在用户态通过ioctl接口对Watchdog进行操作，使用方式如下。
首先需要引用头文件：

.. code::

   #include "hb_wdt_ioctl.h"

.. _hb_wdt_start:

HB_WDT_START
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 0;
   ret = ioctl(fd, HB_WDT_START, &flags);

【功能描述】

 开启看门狗

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_START：WDT START的ioctl宏

-  [OUT] flags：标记信息

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_restart:

HB_WDT_RESTART
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 0;
   ret = ioctl(fd, HB_WDT_RESTART, &flags);

【功能描述】

 对看门狗进行喂狗操作

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_RESTART：WDT RESTART的ioctl宏

-  [OUT] flags：标记信息

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_pause:

HB_WDT_PAUSE
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 0;
   ret = ioctl(fd, HB_WDT_PAUSE, &flags);

【功能描述】

 暂停看门狗

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_PAUSE：WDT PAUSE的ioctl宏

-  [OUT] flags：标记信息

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_proceed:

HB_WDT_PROCEED
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 0;
   ret = ioctl(fd, HB_WDT_PROCEED, &flags);

【功能描述】

 在暂停看门狗后使看门狗继续运行

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_PROCEED：WDT PROCEED的ioctl宏

-  [OUT] flags：标记信息

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_settimeout:

HB_WDT_SETTIMEOUT
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 50;//50表示要设置的timeout值，单位为ms
   ret = ioctl(fd, HB_WDT_SETTIMEOUT, &flags);

【功能描述】

 设置看门狗的超时时间，单位为ms

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_SETTIMEOUT：WDT SETTIMEOUT的ioctl宏

-  [IN] flags：设置的timeout值，单位为ms

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_gettimeout:

HB_WDT_GETTIMEOUT
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 0;
   ret = ioctl(fd, HB_WDT_GETTIMEOUT, &flags);

【功能描述】

 获取看门狗的超时时间，单位为ms

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_GETTIMEOUT：WDT GETTIMEOUT的ioctl宏

-  [OUT] flags：获取的看门狗的超时时间，单位为ms

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_gettimeleft:

HB_WDT_GETTIMELEFT
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 0;
   ret = ioctl(fd, HB_WDT_GETTIMELEFT, &flags);

【功能描述】

 获取看门狗的本次喂狗周期的剩余超时时间，单位为ms

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_GETTIMELEFT：WDT GETTIMELEFT的ioctl宏

-  [OUT] flags：获取的看门狗的本次喂狗周期的剩余超时时间，单位为ms

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_setmode:

HB_WDT_SETMODE
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 34;//34表示要设置的看门狗的模式，34表示有第一次timeout中断的窗口狗模式，2表示没有第一次timeout中断的窗口狗模式，0表示普通狗模式
   ret = ioctl(fd, HB_WDT_SETMODE, &flags);

【功能描述】

设置看门狗的模式

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_SETMODE：WDT SETMODE的ioctl宏

-  [IN] flags：要设置的看门狗的模式

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_getmode:

HB_WDT_GETMODE
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 0;
   ret = ioctl(fd, HB_WDT_GETMODE, &flags);

【功能描述】

 获取看门狗的模式

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_GETMODE：WDT GETMODE的ioctl宏

-  [OUT] flags： 获取的看门狗的模式

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X

.. _hb_wdt_getstatus:

HB_WDT_GETSTATUS
^^^^^^^^^^^^^^^^^^

.. code::

   int flags = 0;
   ret = ioctl(fd, HB_WDT_GETSTATUS, &flags);

【功能描述】

 获取看门狗状态

【参数描述】

-  [IN] fd：WDT文件描述符

-  [IN] HB_WDT_GETSTATUS：WDT GETSTATUS的ioctl宏

-  [OUT] flags：获取的看门狗的状态

【返回值】

-  0: 成功

-  小于0: 失败

【兼容性】

 硬件：J6X
