blob: 1ff9903c1d213cc53fbcea959c201a5950b6e4ea [file] [log] [blame] [edit]
# 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>;
};
};