# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/soc/loongson/loongson,ls2k-pmc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Loongson-2 Power Manager controller

maintainers:
  - Yinbo Zhu <zhuyinbo@loongson.cn>

properties:
  compatible:
    oneOf:
      - items:
          - const: loongson,ls2k0500-pmc
          - const: syscon
      - items:
          - enum:
              - loongson,ls2k1000-pmc
              - loongson,ls2k2000-pmc
          - const: loongson,ls2k0500-pmc
          - const: syscon

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  loongson,suspend-address:
    $ref: /schemas/types.yaml#/definitions/uint64
    description:
      The "loongson,suspend-address" is a deep sleep state (Suspend To
      RAM) firmware entry address which was jumped from kernel and it's
      value was dependent on specific platform firmware code. In
      addition, the PM need according to it to indicate that current
      SoC whether support Suspend To RAM.

  syscon-poweroff:
    $ref: /schemas/power/reset/syscon-poweroff.yaml#
    type: object
    description:
      Node for power off method

  syscon-reboot:
    $ref: /schemas/power/reset/syscon-reboot.yaml#
    type: object
    description:
      Node for reboot method

required:
  - compatible
  - reg
  - interrupts

additionalProperties: false

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

    power-management@1fe27000 {
        compatible = "loongson,ls2k1000-pmc", "loongson,ls2k0500-pmc", "syscon";
        reg = <0x1fe27000 0x58>;
        interrupt-parent = <&liointc1>;
        interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
        loongson,suspend-address = <0x0 0x1c000500>;

        syscon-reboot {
            compatible = "syscon-reboot";
            offset = <0x30>;
            mask = <0x1>;
        };

        syscon-poweroff {
            compatible = "syscon-poweroff";
            regmap = <&pmc>;
            offset = <0x14>;
            mask = <0x3c00>;
            value = <0x3c00>;
        };
    };
