# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interrupt-controller/riscv,rpmi-system-msi.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: RISC-V RPMI system MSI service group based interrupt controller

maintainers:
  - Anup Patel <anup@brainfault.org>

description: |
  The RISC-V Platform Management Interface (RPMI) [1] defines a
  messaging protocol which is modular and extensible. The supervisor
  software can send/receive RPMI messages via SBI MPXY extension [2]
  or some dedicated supervisor-mode RPMI transport.

  The RPMI specification [1] defines system MSI service group which
  allow application processors to receive MSIs upon system events
  such as P2A doorbell, graceful shutdown/reboot request, CPU hotplug
  event, memory hotplug event, etc from the platform microcontroller.
  The supervisor software can access RPMI system MSI service group via
  SBI MPXY channel or some dedicated supervisor-mode RPMI transport.

  ===========================================
  References
  ===========================================

  [1] RISC-V Platform Management Interface (RPMI) v1.0 (or higher)
      https://github.com/riscv-non-isa/riscv-rpmi/releases

  [2] RISC-V Supervisor Binary Interface (SBI) v3.0 (or higher)
      https://github.com/riscv-non-isa/riscv-sbi-doc/releases

allOf:
  - $ref: /schemas/interrupt-controller.yaml#

properties:
  compatible:
    description:
      Intended for use by the supervisor software.
    const: riscv,rpmi-system-msi

  mboxes:
    maxItems: 1
    description:
      Mailbox channel of the underlying RPMI transport or SBI message proxy channel.

  msi-parent: true

  interrupt-controller: true

  "#interrupt-cells":
    const: 1

required:
  - compatible
  - mboxes
  - msi-parent
  - interrupt-controller
  - "#interrupt-cells"

additionalProperties: false

examples:
  - |
    interrupt-controller {
        compatible = "riscv,rpmi-system-msi";
        mboxes = <&mpxy_mbox 0x2000 0x0>;
        msi-parent = <&imsic_slevel>;
        interrupt-controller;
        #interrupt-cells = <1>;
    };
...
