blob: cfd04760fa051c0db7f51160af06b5e06d7570dc [file] [log] [blame]
V Sowmyac6d71662021-07-15 08:11:08 +05301/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <device/pci_ids.h>
4#include <device/pci_ops.h>
5#include <fsp/api.h>
6#include <soc/ramstage.h>
7#include <soc/vr_config.h>
8#include <console/console.h>
9#include <intelblocks/cpulib.h>
10
11/*
12 * VR Configurations for IA and GT domains for ADL-P SKU's.
Curtis Chen150fee62021-12-21 11:51:33 +080013 * Per doc#627345 ADL_P Partial Intel PlatformDesignStudio Rev 2.0.0, update PD
V Sowmyac6d71662021-07-15 08:11:08 +053014 *
15 * +----------------+-----------+-------+-------+---------+-------------+----------+
16 * | SKU | Setting | AC LL | DC LL | ICC MAX | TDC Current | TDC Time |
17 * | | |(mOhms)|(mOhms)| (A) | (A) | (msec) |
18 * +----------------+-----------+-------+-------+---------+-------------+----------+
19 * | ADL-P 682(45W) | IA | 2.3 | 2.3 | 160 | 57 | 28000 |
20 * + +-----------+-------+-------+---------+-------------+----------+
Curtis Chen150fee62021-12-21 11:51:33 +080021 * | | GT | 3.2 | 3.2 | 55 | 57 | 28000 |
V Sowmyac6d71662021-07-15 08:11:08 +053022 * +----------------+-----------+-------+-------+---------+-------------+----------+
Curtis Chen150fee62021-12-21 11:51:33 +080023 * | ADL-P 482(45W) | IA | 2.3 | 2.3 | 120 | 47 | 28000 |
24 * + 442(45W) +-----------+-------+-------+---------+-------------+----------+
25 * | | GT | 3.2 | 3.2 | 55 | 47 | 28000 |
26 * +----------------+-----------+-------+-------+---------+-------------+----------+
27 * | ADL-P 682(28W) | IA | 2.3 | 2.3 | 109 | 40 | 28000 |
V Sowmyac6d71662021-07-15 08:11:08 +053028 * + +-----------+-------+-------+---------+-------------+----------+
Curtis Chen150fee62021-12-21 11:51:33 +080029 * | | GT | 3.2 | 3.2 | 55 | 40 | 28000 |
30 * +----------------+-----------+-------+-------+---------+-------------+----------+
31 * | ADL-P 482(28W) | IA | 2.3 | 2.3 | 85 | 32 | 28000 |
Patrick Rudolph4f37cf02023-03-15 15:32:26 +010032 * + 442(28W) +-----------+-------+-------+---------+-------------+----------+
Curtis Chen150fee62021-12-21 11:51:33 +080033 * | | GT | 3.2 | 3.2 | 55 | 32 | 28000 |
V Sowmyac6d71662021-07-15 08:11:08 +053034 * +----------------+-----------+-------+-------+---------+-------------+----------+
35 * | ADL-P 282(15W) | IA | 2.8 | 2.8 | 80 | 20 | 28000 |
36 * + +-----------+-------+-------+---------+-------------+----------+
37 * | | GT | 3.2 | 3.2 | 40 | 20 | 28000 |
38 * +----------------+-----------+-------+-------+---------+-------------+----------+
39 */
40
V Sowmya7de81d52022-04-05 14:45:36 +053041/*
42 * VR Configurations for IA and GT domains for ADL-N SKU's.
43 * Per doc#646929 ADL N Platform Design Guide -> Power_Map_Rev1p0
44 *
45 * +----------------+-----------+-------+-------+---------+-------------+----------+
46 * | SKU | Setting | AC LL | DC LL | ICC MAX | TDC Current | TDC Time |
47 * | | |(mOhms)|(mOhms)| (A) | (A) | (msec) |
48 * +----------------+-----------+-------+-------+---------+-------------+----------+
49 * | ADL-N 081(15W) | IA | 4.7 | 4.7 | 53 | 22 | 28000 |
50 * + +-----------+-------+-------+---------+-------------+----------+
51 * | | GT | 6.5 | 6.5 | 29 | 22 | 28000 |
52 * +----------------+-----------+-------+-------+---------+-------------+----------+
53 * | ADL-N 081(7W) | IA | 5.0 | 5.0 | 37 | 14 | 28000 |
54 * + +-----------+-------+-------+---------+-------------+----------+
55 * | | GT | 6.5 | 6.5 | 29 | 14 | 28000 |
56 * +----------------+-----------+-------+-------+---------+-------------+----------+
57 * | ADL-N 041(6W) | IA | 5.0 | 5.0 | 37 | 12 | 28000 |
58 * + Pentium +-----------+-------+-------+---------+-------------+----------+
59 * | | GT | 6.5 | 6.5 | 29 | 12 | 28000 |
60 * +----------------+-----------+-------+-------+---------+-------------+----------+
61 * | ADL-N 041(6W) | IA | 5.0 | 5.0 | 37 | 12 | 28000 |
62 * + Celeron +-----------+-------+-------+---------+-------------+----------+
63 * | | GT | 6.5 | 6.5 | 26 | 12 | 28000 |
64 * +----------------+-----------+-------+-------+---------+-------------+----------+
65 * | ADL-N 021(6W) | IA | 5.0 | 5.0 | 27 | 10 | 28000 |
66 * + +-----------+-------+-------+---------+-------------+----------+
67 * | | GT | 6.5 | 6.5 | 23 | 10 | 28000 |
68 * +----------------+-----------+-------+-------+---------+-------------+----------+
69 */
70
Jeremy Compostella1b44c812022-06-17 15:18:02 -070071/*
72 * VR Configurations for IA and GT domains for RPL-P SKU's.
73 * Per doc#686872 RPL UPH PDG - 2022, June 7th edition
74 *
75 * +----------------+-----------+-------+-------+---------+-------------+----------+
76 * | SKU | Setting | AC LL | DC LL | ICC MAX | TDC Current | TDC Time |
77 * | | |(mOhms)|(mOhms)| (A) | (A) | (msec) |
78 * +----------------+-----------+-------+-------+---------+-------------+----------+
79 * | RPL-P 682(45W) | IA | 2.3 | 2.3 | 160 | 86 | 28000 |
80 * + +-----------+-------+-------+---------+-------------+----------+
81 * | | GT | 3.2 | 3.2 | 55 | 86 | 28000 |
82 * +----------------+-----------+-------+-------+---------+-------------+----------+
83 * | RPL-P 482(28W) | IA | 2.3 | 2.3 | 102 | 54 | 28000 |
84 * + +-----------+-------+-------+---------+-------------+----------+
85 * | | GT | 3.2 | 3.2 | 55 | 54 | 28000 |
86 * +----------------+-----------+-------+-------+---------+-------------+----------+
87 * | RPL-P 282(15W) | IA | 2.8 | 2.8 | 80 | 41 | 28000 |
88 * + +-----------+-------+-------+---------+-------------+----------+
Jeremy Compostella7f96c052022-08-03 09:59:16 -070089 * | | GT | 3.2 | 3.2 | 40 | 41 | 28000 |
Jeremy Compostella1b44c812022-06-17 15:18:02 -070090 * +----------------+-----------+-------+-------+---------+-------------+----------+
91 */
92
V Sowmyac6d71662021-07-15 08:11:08 +053093struct vr_lookup {
94 uint16_t mchid;
Curtis Chenea1bb5f2021-11-25 13:17:42 +080095 uint8_t tdp;
V Sowmyac6d71662021-07-15 08:11:08 +053096 uint32_t conf[NUM_VR_DOMAINS];
97};
98
99static uint32_t load_table(const struct vr_lookup *tbl, const int tbl_entries, const int domain,
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800100 const uint16_t mch_id, uint8_t tdp)
V Sowmyac6d71662021-07-15 08:11:08 +0530101{
102 for (size_t i = 0; i < tbl_entries; i++) {
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800103 if (tbl[i].mchid != mch_id || tbl[i].tdp != tdp)
V Sowmyac6d71662021-07-15 08:11:08 +0530104 continue;
105 return tbl[i].conf[domain];
106 }
107
Julius Wernere9665952022-01-21 17:06:20 -0800108 printk(BIOS_ERR, "Unknown MCH (0x%x) in %s\n", mch_id, __func__);
V Sowmyac6d71662021-07-15 08:11:08 +0530109 return 0;
110}
111
Curtis Chen1f8563e2021-11-30 14:04:48 +0800112/* Per the power map from #613643, update ADL-P 6+8+2 (28W) VR configuration */
V Sowmyac6d71662021-07-15 08:11:08 +0530113static const struct vr_lookup vr_config_ll[] = {
Felix Singer43b7f412022-03-07 04:34:52 +0100114 { PCI_DID_INTEL_ADL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
115 { PCI_DID_INTEL_ADL_P_ID_3, 45, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
116 { PCI_DID_INTEL_ADL_P_ID_4, 45, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
117 { PCI_DID_INTEL_ADL_P_ID_5, 45, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
Patrick Rudolph4f37cf02023-03-15 15:32:26 +0100118 { PCI_DID_INTEL_ADL_P_ID_1, 28, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
Felix Singer43b7f412022-03-07 04:34:52 +0100119 { PCI_DID_INTEL_ADL_P_ID_3, 28, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
120 { PCI_DID_INTEL_ADL_P_ID_5, 28, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
121 { PCI_DID_INTEL_ADL_P_ID_7, 28, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
122 { PCI_DID_INTEL_ADL_P_ID_6, 15, VR_CFG_ALL_DOMAINS_LOADLINE(2.8, 3.2) },
123 { PCI_DID_INTEL_ADL_P_ID_7, 15, VR_CFG_ALL_DOMAINS_LOADLINE(2.8, 3.2) },
124 { PCI_DID_INTEL_ADL_P_ID_10, 15, VR_CFG_ALL_DOMAINS_LOADLINE(2.8, 3.2) },
V Sowmya7de81d52022-04-05 14:45:36 +0530125 { PCI_DID_INTEL_ADL_N_ID_1, 15, VR_CFG_ALL_DOMAINS_LOADLINE(4.7, 6.5) },
126 { PCI_DID_INTEL_ADL_N_ID_1, 7, VR_CFG_ALL_DOMAINS_LOADLINE(5.0, 6.5) },
127 { PCI_DID_INTEL_ADL_N_ID_2, 6, VR_CFG_ALL_DOMAINS_LOADLINE(5.0, 6.5) },
128 { PCI_DID_INTEL_ADL_N_ID_3, 6, VR_CFG_ALL_DOMAINS_LOADLINE(5.0, 6.5) },
129 { PCI_DID_INTEL_ADL_N_ID_4, 6, VR_CFG_ALL_DOMAINS_LOADLINE(5.0, 6.5) },
Jeremy Compostella1b44c812022-06-17 15:18:02 -0700130 { PCI_DID_INTEL_RPL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
131 { PCI_DID_INTEL_RPL_P_ID_2, 28, VR_CFG_ALL_DOMAINS_LOADLINE(2.3, 3.2) },
132 { PCI_DID_INTEL_RPL_P_ID_3, 15, VR_CFG_ALL_DOMAINS_LOADLINE(2.8, 3.2) },
Lawrence Chang0a5da512022-10-19 14:38:41 +0800133 { PCI_DID_INTEL_RPL_P_ID_4, 15, VR_CFG_ALL_DOMAINS_LOADLINE(2.8, 3.2) },
Marx Wang39ede0a2022-12-20 10:48:33 +0800134 { PCI_DID_INTEL_RPL_P_ID_5, 15, VR_CFG_ALL_DOMAINS_LOADLINE(2.8, 3.2) },
Michał Żygowski4b9508b2022-04-25 15:05:15 +0200135 { PCI_DID_INTEL_ADL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
136 { PCI_DID_INTEL_ADL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
137 { PCI_DID_INTEL_ADL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
138 { PCI_DID_INTEL_ADL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
139 { PCI_DID_INTEL_ADL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
140 { PCI_DID_INTEL_ADL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
141 { PCI_DID_INTEL_ADL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
142 { PCI_DID_INTEL_ADL_S_ID_8, 125, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
143 { PCI_DID_INTEL_ADL_S_ID_10, 65, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
144 { PCI_DID_INTEL_ADL_S_ID_10, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
145 { PCI_DID_INTEL_ADL_S_ID_11, 60, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
146 { PCI_DID_INTEL_ADL_S_ID_11, 58, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
147 { PCI_DID_INTEL_ADL_S_ID_11, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
148 { PCI_DID_INTEL_ADL_S_ID_12, 46, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
149 { PCI_DID_INTEL_ADL_S_ID_12, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
V Sowmyac6d71662021-07-15 08:11:08 +0530150};
151
152static const struct vr_lookup vr_config_icc[] = {
Felix Singer43b7f412022-03-07 04:34:52 +0100153 { PCI_DID_INTEL_ADL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_ICC(120, 55) },
154 { PCI_DID_INTEL_ADL_P_ID_3, 45, VR_CFG_ALL_DOMAINS_ICC(160, 55) },
155 { PCI_DID_INTEL_ADL_P_ID_4, 45, VR_CFG_ALL_DOMAINS_ICC(160, 55) },
156 { PCI_DID_INTEL_ADL_P_ID_5, 45, VR_CFG_ALL_DOMAINS_ICC(120, 55) },
Patrick Rudolph4f37cf02023-03-15 15:32:26 +0100157 { PCI_DID_INTEL_ADL_P_ID_1, 28, VR_CFG_ALL_DOMAINS_ICC(85, 55) },
Felix Singer43b7f412022-03-07 04:34:52 +0100158 { PCI_DID_INTEL_ADL_P_ID_3, 28, VR_CFG_ALL_DOMAINS_ICC(109, 55) },
159 { PCI_DID_INTEL_ADL_P_ID_5, 28, VR_CFG_ALL_DOMAINS_ICC(85, 55) },
160 { PCI_DID_INTEL_ADL_P_ID_7, 28, VR_CFG_ALL_DOMAINS_ICC(85, 55) },
161 { PCI_DID_INTEL_ADL_P_ID_6, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
162 { PCI_DID_INTEL_ADL_P_ID_7, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
163 { PCI_DID_INTEL_ADL_P_ID_10, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
V Sowmya7de81d52022-04-05 14:45:36 +0530164 { PCI_DID_INTEL_ADL_N_ID_1, 15, VR_CFG_ALL_DOMAINS_ICC(53, 29) },
165 { PCI_DID_INTEL_ADL_N_ID_1, 7, VR_CFG_ALL_DOMAINS_ICC(37, 29) },
166 { PCI_DID_INTEL_ADL_N_ID_2, 6, VR_CFG_ALL_DOMAINS_ICC(37, 29) },
167 { PCI_DID_INTEL_ADL_N_ID_3, 6, VR_CFG_ALL_DOMAINS_ICC(37, 26) },
168 { PCI_DID_INTEL_ADL_N_ID_4, 6, VR_CFG_ALL_DOMAINS_ICC(27, 23) },
Jeremy Compostella1b44c812022-06-17 15:18:02 -0700169 { PCI_DID_INTEL_RPL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_ICC(160, 55) },
170 { PCI_DID_INTEL_RPL_P_ID_2, 28, VR_CFG_ALL_DOMAINS_ICC(102, 55) },
Jeremy Compostella7f96c052022-08-03 09:59:16 -0700171 { PCI_DID_INTEL_RPL_P_ID_3, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
Lawrence Chang0a5da512022-10-19 14:38:41 +0800172 { PCI_DID_INTEL_RPL_P_ID_4, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
Marx Wang39ede0a2022-12-20 10:48:33 +0800173 { PCI_DID_INTEL_RPL_P_ID_5, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
Michał Żygowski4b9508b2022-04-25 15:05:15 +0200174 { PCI_DID_INTEL_ADL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_ICC(280, 30) },
175 { PCI_DID_INTEL_ADL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_ICC(280, 30) },
176 { PCI_DID_INTEL_ADL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_ICC(240, 30) },
177 { PCI_DID_INTEL_ADL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_ICC(154, 30) },
178 { PCI_DID_INTEL_ADL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_ICC(240, 30) },
179 { PCI_DID_INTEL_ADL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_ICC(220, 30) },
180 { PCI_DID_INTEL_ADL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_ICC(145, 30) },
181 { PCI_DID_INTEL_ADL_S_ID_8, 125, VR_CFG_ALL_DOMAINS_ICC(175, 30) },
182 { PCI_DID_INTEL_ADL_S_ID_10, 65, VR_CFG_ALL_DOMAINS_ICC(151, 30) },
183 { PCI_DID_INTEL_ADL_S_ID_10, 35, VR_CFG_ALL_DOMAINS_ICC(100, 30) },
184 { PCI_DID_INTEL_ADL_S_ID_11, 60, VR_CFG_ALL_DOMAINS_ICC(110, 30) },
185 { PCI_DID_INTEL_ADL_S_ID_11, 58, VR_CFG_ALL_DOMAINS_ICC(110, 30) },
186 { PCI_DID_INTEL_ADL_S_ID_11, 35, VR_CFG_ALL_DOMAINS_ICC(90, 30) },
187 { PCI_DID_INTEL_ADL_S_ID_12, 46, VR_CFG_ALL_DOMAINS_ICC(49, 30) },
188 { PCI_DID_INTEL_ADL_S_ID_12, 35, VR_CFG_ALL_DOMAINS_ICC(37, 30) },
V Sowmyac6d71662021-07-15 08:11:08 +0530189};
190
191static const struct vr_lookup vr_config_tdc_timewindow[] = {
Felix Singer43b7f412022-03-07 04:34:52 +0100192 { PCI_DID_INTEL_ADL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
193 { PCI_DID_INTEL_ADL_P_ID_3, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
194 { PCI_DID_INTEL_ADL_P_ID_4, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
195 { PCI_DID_INTEL_ADL_P_ID_5, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Patrick Rudolph4f37cf02023-03-15 15:32:26 +0100196 { PCI_DID_INTEL_ADL_P_ID_1, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Felix Singer43b7f412022-03-07 04:34:52 +0100197 { PCI_DID_INTEL_ADL_P_ID_3, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
198 { PCI_DID_INTEL_ADL_P_ID_5, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
199 { PCI_DID_INTEL_ADL_P_ID_7, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
200 { PCI_DID_INTEL_ADL_P_ID_6, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
201 { PCI_DID_INTEL_ADL_P_ID_7, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
202 { PCI_DID_INTEL_ADL_P_ID_10, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
V Sowmya7de81d52022-04-05 14:45:36 +0530203 { PCI_DID_INTEL_ADL_N_ID_1, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
204 { PCI_DID_INTEL_ADL_N_ID_1, 7, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
205 { PCI_DID_INTEL_ADL_N_ID_2, 6, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
206 { PCI_DID_INTEL_ADL_N_ID_3, 6, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
207 { PCI_DID_INTEL_ADL_N_ID_4, 6, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Jeremy Compostella1b44c812022-06-17 15:18:02 -0700208 { PCI_DID_INTEL_RPL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
209 { PCI_DID_INTEL_RPL_P_ID_2, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
210 { PCI_DID_INTEL_RPL_P_ID_3, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Lawrence Chang0a5da512022-10-19 14:38:41 +0800211 { PCI_DID_INTEL_RPL_P_ID_4, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Marx Wang39ede0a2022-12-20 10:48:33 +0800212 { PCI_DID_INTEL_RPL_P_ID_5, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Michał Żygowski4b9508b2022-04-25 15:05:15 +0200213 { PCI_DID_INTEL_ADL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
214 { PCI_DID_INTEL_ADL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
215 { PCI_DID_INTEL_ADL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
216 { PCI_DID_INTEL_ADL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
217 { PCI_DID_INTEL_ADL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
218 { PCI_DID_INTEL_ADL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
219 { PCI_DID_INTEL_ADL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
220 { PCI_DID_INTEL_ADL_S_ID_8, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
221 { PCI_DID_INTEL_ADL_S_ID_10, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
222 { PCI_DID_INTEL_ADL_S_ID_10, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
223 { PCI_DID_INTEL_ADL_S_ID_11, 60, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
224 { PCI_DID_INTEL_ADL_S_ID_11, 58, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
225 { PCI_DID_INTEL_ADL_S_ID_11, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
226 { PCI_DID_INTEL_ADL_S_ID_12, 46, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
227 { PCI_DID_INTEL_ADL_S_ID_12, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
V Sowmyac6d71662021-07-15 08:11:08 +0530228};
229
230static const struct vr_lookup vr_config_tdc_currentlimit[] = {
Felix Singer43b7f412022-03-07 04:34:52 +0100231 { PCI_DID_INTEL_ADL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(47, 47) },
232 { PCI_DID_INTEL_ADL_P_ID_3, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(57, 57) },
233 { PCI_DID_INTEL_ADL_P_ID_4, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(57, 57) },
234 { PCI_DID_INTEL_ADL_P_ID_5, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(47, 47) },
Patrick Rudolph4f37cf02023-03-15 15:32:26 +0100235 { PCI_DID_INTEL_ADL_P_ID_1, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(40, 40) },
Felix Singer43b7f412022-03-07 04:34:52 +0100236 { PCI_DID_INTEL_ADL_P_ID_3, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(40, 40) },
237 { PCI_DID_INTEL_ADL_P_ID_5, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(32, 32) },
238 { PCI_DID_INTEL_ADL_P_ID_7, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(32, 32) },
239 { PCI_DID_INTEL_ADL_P_ID_6, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(20, 20) },
240 { PCI_DID_INTEL_ADL_P_ID_7, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(20, 20) },
241 { PCI_DID_INTEL_ADL_P_ID_10, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(20, 20) },
V Sowmya7de81d52022-04-05 14:45:36 +0530242 { PCI_DID_INTEL_ADL_N_ID_1, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(22, 22) },
243 { PCI_DID_INTEL_ADL_N_ID_1, 7, VR_CFG_ALL_DOMAINS_TDC_CURRENT(14, 14) },
244 { PCI_DID_INTEL_ADL_N_ID_2, 6, VR_CFG_ALL_DOMAINS_TDC_CURRENT(12, 12) },
245 { PCI_DID_INTEL_ADL_N_ID_3, 6, VR_CFG_ALL_DOMAINS_TDC_CURRENT(12, 12) },
246 { PCI_DID_INTEL_ADL_N_ID_4, 6, VR_CFG_ALL_DOMAINS_TDC_CURRENT(10, 10) },
Jeremy Compostella1b44c812022-06-17 15:18:02 -0700247 { PCI_DID_INTEL_RPL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(86, 86) },
248 { PCI_DID_INTEL_RPL_P_ID_2, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(54, 54) },
249 { PCI_DID_INTEL_RPL_P_ID_3, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(41, 41) },
Lawrence Chang0a5da512022-10-19 14:38:41 +0800250 { PCI_DID_INTEL_RPL_P_ID_4, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(41, 41) },
Marx Wang39ede0a2022-12-20 10:48:33 +0800251 { PCI_DID_INTEL_RPL_P_ID_5, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(41, 41) },
Michał Żygowski4b9508b2022-04-25 15:05:15 +0200252 { PCI_DID_INTEL_ADL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_TDC_CURRENT(132, 132) },
253 { PCI_DID_INTEL_ADL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(132, 132) },
254 { PCI_DID_INTEL_ADL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(89, 89) },
255 { PCI_DID_INTEL_ADL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(56, 56) },
256 { PCI_DID_INTEL_ADL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(109, 109) },
257 { PCI_DID_INTEL_ADL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(77, 77) },
258 { PCI_DID_INTEL_ADL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(49, 49) },
259 { PCI_DID_INTEL_ADL_S_ID_8, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(96, 96) },
260 { PCI_DID_INTEL_ADL_S_ID_10, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(66, 66) },
261 { PCI_DID_INTEL_ADL_S_ID_10, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(44, 44) },
262 { PCI_DID_INTEL_ADL_S_ID_11, 60, VR_CFG_ALL_DOMAINS_TDC_CURRENT(56, 56) },
263 { PCI_DID_INTEL_ADL_S_ID_11, 58, VR_CFG_ALL_DOMAINS_TDC_CURRENT(59, 59) },
264 { PCI_DID_INTEL_ADL_S_ID_11, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(40, 40) },
265 { PCI_DID_INTEL_ADL_S_ID_12, 46, VR_CFG_ALL_DOMAINS_TDC_CURRENT(39, 39) },
266 { PCI_DID_INTEL_ADL_S_ID_12, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(30, 30) },
V Sowmyac6d71662021-07-15 08:11:08 +0530267};
268
Jeremy Compostella9159e1c2022-06-02 16:49:48 -0700269static void fill_vr_fast_vmode(FSP_S_CONFIG *s_cfg,
270 int domain, const struct vr_config *chip_cfg)
271{
272#if CONFIG(SOC_INTEL_RAPTORLAKE)
273 s_cfg->EnableFastVmode[domain] = chip_cfg->enable_fast_vmode;
274 if (s_cfg->EnableFastVmode[domain])
275 s_cfg->IccLimit[domain] = chip_cfg->fast_vmode_i_trip;
276#endif
277}
278
V Sowmyac6d71662021-07-15 08:11:08 +0530279void fill_vr_domain_config(FSP_S_CONFIG *s_cfg,
280 int domain, const struct vr_config *chip_cfg)
281{
282 const struct vr_config *cfg;
283
284 if (domain < 0 || domain >= NUM_VR_DOMAINS)
285 return;
286
287 /* Use device tree override if requested */
288 if (chip_cfg->vr_config_enable) {
289 cfg = chip_cfg;
290
Bora Guvendikf6f12582021-09-02 13:23:03 -0700291 if (cfg->ac_loadline)
292 s_cfg->AcLoadline[domain] = cfg->ac_loadline;
293 if (cfg->dc_loadline)
294 s_cfg->DcLoadline[domain] = cfg->dc_loadline;
295 if (cfg->icc_max)
296 s_cfg->IccMax[domain] = cfg->icc_max;
Gaggery Tsai517c5a82022-09-08 13:42:08 -0700297 if (cfg->psi1threshold)
298 s_cfg->Psi1Threshold[domain] = cfg->psi1threshold;
299 if (cfg->psi2threshold)
300 s_cfg->Psi2Threshold[domain] = cfg->psi2threshold;
301 if (cfg->psi3threshold)
302 s_cfg->Psi3Threshold[domain] = cfg->psi3threshold;
V Sowmyac6d71662021-07-15 08:11:08 +0530303 s_cfg->TdcTimeWindow[domain] = cfg->tdc_timewindow;
304 s_cfg->TdcCurrentLimit[domain] = cfg->tdc_currentlimit;
V Sowmyac6d71662021-07-15 08:11:08 +0530305 } else {
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800306 uint8_t tdp = get_cpu_tdp();
Jeremy Compostella14908bf2022-06-07 10:25:43 -0700307 struct device *dev = pcidev_path_on_root(SA_DEVFN_ROOT);
308 uint16_t mch_id = dev ? pci_read_config16(dev, PCI_DEVICE_ID) : 0xffff;
V Sowmyac6d71662021-07-15 08:11:08 +0530309
310 s_cfg->AcLoadline[domain] = load_table(vr_config_ll, ARRAY_SIZE(vr_config_ll),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800311 domain, mch_id, tdp);
V Sowmyac6d71662021-07-15 08:11:08 +0530312 s_cfg->DcLoadline[domain] = load_table(vr_config_ll, ARRAY_SIZE(vr_config_ll),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800313 domain, mch_id, tdp);
V Sowmyac6d71662021-07-15 08:11:08 +0530314 s_cfg->IccMax[domain] = load_table(vr_config_icc, ARRAY_SIZE(vr_config_icc),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800315 domain, mch_id, tdp);
V Sowmyac6d71662021-07-15 08:11:08 +0530316 s_cfg->TdcTimeWindow[domain] = load_table(vr_config_tdc_timewindow,
317 ARRAY_SIZE(vr_config_tdc_timewindow),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800318 domain, mch_id, tdp);
V Sowmyac6d71662021-07-15 08:11:08 +0530319 s_cfg->TdcCurrentLimit[domain] = load_table(vr_config_tdc_currentlimit,
320 ARRAY_SIZE(vr_config_tdc_currentlimit),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800321 domain, mch_id, tdp);
Ronak Kanabar1f88a712021-07-15 19:02:22 +0530322 }
323
Jeremy Compostella9159e1c2022-06-02 16:49:48 -0700324 fill_vr_fast_vmode(s_cfg, domain, chip_cfg);
325
Ronak Kanabar1f88a712021-07-15 19:02:22 +0530326 /* Check TdcTimeWindow and TdcCurrentLimit,
327 Set TdcEnable and Set VR TDC Input current to root mean square */
328 if (s_cfg->TdcTimeWindow[domain] != 0 && s_cfg->TdcCurrentLimit[domain] != 0) {
329 s_cfg->TdcEnable[domain] = 1;
330 s_cfg->Irms[domain] = 1;
V Sowmyac6d71662021-07-15 08:11:08 +0530331 }
332}