Commit cd425807 authored by AngeloGioacchino Del Regno's avatar AngeloGioacchino Del Regno Committed by Rob Herring
Browse files

dt-bindings: mailbox: Convert mtk-gce to DT schema



Convert the mtk-gce mailbox binding to DT schema format.

During the conversion, the examples for client device/mutex nodes
were removed, as these are found in their respective bindings:
arm/mediatek/mediatek,mmsys.yaml for "mediatek,mt8173-mmsys"
soc/mediatek/mediatek,mutex.yaml for "mediatek,mt8173-disp-mutex"

Signed-off-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20220921090006.37642-1-angelogioacchino.delregno@collabora.com


Signed-off-by: default avatarRob Herring <robh@kernel.org>
parent 88269151
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -52,7 +52,8 @@ properties:
    description:
      Using mailbox to communicate with GCE, it should have this
      property and list of phandle, mailbox specifiers. See
      Documentation/devicetree/bindings/mailbox/mtk-gce.txt for details.
      Documentation/devicetree/bindings/mailbox/mediatek,gce-mailbox.yaml
      for details.
    $ref: /schemas/types.yaml#/definitions/phandle-array

  mediatek,gce-client-reg:
+85 −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/mediatek,gce-mailbox.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Mediatek Global Command Engine Mailbox

maintainers:
  - Houlong Wei <houlong.wei@mediatek.com>

description:
  The Global Command Engine (GCE) is used to help read/write registers with
  critical time limitation, such as updating display configuration during the
  vblank. The GCE can be used to implement the Command Queue (CMDQ) driver.

properties:
  compatible:
    enum:
      - mediatek,mt6779-gce
      - mediatek,mt8173-gce
      - mediatek,mt8183-gce
      - mediatek,mt8186-gce
      - mediatek,mt8192-gce
      - mediatek,mt8195-gce

  "#mbox-cells":
    const: 2
    description:
      The first cell describes the Thread ID of the GCE,
      the second cell describes the priority of the GCE thread

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    items:
      - description: Global Command Engine clock

  clock-names:
    items:
      - const: gce

required:
  - compatible
  - "#mbox-cells"
  - reg
  - interrupts
  - clocks

allOf:
  - if:
      not:
        properties:
          compatible:
            contains:
              const: mediatek,mt8195-gce
    then:
      required:
        - clock-names

additionalProperties: false

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

    soc {
        #address-cells = <2>;
        #size-cells = <2>;

        gce: mailbox@10212000 {
            compatible = "mediatek,mt8173-gce";
            reg = <0 0x10212000 0 0x1000>;
            interrupts = <GIC_SPI 135 IRQ_TYPE_LEVEL_LOW>;
            #mbox-cells = <2>;
            clocks = <&infracfg CLK_INFRA_GCE>;
            clock-names = "gce";
        };
    };
+0 −82
Original line number Diff line number Diff line
MediaTek GCE
===============

The Global Command Engine (GCE) is used to help read/write registers with
critical time limitation, such as updating display configuration during the
vblank. The GCE can be used to implement the Command Queue (CMDQ) driver.

CMDQ driver uses mailbox framework for communication. Please refer to
mailbox.txt for generic information about mailbox device-tree bindings.

Required properties:
- compatible: can be "mediatek,mt8173-gce", "mediatek,mt8183-gce",
  "mediatek,mt8186-gce", "mediatek,mt8192-gce", "mediatek,mt8195-gce" or
  "mediatek,mt6779-gce".
- reg: Address range of the GCE unit
- interrupts: The interrupt signal from the GCE block
- clock: Clocks according to the common clock binding
- clock-names: Must be "gce" to stand for GCE clock
- #mbox-cells: Should be 2.
	<&phandle channel priority>
	phandle: Label name of a gce node.
	channel: Channel of mailbox. Be equal to the thread id of GCE.
	priority: Priority of GCE thread.

Required properties for a client device:
- mboxes: Client use mailbox to communicate with GCE, it should have this
  property and list of phandle, mailbox specifiers.
Optional properties for a client device:
- mediatek,gce-client-reg: Specify the sub-system id which is corresponding
  to the register address, it should have this property and list of phandle,
  sub-system specifiers.
  <&phandle subsys_number start_offset size>
  phandle: Label name of a gce node.
  subsys_number: specify the sub-system id which is corresponding
                 to the register address.
  start_offset: the start offset of register address that GCE can access.
  size: the total size of register address that GCE can access.

Optional properties for a client mutex node:
- mediatek,gce-events: GCE events used by clients. The event numbers are
  defined in 'dt-bindings/gce/<chip>-gce.h'.

Some vaules of properties are defined in 'dt-bindings/gce/mt8173-gce.h',
'dt-bindings/gce/mt8183-gce.h', 'dt-bindings/gce/mt8186-gce.h'
'dt-bindings/gce/mt8192-gce.h', 'dt-bindings/gce/mt8195-gce.h' or
'dt-bindings/gce/mt6779-gce.h'.
Such as sub-system ids, thread priority, event ids.

Example:

	gce: gce@10212000 {
		compatible = "mediatek,mt8173-gce";
		reg = <0 0x10212000 0 0x1000>;
		interrupts = <GIC_SPI 135 IRQ_TYPE_LEVEL_LOW>;
		clocks = <&infracfg CLK_INFRA_GCE>;
		clock-names = "gce";
		#mbox-cells = <2>;
	};

Example for a client device:

	mmsys: clock-controller@14000000 {
		compatible = "mediatek,mt8173-mmsys";
		mboxes = <&gce 0 CMDQ_THR_PRIO_LOWEST>,
			 <&gce 1 CMDQ_THR_PRIO_LOWEST>;
		mutex-event-eof = <CMDQ_EVENT_MUTEX0_STREAM_EOF
				CMDQ_EVENT_MUTEX1_STREAM_EOF>;
		mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x3000 0x1000>,
					  <&gce SUBSYS_1401XXXX 0x2000 0x100>;
		...
	};

Example for a client mutex node:
	mutex: mutex@14020000 {
		compatible = "mediatek,mt8173-disp-mutex";
		reg = <0 0x14020000 0 0x1000>;
		interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_LOW>;
		power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>;
		clocks = <&mmsys CLK_MM_MUTEX_32K>;
		mediatek,gce-events = <CMDQ_EVENT_MUTEX0_STREAM_EOF>,
				      <CMDQ_EVENT_MUTEX1_STREAM_EOF>;
	};