blob: 23079833f7f0bde94e3625bae7b42d3dc4674221 [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 * +----------------+-----------+-------+-------+---------+-------------+----------+
Jeremy Compostella0973c322023-03-27 11:57:41 -070083 * | RPL-P 482(28W) | IA | 2.3 | 2.3 | 102 | 33 | 28000 |
Jeremy Compostella1b44c812022-06-17 15:18:02 -070084 * + +-----------+-------+-------+---------+-------------+----------+
Jeremy Compostella0973c322023-03-27 11:57:41 -070085 * | | GT | 3.2 | 3.2 | 55 | 33 | 28000 |
Jeremy Compostella1b44c812022-06-17 15:18:02 -070086 * +----------------+-----------+-------+-------+---------+-------------+----------+
Jeremy Compostella0973c322023-03-27 11:57:41 -070087 * | RPL-P 282(15W) | IA | 2.8 | 2.8 | 80 | 22 | 28000 |
Jeremy Compostella1b44c812022-06-17 15:18:02 -070088 * + +-----------+-------+-------+---------+-------------+----------+
Jeremy Compostella0973c322023-03-27 11:57:41 -070089 * | | GT | 3.2 | 3.2 | 40 | 22 | 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) },
Max Fritz573e6de2022-11-19 01:54:44 +0100150 { PCI_DID_INTEL_RPL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
151 { PCI_DID_INTEL_RPL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
152 { PCI_DID_INTEL_RPL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
153 { PCI_DID_INTEL_RPL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
154 { PCI_DID_INTEL_RPL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
155 { PCI_DID_INTEL_RPL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
156 { PCI_DID_INTEL_RPL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
157 { PCI_DID_INTEL_RPL_S_ID_4, 125, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
158 { PCI_DID_INTEL_RPL_S_ID_4, 65, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
159 { PCI_DID_INTEL_RPL_S_ID_4, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
160 { PCI_DID_INTEL_RPL_S_ID_5, 65, VR_CFG_ALL_DOMAINS_LOADLINE(1.1, 4.0) },
161 { PCI_DID_INTEL_RPL_S_ID_5, 35, VR_CFG_ALL_DOMAINS_LOADLINE(1.7, 4.0) },
V Sowmyac6d71662021-07-15 08:11:08 +0530162};
163
164static const struct vr_lookup vr_config_icc[] = {
Felix Singer43b7f412022-03-07 04:34:52 +0100165 { PCI_DID_INTEL_ADL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_ICC(120, 55) },
166 { PCI_DID_INTEL_ADL_P_ID_3, 45, VR_CFG_ALL_DOMAINS_ICC(160, 55) },
167 { PCI_DID_INTEL_ADL_P_ID_4, 45, VR_CFG_ALL_DOMAINS_ICC(160, 55) },
168 { PCI_DID_INTEL_ADL_P_ID_5, 45, VR_CFG_ALL_DOMAINS_ICC(120, 55) },
Patrick Rudolph4f37cf02023-03-15 15:32:26 +0100169 { PCI_DID_INTEL_ADL_P_ID_1, 28, VR_CFG_ALL_DOMAINS_ICC(85, 55) },
Felix Singer43b7f412022-03-07 04:34:52 +0100170 { PCI_DID_INTEL_ADL_P_ID_3, 28, VR_CFG_ALL_DOMAINS_ICC(109, 55) },
171 { PCI_DID_INTEL_ADL_P_ID_5, 28, VR_CFG_ALL_DOMAINS_ICC(85, 55) },
172 { PCI_DID_INTEL_ADL_P_ID_7, 28, VR_CFG_ALL_DOMAINS_ICC(85, 55) },
173 { PCI_DID_INTEL_ADL_P_ID_6, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
174 { PCI_DID_INTEL_ADL_P_ID_7, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
175 { PCI_DID_INTEL_ADL_P_ID_10, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
V Sowmya7de81d52022-04-05 14:45:36 +0530176 { PCI_DID_INTEL_ADL_N_ID_1, 15, VR_CFG_ALL_DOMAINS_ICC(53, 29) },
177 { PCI_DID_INTEL_ADL_N_ID_1, 7, VR_CFG_ALL_DOMAINS_ICC(37, 29) },
178 { PCI_DID_INTEL_ADL_N_ID_2, 6, VR_CFG_ALL_DOMAINS_ICC(37, 29) },
179 { PCI_DID_INTEL_ADL_N_ID_3, 6, VR_CFG_ALL_DOMAINS_ICC(37, 26) },
180 { PCI_DID_INTEL_ADL_N_ID_4, 6, VR_CFG_ALL_DOMAINS_ICC(27, 23) },
Jeremy Compostella1b44c812022-06-17 15:18:02 -0700181 { PCI_DID_INTEL_RPL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_ICC(160, 55) },
182 { PCI_DID_INTEL_RPL_P_ID_2, 28, VR_CFG_ALL_DOMAINS_ICC(102, 55) },
Jeremy Compostella7f96c052022-08-03 09:59:16 -0700183 { PCI_DID_INTEL_RPL_P_ID_3, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
Lawrence Chang0a5da512022-10-19 14:38:41 +0800184 { PCI_DID_INTEL_RPL_P_ID_4, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
Marx Wang39ede0a2022-12-20 10:48:33 +0800185 { PCI_DID_INTEL_RPL_P_ID_5, 15, VR_CFG_ALL_DOMAINS_ICC(80, 40) },
Michał Żygowski4b9508b2022-04-25 15:05:15 +0200186 { PCI_DID_INTEL_ADL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_ICC(280, 30) },
187 { PCI_DID_INTEL_ADL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_ICC(280, 30) },
188 { PCI_DID_INTEL_ADL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_ICC(240, 30) },
189 { PCI_DID_INTEL_ADL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_ICC(154, 30) },
190 { PCI_DID_INTEL_ADL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_ICC(240, 30) },
191 { PCI_DID_INTEL_ADL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_ICC(220, 30) },
192 { PCI_DID_INTEL_ADL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_ICC(145, 30) },
193 { PCI_DID_INTEL_ADL_S_ID_8, 125, VR_CFG_ALL_DOMAINS_ICC(175, 30) },
194 { PCI_DID_INTEL_ADL_S_ID_10, 65, VR_CFG_ALL_DOMAINS_ICC(151, 30) },
195 { PCI_DID_INTEL_ADL_S_ID_10, 35, VR_CFG_ALL_DOMAINS_ICC(100, 30) },
196 { PCI_DID_INTEL_ADL_S_ID_11, 60, VR_CFG_ALL_DOMAINS_ICC(110, 30) },
197 { PCI_DID_INTEL_ADL_S_ID_11, 58, VR_CFG_ALL_DOMAINS_ICC(110, 30) },
198 { PCI_DID_INTEL_ADL_S_ID_11, 35, VR_CFG_ALL_DOMAINS_ICC(90, 30) },
199 { PCI_DID_INTEL_ADL_S_ID_12, 46, VR_CFG_ALL_DOMAINS_ICC(49, 30) },
200 { PCI_DID_INTEL_ADL_S_ID_12, 35, VR_CFG_ALL_DOMAINS_ICC(37, 30) },
Max Fritz573e6de2022-11-19 01:54:44 +0100201 { PCI_DID_INTEL_RPL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_ICC(307, 30) },
202 { PCI_DID_INTEL_RPL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_ICC(307, 30) },
203 { PCI_DID_INTEL_RPL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_ICC(279, 30) },
204 { PCI_DID_INTEL_RPL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_ICC(165, 30) },
205 { PCI_DID_INTEL_RPL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_ICC(307, 30) },
206 { PCI_DID_INTEL_RPL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_ICC(279, 30) },
207 { PCI_DID_INTEL_RPL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_ICC(165, 30) },
208 { PCI_DID_INTEL_RPL_S_ID_4, 125, VR_CFG_ALL_DOMAINS_ICC(200, 30) },
209 { PCI_DID_INTEL_RPL_S_ID_4, 65, VR_CFG_ALL_DOMAINS_ICC(160, 30) },
210 { PCI_DID_INTEL_RPL_S_ID_4, 35, VR_CFG_ALL_DOMAINS_ICC(120, 30) },
211 { PCI_DID_INTEL_RPL_S_ID_5, 65, VR_CFG_ALL_DOMAINS_ICC(140, 30) },
212 { PCI_DID_INTEL_RPL_S_ID_5, 35, VR_CFG_ALL_DOMAINS_ICC(100, 30) },
V Sowmyac6d71662021-07-15 08:11:08 +0530213};
214
215static const struct vr_lookup vr_config_tdc_timewindow[] = {
Felix Singer43b7f412022-03-07 04:34:52 +0100216 { PCI_DID_INTEL_ADL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
217 { PCI_DID_INTEL_ADL_P_ID_3, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
218 { PCI_DID_INTEL_ADL_P_ID_4, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
219 { PCI_DID_INTEL_ADL_P_ID_5, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Patrick Rudolph4f37cf02023-03-15 15:32:26 +0100220 { PCI_DID_INTEL_ADL_P_ID_1, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Felix Singer43b7f412022-03-07 04:34:52 +0100221 { PCI_DID_INTEL_ADL_P_ID_3, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
222 { PCI_DID_INTEL_ADL_P_ID_5, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
223 { PCI_DID_INTEL_ADL_P_ID_7, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
224 { PCI_DID_INTEL_ADL_P_ID_6, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
225 { PCI_DID_INTEL_ADL_P_ID_7, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
226 { PCI_DID_INTEL_ADL_P_ID_10, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
V Sowmya7de81d52022-04-05 14:45:36 +0530227 { PCI_DID_INTEL_ADL_N_ID_1, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
228 { PCI_DID_INTEL_ADL_N_ID_1, 7, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
229 { PCI_DID_INTEL_ADL_N_ID_2, 6, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
230 { PCI_DID_INTEL_ADL_N_ID_3, 6, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
231 { PCI_DID_INTEL_ADL_N_ID_4, 6, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Jeremy Compostella1b44c812022-06-17 15:18:02 -0700232 { PCI_DID_INTEL_RPL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
233 { PCI_DID_INTEL_RPL_P_ID_2, 28, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
234 { PCI_DID_INTEL_RPL_P_ID_3, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Lawrence Chang0a5da512022-10-19 14:38:41 +0800235 { PCI_DID_INTEL_RPL_P_ID_4, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Marx Wang39ede0a2022-12-20 10:48:33 +0800236 { PCI_DID_INTEL_RPL_P_ID_5, 15, VR_CFG_ALL_DOMAINS_TDC(28000, 28000) },
Michał Żygowski4b9508b2022-04-25 15:05:15 +0200237 { PCI_DID_INTEL_ADL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
238 { PCI_DID_INTEL_ADL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
239 { PCI_DID_INTEL_ADL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
240 { PCI_DID_INTEL_ADL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
241 { PCI_DID_INTEL_ADL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
242 { PCI_DID_INTEL_ADL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
243 { PCI_DID_INTEL_ADL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
244 { PCI_DID_INTEL_ADL_S_ID_8, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
245 { PCI_DID_INTEL_ADL_S_ID_10, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
246 { PCI_DID_INTEL_ADL_S_ID_10, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
247 { PCI_DID_INTEL_ADL_S_ID_11, 60, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
248 { PCI_DID_INTEL_ADL_S_ID_11, 58, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
249 { PCI_DID_INTEL_ADL_S_ID_11, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
250 { PCI_DID_INTEL_ADL_S_ID_12, 46, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
251 { PCI_DID_INTEL_ADL_S_ID_12, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
Max Fritz573e6de2022-11-19 01:54:44 +0100252 { PCI_DID_INTEL_RPL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
253 { PCI_DID_INTEL_RPL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
254 { PCI_DID_INTEL_RPL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
255 { PCI_DID_INTEL_RPL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
256 { PCI_DID_INTEL_RPL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
257 { PCI_DID_INTEL_RPL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
258 { PCI_DID_INTEL_RPL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
259 { PCI_DID_INTEL_RPL_S_ID_4, 125, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
260 { PCI_DID_INTEL_RPL_S_ID_4, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
261 { PCI_DID_INTEL_RPL_S_ID_4, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
262 { PCI_DID_INTEL_RPL_S_ID_5, 65, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
263 { PCI_DID_INTEL_RPL_S_ID_5, 35, VR_CFG_ALL_DOMAINS_TDC(56000, 56000) },
V Sowmyac6d71662021-07-15 08:11:08 +0530264};
265
266static const struct vr_lookup vr_config_tdc_currentlimit[] = {
Felix Singer43b7f412022-03-07 04:34:52 +0100267 { PCI_DID_INTEL_ADL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(47, 47) },
268 { PCI_DID_INTEL_ADL_P_ID_3, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(57, 57) },
269 { PCI_DID_INTEL_ADL_P_ID_4, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(57, 57) },
270 { PCI_DID_INTEL_ADL_P_ID_5, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(47, 47) },
Patrick Rudolph4f37cf02023-03-15 15:32:26 +0100271 { PCI_DID_INTEL_ADL_P_ID_1, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(40, 40) },
Felix Singer43b7f412022-03-07 04:34:52 +0100272 { PCI_DID_INTEL_ADL_P_ID_3, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(40, 40) },
273 { PCI_DID_INTEL_ADL_P_ID_5, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(32, 32) },
274 { PCI_DID_INTEL_ADL_P_ID_7, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(32, 32) },
275 { PCI_DID_INTEL_ADL_P_ID_6, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(20, 20) },
276 { PCI_DID_INTEL_ADL_P_ID_7, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(20, 20) },
277 { PCI_DID_INTEL_ADL_P_ID_10, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(20, 20) },
V Sowmya7de81d52022-04-05 14:45:36 +0530278 { PCI_DID_INTEL_ADL_N_ID_1, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(22, 22) },
279 { PCI_DID_INTEL_ADL_N_ID_1, 7, VR_CFG_ALL_DOMAINS_TDC_CURRENT(14, 14) },
280 { PCI_DID_INTEL_ADL_N_ID_2, 6, VR_CFG_ALL_DOMAINS_TDC_CURRENT(12, 12) },
281 { PCI_DID_INTEL_ADL_N_ID_3, 6, VR_CFG_ALL_DOMAINS_TDC_CURRENT(12, 12) },
282 { PCI_DID_INTEL_ADL_N_ID_4, 6, VR_CFG_ALL_DOMAINS_TDC_CURRENT(10, 10) },
Jeremy Compostella1b44c812022-06-17 15:18:02 -0700283 { PCI_DID_INTEL_RPL_P_ID_1, 45, VR_CFG_ALL_DOMAINS_TDC_CURRENT(86, 86) },
Jeremy Compostella0973c322023-03-27 11:57:41 -0700284 { PCI_DID_INTEL_RPL_P_ID_2, 28, VR_CFG_ALL_DOMAINS_TDC_CURRENT(33, 33) },
285 { PCI_DID_INTEL_RPL_P_ID_3, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(22, 22) },
286 { PCI_DID_INTEL_RPL_P_ID_4, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(22, 22) },
287 { PCI_DID_INTEL_RPL_P_ID_5, 15, VR_CFG_ALL_DOMAINS_TDC_CURRENT(22, 22) },
Michał Żygowski2fffb5d2023-02-12 23:01:20 +0100288 { PCI_DID_INTEL_ADL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_TDC_CURRENT(132, 22) },
289 { PCI_DID_INTEL_ADL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(132, 22) },
290 { PCI_DID_INTEL_ADL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(89, 22) },
291 { PCI_DID_INTEL_ADL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(56, 20) },
292 { PCI_DID_INTEL_ADL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(109, 22) },
293 { PCI_DID_INTEL_ADL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(77, 22) },
294 { PCI_DID_INTEL_ADL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(49, 20) },
295 { PCI_DID_INTEL_ADL_S_ID_8, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(96, 22) },
296 { PCI_DID_INTEL_ADL_S_ID_10, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(66, 22) },
297 { PCI_DID_INTEL_ADL_S_ID_10, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(44, 20) },
298 { PCI_DID_INTEL_ADL_S_ID_11, 60, VR_CFG_ALL_DOMAINS_TDC_CURRENT(56, 22) },
299 { PCI_DID_INTEL_ADL_S_ID_11, 58, VR_CFG_ALL_DOMAINS_TDC_CURRENT(59, 22) },
300 { PCI_DID_INTEL_ADL_S_ID_11, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(40, 20) },
301 { PCI_DID_INTEL_ADL_S_ID_12, 46, VR_CFG_ALL_DOMAINS_TDC_CURRENT(39, 20) },
302 { PCI_DID_INTEL_ADL_S_ID_12, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(30, 20) },
Max Fritz573e6de2022-11-19 01:54:44 +0100303 { PCI_DID_INTEL_RPL_S_ID_1, 150, VR_CFG_ALL_DOMAINS_TDC_CURRENT(153, 22) },
304 { PCI_DID_INTEL_RPL_S_ID_1, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(140, 22) },
305 { PCI_DID_INTEL_RPL_S_ID_1, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(94, 22) },
306 { PCI_DID_INTEL_RPL_S_ID_1, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(57, 22) },
307 { PCI_DID_INTEL_RPL_S_ID_3, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(140, 22) },
308 { PCI_DID_INTEL_RPL_S_ID_3, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(94, 22) },
309 { PCI_DID_INTEL_RPL_S_ID_3, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(57, 22) },
310 { PCI_DID_INTEL_RPL_S_ID_4, 125, VR_CFG_ALL_DOMAINS_TDC_CURRENT(114, 22) },
311 { PCI_DID_INTEL_RPL_S_ID_4, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(78, 22) },
312 { PCI_DID_INTEL_RPL_S_ID_4, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(51, 22) },
313 { PCI_DID_INTEL_RPL_S_ID_5, 65, VR_CFG_ALL_DOMAINS_TDC_CURRENT(69, 22) },
314 { PCI_DID_INTEL_RPL_S_ID_5, 35, VR_CFG_ALL_DOMAINS_TDC_CURRENT(44, 22) },
V Sowmyac6d71662021-07-15 08:11:08 +0530315};
316
Jeremy Compostella9159e1c2022-06-02 16:49:48 -0700317static void fill_vr_fast_vmode(FSP_S_CONFIG *s_cfg,
318 int domain, const struct vr_config *chip_cfg)
319{
320#if CONFIG(SOC_INTEL_RAPTORLAKE)
321 s_cfg->EnableFastVmode[domain] = chip_cfg->enable_fast_vmode;
322 if (s_cfg->EnableFastVmode[domain])
323 s_cfg->IccLimit[domain] = chip_cfg->fast_vmode_i_trip;
324#endif
325}
326
V Sowmyac6d71662021-07-15 08:11:08 +0530327void fill_vr_domain_config(FSP_S_CONFIG *s_cfg,
328 int domain, const struct vr_config *chip_cfg)
329{
330 const struct vr_config *cfg;
331
332 if (domain < 0 || domain >= NUM_VR_DOMAINS)
333 return;
334
335 /* Use device tree override if requested */
336 if (chip_cfg->vr_config_enable) {
337 cfg = chip_cfg;
338
Bora Guvendikf6f12582021-09-02 13:23:03 -0700339 if (cfg->ac_loadline)
340 s_cfg->AcLoadline[domain] = cfg->ac_loadline;
341 if (cfg->dc_loadline)
342 s_cfg->DcLoadline[domain] = cfg->dc_loadline;
343 if (cfg->icc_max)
344 s_cfg->IccMax[domain] = cfg->icc_max;
Gaggery Tsai517c5a82022-09-08 13:42:08 -0700345 if (cfg->psi1threshold)
346 s_cfg->Psi1Threshold[domain] = cfg->psi1threshold;
347 if (cfg->psi2threshold)
348 s_cfg->Psi2Threshold[domain] = cfg->psi2threshold;
349 if (cfg->psi3threshold)
350 s_cfg->Psi3Threshold[domain] = cfg->psi3threshold;
V Sowmyac6d71662021-07-15 08:11:08 +0530351 s_cfg->TdcTimeWindow[domain] = cfg->tdc_timewindow;
352 s_cfg->TdcCurrentLimit[domain] = cfg->tdc_currentlimit;
V Sowmyac6d71662021-07-15 08:11:08 +0530353 } else {
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800354 uint8_t tdp = get_cpu_tdp();
Jeremy Compostella14908bf2022-06-07 10:25:43 -0700355 struct device *dev = pcidev_path_on_root(SA_DEVFN_ROOT);
356 uint16_t mch_id = dev ? pci_read_config16(dev, PCI_DEVICE_ID) : 0xffff;
V Sowmyac6d71662021-07-15 08:11:08 +0530357
358 s_cfg->AcLoadline[domain] = load_table(vr_config_ll, ARRAY_SIZE(vr_config_ll),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800359 domain, mch_id, tdp);
V Sowmyac6d71662021-07-15 08:11:08 +0530360 s_cfg->DcLoadline[domain] = load_table(vr_config_ll, ARRAY_SIZE(vr_config_ll),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800361 domain, mch_id, tdp);
V Sowmyac6d71662021-07-15 08:11:08 +0530362 s_cfg->IccMax[domain] = load_table(vr_config_icc, ARRAY_SIZE(vr_config_icc),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800363 domain, mch_id, tdp);
V Sowmyac6d71662021-07-15 08:11:08 +0530364 s_cfg->TdcTimeWindow[domain] = load_table(vr_config_tdc_timewindow,
365 ARRAY_SIZE(vr_config_tdc_timewindow),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800366 domain, mch_id, tdp);
V Sowmyac6d71662021-07-15 08:11:08 +0530367 s_cfg->TdcCurrentLimit[domain] = load_table(vr_config_tdc_currentlimit,
368 ARRAY_SIZE(vr_config_tdc_currentlimit),
Curtis Chenea1bb5f2021-11-25 13:17:42 +0800369 domain, mch_id, tdp);
Ronak Kanabar1f88a712021-07-15 19:02:22 +0530370 }
371
Jeremy Compostella9159e1c2022-06-02 16:49:48 -0700372 fill_vr_fast_vmode(s_cfg, domain, chip_cfg);
373
Ronak Kanabar1f88a712021-07-15 19:02:22 +0530374 /* Check TdcTimeWindow and TdcCurrentLimit,
375 Set TdcEnable and Set VR TDC Input current to root mean square */
376 if (s_cfg->TdcTimeWindow[domain] != 0 && s_cfg->TdcCurrentLimit[domain] != 0) {
377 s_cfg->TdcEnable[domain] = 1;
378 s_cfg->Irms[domain] = 1;
V Sowmyac6d71662021-07-15 08:11:08 +0530379 }
380}