From 784b6afca3ea4a2f3d995f2e82da7fb7221bdf1f Mon Sep 17 00:00:00 2001 From: Meena Pasumarthi Date: Tue, 19 Sep 2023 14:32:48 +0530 Subject: [PATCH] bindings: Adding bindings to support vm on Sun Adding bindings to support vm on Sun. This is snapshot of bindings from 'commit 999a92cd8b38 ("Merge "ARM: dts: qcom: Add platform support for VMs on Cliffs"")' from device tree project msm-6.1 branch. Change-Id: I47eda741b3451d38d215f7d95505a2bb4dd86565 Signed-off-by: Meena Pasumarthi Signed-off-by: Sahitya Tummala --- bindings/arm/msm/gh_vcpu_sched.yaml | 21 +++ .../arm/msm/qcom,gh-secure-vm-loader.yaml | 60 ++++++ bindings/gunyah/qcom,hypervisor.yml | 178 ++++++++++++++++++ bindings/gunyah/virtio_backend.yaml | 53 ++++++ bindings/gunyah/vm.yaml | 90 +++++++++ bindings/pinctrl/qcom,sun-vm-pinctrl.yaml | 31 +++ bindings/pinctrl/qcom,tlmm-vm-irq.yaml | 36 ++++ bindings/pinctrl/qcom,tlmm-vm-mem-access.yaml | 31 +++ bindings/soc/qcom/qcom,gh-dbl.yaml | 26 +++ .../soc/qcom/qcom,logbuf_vendor_hooks.yaml | 26 +++ 10 files changed, 552 insertions(+) create mode 100644 bindings/arm/msm/gh_vcpu_sched.yaml create mode 100644 bindings/arm/msm/qcom,gh-secure-vm-loader.yaml create mode 100644 bindings/gunyah/qcom,hypervisor.yml create mode 100644 bindings/gunyah/virtio_backend.yaml create mode 100644 bindings/gunyah/vm.yaml create mode 100644 bindings/pinctrl/qcom,sun-vm-pinctrl.yaml create mode 100644 bindings/pinctrl/qcom,tlmm-vm-irq.yaml create mode 100644 bindings/pinctrl/qcom,tlmm-vm-mem-access.yaml create mode 100644 bindings/soc/qcom/qcom,gh-dbl.yaml create mode 100644 bindings/soc/qcom/qcom,logbuf_vendor_hooks.yaml diff --git a/bindings/arm/msm/gh_vcpu_sched.yaml b/bindings/arm/msm/gh_vcpu_sched.yaml new file mode 100644 index 00000000..595ea137 --- /dev/null +++ b/bindings/arm/msm/gh_vcpu_sched.yaml @@ -0,0 +1,21 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/arm/msm/gh_vcpu_sched.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies, Inc. VCPU Scheduling for Secondary VMs + +maintainers: + - Murali Nalajala + - Satya Durga Srinivasu Prabhala + +properties: + compatible: + const: qcom,gh_vcpu_sched + +examples: + - | + gh_vcpu_sched { + compatible = "qcom,gh_vcpu_sched"; + }; diff --git a/bindings/arm/msm/qcom,gh-secure-vm-loader.yaml b/bindings/arm/msm/qcom,gh-secure-vm-loader.yaml new file mode 100644 index 00000000..6e56bc68 --- /dev/null +++ b/bindings/arm/msm/qcom,gh-secure-vm-loader.yaml @@ -0,0 +1,60 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/arm/msm/qcom,gh-secure-vm-loader.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Gunyah Secure Virtual Machine Loader + +maintainers: + - Prakruthi Deepak Heragu + - Sreenad Menon + +description: |+ + Secure VM loader driver is used for loading the Secure Virtual Machine + images into memory and conveying the memory details to Resource Manager. + +properties: + compatible: + const: qcom,gh-secure-vm-loader + + qcom,vmid: + $ref: '/schemas/types.yaml#/definitions/uint32' + description: Virtual Machine ID of the current virtual machine. + + qcom,pas-id: + $ref: '/schemas/types.yaml#/definitions/uint32' + description: Peripheral authentication ID of the subsystem. + + qcom,firmware-name: + $ref: '/schemas/types.yaml#/definitions/string' + description: Virtual machine name. + + memory-region: + $ref: '/schemas/types.yaml#/definitions/phandle' + description: Virtual machine memory region. + + virtio-backends: + $ref: '/schemas/types.yaml#/definitions/phandle' + description: Virtio backend devices of VM. + +required: + - compatible + - qcom,pas-id + - qcom,vmid + - qcom,firmware-name + - memory-region + - virtio-backends + +additionalProperties: false + +examples: + - | + gh-secure-vm-loader@0 { + compatible = "qcom,gh-secure-vm-loader"; + qcom,pas-id = <28>; + qcom,vmid = <45>; + qcom,firmware-name = "trustedvm"; + memory-region = <&trust_ui_vm_mem>; + virtio-backends = <&trust_ui_vm_virt_be0>; + }; diff --git a/bindings/gunyah/qcom,hypervisor.yml b/bindings/gunyah/qcom,hypervisor.yml new file mode 100644 index 00000000..515f3460 --- /dev/null +++ b/bindings/gunyah/qcom,hypervisor.yml @@ -0,0 +1,178 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/gunyah/qcom,hypervisor.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Hypervisor node to define virtual devices and other services. + +maintainers: + - Murali Nalajala + +description: |+ + Top-level node named /hypervisor that describes virtual devices and other + services. + +properties: + compatible: + oneOf: + items: + - const: qcom,gunyah-hypervisor-1.0 + - const: qcom,gunyah-hypervisor + + properties: + "#address-cells": + const: 2 + "#size-cells": + description: must be 0, because capability IDs are not memory address + ranges and do not have a size. + const: 0 + + +required: +- compatible +- "#address-cells" +- "#size-cells" + + +description: |+ + The VM Identification is a virtual node that conveys to the VM information + about itself in the context of the hypervisor-based system and may be + present as a child of the /hypervisor node + +properties: + compatible: + oneOf: + description: |+ + Must contain the VM-ID compatible string, which is provisionally + specified as "qcom,gunyah-vm-id". This should be preceded by + a string that specifies the VM ID API version, which is currently + 1.0, thus "qcom,gunyah-vm-id-1.0". + items: + - const: qcom,gunyah-vm-id-1.0 + - const: qcom,gunyah-vm-id + + properties: + qcom,vendor: + description: must contain the VM vendor string, for example: "Qualcomm Technologies, Inc.". + $ref: /schemas/types.yaml#/definitions/string + + qcom,vmid: + $ref: /schemas/types.yaml#/definitions/uint32 + description: must contain the hypervisor VMID of the VM, as + a 32-bit value + + qcom,owner-vmid: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Contains the hypervisor VMID of the VM’s owner. The owner + is the VM that allocated and created the VM. VMs directly + managed by the resource manager, such as the HLOS do not + have an owner. + + qcom,image-name: + $ref: /schemas/types.yaml#/definitions/string + description: contains the VM image name string. + + qcom,swid: + $ref: /schemas/types.yaml#/definitions/uint32 + description: must contain the Qualcomm Technologies, Inc. PIL software ID value. + +required: +- compatible +- qcom,vmid +- qcom,owner-vmid + + +description: |+ + Resource Manager node which is required to communicate to Resource + Manager VM using RM Message Queues. + +properties: + compatible: + oneOf: + description: + The resource manager RPC communicate link is required to be in the + device-tree of a VM at boot, without it, a VM may be unable to + communicate with the Resource Manager. Resource Manager VM can + support implementation of various versions i.e 1.0 or 2.0 + + items: + - const: qcom,resource-manager-1-0 + - const: qcom,resource-manager + - const: qcom,gunyah-message-queue + - const: qcom,haven-capability + + interrupts: + maxItems: 2 + + reg: + maxItems: 2 + + qcom,is-full-duplex: + $ref: /schemas/types.yaml#/definitions/flag + description: This node is a pair of message queues i.e. Tx and Rx + + qcom,tx-message-size: + $ref: /schemas/types.yaml#/definitions/uint32 + description: maximum message size in bytes, >= 240 bytes for RM IPC + + qcom,tx-queue-depth: + $ref: /schemas/types.yaml#/definitions/uint32 + description: depth(size) of transmit queue in hypervisor + + qcom,rx-message-size: + $ref: /schemas/types.yaml#/definitions/uint32 + description: maximum message size in bytes, >= 240 bytes for RM IPC + + qcom,rx-queue-depth: + $ref: /schemas/types.yaml#/definitions/uint32 + description: depth(size) of receive queue in hypervisor + + qcom,console-dev: + $ref: /schemas/types.yaml#/definitions/flag + description: if set, the resource-manger will accept console logs + from the VM + + qcom,free-irq-start: + $ref: /schemas/types.yaml#/definitions/uint32 + description: first VIRQ number which is free for virtual interrupt + use. Here SPI 0 = VIRQ 32. + +required: +- compatible +- interrupts +- reg +- qcom,is-full-duplex + +examples: + - | + hypervisor { + #address-cells = <2>; + #size-cells = <0>; + compatible = "qcom,gunyah-hypervisor-1.0", "qcom,gunyah-hypervisor", + "simple-bus"; + name = "hypervisor"; + + qcom,gunyah-vm { + compatible = "qcom,gunyah-vm-id-1.0", "qcom,gunyah-vm-id"; + qcom,vendor = "Qualcomm Technologies, Inc."; + qcom,vmid = <45>; + qcom,owner-vmid = <3>; + }; + + qcom,resource-manager-rpc@0000000000000001 { + compatible = "qcom,resource-manager-1-0", "qcom,resource-manager", + "qcom,gunyah-message-queue", "qcom,haven-capability"; + interrupts = , /* TX full IRQ */ + ; /* RX empty IRQ */ + reg = <0x00000000 0x00000000>, <0x00000000 0x00000001>; + /* TX, RX cap ids */ + qcom,is-full-duplex; + qcom,free-irq-start = <0>; + qcom,tx-queue-depth = <8>; + qcom,tx-message-size = <0xf0>; + qcom,rx-queue-depth = <8>; + qcom,rx-message-size = <0xf0>; + }; + }; + diff --git a/bindings/gunyah/virtio_backend.yaml b/bindings/gunyah/virtio_backend.yaml new file mode 100644 index 00000000..a3310694 --- /dev/null +++ b/bindings/gunyah/virtio_backend.yaml @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/gunyah/virtio_backend.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Virtio backend device for Gunyah hypervisor + +maintainers: + - Srivatsa Vaddagiri + - Sreenad Menon + +description: |+ + Configuration properties for Virtio backend device. This device is + specific to virtio support found in Gunyah hypervisor. The + device helps a virtio backend driver in one Virtual Machine + establish connection with its frontend counterpart in another Virtual + Machine, with both VMs running on Gunyah hypervisor. + +properties: + compatible: + oneOf: + - const: qcom,virtio_backend + + qcom,vm: + $ref: /schemas/types.yaml#/definitions/phandle + description: + Handle to node that describes common properties of a VM to which this + device belongs. + + qcom,label: + $ref: '/schemas/types.yaml#/definitions/uint32' + description: + Unique label associated with the device. This label is used to identify + the right device which is the target of ioctl() calls. + +required: + - compatible + - qcom,vm + - qcom,label + +example: + - | + trustedvm: trustedvm@0 { + reg = <0x0 0xdff00000 0x0 100000>; + vm_name = "trustedvm"; + }; + + virtio_backend@0 { + compatible = "qcom,virtio_backend"; + qcom,vm = <&trustedvm>; + qcom,label = <0x10200>; + }; diff --git a/bindings/gunyah/vm.yaml b/bindings/gunyah/vm.yaml new file mode 100644 index 00000000..9ae64291 --- /dev/null +++ b/bindings/gunyah/vm.yaml @@ -0,0 +1,90 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/gunyah/vm.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Virtual Machine (VM) Configuration + +maintainers: + - Venkata Narendra Kumar Gutta + - Murali Nalajala + +description: |+ + Configuration properties for Virtual Machines. This configuration + is used by virtual machine manager and know about various + properties of VM before it launch the virtual machine + +properties: + compatible: + oneOf: + - const: qcom,vm-1.0 + + vm-type: + description: type of virtual machine e.g aarch64, x86 etc + oneOf: + - const: aarch64-guest + + boot-config: + oneOf: + - const: fdt,unified + + os-type: + description: Type of the operating system being used in virtual machine + oneOf: + - const: linux + + kernel-entry-segment: + $ref: /schemas/types.yaml#/definitions/string-array + + kernel-entry-offset: + $ref: '/schemas/types.yaml#/definitions/uint64' + + vendor: + $ref: /schemas/types.yaml#/definitions/string-array + + image-name: + $ref: /schemas/types.yaml#/definitions/string-array + + qcom,pasid: + $ref: '/schemas/types.yaml#/definitions/uint64' + + memory: + properties: + "#address-cells": + const: 2 + "#size-cells": + const: 2 + base-address: + description: Base address of the memory for virtual machine + maxItems: 2 + size-min: + description: Size of the memory that is being used by the virtual machine + maxItems: 2 + + segments: + properties: + kernel: + maxItems: 4 + description: Load location offset of the kernel + dt: + maxItems: 4 + description: Load location offset of devicetree + + vcpus: + properties: + config + affinity + affinity-map + + interrupts: + properties: + config + + vdevices: + properties: + peer-default + +required: + - compatible + - image_to_be_loaded diff --git a/bindings/pinctrl/qcom,sun-vm-pinctrl.yaml b/bindings/pinctrl/qcom,sun-vm-pinctrl.yaml new file mode 100644 index 00000000..99af8f24 --- /dev/null +++ b/bindings/pinctrl/qcom,sun-vm-pinctrl.yaml @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/qcom,sun-vm-pinctrl.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies, Inc. SUN VM TLMM block + +maintainers: + - Murali Nalajala + - Satya Durga Srinivasu Prabhala + +description: | + This binding describes the Top Level Mode Multiplexer block for VM. + +properties: + compatible: + const: qcom,sun-vm-pinctrl + +examples: + - | + tlmm: pinctrl@03000000 { + compatible = "qcom,pineapple-vm-pinctrl"; + reg = <0x03000000 0xdc2000>; + interrupts-extended = <0 208 0>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + gpios = /bits/ 16 <0 1>; + }; diff --git a/bindings/pinctrl/qcom,tlmm-vm-irq.yaml b/bindings/pinctrl/qcom,tlmm-vm-irq.yaml new file mode 100644 index 00000000..8c65af4d --- /dev/null +++ b/bindings/pinctrl/qcom,tlmm-vm-irq.yaml @@ -0,0 +1,36 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/qcom,tlmm-vm-irq.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies, Inc. TLMM VM Irqchip driver binding + +maintainers: + +description: |+ + The driver acts as a parent interrupt controller for tlmm driver for VMs. + +properties: + compatible: + const: qcom,tlmm-vm-irq + + reg: + items: + - description: Base address of TLMM register space + - description: Size of TLMM register space + + interrupt-controller: true + + '#interrupt-cells': + const: 2 + +example: + - | + vm-tlmm-irq@0 { + compatible = "qcom,tlmm-vm-irq"; + reg = <0x0 0x0>; + interrupt-controller; + #interrupt-cells = <2>; + }; +... diff --git a/bindings/pinctrl/qcom,tlmm-vm-mem-access.yaml b/bindings/pinctrl/qcom,tlmm-vm-mem-access.yaml new file mode 100644 index 00000000..54f745c1 --- /dev/null +++ b/bindings/pinctrl/qcom,tlmm-vm-mem-access.yaml @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +-- +$id: http://devicetree.org/schemas/pinctrl/qcom,tlmm-vm-mem-access.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies, Inc. TLMM VM memory access driver binding + +maintainers: + +description: |+ + The driver facilitates initial memory access to TLMM VM driver. + +properties: + compatible: + const: qcom,tlmm-vm-mem-access + + qcom,master: + description: Specify if this device is on the primary virtual machine. + + tlmm-vm-gpio-list: + description: List of shared gpios. + +example: + - | + tlmm-vm-mem-access { + compatible = "qcom,tlmm-vm-mem-access"; + qcom,master; + tlmm-vm-gpio-list = <&tlmm 0 0 &tlmm 1 0>; + }; +... diff --git a/bindings/soc/qcom/qcom,gh-dbl.yaml b/bindings/soc/qcom/qcom,gh-dbl.yaml new file mode 100644 index 00000000..16f40bfe --- /dev/null +++ b/bindings/soc/qcom/qcom,gh-dbl.yaml @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/soc/qcom/qcom,gh-dbl.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: QCT Gunyah Hypervisor Doorbell Test Driver + +maintainers: + - Murali Nalajala + - Satya Durga Srinivasu Prabhala + +description: | + The Gunyah Hypervisor Test Driver is used to validate gunyah hypervisor + functionality. It includes test node for gunyah doorbell for vms. + +properties: + compatible: + const: qcom,gh-dbl + +examples: + - | + qcom,test-dbl { + compatible = "qcom,gh-dbl"; + qcom,label = <0x4>; + }; diff --git a/bindings/soc/qcom/qcom,logbuf_vendor_hooks.yaml b/bindings/soc/qcom/qcom,logbuf_vendor_hooks.yaml new file mode 100644 index 00000000..aeb5c82a --- /dev/null +++ b/bindings/soc/qcom/qcom,logbuf_vendor_hooks.yaml @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: "http://devicetree.org/schemas/soc/qcom/qcom,logbuf_vendor_hooks.yaml#" +$schema: "http://devicetree.org/meta-schemas/core.yaml#" + +title: Qualcomm Technologies, Inc. Logbuf Vendor Hooks Binding + +description: | + Logbuf Vendor Hook driver is used to register logbuf specific vendor hooks + with core kernel to copy initial kernel log to a separate buffer even though + kernel log gets overflowed. + +properties: + compatible: + items: + - const: qcom,logbuf-vendor-hooks + +required: + - compatible + +examples: + - | + logbuf: qcom,logbuf-vendor-hooks { + compatible = "qcom,logbuf-vendor-hooks"; + };