summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWook Song <wook16.song@samsung.com>2017-11-20 15:48:30 +0900
committerWook Song <wook16.song@samsung.com>2017-11-30 17:37:52 +0900
commit12d358cf147c5ff34dd51ca62288242c7d43b8aa (patch)
treecdb5441ae23fb1e7904734966e023c260353d93c
parent2d97d79866487781434d79726305e2b65cfbd7c9 (diff)
downloadlinux-exynos-12d358cf147c5ff34dd51ca62288242c7d43b8aa.tar.gz
linux-exynos-12d358cf147c5ff34dd51ca62288242c7d43b8aa.tar.bz2
linux-exynos-12d358cf147c5ff34dd51ca62288242c7d43b8aa.zip
PM / AVS: exynos-avs: Support all ASV groups for Exynos 5433 CPU cores
Since multiple supply voltages for a operating frequency and the 'supported-hw' property are not supported by OPPv1, there is no way to support all the frequency-voltage tables under the dt-based common device driver. Therefore, the previous version of Exynos5433-specific device driver only supports the optimized OPP table for the ASV group number of 8 in version 2 of the OPP table (which means that the driver supports only one case of all). However, since there is a requirement to improve the performance under the given thermal budget for TM2 boards, it is required to support all frequency-voltage tables corresponding to their ASV groups and table versions for the Exynos 5433 CPU cores. This patch modifies the common and Exynos5433 SoC specific AVS device driver to use static frequency-voltage tables rather than a OPP table from the DT file. Change-Id: I74c21403635fc63143d60461b534828fc87cb3f4 Signed-off-by: Wook Song <wook16.song@samsung.com> Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
-rw-r--r--Documentation/devicetree/bindings/power/exynos-avs.txt32
-rw-r--r--drivers/power/avs/exynos-avs.c316
-rw-r--r--drivers/power/avs/exynos-avs.h1058
3 files changed, 1174 insertions, 232 deletions
diff --git a/Documentation/devicetree/bindings/power/exynos-avs.txt b/Documentation/devicetree/bindings/power/exynos-avs.txt
index bb1a10aa6aed..fc6da04279be 100644
--- a/Documentation/devicetree/bindings/power/exynos-avs.txt
+++ b/Documentation/devicetree/bindings/power/exynos-avs.txt
@@ -3,15 +3,12 @@
Required properties:
- compatible: should be "samsung,exynos5433-avs" for Exynos 5433.
- resource: the phandle for the resource which requires the AVS feature.
-- operating-points: For details, refer to [1].
- vdd-supply: the phandle to the regulator that provides power to the resource.
- An empty property which is one of:
- "samsung,avs-type-cpu-little"
- "samsung,avs-type-cpu-big"
is required to describe the resource type which requires the AVS feature.
-[1] Documentation/devicetree/bindings/power/opp.txt
-
Required properties for "samsung,exynos5433-avs"
- samsung,chipid-syscon: the phandle of the syscon node for the chipid
register set.
@@ -24,18 +21,6 @@ Example 1) exynos-avs nodes in exynos5433.dtsi are as follows:
compatible = "samsung,exynos5433-avs";
samsung,chipid-syscon = <&chipid>;
resource = <&cpu0>;
- operating-points = <
- 1300000 1125000
- 1200000 1075000
- 1100000 1037500
- 1000000 1000000
- 900000 950000
- 800000 925000
- 700000 887500
- 600000 862500
- 500000 837500
- 400000 800000
- >;
samsung,asv-type-cpu-little;
status = "disabled";
};
@@ -44,23 +29,6 @@ Example 1) exynos-avs nodes in exynos5433.dtsi are as follows:
compatible = "samsung,exynos5433-avs";
samsung,chipid-syscon = <&chipid>;
resource = <&cpu4>;
- operating-points = <
- 1900000 1212500
- 1800000 1175000
- 1700000 1137500
- 1600000 1087500
- 1500000 1050000
- 1400000 1025000
- 1300000 1000000
- 1200000 975000
- 1100000 950000
- 1000000 925000
- 900000 900000
- 800000 900000
- 700000 900000
- 600000 900000
- 500000 900000
- >;
samsung,avs-type-cpu-big;
status = "disabled";
};
diff --git a/drivers/power/avs/exynos-avs.c b/drivers/power/avs/exynos-avs.c
index 632ce798613a..4d2c102dbfe4 100644
--- a/drivers/power/avs/exynos-avs.c
+++ b/drivers/power/avs/exynos-avs.c
@@ -20,17 +20,20 @@
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
+#include "exynos-avs.h"
+
#define EXYNOS_AVS_5433_BASE_ADDR_OFFSET_AVS_INFO 0x4000
#define EXYNOS_AVS_5433_TBL_VER_OFFSET_FROM_AVS_INFO 0xc
#define EXYNOS_AVS_5433_FUSED_FLAG_OFFSET_FROM_AVS_INFO 0xc
-#define EXYNOS_AVS_5433_REGMAP_INDEX_CHIPID 0
#define EXYNOS_AVS_5433_SUBGRP0_MIN_FREQ_CPU_LITTLE 1200000000
#define EXYNOS_AVS_5433_SUBGRP1_MIN_FREQ_CPU_LITTLE 700000000
#define EXYNOS_AVS_5433_SUBGRP0_MIN_FREQ_CPU_BIG 1700000000
#define EXYNOS_AVS_5433_SUBGRP1_MIN_FREQ_CPU_BIG 1200000000
-#define EXYNOS_AVS_5433_SUPPORT_AVS_GROUP 8
-#define EXYNOS_AVS_5433_SUPPORT_TABLE_VER_MAX 8
-#define EXYNOS_AVS_5433_SUPPORT_TABLE_VER_MIN 6
+#define EXYNOS_AVS_5433_TABLE_1_VER_MIN 1
+#define EXYNOS_AVS_5433_TABLE_2_VER_MIN 5
+#define EXYNOS_AVS_5433_TABLE_3_VER_MIN 6
+#define EXYNOS_AVS_5433_TABLES_VER_MAX 8
+#define EXYNOS_AVS_5433_TABLES_VER_MIN 0
enum exynos_avs_type {
TYPE_CPU_LITTLE = 0,
@@ -43,25 +46,16 @@ struct exynos_avs_desc {
unsigned long val, void *data);
};
-struct exynos_avs_group {
- unsigned long freq;
- int group_num;
- int is_support;
-};
-
struct exynos_avs_drv {
enum exynos_avs_type type;
struct device_node *resource_np;
struct device *dev;
- int table_ver;
int is_fused_avs_group;
struct regulator *regulator;
- unsigned long u_volt_max;
- unsigned long u_volt_min;
const struct exynos_avs_desc *desc;
struct regmap *chipid_regmap;
struct notifier_block cpu_nb;
- struct exynos_avs_group *avs_group_table;
+ struct exynos_avs_volt_table *volt_table;
};
static inline struct device *get_first_cpu_device_of_cluster(unsigned int cpu)
@@ -69,6 +63,29 @@ static inline struct device *get_first_cpu_device_of_cluster(unsigned int cpu)
return get_cpu_device(cpumask_first(topology_core_cpumask(cpu)));
}
+static unsigned long exynos_avs_get_volt_from_volt_table(
+ const struct exynos_avs_volt_table *table, unsigned long freq)
+{
+ int i;
+
+ if (table == NULL)
+ return 0;
+
+ for (i = 0; table[i].freq != 0; i++) {
+ if (table[i].freq == freq) {
+ int avs_group = table[i].avs_group;
+
+ if ((avs_group < 0) ||
+ (avs_group >= EXYNOS_AVS_GROUP_NUM_MAX))
+ return 0;
+
+ return table[i].u_volts[avs_group];
+ }
+ }
+
+ return 0;
+}
+
/*
* exynos_avs_free_opp_table() - free OPP table of the target device
* @to: a pointer of the target device
@@ -95,93 +112,68 @@ static void exynos_avs_free_opp_table(struct device *to)
__func__, freq);
continue;
}
+
dev_pm_opp_remove(to, freq);
}
}
/*
- * exynos_avs_update_opp_table() - update OPP table of the target device to that
- * of the AVS device
+ * exynos_avs_update_opp_table() - update voltage values in the OPP table of
+ * the target device according to the values in the static table of the AVS
+ * device
* @dev: a pointer of the corresponding AVS device
* @to: a pointer of the target device
*
- * Helper function to update OPP table of the target device to that of the AVS
+ * Helper function to update voltage values in the OPP table of the target
+ * device to the values in the static (hard-coded) voltage table of the AVS
* device. In the OPP table of the target device, only OPP which has the
- * frequency value matching to the frequency value of a OPP in the OPP table of
- * the AVS device is updated.
+ * frequency value matching to the frequency value of the static table of the
+ * AVS device is updated.
*
* Note: this function only works for operating-points v1.
*/
static int exynos_avs_update_opp_table(struct device *dev, struct device *to)
{
struct exynos_avs_drv *drv = dev_get_drvdata(dev);
- struct dev_pm_opp *opp;
- struct exynos_avs_group *avs_group;
unsigned long freq, u_volt;
- int nr_opp, i, ret;
-
- nr_opp = dev_pm_opp_get_opp_count(dev);
-
- for (i = 0; i < nr_opp; i++) {
- avs_group = &drv->avs_group_table[i];
- if (!avs_group->is_support)
- continue;
+ int i, nr_opp, ret;
- freq = avs_group->freq;
+ nr_opp = dev_pm_opp_get_opp_count(to);
+ for (i = 0, freq = 0; i < nr_opp; i++, freq++) {
+ struct dev_pm_opp *opp;
rcu_read_lock();
- opp = dev_pm_opp_find_freq_exact(to, freq, true);
- rcu_read_unlock();
- if (IS_ERR(opp))
- continue;
- dev_pm_opp_remove(to, freq);
- rcu_read_lock();
- opp = dev_pm_opp_find_freq_exact(dev, freq, true);
- rcu_read_unlock();
+ opp = dev_pm_opp_find_freq_ceil(to, &freq);
if (IS_ERR(opp)) {
- ret = IS_ERR(opp);
- goto out_err;
+ rcu_read_unlock();
+ continue;
}
- u_volt = dev_pm_opp_get_voltage(opp);
+ u_volt = exynos_avs_get_volt_from_volt_table(drv->volt_table,
+ freq);
if (!u_volt) {
- ret = -EINVAL;
- goto out_err;
+ rcu_read_unlock();
+ continue;
}
- ret = dev_pm_opp_add(to, freq, u_volt);
- if (ret)
- goto out_err;
- }
-
- nr_opp = dev_pm_opp_get_opp_count(to);
- drv->u_volt_max = 0;
- drv->u_volt_min = ULONG_MAX;
- for (i = 0, freq = 0; i < nr_opp; i++, freq++) {
- rcu_read_lock();
- opp = dev_pm_opp_find_freq_ceil(to, &freq);
- if (IS_ERR(opp)) {
- ret = PTR_ERR(opp);
+ if (!regulator_is_supported_voltage(drv->regulator,
+ u_volt, u_volt)) {
rcu_read_unlock();
- goto out_err;
+ continue;
}
- u_volt = dev_pm_opp_get_voltage(opp);
rcu_read_unlock();
- if (u_volt > drv->u_volt_max)
- drv->u_volt_max = u_volt;
- if (u_volt < drv->u_volt_min)
- drv->u_volt_min = u_volt;
- }
- return 0;
+ dev_pm_opp_remove(to, freq);
+ ret = dev_pm_opp_add(to, freq, u_volt);
+ /* Failed to update opp table */
+ if (ret)
+ return ret;
-out_err:
- exynos_avs_free_opp_table(to);
- of_init_opp_table(to);
+ }
- return ret;
+ return 0;
}
static int exynos_avs_5433_get_table_ver(struct device *dev)
@@ -198,21 +190,8 @@ static int exynos_avs_5433_get_table_ver(struct device *dev)
val &= 0xF;
- /*
- * Note that, for Exynos 5433, there are four versions (that is, 0, 1,
- * 2, and 3) of the AVS table, and it is determined by the value read
- * from the specific register. The relations between the value and the
- * version of AVS table are as follows:
- * when the value is 0, version 0 of the tableis used,
- * when the value is ranged from 1 to 3, version 1 is used,
- * when the value is 5, version 2 is used,
- * and when the value is ranged from 6 to 8, version 3 is used.
- *
- * Instead of supporting all the versions of the AVS table, this driver
- * only supports the the case of version 3.
- */
- if ((val < EXYNOS_AVS_5433_SUPPORT_TABLE_VER_MIN) ||
- (val > EXYNOS_AVS_5433_SUPPORT_TABLE_VER_MAX))
+ if ((val < EXYNOS_AVS_5433_TABLES_VER_MIN) ||
+ (val > EXYNOS_AVS_5433_TABLES_VER_MAX))
return -ENODEV;
return val;
@@ -287,85 +266,6 @@ static int exynos_avs_5433_get_avs_group(struct device *dev, unsigned long freq)
return val & 0xF;
}
-/*
- * exynos_avs_5433_verify_opp_cpu() - verify OPP table of the CPU device
- *
- * @dev: a pointer of the corresponding AVS device
- * @cpu: a pointer of the target CPU device
- *
- * Helper function to verify OPP table of the target CPU device. This function
- * checks that the regulator of the target CPU device can support all the
- * voltage values of the OPP table of the device and, for the CPU frequency
- * driver, updates the transition_latency value using the maximum and minimum
- * supply voltage values of the target CPU's OPP table.
- *
- * Note: this function only works for operating-points v1.
- */
-static int exynos_avs_5433_verify_opp_cpu(struct device *dev,
- struct device *cpu)
-{
- struct exynos_avs_drv *drv;
- struct device *first_cpu;
- struct device_node *np;
- struct cpufreq_policy *policy;
- struct dev_pm_opp *opp;
- unsigned int transition_latency;
- unsigned long freq, u_volt;
- int i, nr_opp, ret;
-
- drv = dev_get_drvdata(dev);
- first_cpu = get_first_cpu_device_of_cluster(cpu->id);
-
- policy = cpufreq_cpu_get(cpu->id);
- if (!policy)
- return -ENODEV;
-
- np = of_node_get(first_cpu->of_node);
- if (!np) {
- ret = -ENODEV;
- goto out_put_cpu;
- }
-
- if (of_property_read_u32(np, "clock-latency", &transition_latency))
- transition_latency = CPUFREQ_ETERNAL;
-
- nr_opp = dev_pm_opp_get_opp_count(first_cpu);
- for (i = 0, freq = 0; i < nr_opp; i++, freq++) {
- opp = dev_pm_opp_find_freq_ceil(first_cpu, &freq);
- if (IS_ERR(opp)) {
- ret = PTR_ERR(opp);
- goto out_put;
- }
-
- u_volt = dev_pm_opp_get_voltage(opp);
- if (!regulator_is_supported_voltage(drv->regulator,
- u_volt, u_volt)) {
- ret = -EINVAL;
- goto out_put;
- }
- }
-
- /*
- * The value of transition_latency is basically determined by the value
- * specified in the 'clock-latency' device tree property of the resource
- * phandle. If ret is not 0, the transition_latency is increased by the
- * value of ret. Otherwise, it is not required to do anything.
- */
- ret = regulator_set_voltage_time(drv->regulator,
- drv->u_volt_min, drv->u_volt_max);
- if ((ret > 0) && (transition_latency != CPUFREQ_ETERNAL))
- transition_latency += ret * 1000;
-
- policy->cpuinfo.transition_latency = transition_latency;
- ret = 0;
-
-out_put:
- of_node_put(first_cpu->of_node);
-out_put_cpu:
- cpufreq_cpu_put(policy);
- return ret;
-
-}
static int exynos_avs_5433_cpu_notifier(struct notifier_block *nb,
unsigned long val, void *data)
@@ -398,9 +298,6 @@ static int exynos_avs_5433_cpu_notifier(struct notifier_block *nb,
ret = exynos_avs_update_opp_table(drv->dev, first_cpu_dev);
if (ret)
goto out_err;
- ret = exynos_avs_5433_verify_opp_cpu(drv->dev, cpu_dev);
- if (ret)
- goto out_err;
break;
case CPU_DOWN_PREPARE:
exynos_avs_free_opp_table(first_cpu_dev);
@@ -410,28 +307,26 @@ static int exynos_avs_5433_cpu_notifier(struct notifier_block *nb,
return NOTIFY_OK;
out_err:
+ /*
+ * Free the OPP table of the target device and re-init the table using
+ * DT.
+ */
exynos_avs_free_opp_table(first_cpu_dev);
of_init_opp_table(first_cpu_dev);
+
return NOTIFY_DONE;
}
-
static int exynos_avs_5433_init_avs(struct device *dev)
{
struct exynos_avs_drv *drv = dev_get_drvdata(dev);
- struct dev_pm_opp *opp;
struct device *cpu_dev;
- unsigned long freq;
- int nr_opp, i, ret;
+ int table_ver, i, ret;
drv->chipid_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
"samsung,chipid-syscon");
if (IS_ERR(drv->chipid_regmap))
return PTR_ERR(drv->chipid_regmap);
- drv->table_ver = exynos_avs_5433_get_table_ver(dev);
- if (drv->table_ver < 0)
- return drv->table_ver;
-
drv->is_fused_avs_group = exynos_avs_5433_is_fused_avs_group(dev);
if (drv->is_fused_avs_group < 0)
return drv->is_fused_avs_group;
@@ -440,29 +335,53 @@ static int exynos_avs_5433_init_avs(struct device *dev)
if (IS_ERR(drv->regulator))
return PTR_ERR(drv->regulator);
- nr_opp = dev_pm_opp_get_opp_count(dev);
- drv->avs_group_table = devm_kzalloc(dev,
- sizeof(*drv->avs_group_table) * nr_opp, GFP_KERNEL);
- if (!drv->avs_group_table)
- return -ENOMEM;
+ if ((drv->type != TYPE_CPU_LITTLE) && (drv->type != TYPE_CPU_BIG))
+ return -ENODEV;
- for (i = 0, freq = 0; i < nr_opp; i++, freq++) {
- struct exynos_avs_group *avs_group;
-
- opp = dev_pm_opp_find_freq_ceil(dev, &freq);
- if (IS_ERR(opp))
- return PTR_ERR(opp);
-
- avs_group = &drv->avs_group_table[i];
- avs_group->is_support = false;
- avs_group->freq = freq;
- avs_group->group_num = exynos_avs_5433_get_avs_group(dev, freq);
- if (avs_group->group_num == EXYNOS_AVS_5433_SUPPORT_AVS_GROUP)
- avs_group->is_support = true;
+ /*
+ * Note that, for Exynos 5433, there are four versions (that is, 0, 1,
+ * 2, and 3) of the AVS table, and it is determined by the value
+ * (in this case, table_ver) from the specific register. The relations
+ * between the value and the version of AVS table are as follows:
+ * when the value is 0, version 0 of the table is used,
+ * when the value is ranged from 1 to 4, version 1 is used,
+ * when the value is 5, version 2 is used,
+ * and when the value is ranged from 6 to 8, version 3 is used.
+ */
+ table_ver = exynos_avs_5433_get_table_ver(dev);
+ if (table_ver < 0) {
+ return table_ver;
+ } else if (table_ver >= EXYNOS_AVS_5433_TABLE_3_VER_MIN) {
+ if (drv->type == TYPE_CPU_BIG)
+ drv->volt_table = exynos_avs_big_5433_volt_table_v3;
+ else
+ drv->volt_table = exynos_avs_little_5433_volt_table_v3;
+ } else if (table_ver >= EXYNOS_AVS_5433_TABLE_2_VER_MIN) {
+ if (drv->type == TYPE_CPU_BIG)
+ drv->volt_table = exynos_avs_big_5433_volt_table_v2;
+ else
+ drv->volt_table = exynos_avs_little_5433_volt_table_v2;
+ } else if (table_ver >= EXYNOS_AVS_5433_TABLE_1_VER_MIN) {
+ if (drv->type == TYPE_CPU_BIG)
+ drv->volt_table = exynos_avs_big_5433_volt_table_v1;
+ else
+ drv->volt_table = exynos_avs_little_5433_volt_table_v1;
+ } else {
+ if (drv->type == TYPE_CPU_BIG)
+ drv->volt_table = exynos_avs_big_5433_volt_table_v0;
+ else
+ drv->volt_table = exynos_avs_little_5433_volt_table_v0;
}
- if ((drv->type != TYPE_CPU_LITTLE) && (drv->type != TYPE_CPU_BIG))
- return -ENODEV;
+ for (i = 0; drv->volt_table[i].freq != 0; i++) {
+ int avs_group = exynos_avs_5433_get_avs_group(dev,
+ drv->volt_table[i].freq);
+
+ if (avs_group < 0)
+ continue;
+
+ drv->volt_table[i].avs_group = avs_group;
+ }
for_each_online_cpu(i) {
cpu_dev = get_cpu_device(i);
@@ -470,15 +389,16 @@ static int exynos_avs_5433_init_avs(struct device *dev)
ret = exynos_avs_update_opp_table(drv->dev, cpu_dev);
if (ret)
goto out_err;
- ret = exynos_avs_5433_verify_opp_cpu(drv->dev, cpu_dev);
- if (ret)
- goto out_err;
}
}
return 0;
out_err:
+ /*
+ * Free the OPP table of the target device and re-init the table using
+ * DT.
+ */
exynos_avs_free_opp_table(cpu_dev);
of_init_opp_table(cpu_dev);
@@ -532,10 +452,6 @@ static int exynos_avs_probe(struct platform_device *pdev)
else
return -ENODEV;
- ret = of_init_opp_table(dev);
- if (ret)
- return ret;
-
dev_set_drvdata(dev, drv);
ret = drv->desc->init_avs(dev);
diff --git a/drivers/power/avs/exynos-avs.h b/drivers/power/avs/exynos-avs.h
new file mode 100644
index 000000000000..b681a5bd1e5d
--- /dev/null
+++ b/drivers/power/avs/exynos-avs.h
@@ -0,0 +1,1058 @@
+/*
+ * Samsung Exynos Adaptive Voltage Scaling
+ *
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Wook Song <wook16.song@samsung.com>
+ * Chanwoo Choi <cw00.choi@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __EXYNOS_AVS_H__
+#define __EXYNOS_AVS_H__
+
+#define EXYNOS_AVS_GROUP_NUM_MAX 16
+#define EXYNOS_AVS_INVALID_GROUP_NUM -1
+
+struct exynos_avs_volt_table {
+ const unsigned long freq;
+ const unsigned long u_volts[EXYNOS_AVS_GROUP_NUM_MAX];
+ int avs_group;
+};
+
+struct exynos_avs_volt_table exynos_avs_big_5433_volt_table_v0[] = {
+ {
+ .freq = 1900000000,
+ .u_volts = {
+ 1275000, 1262500, 1250000, 1237500,
+ 1225000, 1212500, 1200000, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1100000, 1087500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1800000000,
+ .u_volts = {
+ 1225000, 1212500, 1200000, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1050000, 1037500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1700000000,
+ .u_volts = {
+ 1187500, 1175000, 1162500, 1150000,
+ 1137500, 1125000, 1112500, 1100000,
+ 1087500, 1075000, 1062500, 1050000,
+ 1037500, 1025000, 1012500, 1000000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1600000000,
+ .u_volts = {
+ 1150000, 1137500, 1125000, 1112500,
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1500000000,
+ .u_volts = {
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1050000, 1037500,
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1400000000,
+ .u_volts = {
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1300000000,
+ .u_volts = {
+ 1075000, 1062500, 1050000, 1037500,
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ 925000, 925000, 912500, 912500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1200000000,
+ .u_volts = {
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 937500, 925000,
+ 925000, 925000, 912500, 912500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1100000000,
+ .u_volts = {
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 950000,
+ 937500, 925000, 925000, 925000,
+ 925000, 925000, 912500, 912500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1000000000,
+ .u_volts = {
+ 987500, 975000, 962500, 950000,
+ 937500, 937500, 925000, 925000,
+ 912500, 912500, 912500, 912500,
+ 912500, 912500, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 900000000,
+ .u_volts = {
+ 950000, 937500, 925000, 925000,
+ 925000, 925000, 912500, 912500,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 800000000,
+ .u_volts = {
+ 925000, 912500, 912500, 912500,
+ 912500, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 700000000,
+ .u_volts = {
+ 925000, 912500, 912500, 912500,
+ 912500, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 600000000,
+ .u_volts = {
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 500000000,
+ .u_volts = {
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ { /* sentinel */ },
+};
+
+struct exynos_avs_volt_table exynos_avs_big_5433_volt_table_v1[] = {
+ {
+ .freq = 1900000000,
+ .u_volts = {
+ 1300000, 1287500, 1275000, 1262500,
+ 1250000, 1237500, 1225000, 1212500,
+ 1200000, 1187500, 1187500, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1800000000,
+ .u_volts = {
+ 1262500, 1250000, 1237500, 1225000,
+ 1212500, 1200000, 1187500, 1175000,
+ 1162500, 1150000, 1150000, 1150000,
+ 1137500, 1125000, 1112500, 1100000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1700000000,
+ .u_volts = {
+ 1225000, 1212500, 1200000, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1112500, 1112500,
+ 1100000, 1087500, 1075000, 1062500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1600000000,
+ .u_volts = {
+ 1187500, 1175000, 1162500, 1150000,
+ 1137500, 1125000, 1112500, 1100000,
+ 1087500, 1075000, 1075000, 1075000,
+ 1062500, 1050000, 1037500, 1025000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1500000000,
+ .u_volts = {
+ 1150000, 1137500, 1125000, 1112500,
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1037500, 1037500,
+ 1025000, 1012500, 1000000, 987500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1400000000,
+ .u_volts = {
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1050000, 1037500,
+ 1025000, 1012500, 1012500, 1012500,
+ 1000000, 987500, 975000, 962500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1300000000,
+ .u_volts = {
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 987500, 987500,
+ 975000, 962500, 950000, 937500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1200000000,
+ .u_volts = {
+ 1075000, 1062500, 1050000, 1037500,
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 962500, 962500,
+ 950000, 937500, 925000, 912500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1100000000,
+ .u_volts = {
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 937500, 937500,
+ 925000, 912500, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1000000000,
+ .u_volts = {
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 912500, 912500,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 900000000,
+ .u_volts = {
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 800000000,
+ .u_volts = {
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 700000000,
+ .u_volts = {
+ 950000, 937500, 925000, 912500,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 600000000,
+ .u_volts = {
+ 925000, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 500000000,
+ .u_volts = {
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ { /* sentinel */ },
+};
+
+struct exynos_avs_volt_table exynos_avs_big_5433_volt_table_v2[] = {
+ {
+ .freq = 1900000000,
+ .u_volts = {
+ 1300000, 1287500, 1275000, 1262500,
+ 1250000, 1237500, 1225000, 1212500,
+ 1200000, 1187500, 1175000, 1162500,
+ 1150000, 1137500, 1125000, 1112500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1800000000,
+ .u_volts = {
+ 1262500, 1250000, 1237500, 1225000,
+ 1212500, 1200000, 1187500, 1175000,
+ 1162500, 1150000, 1137500, 1125000,
+ 1112500, 1100000, 1087500, 1075000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1700000000,
+ .u_volts = {
+ 1225000, 1212500, 1200000, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1050000, 1037500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1600000000,
+ .u_volts = {
+ 1187500, 1175000, 1162500, 1150000,
+ 1137500, 1125000, 1112500, 1100000,
+ 1087500, 1075000, 1062500, 1050000,
+ 1037500, 1025000, 1012500, 1000000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1500000000,
+ .u_volts = {
+ 1150000, 1137500, 1125000, 1112500,
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1400000000,
+ .u_volts = {
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1050000, 1037500,
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1300000000,
+ .u_volts = {
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1200000000,
+ .u_volts = {
+ 1075000, 1062500, 1050000, 1037500,
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1100000000,
+ .u_volts = {
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1000000000,
+ .u_volts = {
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 900000000,
+ .u_volts = {
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 800000000,
+ .u_volts = {
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 700000000,
+ .u_volts = {
+ 950000, 937500, 925000, 912500,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 600000000,
+ .u_volts = {
+ 925000, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 500000000,
+ .u_volts = {
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ { /* sentinel */ },
+};
+
+struct exynos_avs_volt_table exynos_avs_big_5433_volt_table_v3[] = {
+ {
+ .freq = 1900000000,
+ .u_volts = {
+ 1300000, 1300000, 1287500, 1275000,
+ 1262500, 1250000, 1237500, 1225000,
+ 1212500, 1200000, 1187500, 1175000,
+ 1162500, 1150000, 1137500, 1125000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1800000000,
+ .u_volts = {
+ 1275000, 1262500, 1250000, 1237500,
+ 1225000, 1212500, 1200000, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1100000, 1087500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1700000000,
+ .u_volts = {
+ 1237500, 1225000, 1212500, 1200000,
+ 1187500, 1175000, 1162500, 1150000,
+ 1137500, 1125000, 1112500, 1100000,
+ 1087500, 1075000, 1062500, 1050000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1600000000,
+ .u_volts = {
+ 1187500, 1175000, 1162500, 1150000,
+ 1137500, 1125000, 1112500, 1100000,
+ 1087500, 1075000, 1062500, 1050000,
+ 1037500, 1025000, 1012500, 1000000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1500000000,
+ .u_volts = {
+ 1150000, 1137500, 1125000, 1112500,
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1400000000,
+ .u_volts = {
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1050000, 1037500,
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1300000000,
+ .u_volts = {
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1200000000,
+ .u_volts = {
+ 1075000, 1062500, 1050000, 1037500,
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1100000000,
+ .u_volts = {
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1000000000,
+ .u_volts = {
+ 1025000, 1012500, 1000000, 987500,
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 900000000,
+ .u_volts = {
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 800000000,
+ .u_volts = {
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 700000000,
+ .u_volts = {
+ 950000, 937500, 925000, 912500,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 600000000,
+ .u_volts = {
+ 925000, 912500, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 500000000,
+ .u_volts = {
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ 900000, 900000, 900000, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ { /* sentinel */ },
+};
+
+struct exynos_avs_volt_table exynos_avs_little_5433_volt_table_v0[] = {
+ {
+ .freq = 1300000000,
+ .u_volts = {
+ 1162500, 1150000, 1125000, 1100000,
+ 1087500, 1075000, 1062500, 1050000,
+ 1037500, 1025000, 1012500, 1000000,
+ 987500, 975000, 962500, 950000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1200000000,
+ .u_volts = {
+ 1125000, 1112500, 1087500, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1100000000,
+ .u_volts = {
+ 1087500, 1075000, 1050000, 1025000,
+ 1012500, 1000000, 987500, 975000,
+ 962500, 950000, 937500, 925000,
+ 912500, 900000, 887500, 875000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1000000000,
+ .u_volts = {
+ 1062500, 1050000, 1025000, 1000000,
+ 987500, 975000, 962500, 950000,
+ 937500, 925000, 912500, 900000,
+ 887500, 875000, 862500, 850000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 900000000,
+ .u_volts = {
+ 1037500, 1025000, 1000000, 975000,
+ 962500, 950000, 937500, 925000,
+ 912500, 900000, 887500, 875000,
+ 862500, 850000, 837500, 825000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 800000000,
+ .u_volts = {
+ 1012500, 1000000, 975000, 950000,
+ 937500, 925000, 912500, 900000,
+ 887500, 875000, 862500, 850000,
+ 837500, 825000, 812500, 800000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 700000000,
+ .u_volts = {
+ 987500, 975000, 950000, 925000,
+ 912500, 900000, 887500, 875000,
+ 862500, 850000, 837500, 825000,
+ 812500, 800000, 800000, 800000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 600000000,
+ .u_volts = {
+ 962500, 950000, 925000, 900000,
+ 887500, 875000, 862500, 850000,
+ 837500, 825000, 812500, 800000,
+ 800000, 800000, 800000, 800000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 500000000,
+ .u_volts = {
+ 937500, 925000, 900000, 875000,
+ 862500, 850000, 837500, 825000,
+ 812500, 800000, 800000, 800000,
+ 800000, 800000, 800000, 800000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 400000000,
+ .u_volts = {
+ 912500, 900000, 875000, 850000,
+ 837500, 825000, 812500, 800000,
+ 800000, 800000, 800000, 800000,
+ 800000, 800000, 800000, 800000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ { /* sentinel */ },
+};
+
+struct exynos_avs_volt_table exynos_avs_little_5433_volt_table_v1[] = {
+ {
+ .freq = 1300000000,
+ .u_volts = {
+ 1225000, 1212500, 1200000, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1112500, 1112500,
+ 1100000, 1087500, 1075000, 1062500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1200000000,
+ .u_volts = {
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1062500, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1100000000,
+ .u_volts = {
+ 1137500, 1125000, 1112500, 1100000,
+ 1087500, 1075000, 1062500, 1050000,
+ 1037500, 1025000, 1025000, 1025000,
+ 1012500, 1000000, 987500, 975000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1000000000,
+ .u_volts = {
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 987500, 987500,
+ 975000, 962500, 950000, 937500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 900000000,
+ .u_volts = {
+ 1062500, 1050000, 1037500, 1025000,
+ 1012500, 1000000, 987500, 975000,
+ 962500, 950000, 950000, 950000,
+ 937500, 925000, 912500, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 800000000,
+ .u_volts = {
+ 1037500, 1025000, 1012500, 1000000,
+ 987500, 975000, 962500, 950000,
+ 937500, 925000, 925000, 925000,
+ 912500, 900000, 887500, 875000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 700000000,
+ .u_volts = {
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ 900000, 887500, 887500, 887500,
+ 875000, 862500, 850000, 837500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 600000000,
+ .u_volts = {
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 887500,
+ 875000, 862500, 862500, 862500,
+ 850000, 837500, 825000, 812500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 500000000,
+ .u_volts = {
+ 950000, 937500, 925000, 912500,
+ 900000, 887500, 875000, 862500,
+ 850000, 837500, 837500, 837500,
+ 825000, 812500, 800000, 787500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 400000000,
+ .u_volts = {
+ 912500, 900000, 887500, 875000,
+ 862500, 850000, 837500, 825000,
+ 812500, 800000, 800000, 800000,
+ 787500, 775000, 762500, 750000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ { /* sentinel */ },
+};
+
+struct exynos_avs_volt_table exynos_avs_little_5433_volt_table_v2[] = {
+ {
+ .freq = 1300000000,
+ .u_volts = {
+ 1225000, 1212500, 1200000, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1112500, 1112500,
+ 1100000, 1087500, 1075000, 1062500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1200000000,
+ .u_volts = {
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1062500, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1100000000,
+ .u_volts = {
+ 1137500, 1125000, 1112500, 1100000,
+ 1087500, 1075000, 1062500, 1050000,
+ 1037500, 1025000, 1025000, 1025000,
+ 1012500, 1000000, 987500, 975000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1000000000,
+ .u_volts = {
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 987500, 987500,
+ 975000, 962500, 950000, 937500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 900000000,
+ .u_volts = {
+ 1062500, 1050000, 1037500, 1025000,
+ 1012500, 1000000, 987500, 975000,
+ 962500, 950000, 950000, 950000,
+ 937500, 925000, 912500, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 800000000,
+ .u_volts = {
+ 1037500, 1025000, 1012500, 1000000,
+ 987500, 975000, 962500, 950000,
+ 937500, 925000, 925000, 925000,
+ 912500, 900000, 887500, 875000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 700000000,
+ .u_volts = {
+ 1000000, 987500, 975000, 962500,
+ 950000, 937500, 925000, 912500,
+ 900000, 887500, 887500, 887500,
+ 875000, 862500, 850000, 837500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 600000000,
+ .u_volts = {
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 887500,
+ 875000, 862500, 862500, 862500,
+ 850000, 837500, 825000, 812500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 500000000,
+ .u_volts = {
+ 950000, 937500, 925000, 912500,
+ 900000, 887500, 875000, 862500,
+ 850000, 837500, 837500, 837500,
+ 825000, 812500, 800000, 787500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 400000000,
+ .u_volts = {
+ 912500, 900000, 887500, 875000,
+ 862500, 850000, 837500, 825000,
+ 812500, 800000, 800000, 800000,
+ 787500, 775000, 762500, 750000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ { /* sentinel */ },
+};
+
+struct exynos_avs_volt_table exynos_avs_little_5433_volt_table_v3[] = {
+ {
+ .freq = 1300000000,
+ .u_volts = {
+ 1225000, 1212500, 1200000, 1187500,
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1112500, 1112500,
+ 1100000, 1087500, 1075000, 1062500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1200000000,
+ .u_volts = {
+ 1175000, 1162500, 1150000, 1137500,
+ 1125000, 1112500, 1100000, 1087500,
+ 1075000, 1062500, 1062500, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1100000000,
+ .u_volts = {
+ 1137500, 1125000, 1112500, 1100000,
+ 1087500, 1075000, 1062500, 1050000,
+ 1037500, 1025000, 1025000, 1025000,
+ 1012500, 1000000, 987500, 975000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 1000000000,
+ .u_volts = {
+ 1100000, 1087500, 1075000, 1062500,
+ 1050000, 1037500, 1025000, 1012500,
+ 1000000, 987500, 987500, 987500,
+ 975000, 962500, 950000, 937500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 900000000,
+ .u_volts = {
+ 1037500, 1025000, 1012500, 1000000,
+ 987500, 975000, 962500, 950000,
+ 950000, 937500, 937500, 950000,
+ 937500, 925000, 912500, 900000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 800000000,
+ .u_volts = {
+ 1012500, 1000000, 987500, 975000,
+ 962500, 950000, 937500, 925000,
+ 925000, 912500, 912500, 925000,
+ 912500, 900000, 887500, 875000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 700000000,
+ .u_volts = {
+ 975000, 962500, 950000, 937500,
+ 925000, 912500, 900000, 887500,
+ 887500, 875000, 875000, 887500,
+ 875000, 862500, 850000, 837500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 600000000,
+ .u_volts = {
+ 950000, 937500, 925000, 912500,
+ 900000, 887500, 875000, 862500,
+ 862500, 850000, 850000, 862500,
+ 850000, 837500, 825000, 812500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 500000000,
+ .u_volts = {
+ 925000, 912500, 900000, 887500,
+ 875000, 862500, 850000, 837500,
+ 837500, 825000, 825000, 837500,
+ 825000, 812500, 800000, 787500,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ {
+ .freq = 400000000,
+ .u_volts = {
+ 887500, 875000, 862500, 850000,
+ 837500, 825000, 812500, 800000,
+ 800000, 787500, 787500, 800000,
+ 787500, 775000, 762500, 750000,
+ },
+ .avs_group = EXYNOS_AVS_INVALID_GROUP_NUM,
+ },
+ { /* sentinel */ },
+};
+
+#endif /* __EXYNOS_AVS_H__ */