Commit 4a855a95 authored by Shubhrajyoti Datta's avatar Shubhrajyoti Datta Committed by Rob Herring
Browse files

dt-bindings: mailbox: zynqmp_ipi: convert to yaml

parent 61775310
Loading
Loading
Loading
Loading
+0 −127
Original line number Diff line number Diff line
Xilinx IPI Mailbox Controller
========================================

The Xilinx IPI(Inter Processor Interrupt) mailbox controller is to manage
messaging between two Xilinx Zynq UltraScale+ MPSoC IPI agents. Each IPI
agent owns registers used for notification and buffers for message.

               +-------------------------------------+
               | Xilinx ZynqMP IPI Controller        |
               +-------------------------------------+
    +--------------------------------------------------+
ATF                    |                     |
                       |                     |
                       |                     |
    +--------------------------+             |
                       |                     |
                       |                     |
    +--------------------------------------------------+
            +------------------------------------------+
            |  +----------------+   +----------------+ |
Hardware    |  |  IPI Agent     |   |  IPI Buffers   | |
            |  |  Registers     |   |                | |
            |  |                |   |                | |
            |  +----------------+   +----------------+ |
            |                                          |
            | Xilinx IPI Agent Block                   |
            +------------------------------------------+


Controller Device Node:
===========================
Required properties:
--------------------
IPI agent node:
- compatible:		Shall be: "xlnx,zynqmp-ipi-mailbox"
- interrupt-parent:	Phandle for the interrupt controller
- interrupts:		Interrupt information corresponding to the
			interrupt-names property.
- xlnx,ipi-id:		local Xilinx IPI agent ID
- #address-cells:	number of address cells of internal IPI mailbox nodes
- #size-cells:		number of size cells of internal IPI mailbox nodes

Internal IPI mailbox node:
- reg:			IPI buffers address ranges
- reg-names:		Names of the reg resources. It should have:
			* local_request_region
			  - IPI request msg buffer written by local and read
			    by remote
			* local_response_region
			  - IPI response msg buffer written by local and read
			    by remote
			* remote_request_region
			  - IPI request msg buffer written by remote and read
			    by local
			* remote_response_region
			  - IPI response msg buffer written by remote and read
			    by local
- #mbox-cells:		Shall be 1. It contains:
			* tx(0) or rx(1) channel
- xlnx,ipi-id:		remote Xilinx IPI agent ID of which the mailbox is
			connected to.

Optional properties:
--------------------
- method:              The method of accessing the IPI agent registers.
                       Permitted values are: "smc" and "hvc". Default is
                       "smc".

Client Device Node:
===========================
Required properties:
--------------------
- mboxes:		Standard property to specify a mailbox
			(See ./mailbox.txt)
- mbox-names:		List of identifier  strings for each mailbox
			channel.

Example:
===========================
	zynqmp_ipi {
		compatible = "xlnx,zynqmp-ipi-mailbox";
		interrupt-parent = <&gic>;
		interrupts = <0 29 4>;
		xlnx,ipi-id = <0>;
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		/* APU<->RPU0 IPI mailbox controller */
		ipi_mailbox_rpu0: mailbox@ff990400 {
			reg = <0xff990400 0x20>,
			      <0xff990420 0x20>,
			      <0xff990080 0x20>,
			      <0xff9900a0 0x20>;
			reg-names = "local_request_region",
				    "local_response_region",
				    "remote_request_region",
				    "remote_response_region";
			#mbox-cells = <1>;
			xlnx,ipi-id = <1>;
		};
		/* APU<->RPU1 IPI mailbox controller */
		ipi_mailbox_rpu1: mailbox@ff990440 {
			reg = <0xff990440 0x20>,
			      <0xff990460 0x20>,
			      <0xff990280 0x20>,
			      <0xff9902a0 0x20>;
			reg-names = "local_request_region",
				    "local_response_region",
				    "remote_request_region",
				    "remote_response_region";
			#mbox-cells = <1>;
			xlnx,ipi-id = <2>;
		};
	};
	rpu0 {
		...
		mboxes = <&ipi_mailbox_rpu0 0>,
			 <&ipi_mailbox_rpu0 1>;
		mbox-names = "tx", "rx";
	};
	rpu1 {
		...
		mboxes = <&ipi_mailbox_rpu1 0>,
			 <&ipi_mailbox_rpu1 1>;
		mbox-names = "tx", "rx";
	};
