15ea42859SSylwester Nawrocki // SPDX-License-Identifier: GPL-2.0
25ea42859SSylwester Nawrocki /*
35ea42859SSylwester Nawrocki  * Copyright (c) 2019 Samsung Electronics Co., Ltd.
45ea42859SSylwester Nawrocki  *	      http://www.samsung.com/
55ea42859SSylwester Nawrocki  *
65ea42859SSylwester Nawrocki  * Samsung Exynos 5422 SoC Adaptive Supply Voltage support
75ea42859SSylwester Nawrocki  */
85ea42859SSylwester Nawrocki 
95ea42859SSylwester Nawrocki #include <linux/bitrev.h>
105ea42859SSylwester Nawrocki #include <linux/errno.h>
115ea42859SSylwester Nawrocki #include <linux/regmap.h>
125ea42859SSylwester Nawrocki #include <linux/soc/samsung/exynos-chipid.h>
135ea42859SSylwester Nawrocki #include <linux/slab.h>
145ea42859SSylwester Nawrocki 
155ea42859SSylwester Nawrocki #include "exynos-asv.h"
165ea42859SSylwester Nawrocki #include "exynos5422-asv.h"
175ea42859SSylwester Nawrocki 
185ea42859SSylwester Nawrocki #define ASV_GROUPS_NUM		14
195ea42859SSylwester Nawrocki #define ASV_ARM_DVFS_NUM	20
205ea42859SSylwester Nawrocki #define ASV_ARM_BIN2_DVFS_NUM	17
215ea42859SSylwester Nawrocki #define ASV_KFC_DVFS_NUM	14
225ea42859SSylwester Nawrocki #define ASV_KFC_BIN2_DVFS_NUM	12
235ea42859SSylwester Nawrocki 
245ea42859SSylwester Nawrocki /*
255ea42859SSylwester Nawrocki  * This array is a set of 4 ASV data tables, first column of each ASV table
265ea42859SSylwester Nawrocki  * contains frequency value in MHz and subsequent columns contain the CPU
275ea42859SSylwester Nawrocki  * cluster's supply voltage values in uV.
285ea42859SSylwester Nawrocki  * In order to create a set of OPPs for specific SoC revision one of the voltage
295ea42859SSylwester Nawrocki  * columns (1...14) from one of the tables (0...3) is selected during
305ea42859SSylwester Nawrocki  * initialization. There are separate ASV tables for the big (ARM) and little
315ea42859SSylwester Nawrocki  * (KFC) CPU cluster. Only OPPs which are already defined in devicetree
325ea42859SSylwester Nawrocki  * will be updated.
335ea42859SSylwester Nawrocki  */
345ea42859SSylwester Nawrocki 
355ea42859SSylwester Nawrocki static const u32 asv_arm_table[][ASV_ARM_DVFS_NUM][ASV_GROUPS_NUM + 1] = {
365ea42859SSylwester Nawrocki {
375ea42859SSylwester Nawrocki 	/* ARM 0, 1 */
385ea42859SSylwester Nawrocki 	{ 2100,    1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
395ea42859SSylwester Nawrocki 	  1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
405ea42859SSylwester Nawrocki 	{ 2000,    1312500, 1312500, 1300000, 1287500, 1275000, 1262500, 1250000,
415ea42859SSylwester Nawrocki 	  1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
425ea42859SSylwester Nawrocki 	{ 1900,    1250000, 1237500, 1225000, 1212500, 1200000, 1187500, 1175000,
435ea42859SSylwester Nawrocki 	  1162500, 1150000, 1162500, 1150000, 1137500, 1125000, 1112500 },
445ea42859SSylwester Nawrocki 	{ 1800,    1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
455ea42859SSylwester Nawrocki 	  1112500, 1100000, 1112500, 1100000, 1087500, 1075000, 1062500 },
465ea42859SSylwester Nawrocki 	{ 1700,    1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
475ea42859SSylwester Nawrocki 	  1075000, 1062500, 1075000, 1062500, 1050000, 1037500, 1025000 },
485ea42859SSylwester Nawrocki 	{ 1600,    1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
495ea42859SSylwester Nawrocki 	  1037500, 1025000, 1037500, 1025000, 1012500, 1000000, 987500 },
505ea42859SSylwester Nawrocki 	{ 1500,    1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
515ea42859SSylwester Nawrocki 	  1000000, 987500,  1000000, 987500,  975000,  962500,  950000 },
525ea42859SSylwester Nawrocki 	{ 1400,    1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
535ea42859SSylwester Nawrocki 	  975000,  962500,  975000,  962500,  950000,  937500,  925000 },
545ea42859SSylwester Nawrocki 	{ 1300,    1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000,
555ea42859SSylwester Nawrocki 	  962500,  950000,  962500,  950000,  937500,  925000,  912500 },
565ea42859SSylwester Nawrocki 	{ 1200,    1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
575ea42859SSylwester Nawrocki 	  937500,  925000,  937500,  925000,  912500,  900000,  900000 },
585ea42859SSylwester Nawrocki 	{ 1100,    1000000, 987500,  975000,  962500,  950000,  937500,  925000,
595ea42859SSylwester Nawrocki 	  912500,  900000,  900000,  900000,  900000,  900000,  900000 },
605ea42859SSylwester Nawrocki 	{ 1000,    975000,  962500,  950000,  937500,  925000,  912500,  900000,
615ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
625ea42859SSylwester Nawrocki 	{ 900,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
635ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
645ea42859SSylwester Nawrocki 	{ 800,     925000,  912500,  900000,  900000,  900000,  900000,  900000,
655ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
665ea42859SSylwester Nawrocki 	{ 700,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
675ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
685ea42859SSylwester Nawrocki 	{ 600,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
695ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
705ea42859SSylwester Nawrocki 	{ 500,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
715ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
725ea42859SSylwester Nawrocki 	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
735ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
745ea42859SSylwester Nawrocki 	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
755ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
765ea42859SSylwester Nawrocki 	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
775ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
785ea42859SSylwester Nawrocki }, {
795ea42859SSylwester Nawrocki 	/* ARM 2 */
805ea42859SSylwester Nawrocki 	{ 2100,    1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
815ea42859SSylwester Nawrocki 	  1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
825ea42859SSylwester Nawrocki 	{ 2000,    1312500, 1312500, 1312500, 1300000, 1275000, 1262500, 1250000,
835ea42859SSylwester Nawrocki 	  1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
845ea42859SSylwester Nawrocki 	{ 1900,    1262500, 1250000, 1250000, 1237500, 1212500, 1200000, 1187500,
855ea42859SSylwester Nawrocki 	  1175000, 1162500, 1175000, 1162500, 1150000, 1137500, 1125000 },
865ea42859SSylwester Nawrocki 	{ 1800,    1212500, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500,
875ea42859SSylwester Nawrocki 	  1125000, 1112500, 1125000, 1112500, 1100000, 1087500, 1075000 },
885ea42859SSylwester Nawrocki 	{ 1700,    1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
895ea42859SSylwester Nawrocki 	  1087500, 1075000, 1087500, 1075000, 1062500, 1050000, 1037500 },
905ea42859SSylwester Nawrocki 	{ 1600,    1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
915ea42859SSylwester Nawrocki 	  1050000, 1037500, 1050000, 1037500, 1025000, 1012500, 1000000 },
925ea42859SSylwester Nawrocki 	{ 1500,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
935ea42859SSylwester Nawrocki 	  1012500, 1000000, 1012500, 1000000, 987500,  975000,  962500 },
945ea42859SSylwester Nawrocki 	{ 1400,    1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000,
955ea42859SSylwester Nawrocki 	  987500,  975000,  987500,  975000,  962500,  950000,  937500 },
965ea42859SSylwester Nawrocki 	{ 1300,    1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000,
975ea42859SSylwester Nawrocki 	  962500,  950000,  962500,  950000,  937500,  925000,  912500 },
985ea42859SSylwester Nawrocki 	{ 1200,    1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
995ea42859SSylwester Nawrocki 	  937500,  925000,  937500,  925000,  912500,  900000,  900000 },
1005ea42859SSylwester Nawrocki 	{ 1100,    1000000, 987500,  975000,  962500,  950000,  937500,  925000,
1015ea42859SSylwester Nawrocki 	  912500,  900000,  900000,  900000,  900000,  900000,  900000 },
1025ea42859SSylwester Nawrocki 	{ 1000,    975000,  962500,  950000,  937500,  925000,  912500,  900000,
1035ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1045ea42859SSylwester Nawrocki 	{ 900,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
1055ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1065ea42859SSylwester Nawrocki 	{ 800,     925000,  912500,  900000,  900000,  900000,  900000,  900000,
1075ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1085ea42859SSylwester Nawrocki 	{ 700,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1095ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1105ea42859SSylwester Nawrocki 	{ 600,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1115ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1125ea42859SSylwester Nawrocki 	{ 500,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1135ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1145ea42859SSylwester Nawrocki 	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1155ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1165ea42859SSylwester Nawrocki 	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1175ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1185ea42859SSylwester Nawrocki 	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1195ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1205ea42859SSylwester Nawrocki }, {
1215ea42859SSylwester Nawrocki 	/* ARM 3 */
1225ea42859SSylwester Nawrocki 	{ 2100,    1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
1235ea42859SSylwester Nawrocki 	  1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
1245ea42859SSylwester Nawrocki 	{ 2000,    1312500, 1312500, 1300000, 1287500, 1275000, 1262500, 1250000,
1255ea42859SSylwester Nawrocki 	  1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
1265ea42859SSylwester Nawrocki 	{ 1900,    1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500,
1275ea42859SSylwester Nawrocki 	  1175000, 1162500, 1175000, 1162500, 1150000, 1137500, 1125000 },
1285ea42859SSylwester Nawrocki 	{ 1800,    1212500, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500,
1295ea42859SSylwester Nawrocki 	  1125000, 1112500, 1125000, 1112500, 1100000, 1087500, 1075000 },
1305ea42859SSylwester Nawrocki 	{ 1700,    1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
1315ea42859SSylwester Nawrocki 	  1087500, 1075000, 1087500, 1075000, 1062500, 1050000, 1037500 },
1325ea42859SSylwester Nawrocki 	{ 1600,    1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
1335ea42859SSylwester Nawrocki 	  1050000, 1037500, 1050000, 1037500, 1025000, 1012500, 1000000 },
1345ea42859SSylwester Nawrocki 	{ 1500,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
1355ea42859SSylwester Nawrocki 	  1012500, 1000000, 1012500, 1000000, 987500,  975000,  962500 },
1365ea42859SSylwester Nawrocki 	{ 1400,    1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000,
1375ea42859SSylwester Nawrocki 	  987500,  975000,  987500,  975000,  962500,  950000,  937500 },
1385ea42859SSylwester Nawrocki 	{ 1300,    1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000,
1395ea42859SSylwester Nawrocki 	  962500,  950000,  962500,  950000,  937500,  925000,  912500 },
1405ea42859SSylwester Nawrocki 	{ 1200,    1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
1415ea42859SSylwester Nawrocki 	  937500,  925000,  937500,  925000,  912500,  900000,  900000 },
1425ea42859SSylwester Nawrocki 	{ 1100,    1000000, 987500,  975000,  962500,  950000,  937500,  925000,
1435ea42859SSylwester Nawrocki 	  912500,  900000,  900000,  900000,  900000,  900000,  900000 },
1445ea42859SSylwester Nawrocki 	{ 1000,    975000,  962500,  950000,  937500,  925000,  912500,  900000,
1455ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1465ea42859SSylwester Nawrocki 	{ 900,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
1475ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1485ea42859SSylwester Nawrocki 	{ 800,     925000,  912500,  900000,  900000,  900000,  900000,  900000,
1495ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1505ea42859SSylwester Nawrocki 	{ 700,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1515ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1525ea42859SSylwester Nawrocki 	{ 600,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1535ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1545ea42859SSylwester Nawrocki 	{ 500,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1555ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1565ea42859SSylwester Nawrocki 	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1575ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1585ea42859SSylwester Nawrocki 	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1595ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1605ea42859SSylwester Nawrocki 	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1615ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1625ea42859SSylwester Nawrocki }, {
1635ea42859SSylwester Nawrocki 	/* ARM bin 2 */
1645ea42859SSylwester Nawrocki 	{ 1800,    1237500, 1225000, 1212500, 1200000, 1187500, 1175000, 1162500,
1655ea42859SSylwester Nawrocki 	  1150000, 1137500, 1150000, 1137500, 1125000, 1112500, 1100000 },
1665ea42859SSylwester Nawrocki 	{ 1700,    1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
1675ea42859SSylwester Nawrocki 	  1112500, 1100000, 1112500, 1100000, 1087500, 1075000, 1062500 },
1685ea42859SSylwester Nawrocki 	{ 1600,    1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
1695ea42859SSylwester Nawrocki 	  1075000, 1062500, 1075000, 1062500, 1050000, 1037500, 1025000 },
1705ea42859SSylwester Nawrocki 	{ 1500,    1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
1715ea42859SSylwester Nawrocki 	  1037500, 1025000, 1037500, 1025000, 1012500, 1000000, 987500 },
1725ea42859SSylwester Nawrocki 	{ 1400,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
1735ea42859SSylwester Nawrocki 	  1012500, 1000000, 1012500, 1000000, 987500,  975000,  962500 },
1745ea42859SSylwester Nawrocki 	{ 1300,    1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
1755ea42859SSylwester Nawrocki 	  1000000, 987500,  1000000, 987500,  975000,  962500,  950000 },
1765ea42859SSylwester Nawrocki 	{ 1200,    1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
1775ea42859SSylwester Nawrocki 	  975000,  962500,  975000,  962500,  950000,  937500,  925000 },
1785ea42859SSylwester Nawrocki 	{ 1100,    1037500, 1025000, 1012500, 1000000, 987500,  975000,  962500,
1795ea42859SSylwester Nawrocki 	  950000,  937500,  950000,  937500,  925000,  912500,  900000 },
1805ea42859SSylwester Nawrocki 	{ 1000,    1012500, 1000000, 987500,  975000,  962500,  950000,  937500,
1815ea42859SSylwester Nawrocki 	  925000,  912500,  925000,  912500,  900000,  900000,  900000 },
1825ea42859SSylwester Nawrocki 	{ 900,     987500,  975000,  962500,  950000,  937500,  925000,  912500,
1835ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1845ea42859SSylwester Nawrocki 	{ 800,     962500,  950000,  937500,  925000,  912500,  900000,  900000,
1855ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1865ea42859SSylwester Nawrocki 	{ 700,     937500,  925000,  912500,  900000,  900000,  900000,  900000,
1875ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1885ea42859SSylwester Nawrocki 	{ 600,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1895ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1905ea42859SSylwester Nawrocki 	{ 500,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1915ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1925ea42859SSylwester Nawrocki 	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1935ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1945ea42859SSylwester Nawrocki 	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1955ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1965ea42859SSylwester Nawrocki 	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
1975ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
1985ea42859SSylwester Nawrocki }
1995ea42859SSylwester Nawrocki };
2005ea42859SSylwester Nawrocki 
2015ea42859SSylwester Nawrocki static const u32 asv_kfc_table[][ASV_KFC_DVFS_NUM][ASV_GROUPS_NUM + 1] = {
2025ea42859SSylwester Nawrocki {
2035ea42859SSylwester Nawrocki 	/* KFC 0, 1 */
2045ea42859SSylwester Nawrocki 	{ 1500000, 1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
2055ea42859SSylwester Nawrocki 	  1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
2065ea42859SSylwester Nawrocki 	{ 1400000, 1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
2075ea42859SSylwester Nawrocki 	  1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
2085ea42859SSylwester Nawrocki 	{ 1300000, 1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
2095ea42859SSylwester Nawrocki 	  1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
2105ea42859SSylwester Nawrocki 	{ 1200000, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
2115ea42859SSylwester Nawrocki 	  1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
2125ea42859SSylwester Nawrocki 	{ 1100000, 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
2135ea42859SSylwester Nawrocki 	  1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000 },
2145ea42859SSylwester Nawrocki 	{ 1000000, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
2155ea42859SSylwester Nawrocki 	  1012500, 1000000, 987500,  975000,  962500,  950000,  937500 },
2165ea42859SSylwester Nawrocki 	{ 900000,  1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
2175ea42859SSylwester Nawrocki 	  975000,  962500,  950000,  937500,  925000,  912500,  900000 },
2185ea42859SSylwester Nawrocki 	{ 800000,  1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
2195ea42859SSylwester Nawrocki 	  937500,  925000,  912500,  900000,  900000,  900000,  900000 },
2205ea42859SSylwester Nawrocki 	{ 700000,  987500,  975000,  962500,  950000,  937500,  925000,  912500,
2215ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2225ea42859SSylwester Nawrocki 	{ 600000,  950000,  937500,  925000,  912500,  900000,  900000,  900000,
2235ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2245ea42859SSylwester Nawrocki 	{ 500000,  912500,  900000,  900000,  900000,  900000,  900000,  900000,
2255ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2265ea42859SSylwester Nawrocki 	{ 400000,  900000,  900000,  900000,  900000,  900000,  900000,  900000,
2275ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2285ea42859SSylwester Nawrocki 	{ 300000,  900000,  900000,  900000,  900000,  900000,  900000,  900000,
2295ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2305ea42859SSylwester Nawrocki 	{ 200000,  900000,  900000,  900000,  900000,  900000,  900000,  900000,
2315ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2325ea42859SSylwester Nawrocki }, {
2335ea42859SSylwester Nawrocki 	/* KFC 2 */
2345ea42859SSylwester Nawrocki 	{ 1500,    1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
2355ea42859SSylwester Nawrocki 	  1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
2365ea42859SSylwester Nawrocki 	{ 1400,    1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
2375ea42859SSylwester Nawrocki 	  1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
2385ea42859SSylwester Nawrocki 	{ 1300,    1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
2395ea42859SSylwester Nawrocki 	  1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
2405ea42859SSylwester Nawrocki 	{ 1200,    1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
2415ea42859SSylwester Nawrocki 	  1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
2425ea42859SSylwester Nawrocki 	{ 1100,    1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
2435ea42859SSylwester Nawrocki 	  1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000 },
2445ea42859SSylwester Nawrocki 	{ 1000,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
2455ea42859SSylwester Nawrocki 	  1012500, 1000000, 987500,  975000,  962500,  950000,  937500 },
2465ea42859SSylwester Nawrocki 	{ 900,     1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
2475ea42859SSylwester Nawrocki 	  975000,  962500,  950000,  937500,  925000,  912500,  900000 },
2485ea42859SSylwester Nawrocki 	{ 800,     1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
2495ea42859SSylwester Nawrocki 	  937500,  925000,  912500,  900000,  900000,  900000,  900000 },
2505ea42859SSylwester Nawrocki 	{ 700,     987500,  975000,  962500,  950000,  937500,  925000,  912500,
2515ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2525ea42859SSylwester Nawrocki 	{ 600,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
2535ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2545ea42859SSylwester Nawrocki 	{ 500,     912500,  900000,  900000,  900000,  900000,  900000,  900000,
2555ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2565ea42859SSylwester Nawrocki 	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
2575ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2585ea42859SSylwester Nawrocki 	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
2595ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2605ea42859SSylwester Nawrocki 	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
2615ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2625ea42859SSylwester Nawrocki }, {
2635ea42859SSylwester Nawrocki 	/* KFC 3 */
2645ea42859SSylwester Nawrocki 	{ 1500,    1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
2655ea42859SSylwester Nawrocki 	  1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
2665ea42859SSylwester Nawrocki 	{ 1400,    1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
2675ea42859SSylwester Nawrocki 	  1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
2685ea42859SSylwester Nawrocki 	{ 1300,    1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
2695ea42859SSylwester Nawrocki 	  1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
2705ea42859SSylwester Nawrocki 	{ 1200,    1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
2715ea42859SSylwester Nawrocki 	  1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
2725ea42859SSylwester Nawrocki 	{ 1100,    1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
2735ea42859SSylwester Nawrocki 	  1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000 },
2745ea42859SSylwester Nawrocki 	{ 1000,    1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
2755ea42859SSylwester Nawrocki 	  1012500, 1000000, 987500,  975000,  962500,  950000,  937500 },
2765ea42859SSylwester Nawrocki 	{ 900,     1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
2775ea42859SSylwester Nawrocki 	  975000,  962500,  950000,  937500,  925000,  912500,  900000 },
2785ea42859SSylwester Nawrocki 	{ 800,     1025000, 1012500, 1000000, 987500,  975000,  962500,  950000,
2795ea42859SSylwester Nawrocki 	  937500,  925000,  912500,  900000,  900000,  900000,  900000 },
2805ea42859SSylwester Nawrocki 	{ 700,     987500,  975000,  962500,  950000,  937500,  925000,  912500,
2815ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2825ea42859SSylwester Nawrocki 	{ 600,     950000,  937500,  925000,  912500,  900000,  900000,  900000,
2835ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2845ea42859SSylwester Nawrocki 	{ 500,     912500,  900000,  900000,  900000,  900000,  900000,  900000,
2855ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2865ea42859SSylwester Nawrocki 	{ 400,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
2875ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2885ea42859SSylwester Nawrocki 	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
2895ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2905ea42859SSylwester Nawrocki 	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
2915ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
2925ea42859SSylwester Nawrocki }, {
2935ea42859SSylwester Nawrocki 	/* KFC bin 2 */
2945ea42859SSylwester Nawrocki 	{ 1300,    1250000, 1237500, 1225000, 1212500, 1200000, 1187500, 1175000,
2955ea42859SSylwester Nawrocki 	  1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500 },
2965ea42859SSylwester Nawrocki 	{ 1200,    1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
2975ea42859SSylwester Nawrocki 	  1112500, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500 },
2985ea42859SSylwester Nawrocki 	{ 1100,    1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
2995ea42859SSylwester Nawrocki 	  1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000 },
3005ea42859SSylwester Nawrocki 	{ 1000,    1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
3015ea42859SSylwester Nawrocki 	  1037500, 1025000, 1012500, 1000000, 987500,  975000,  962500 },
3025ea42859SSylwester Nawrocki 	{ 900,     1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
3035ea42859SSylwester Nawrocki 	  1000000, 987500,  975000,  962500,  950000,  937500,  925000 },
3045ea42859SSylwester Nawrocki 	{ 800,     1050000, 1037500, 1025000, 1012500, 1000000, 987500,  975000,
3055ea42859SSylwester Nawrocki 	  962500,  950000,  937500,  925000,  912500,  900000,  900000 },
3065ea42859SSylwester Nawrocki 	{ 700,     1012500, 1000000, 987500,  975000,  962500,  950000,  937500,
3075ea42859SSylwester Nawrocki 	  925000,  912500,  900000,  900000,  900000,  900000,  900000 },
3085ea42859SSylwester Nawrocki 	{ 600,     975000,  962500,  950000,  937500,  925000,  912500,  900000,
3095ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
3105ea42859SSylwester Nawrocki 	{ 500,     937500,  925000,  912500,  900000,  900000,  900000,  900000,
3115ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
3125ea42859SSylwester Nawrocki 	{ 400,     925000,  912500,  900000,  900000,  900000,  900000,  900000,
3135ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
3145ea42859SSylwester Nawrocki 	{ 300,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
3155ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
3165ea42859SSylwester Nawrocki 	{ 200,     900000,  900000,  900000,  900000,  900000,  900000,  900000,
3175ea42859SSylwester Nawrocki 	  900000,  900000,  900000,  900000,  900000,  900000,  900000 },
3185ea42859SSylwester Nawrocki }
3195ea42859SSylwester Nawrocki };
3205ea42859SSylwester Nawrocki 
3215ea42859SSylwester Nawrocki static const struct asv_limit_entry __asv_limits[ASV_GROUPS_NUM] = {
3225ea42859SSylwester Nawrocki 	{ 13, 55 },
3235ea42859SSylwester Nawrocki 	{ 21, 65 },
3245ea42859SSylwester Nawrocki 	{ 25, 69 },
3255ea42859SSylwester Nawrocki 	{ 30, 72 },
3265ea42859SSylwester Nawrocki 	{ 36, 74 },
3275ea42859SSylwester Nawrocki 	{ 43, 76 },
3285ea42859SSylwester Nawrocki 	{ 51, 78 },
3295ea42859SSylwester Nawrocki 	{ 65, 80 },
3305ea42859SSylwester Nawrocki 	{ 81, 82 },
3315ea42859SSylwester Nawrocki 	{ 98, 84 },
3325ea42859SSylwester Nawrocki 	{ 119, 87 },
3335ea42859SSylwester Nawrocki 	{ 135, 89 },
3345ea42859SSylwester Nawrocki 	{ 150, 92 },
3355ea42859SSylwester Nawrocki 	{ 999, 999 },
3365ea42859SSylwester Nawrocki };
3375ea42859SSylwester Nawrocki 
exynos5422_asv_get_group(struct exynos_asv * asv)3385ea42859SSylwester Nawrocki static int exynos5422_asv_get_group(struct exynos_asv *asv)
3395ea42859SSylwester Nawrocki {
3405ea42859SSylwester Nawrocki 	unsigned int pkgid_reg, auxi_reg;
3415ea42859SSylwester Nawrocki 	int hpm, ids, i;
3425ea42859SSylwester Nawrocki 
3435ea42859SSylwester Nawrocki 	regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_PKG_ID, &pkgid_reg);
3445ea42859SSylwester Nawrocki 	regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_AUX_INFO, &auxi_reg);
3455ea42859SSylwester Nawrocki 
3465ea42859SSylwester Nawrocki 	if (asv->use_sg) {
3475ea42859SSylwester Nawrocki 		u32 sga = (pkgid_reg >> EXYNOS5422_SG_A_OFFSET) &
3485ea42859SSylwester Nawrocki 			   EXYNOS5422_SG_A_MASK;
3495ea42859SSylwester Nawrocki 
3505ea42859SSylwester Nawrocki 		u32 sgb = (pkgid_reg >> EXYNOS5422_SG_B_OFFSET) &
3515ea42859SSylwester Nawrocki 			   EXYNOS5422_SG_B_MASK;
3525ea42859SSylwester Nawrocki 
3535ea42859SSylwester Nawrocki 		if ((pkgid_reg >> EXYNOS5422_SG_BSIGN_OFFSET) &
3545ea42859SSylwester Nawrocki 		     EXYNOS5422_SG_BSIGN_MASK)
3555ea42859SSylwester Nawrocki 			return sga + sgb;
3565ea42859SSylwester Nawrocki 		else
3575ea42859SSylwester Nawrocki 			return sga - sgb;
3585ea42859SSylwester Nawrocki 	}
3595ea42859SSylwester Nawrocki 
3605ea42859SSylwester Nawrocki 	hpm = (auxi_reg >> EXYNOS5422_TMCB_OFFSET) & EXYNOS5422_TMCB_MASK;
3615ea42859SSylwester Nawrocki 	ids = (pkgid_reg >> EXYNOS5422_IDS_OFFSET) & EXYNOS5422_IDS_MASK;
3625ea42859SSylwester Nawrocki 
3635ea42859SSylwester Nawrocki 	for (i = 0; i < ASV_GROUPS_NUM; i++) {
3645ea42859SSylwester Nawrocki 		if (ids <= __asv_limits[i].ids)
3655ea42859SSylwester Nawrocki 			break;
3665ea42859SSylwester Nawrocki 		if (hpm <= __asv_limits[i].hpm)
3675ea42859SSylwester Nawrocki 			break;
3685ea42859SSylwester Nawrocki 	}
3695ea42859SSylwester Nawrocki 	if (i < ASV_GROUPS_NUM)
3705ea42859SSylwester Nawrocki 		return i;
3715ea42859SSylwester Nawrocki 
3725ea42859SSylwester Nawrocki 	return 0;
3735ea42859SSylwester Nawrocki }
3745ea42859SSylwester Nawrocki 
__asv_offset_voltage(unsigned int index)3755ea42859SSylwester Nawrocki static int __asv_offset_voltage(unsigned int index)
3765ea42859SSylwester Nawrocki {
3775ea42859SSylwester Nawrocki 	switch (index) {
3785ea42859SSylwester Nawrocki 	case 1:
3795ea42859SSylwester Nawrocki 		return 12500;
3805ea42859SSylwester Nawrocki 	case 2:
3815ea42859SSylwester Nawrocki 		return 50000;
3825ea42859SSylwester Nawrocki 	case 3:
3835ea42859SSylwester Nawrocki 		return 25000;
3845ea42859SSylwester Nawrocki 	default:
3855ea42859SSylwester Nawrocki 		return 0;
38674b01dc3STom Rix 	}
3875ea42859SSylwester Nawrocki }
3885ea42859SSylwester Nawrocki 
exynos5422_asv_offset_voltage_setup(struct exynos_asv * asv)3895ea42859SSylwester Nawrocki static void exynos5422_asv_offset_voltage_setup(struct exynos_asv *asv)
3905ea42859SSylwester Nawrocki {
3915ea42859SSylwester Nawrocki 	struct exynos_asv_subsys *subsys;
3925ea42859SSylwester Nawrocki 	unsigned int reg, value;
3935ea42859SSylwester Nawrocki 
3945ea42859SSylwester Nawrocki 	regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_AUX_INFO, &reg);
3955ea42859SSylwester Nawrocki 
3965ea42859SSylwester Nawrocki 	/* ARM offset voltage setup */
3975ea42859SSylwester Nawrocki 	subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_ARM];
3985ea42859SSylwester Nawrocki 
3995ea42859SSylwester Nawrocki 	subsys->base_volt = 1000000;
4005ea42859SSylwester Nawrocki 
4015ea42859SSylwester Nawrocki 	value = (reg >> EXYNOS5422_ARM_UP_OFFSET) & EXYNOS5422_ARM_UP_MASK;
4025ea42859SSylwester Nawrocki 	subsys->offset_volt_h = __asv_offset_voltage(value);
4035ea42859SSylwester Nawrocki 
4045ea42859SSylwester Nawrocki 	value = (reg >> EXYNOS5422_ARM_DN_OFFSET) & EXYNOS5422_ARM_DN_MASK;
4055ea42859SSylwester Nawrocki 	subsys->offset_volt_l = __asv_offset_voltage(value);
4065ea42859SSylwester Nawrocki 
4075ea42859SSylwester Nawrocki 	/* KFC offset voltage setup */
4085ea42859SSylwester Nawrocki 	subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_KFC];
4095ea42859SSylwester Nawrocki 
4105ea42859SSylwester Nawrocki 	subsys->base_volt = 1000000;
4115ea42859SSylwester Nawrocki 
4125ea42859SSylwester Nawrocki 	value = (reg >> EXYNOS5422_KFC_UP_OFFSET) & EXYNOS5422_KFC_UP_MASK;
4135ea42859SSylwester Nawrocki 	subsys->offset_volt_h = __asv_offset_voltage(value);
4145ea42859SSylwester Nawrocki 
4155ea42859SSylwester Nawrocki 	value = (reg >> EXYNOS5422_KFC_DN_OFFSET) & EXYNOS5422_KFC_DN_MASK;
4165ea42859SSylwester Nawrocki 	subsys->offset_volt_l = __asv_offset_voltage(value);
4175ea42859SSylwester Nawrocki }
4185ea42859SSylwester Nawrocki 
exynos5422_asv_opp_get_voltage(const struct exynos_asv_subsys * subsys,int level,unsigned int volt)4195ea42859SSylwester Nawrocki static int exynos5422_asv_opp_get_voltage(const struct exynos_asv_subsys *subsys,
4205ea42859SSylwester Nawrocki 					  int level, unsigned int volt)
4215ea42859SSylwester Nawrocki {
4225ea42859SSylwester Nawrocki 	unsigned int asv_volt;
4235ea42859SSylwester Nawrocki 
4245ea42859SSylwester Nawrocki 	if (level >= subsys->table.num_rows)
4255ea42859SSylwester Nawrocki 		return volt;
4265ea42859SSylwester Nawrocki 
4275ea42859SSylwester Nawrocki 	asv_volt = exynos_asv_opp_get_voltage(subsys, level,
4285ea42859SSylwester Nawrocki 					      subsys->asv->group);
4295ea42859SSylwester Nawrocki 
4305ea42859SSylwester Nawrocki 	if (volt > subsys->base_volt)
4315ea42859SSylwester Nawrocki 		asv_volt += subsys->offset_volt_h;
4325ea42859SSylwester Nawrocki 	else
4335ea42859SSylwester Nawrocki 		asv_volt += subsys->offset_volt_l;
4345ea42859SSylwester Nawrocki 
4355ea42859SSylwester Nawrocki 	return asv_volt;
4365ea42859SSylwester Nawrocki }
4375ea42859SSylwester Nawrocki 
exynos5422_asv_parse_table(unsigned int pkg_id)4385ea42859SSylwester Nawrocki static unsigned int exynos5422_asv_parse_table(unsigned int pkg_id)
4395ea42859SSylwester Nawrocki {
4405ea42859SSylwester Nawrocki 	return (pkg_id >> EXYNOS5422_TABLE_OFFSET) & EXYNOS5422_TABLE_MASK;
4415ea42859SSylwester Nawrocki }
4425ea42859SSylwester Nawrocki 
exynos5422_asv_parse_bin2(unsigned int pkg_id)4435ea42859SSylwester Nawrocki static bool exynos5422_asv_parse_bin2(unsigned int pkg_id)
4445ea42859SSylwester Nawrocki {
4455ea42859SSylwester Nawrocki 	return (pkg_id >> EXYNOS5422_BIN2_OFFSET) & EXYNOS5422_BIN2_MASK;
4465ea42859SSylwester Nawrocki }
4475ea42859SSylwester Nawrocki 
exynos5422_asv_parse_sg(unsigned int pkg_id)4485ea42859SSylwester Nawrocki static bool exynos5422_asv_parse_sg(unsigned int pkg_id)
4495ea42859SSylwester Nawrocki {
4505ea42859SSylwester Nawrocki 	return (pkg_id >> EXYNOS5422_USESG_OFFSET) & EXYNOS5422_USESG_MASK;
4515ea42859SSylwester Nawrocki }
4525ea42859SSylwester Nawrocki 
exynos5422_asv_init(struct exynos_asv * asv)4535ea42859SSylwester Nawrocki int exynos5422_asv_init(struct exynos_asv *asv)
4545ea42859SSylwester Nawrocki {
4555ea42859SSylwester Nawrocki 	struct exynos_asv_subsys *subsys;
4565ea42859SSylwester Nawrocki 	unsigned int table_index;
4575ea42859SSylwester Nawrocki 	unsigned int pkg_id;
4585ea42859SSylwester Nawrocki 	bool bin2;
4595ea42859SSylwester Nawrocki 
4605ea42859SSylwester Nawrocki 	regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_PKG_ID, &pkg_id);
4615ea42859SSylwester Nawrocki 
4625ea42859SSylwester Nawrocki 	if (asv->of_bin == 2) {
4635ea42859SSylwester Nawrocki 		bin2 = true;
4645ea42859SSylwester Nawrocki 		asv->use_sg = false;
4655ea42859SSylwester Nawrocki 	} else {
4665ea42859SSylwester Nawrocki 		asv->use_sg = exynos5422_asv_parse_sg(pkg_id);
4675ea42859SSylwester Nawrocki 		bin2 = exynos5422_asv_parse_bin2(pkg_id);
4685ea42859SSylwester Nawrocki 	}
4695ea42859SSylwester Nawrocki 
4705ea42859SSylwester Nawrocki 	asv->group = exynos5422_asv_get_group(asv);
4715ea42859SSylwester Nawrocki 	asv->table = exynos5422_asv_parse_table(pkg_id);
4725ea42859SSylwester Nawrocki 
4735ea42859SSylwester Nawrocki 	exynos5422_asv_offset_voltage_setup(asv);
4745ea42859SSylwester Nawrocki 
4755ea42859SSylwester Nawrocki 	if (bin2) {
4765ea42859SSylwester Nawrocki 		table_index = 3;
4775ea42859SSylwester Nawrocki 	} else {
4785ea42859SSylwester Nawrocki 		if (asv->table == 2 || asv->table == 3)
4795ea42859SSylwester Nawrocki 			table_index = asv->table - 1;
4805ea42859SSylwester Nawrocki 		else
4815ea42859SSylwester Nawrocki 			table_index = 0;
4825ea42859SSylwester Nawrocki 	}
4835ea42859SSylwester Nawrocki 
4845ea42859SSylwester Nawrocki 	subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_ARM];
4855ea42859SSylwester Nawrocki 	subsys->cpu_dt_compat = "arm,cortex-a15";
4865ea42859SSylwester Nawrocki 	if (bin2)
4875ea42859SSylwester Nawrocki 		subsys->table.num_rows = ASV_ARM_BIN2_DVFS_NUM;
4885ea42859SSylwester Nawrocki 	else
4895ea42859SSylwester Nawrocki 		subsys->table.num_rows = ASV_ARM_DVFS_NUM;
4905ea42859SSylwester Nawrocki 	subsys->table.num_cols = ASV_GROUPS_NUM + 1;
4915ea42859SSylwester Nawrocki 	subsys->table.buf = (u32 *)asv_arm_table[table_index];
4925ea42859SSylwester Nawrocki 
4935ea42859SSylwester Nawrocki 	subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_KFC];
4945ea42859SSylwester Nawrocki 	subsys->cpu_dt_compat = "arm,cortex-a7";
4955ea42859SSylwester Nawrocki 	if (bin2)
4965ea42859SSylwester Nawrocki 		subsys->table.num_rows = ASV_KFC_BIN2_DVFS_NUM;
4975ea42859SSylwester Nawrocki 	else
4985ea42859SSylwester Nawrocki 		subsys->table.num_rows = ASV_KFC_DVFS_NUM;
4995ea42859SSylwester Nawrocki 	subsys->table.num_cols = ASV_GROUPS_NUM + 1;
5005ea42859SSylwester Nawrocki 	subsys->table.buf = (u32 *)asv_kfc_table[table_index];
5015ea42859SSylwester Nawrocki 
5025ea42859SSylwester Nawrocki 	asv->opp_get_voltage = exynos5422_asv_opp_get_voltage;
5035ea42859SSylwester Nawrocki 
5045ea42859SSylwester Nawrocki 	return 0;
5055ea42859SSylwester Nawrocki }
506*1e3e559fSKrzysztof Kozlowski EXPORT_SYMBOL_GPL(exynos5422_asv_init);
507