# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (C) 2022 Microchip Technology, Inc. and its subsidiaries
%YAML 1.2
---
$id: http://devicetree.org/schemas/watchdog/atmel,at91sam9-wdt.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Atmel Watchdog Timers

maintainers:
  - Eugen Hristev <eugen.hristev@microchip.com>

properties:
  compatible:
    const: atmel,at91sam9260-wdt

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  interrupts:
    maxItems: 1

  atmel,max-heartbeat-sec:
    description:
      Should contain the maximum heartbeat value in seconds. This value
      should be less or equal to 16. It is used to compute the WDV field.
    maximum: 16

  atmel,min-heartbeat-sec:
    description:
      Should contain the minimum heartbeat value in seconds. This value
      must be smaller than the max-heartbeat-sec value. It is used to
      compute the WDD field.
    maximum: 16

  atmel,watchdog-type:
    $ref: /schemas/types.yaml#/definitions/string
    description: |
      Should be hardware or software.
    oneOf:
      - description:
          Hardware watchdog uses the at91 watchdog reset.
        const: hardware
      - description: |
          Software watchdog uses the watchdog interrupt
          to trigger a software reset.
        const: software
    default: hardware

  atmel,reset-type:
    $ref: /schemas/types.yaml#/definitions/string
    description: |
      Should be proc or all. This is valid only when using hardware watchdog.
    oneOf:
      - description:
          Assert peripherals and processor reset signals.
        const: all
      - description:
          Assert the processor reset signal.
        const: proc
    default: all

  atmel,disable:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Should be present if you want to stop the watchdog.

  atmel,idle-halt:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      Should be present if you want to stop the watchdog when
      entering idle state.
      CAUTION: This property should be used with care, it actually makes the
      watchdog not counting when the CPU is in idle state, therefore the
      watchdog reset time depends on mean CPU usage and will not reset at all
      if the CPU stops working while it is in idle state, which is probably
      not what you want.

  atmel,dbg-halt:
    $ref: /schemas/types.yaml#/definitions/flag
    description: |
      Should be present if you want to stop the watchdog when
      entering debug state.

required:
  - compatible
  - reg
  - clocks

allOf:
  - $ref: watchdog.yaml#
  - if:
      properties:
        atmel,reset-type:
          enum:
            - all
            - proc
    then:
      properties:
        atmel,watchdog-type:
          const: hardware

dependencies:
  atmel,reset-type: ['atmel,watchdog-type']

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

    watchdog@fffffd40 {
        compatible = "atmel,at91sam9260-wdt";
        reg = <0xfffffd40 0x10>;
        interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
        clocks = <&clk32k>;
        timeout-sec = <15>;
        atmel,watchdog-type = "hardware";
        atmel,reset-type = "all";
        atmel,dbg-halt;
        atmel,idle-halt;
        atmel,max-heartbeat-sec = <16>;
        atmel,min-heartbeat-sec = <0>;
    };