+140 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: "http://devicetree.org/schemas/mailbox/xlnx,zynqmp-ipi-mailbox.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#"

title: Xilinx IPI(Inter Processor Interrupt) mailbox controller

description: |
  The Xilinx IPI(Inter Processor Interrupt) mailbox controller is to manage
  messaging between two Xilinx Zynq UltraScale+ MPSoC IPI agents. Each IPI
  agent owns registers used for notification and buffers for message.

               +-------------------------------------+
               | Xilinx ZynqMP IPI Controller        |
               +-------------------------------------+
    +--------------------------------------------------+
  TF-A                   |                     |
                         |                     |
                         |                     |
    +--------------------------+               |
                         |                     |
                         |                     |
    +--------------------------------------------------+
              +------------------------------------------+
              |  +----------------+   +----------------+ |
  Hardware    |  |  IPI Agent     |   |  IPI Buffers   | |
              |  |  Registers     |   |                | |
              |  |                |   |                | |
              |  +----------------+   +----------------+ |
              |                                          |
              | Xilinx IPI Agent Block                   |
              +------------------------------------------+

maintainers:
  - Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>

properties:
  compatible:
    const: xlnx,zynqmp-ipi-mailbox

  method:
    description: |
      The method of calling the PM-API firmware layer.
      Permitted values are.
      - "smc" : SMC #0, following the SMCCC
      - "hvc" : HVC #0, following the SMCCC

    $ref: /schemas/types.yaml#/definitions/string
    enum:
      - smc
      - hvc
    default: smc

  '#address-cells':
    const: 2

  '#size-cells':
    const: 2

  xlnx,ipi-id:
    description: |
      Remote Xilinx IPI agent ID of which the mailbox is connected to.
    $ref: /schemas/types.yaml#/definitions/uint32

  interrupts:
    maxItems: 1

  ranges: true

patternProperties:
  '^mailbox@[0-9a-f]+$':
    description: Internal ipi mailbox node
    type: object  # DT nodes are json objects
    properties:
      xlnx,ipi-id:
        description:
          Remote Xilinx IPI agent ID of which the mailbox is connected to.
        $ref: /schemas/types.yaml#/definitions/uint32

      '#mbox-cells':
        const: 1
        description:
          It contains tx(0) or rx(1) channel IPI id number.

      reg:
        maxItems: 4

      reg-names:
        items:
          - const: local_request_region
          - const: local_response_region
          - const: remote_request_region
          - const: remote_response_region

    required:
      - reg
      - reg-names
      - "#mbox-cells"

additionalProperties: false

required:
  - compatible
  - interrupts
  - '#address-cells'
  - '#size-cells'
  - xlnx,ipi-id

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

    amba {
      #address-cells = <0x2>;
      #size-cells = <0x2>;
      zynqmp-mailbox {
        compatible = "xlnx,zynqmp-ipi-mailbox";
        interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
        xlnx,ipi-id = <0>;
        #address-cells = <2>;
        #size-cells = <2>;
        ranges;

        mailbox: mailbox@ff9905c0 {
          reg = <0x0 0xff9905c0 0x0 0x20>,
                <0x0 0xff9905e0 0x0 0x20>,
                <0x0 0xff990e80 0x0 0x20>,
                <0x0 0xff990ea0 0x0 0x20>;
          reg-names = "local_request_region",
                      "local_response_region",
                      "remote_request_region",
                      "remote_response_region";
          #mbox-cells = <1>;
          xlnx,ipi-id = <4>;
        };
      };
    };

...