| # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/cpufreq/virtual,android-v-only-cpufreq.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Android-V-Only Virtual CPUFreq |
| |
| maintainers: |
| - David Dai <davidai@google.com> |
| - Saravana Kannan <saravanak@google.com> |
| |
| description: |
| Android-V-Only Virtual CPUFreq is a virtualized driver in guest kernels that |
| sends frequency selection of its vCPUs as a hint to the host through MMIO |
| regions. Each vCPU is associated with a frequency domain which can be shared |
| with other vCPUs. Each frequency domain has its own set of registers for |
| frequency controls. |
| |
| properties: |
| compatible: |
| const: virtual,android-v-only-cpufreq |
| |
| reg: |
| maxItems: 1 |
| description: |
| Address and size of region containing frequency controls for each of the |
| frequency domains. Regions for each frequency domain is placed |
| contiguously and contain registers for controlling DVFS(Dynamic Frequency |
| and Voltage) characteristics. The size of the region is proportional to |
| total number of frequency domains. This device also needs the CPUs to |
| list their OPPs using operating-points-v2 tables. The OPP tables for the |
| CPUs should use normalized "frequency" values where the OPP with the |
| highest performance among all the vCPUs is listed as 1024 KHz. The rest |
| of the frequencies of all the vCPUs should be normalized based on their |
| performance relative to that 1024 KHz OPP. This makes it much easier to |
| migrate the VM across systems which might have different physical CPU |
| OPPs. |
| |
| required: |
| - compatible |
| - reg |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| // This example shows a two CPU configuration with a frequency domain |
| // for each CPU showing normalized performance points. |
| cpus { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| cpu@0 { |
| compatible = "arm,armv8"; |
| device_type = "cpu"; |
| reg = <0x0>; |
| operating-points-v2 = <&opp_table0>; |
| }; |
| |
| cpu@1 { |
| compatible = "arm,armv8"; |
| device_type = "cpu"; |
| reg = <0x0>; |
| operating-points-v2 = <&opp_table1>; |
| }; |
| }; |
| |
| opp_table0: opp-table-0 { |
| compatible = "operating-points-v2"; |
| |
| opp64000 { opp-hz = /bits/ 64 <64000>; }; |
| opp128000 { opp-hz = /bits/ 64 <128000>; }; |
| opp192000 { opp-hz = /bits/ 64 <192000>; }; |
| opp256000 { opp-hz = /bits/ 64 <256000>; }; |
| opp320000 { opp-hz = /bits/ 64 <320000>; }; |
| opp384000 { opp-hz = /bits/ 64 <384000>; }; |
| opp425000 { opp-hz = /bits/ 64 <425000>; }; |
| }; |
| |
| opp_table1: opp-table-1 { |
| compatible = "operating-points-v2"; |
| |
| opp64000 { opp-hz = /bits/ 64 <64000>; }; |
| opp128000 { opp-hz = /bits/ 64 <128000>; }; |
| opp192000 { opp-hz = /bits/ 64 <192000>; }; |
| opp256000 { opp-hz = /bits/ 64 <256000>; }; |
| opp320000 { opp-hz = /bits/ 64 <320000>; }; |
| opp384000 { opp-hz = /bits/ 64 <384000>; }; |
| opp448000 { opp-hz = /bits/ 64 <448000>; }; |
| opp512000 { opp-hz = /bits/ 64 <512000>; }; |
| opp576000 { opp-hz = /bits/ 64 <576000>; }; |
| opp640000 { opp-hz = /bits/ 64 <640000>; }; |
| opp704000 { opp-hz = /bits/ 64 <704000>; }; |
| opp768000 { opp-hz = /bits/ 64 <768000>; }; |
| opp832000 { opp-hz = /bits/ 64 <832000>; }; |
| opp896000 { opp-hz = /bits/ 64 <896000>; }; |
| opp960000 { opp-hz = /bits/ 64 <960000>; }; |
| opp1024000 { opp-hz = /bits/ 64 <1024000>; }; |
| |
| }; |
| |
| soc { |
| #address-cells = <1>; |
| #size-cells = <1>; |
| |
| cpufreq@1040000 { |
| compatible = "virtual,android-v-only-cpufreq"; |
| reg = <0x1040000 0x10>; |
| }; |
| }; |