^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2019 Samsung Electronics Co., Ltd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * http://www.samsung.com/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Samsung Exynos 5422 SoC Adaptive Supply Voltage support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/bitrev.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/regmap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/soc/samsung/exynos-chipid.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/slab.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include "exynos-asv.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include "exynos5422-asv.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define ASV_GROUPS_NUM 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define ASV_ARM_DVFS_NUM 20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define ASV_ARM_BIN2_DVFS_NUM 17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define ASV_KFC_DVFS_NUM 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define ASV_KFC_BIN2_DVFS_NUM 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * This array is a set of 4 ASV data tables, first column of each ASV table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * contains frequency value in MHz and subsequent columns contain the CPU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * cluster's supply voltage values in uV.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * In order to create a set of OPPs for specific SoC revision one of the voltage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * columns (1...14) from one of the tables (0...3) is selected during
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * initialization. There are separate ASV tables for the big (ARM) and little
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * (KFC) CPU cluster. Only OPPs which are already defined in devicetree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * will be updated.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) static const u32 asv_arm_table[][ASV_ARM_DVFS_NUM][ASV_GROUPS_NUM + 1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) /* ARM 0, 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) { 2100, 1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) { 2000, 1312500, 1312500, 1300000, 1287500, 1275000, 1262500, 1250000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) { 1900, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500, 1175000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 1162500, 1150000, 1162500, 1150000, 1137500, 1125000, 1112500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) { 1800, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 1112500, 1100000, 1112500, 1100000, 1087500, 1075000, 1062500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) { 1700, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 1075000, 1062500, 1075000, 1062500, 1050000, 1037500, 1025000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) { 1600, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 1037500, 1025000, 1037500, 1025000, 1012500, 1000000, 987500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) { 1500, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 1000000, 987500, 1000000, 987500, 975000, 962500, 950000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) { 1400, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 975000, 962500, 975000, 962500, 950000, 937500, 925000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) { 1300, 1050000, 1037500, 1025000, 1012500, 1000000, 987500, 975000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 962500, 950000, 962500, 950000, 937500, 925000, 912500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) { 1200, 1025000, 1012500, 1000000, 987500, 975000, 962500, 950000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 937500, 925000, 937500, 925000, 912500, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) { 1100, 1000000, 987500, 975000, 962500, 950000, 937500, 925000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 912500, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) { 1000, 975000, 962500, 950000, 937500, 925000, 912500, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) { 900, 950000, 937500, 925000, 912500, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) { 800, 925000, 912500, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) { 700, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) { 600, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) { 500, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) { 400, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) { 300, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) { 200, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) /* ARM 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) { 2100, 1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) { 2000, 1312500, 1312500, 1312500, 1300000, 1275000, 1262500, 1250000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) { 1900, 1262500, 1250000, 1250000, 1237500, 1212500, 1200000, 1187500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 1175000, 1162500, 1175000, 1162500, 1150000, 1137500, 1125000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) { 1800, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) 1125000, 1112500, 1125000, 1112500, 1100000, 1087500, 1075000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) { 1700, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) 1087500, 1075000, 1087500, 1075000, 1062500, 1050000, 1037500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) { 1600, 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) 1050000, 1037500, 1050000, 1037500, 1025000, 1012500, 1000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) { 1500, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) 1012500, 1000000, 1012500, 1000000, 987500, 975000, 962500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) { 1400, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) 987500, 975000, 987500, 975000, 962500, 950000, 937500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) { 1300, 1050000, 1037500, 1025000, 1012500, 1000000, 987500, 975000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) 962500, 950000, 962500, 950000, 937500, 925000, 912500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) { 1200, 1025000, 1012500, 1000000, 987500, 975000, 962500, 950000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) 937500, 925000, 937500, 925000, 912500, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) { 1100, 1000000, 987500, 975000, 962500, 950000, 937500, 925000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 912500, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) { 1000, 975000, 962500, 950000, 937500, 925000, 912500, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) { 900, 950000, 937500, 925000, 912500, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) { 800, 925000, 912500, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) { 700, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) { 600, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) { 500, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) { 400, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) { 300, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) { 200, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /* ARM 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) { 2100, 1362500, 1362500, 1350000, 1337500, 1325000, 1312500, 1300000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) { 2000, 1312500, 1312500, 1300000, 1287500, 1275000, 1262500, 1250000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 1237500, 1225000, 1237500, 1225000, 1212500, 1200000, 1187500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) { 1900, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 1175000, 1162500, 1175000, 1162500, 1150000, 1137500, 1125000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) { 1800, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 1125000, 1112500, 1125000, 1112500, 1100000, 1087500, 1075000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) { 1700, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 1087500, 1075000, 1087500, 1075000, 1062500, 1050000, 1037500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) { 1600, 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 1050000, 1037500, 1050000, 1037500, 1025000, 1012500, 1000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) { 1500, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 1012500, 1000000, 1012500, 1000000, 987500, 975000, 962500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) { 1400, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 987500, 975000, 987500, 975000, 962500, 950000, 937500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) { 1300, 1050000, 1037500, 1025000, 1012500, 1000000, 987500, 975000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 962500, 950000, 962500, 950000, 937500, 925000, 912500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) { 1200, 1025000, 1012500, 1000000, 987500, 975000, 962500, 950000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 937500, 925000, 937500, 925000, 912500, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) { 1100, 1000000, 987500, 975000, 962500, 950000, 937500, 925000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 912500, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) { 1000, 975000, 962500, 950000, 937500, 925000, 912500, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) { 900, 950000, 937500, 925000, 912500, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) { 800, 925000, 912500, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) { 700, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) { 600, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) { 500, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) { 400, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) { 300, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) { 200, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) /* ARM bin 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) { 1800, 1237500, 1225000, 1212500, 1200000, 1187500, 1175000, 1162500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 1150000, 1137500, 1150000, 1137500, 1125000, 1112500, 1100000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) { 1700, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 1112500, 1100000, 1112500, 1100000, 1087500, 1075000, 1062500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) { 1600, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 1075000, 1062500, 1075000, 1062500, 1050000, 1037500, 1025000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) { 1500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 1037500, 1025000, 1037500, 1025000, 1012500, 1000000, 987500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) { 1400, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 1012500, 1000000, 1012500, 1000000, 987500, 975000, 962500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) { 1300, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 1000000, 987500, 1000000, 987500, 975000, 962500, 950000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) { 1200, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 975000, 962500, 975000, 962500, 950000, 937500, 925000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) { 1100, 1037500, 1025000, 1012500, 1000000, 987500, 975000, 962500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 950000, 937500, 950000, 937500, 925000, 912500, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) { 1000, 1012500, 1000000, 987500, 975000, 962500, 950000, 937500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 925000, 912500, 925000, 912500, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) { 900, 987500, 975000, 962500, 950000, 937500, 925000, 912500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) { 800, 962500, 950000, 937500, 925000, 912500, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) { 700, 937500, 925000, 912500, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) { 600, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) { 500, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) { 400, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) { 300, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) { 200, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) static const u32 asv_kfc_table[][ASV_KFC_DVFS_NUM][ASV_GROUPS_NUM + 1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) /* KFC 0, 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) { 1500000, 1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) { 1400000, 1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) { 1300000, 1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) { 1200000, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) { 1100000, 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 1050000, 1037500, 1025000, 1012500, 1000000, 987500, 975000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) { 1000000, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 1012500, 1000000, 987500, 975000, 962500, 950000, 937500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) { 900000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 975000, 962500, 950000, 937500, 925000, 912500, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) { 800000, 1025000, 1012500, 1000000, 987500, 975000, 962500, 950000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 937500, 925000, 912500, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) { 700000, 987500, 975000, 962500, 950000, 937500, 925000, 912500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) { 600000, 950000, 937500, 925000, 912500, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) { 500000, 912500, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) { 400000, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) { 300000, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) { 200000, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) /* KFC 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) { 1500, 1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) { 1400, 1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) { 1300, 1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) { 1200, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) { 1100, 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 1050000, 1037500, 1025000, 1012500, 1000000, 987500, 975000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) { 1000, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 1012500, 1000000, 987500, 975000, 962500, 950000, 937500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) { 900, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 975000, 962500, 950000, 937500, 925000, 912500, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) { 800, 1025000, 1012500, 1000000, 987500, 975000, 962500, 950000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 937500, 925000, 912500, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) { 700, 987500, 975000, 962500, 950000, 937500, 925000, 912500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) { 600, 950000, 937500, 925000, 912500, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) { 500, 912500, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) { 400, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) { 300, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) { 200, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) /* KFC 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) { 1500, 1300000, 1300000, 1300000, 1287500, 1287500, 1287500, 1275000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 1262500, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) { 1400, 1275000, 1262500, 1250000, 1237500, 1225000, 1212500, 1200000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 1187500, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) { 1300, 1225000, 1212500, 1200000, 1187500, 1175000, 1162500, 1150000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) { 1200, 1175000, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) { 1100, 1137500, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 1050000, 1037500, 1025000, 1012500, 1000000, 987500, 975000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) { 1000, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 1012500, 1000000, 987500, 975000, 962500, 950000, 937500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) { 900, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000, 987500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 975000, 962500, 950000, 937500, 925000, 912500, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) { 800, 1025000, 1012500, 1000000, 987500, 975000, 962500, 950000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 937500, 925000, 912500, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) { 700, 987500, 975000, 962500, 950000, 937500, 925000, 912500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) { 600, 950000, 937500, 925000, 912500, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) { 500, 912500, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) { 400, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) { 300, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) { 200, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) /* KFC bin 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) { 1300, 1250000, 1237500, 1225000, 1212500, 1200000, 1187500, 1175000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) { 1200, 1200000, 1187500, 1175000, 1162500, 1150000, 1137500, 1125000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 1112500, 1100000, 1087500, 1075000, 1062500, 1050000, 1037500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) { 1100, 1162500, 1150000, 1137500, 1125000, 1112500, 1100000, 1087500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 1075000, 1062500, 1050000, 1037500, 1025000, 1012500, 1000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) { 1000, 1125000, 1112500, 1100000, 1087500, 1075000, 1062500, 1050000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 1037500, 1025000, 1012500, 1000000, 987500, 975000, 962500 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) { 900, 1087500, 1075000, 1062500, 1050000, 1037500, 1025000, 1012500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 1000000, 987500, 975000, 962500, 950000, 937500, 925000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) { 800, 1050000, 1037500, 1025000, 1012500, 1000000, 987500, 975000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 962500, 950000, 937500, 925000, 912500, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) { 700, 1012500, 1000000, 987500, 975000, 962500, 950000, 937500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 925000, 912500, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) { 600, 975000, 962500, 950000, 937500, 925000, 912500, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) { 500, 937500, 925000, 912500, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) { 400, 925000, 912500, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) { 300, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) { 200, 900000, 900000, 900000, 900000, 900000, 900000, 900000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 900000, 900000, 900000, 900000, 900000, 900000, 900000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) static const struct asv_limit_entry __asv_limits[ASV_GROUPS_NUM] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) { 13, 55 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) { 21, 65 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) { 25, 69 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) { 30, 72 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) { 36, 74 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) { 43, 76 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) { 51, 78 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) { 65, 80 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) { 81, 82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) { 98, 84 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) { 119, 87 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) { 135, 89 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) { 150, 92 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) { 999, 999 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) static int exynos5422_asv_get_group(struct exynos_asv *asv)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) unsigned int pkgid_reg, auxi_reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) int hpm, ids, i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_PKG_ID, &pkgid_reg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_AUX_INFO, &auxi_reg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) if (asv->use_sg) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) u32 sga = (pkgid_reg >> EXYNOS5422_SG_A_OFFSET) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) EXYNOS5422_SG_A_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) u32 sgb = (pkgid_reg >> EXYNOS5422_SG_B_OFFSET) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) EXYNOS5422_SG_B_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) if ((pkgid_reg >> EXYNOS5422_SG_BSIGN_OFFSET) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) EXYNOS5422_SG_BSIGN_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) return sga + sgb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) return sga - sgb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) hpm = (auxi_reg >> EXYNOS5422_TMCB_OFFSET) & EXYNOS5422_TMCB_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) ids = (pkgid_reg >> EXYNOS5422_IDS_OFFSET) & EXYNOS5422_IDS_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) for (i = 0; i < ASV_GROUPS_NUM; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) if (ids <= __asv_limits[i].ids)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) if (hpm <= __asv_limits[i].hpm)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) if (i < ASV_GROUPS_NUM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) return i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) static int __asv_offset_voltage(unsigned int index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) switch (index) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) case 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) return 12500;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) case 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) return 50000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) case 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) return 25000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) static void exynos5422_asv_offset_voltage_setup(struct exynos_asv *asv)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) struct exynos_asv_subsys *subsys;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) unsigned int reg, value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_AUX_INFO, ®);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) /* ARM offset voltage setup */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_ARM];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) subsys->base_volt = 1000000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) value = (reg >> EXYNOS5422_ARM_UP_OFFSET) & EXYNOS5422_ARM_UP_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) subsys->offset_volt_h = __asv_offset_voltage(value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) value = (reg >> EXYNOS5422_ARM_DN_OFFSET) & EXYNOS5422_ARM_DN_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) subsys->offset_volt_l = __asv_offset_voltage(value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) /* KFC offset voltage setup */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_KFC];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) subsys->base_volt = 1000000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) value = (reg >> EXYNOS5422_KFC_UP_OFFSET) & EXYNOS5422_KFC_UP_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) subsys->offset_volt_h = __asv_offset_voltage(value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) value = (reg >> EXYNOS5422_KFC_DN_OFFSET) & EXYNOS5422_KFC_DN_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) subsys->offset_volt_l = __asv_offset_voltage(value);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) static int exynos5422_asv_opp_get_voltage(const struct exynos_asv_subsys *subsys,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) int level, unsigned int volt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) unsigned int asv_volt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) if (level >= subsys->table.num_rows)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) return volt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) asv_volt = exynos_asv_opp_get_voltage(subsys, level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) subsys->asv->group);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) if (volt > subsys->base_volt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) asv_volt += subsys->offset_volt_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) asv_volt += subsys->offset_volt_l;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) return asv_volt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) static unsigned int exynos5422_asv_parse_table(unsigned int pkg_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) return (pkg_id >> EXYNOS5422_TABLE_OFFSET) & EXYNOS5422_TABLE_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) static bool exynos5422_asv_parse_bin2(unsigned int pkg_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) return (pkg_id >> EXYNOS5422_BIN2_OFFSET) & EXYNOS5422_BIN2_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) static bool exynos5422_asv_parse_sg(unsigned int pkg_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) return (pkg_id >> EXYNOS5422_USESG_OFFSET) & EXYNOS5422_USESG_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) int exynos5422_asv_init(struct exynos_asv *asv)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) struct exynos_asv_subsys *subsys;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) unsigned int table_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) unsigned int pkg_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) bool bin2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) regmap_read(asv->chipid_regmap, EXYNOS_CHIPID_REG_PKG_ID, &pkg_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) if (asv->of_bin == 2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) bin2 = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) asv->use_sg = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) asv->use_sg = exynos5422_asv_parse_sg(pkg_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) bin2 = exynos5422_asv_parse_bin2(pkg_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) asv->group = exynos5422_asv_get_group(asv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) asv->table = exynos5422_asv_parse_table(pkg_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) exynos5422_asv_offset_voltage_setup(asv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) if (bin2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) table_index = 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) if (asv->table == 2 || asv->table == 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) table_index = asv->table - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) table_index = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_ARM];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) subsys->cpu_dt_compat = "arm,cortex-a15";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) if (bin2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) subsys->table.num_rows = ASV_ARM_BIN2_DVFS_NUM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) subsys->table.num_rows = ASV_ARM_DVFS_NUM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) subsys->table.num_cols = ASV_GROUPS_NUM + 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) subsys->table.buf = (u32 *)asv_arm_table[table_index];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) subsys = &asv->subsys[EXYNOS_ASV_SUBSYS_ID_KFC];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) subsys->cpu_dt_compat = "arm,cortex-a7";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) if (bin2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) subsys->table.num_rows = ASV_KFC_BIN2_DVFS_NUM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) subsys->table.num_rows = ASV_KFC_DVFS_NUM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) subsys->table.num_cols = ASV_GROUPS_NUM + 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) subsys->table.buf = (u32 *)asv_kfc_table[table_index];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) asv->opp_get_voltage = exynos5422_asv_opp_get_voltage;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) }