AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Proc / CPU / Family / 0x10 / cpuF10PowerMgmt.h
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * AMD Family_10 Power Management related stuff
6  *
7  * @xrefitem bom "File Content Label" "Release Content"
8  * @e project:      AGESA
9  * @e sub-project:  CPU/F10
10  * @e \$Revision: 44324 $   @e \$Date: 2010-12-22 02:16:51 -0700 (Wed, 22 Dec 2010) $
11  *
12  */
13 /*
14  ******************************************************************************
15  *
16  * Copyright (C) 2012 Advanced Micro Devices, Inc.
17  * All rights reserved.
18  *
19  * Redistribution and use in source and binary forms, with or without
20  * modification, are permitted provided that the following conditions are met:
21  *     * Redistributions of source code must retain the above copyright
22  *       notice, this list of conditions and the following disclaimer.
23  *     * Redistributions in binary form must reproduce the above copyright
24  *       notice, this list of conditions and the following disclaimer in the
25  *       documentation and/or other materials provided with the distribution.
26  *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
27  *       its contributors may be used to endorse or promote products derived
28  *       from this software without specific prior written permission.
29  *
30  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
31  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
33  * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
34  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
35  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
36  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
37  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  ******************************************************************************
42  */
43
44 #ifndef _CPUF10POWERMGMT_H_
45 #define _CPUF10POWERMGMT_H_
46
47 /*
48  * Family 10h CPU Power Management MSR definitions
49  *
50  */
51
52 /* Interrupt Pending and CMP-Halt MSR Register 0xC0010055 */
53 #define MSR_INTPEND 0xC0010055
54
55 /// Interrupt Pending and CMP-Halt MSR Register
56 typedef struct {
57   UINT64 IoMsgAddr:16;               ///< IO message address
58   UINT64 IoMsgData:8;                ///< IO message data
59   UINT64 IntrPndMsgDis:1;            ///< Interrupt pending message disable
60   UINT64 IntrPndMsg:1;               ///< Interrupt pending message
61   UINT64 IoRd:1;                     ///< IO read
62   UINT64 SmiOnCmpHalt:1;             ///< SMI on chip multi-processing halt
63   UINT64 C1eOnCmpHalt:1;             ///< C1E on chip multi-processing halt
64   UINT64 BmStsClrOnHltEn:1;          ///< Clear BM status bit on server C1e entry
65   UINT64 :34;                        ///< Reserved
66 } INTPEND_MSR;
67
68
69 /* P-state Current Limit Register 0xC0010061 */
70 #define MSR_PSTATE_CURRENT_LIMIT 0xC0010061
71
72 /// Pstate Current Limit MSR Register
73 typedef struct {
74   UINT64 CurPstateLimit:3;           ///< Current Pstate Limit
75   UINT64 :1;                         ///< Reserved
76   UINT64 PstateMaxVal:3;             ///< Pstate Max Value
77   UINT64 :57;                        ///< Reserved
78 } PSTATE_CURLIM_MSR;
79
80
81 /* P-state Control Register 0xC0010062 */
82 #define MSR_PSTATE_CTL 0xC0010062
83
84 /// Pstate Control MSR Register
85 typedef struct {
86   UINT64 PstateCmd:3;                ///< Pstate change command
87   UINT64 :61;                        ///< Reserved
88 } PSTATE_CTRL_MSR;
89
90
91 /* P-state Status Register 0xC0010063 */
92 #define MSR_PSTATE_STS 0xC0010063
93
94 /// Pstate Status MSR Register
95 typedef struct {
96   UINT64 CurPstate:3;                ///< Current Pstate
97   UINT64 :61;                        ///< Reserved
98 } PSTATE_STS_MSR;
99
100
101 /* P-state Registers 0xC001006[8:4] */
102 #define MSR_PSTATE_0 0xC0010064
103 #define MSR_PSTATE_1 0xC0010065
104 #define MSR_PSTATE_2 0xC0010066
105 #define MSR_PSTATE_3 0xC0010067
106 #define MSR_PSTATE_4 0xC0010068
107
108 #define PS_REG_BASE MSR_PSTATE_0     /* P-state Register base */
109 #define PS_MAX_REG  MSR_PSTATE_4     /* Maximum P-State Register */
110 #define PS_MIN_REG  MSR_PSTATE_0     /* Minimum P-State Register */
111 #define NM_PS_REG 5                  /* number of P-state MSR registers */
112
113 /// Pstate MSR
114 typedef struct {
115   UINT64 CpuFid:6;                   ///< CpuFid
116   UINT64 CpuDid:3;                   ///< CpuDid
117   UINT64 CpuVid:7;                   ///< CpuVid
118   UINT64 :6;                         ///< Reserved
119   UINT64 NbDid:1;                    ///< NbDid
120   UINT64 :2;                         ///< Reserved
121   UINT64 NbVid:7;                    ///< NbVid
122   UINT64 IddValue:8;                 ///< IddValue
123   UINT64 IddDiv:2;                   ///< IddDiv
124   UINT64 :21;                        ///< Reserved
125   UINT64 PsEnable:1;                 ///< Pstate Enable
126 } PSTATE_MSR;
127
128
129 /* COFVID Control Register 0xC0010070 */
130 #define MSR_COFVID_CTL 0xC0010070
131
132 /// COFVID Control MSR Register
133 typedef struct {
134   UINT64 CpuFid:6;                   ///< CpuFid
135   UINT64 CpuDid:3;                   ///< CpuDid
136   UINT64 CpuVid:7;                   ///< CpuVid
137   UINT64 PstateId:3;                 ///< Pstate ID
138   UINT64 :3;                         ///< Reserved
139   UINT64 NbDid:1;                    ///< NbDid
140   UINT64 :2;                         ///< Reserved
141   UINT64 NbVid:7;                    ///< NbVid
142   UINT64 :32;                        ///< Reserved
143 } COFVID_CTRL_MSR;
144
145
146 /* COFVID Status Register 0xC0010071 */
147 #define MSR_COFVID_STS 0xC0010071
148
149 /// COFVID Status MSR Register
150 typedef struct {
151   UINT64 CurCpuFid:6;                ///< Current CpuFid
152   UINT64 CurCpuDid:3;                ///< Current CpuDid
153   UINT64 CurCpuVid:7;                ///< Current CpuVid
154   UINT64 CurPstate:3;                ///< Current Pstate
155   UINT64 :3;                         ///< Reserved
156   UINT64 CurNbDid:1;                 ///< Current NbDid
157   UINT64 :2;                         ///< Reserved
158   UINT64 CurNbVid:7;                 ///< Current NbVid
159   UINT64 StartupPstate:3;            ///< Startup Pstate
160   UINT64 MaxVid:7;                   ///< MaxVid
161   UINT64 MinVid:7;                   ///< MinVid
162   UINT64 MaxCpuCof:6;                ///< MaxCpuCof
163   UINT64 :1;                         ///< Reserved
164   UINT64 CurPstateLimit:3;           ///< Current Pstate Limit
165   UINT64 MaxNbFid:5;                 ///< MaxNbFid
166 } COFVID_STS_MSR;
167
168 /* C-state Address Register 0xC0010073 */
169 #define MSR_CSTATE_ADDRESS 0xC0010073
170
171 /// C-state Address MSR Register
172 typedef struct {
173   UINT64 CstateAddr:16;              ///< C-state address
174   UINT64 :48;                        ///< Reserved
175 } CSTATE_ADDRESS_MSR;
176
177 /*
178  * Family 10h CPU Power Management PCI definitions
179  *
180  */
181
182 /* DRAM Configuration High Register F2x[1,0]94 */
183 #define DRAM_CFG_HI_REG0 0x94
184 #define DRAM_CFG_HI_REG1 0x194
185
186 /// DRAM Configuration High PCI Register
187 typedef struct {
188   UINT32 MemClkFreq:3;               ///< Memory clock frequency
189   UINT32 MemClkFreqVal:1;            ///< Memory clock frequency valid
190   UINT32 :4;                         ///< Reserved
191   UINT32 Ddr3Mode:1;                 ///< DDR3 mode
192   UINT32 LegacyBiosMode:1;           ///< Legacy BIOS mode
193   UINT32 ZqcsInterval:2;             ///< ZQ calibration short interval
194   UINT32 RDqsEn:1;                   ///< Read DQS enable
195   UINT32 DisSimulRdWr:1;             ///< Disable simultaneous read and write
196   UINT32 DisDramInterface:1;         ///< Disable the DRAM interface
197   UINT32 PowerDownEn:1;              ///< Power down mode enable
198   UINT32 PowerDownMode:1;            ///< Power down mode
199   UINT32 :1;                         ///< Reserved
200   UINT32 FourRankRDimm:1;            ///< Four rank registered DIMM connected
201   UINT32 DcqArbBypassEn:1;           ///< DRAM controller arbiter bypass enable
202   UINT32 SlowAccessMode:1;           ///< Slow access mode
203   UINT32 FreqChgInProg:1;            ///< Frequency change in progress
204   UINT32 BankSwizzleMode:1;          ///< Bank swizzle mode
205   UINT32 ProcOdtDis:1;               ///< Processor on-die termination disable
206   UINT32 DcqBypassMax:4;             ///< DRAM controller queue bypass maximum
207   UINT32 FourActWindow:4;            ///< Four bank activate window
208 } DRAM_CFG_HI_REGISTER;
209
210
211 /* Extended Memory Controller Configuration Low Register F2x1B0 */
212 #define EXT_MEMCTRL_CFG_LOW_REG 0x1B0
213
214 /// Extended Memory Controller Configuration Low PCI Register
215 typedef struct {
216   UINT32 AdapPrefMissRatio:2;        ///< Adaptive prefetch miss ratio
217   UINT32 AdapPrefPositiveStep:2;     ///< Adaptive prefetch positive step
218   UINT32 AdapPrefNegativeStep:2;     ///< Adaptive prefetch negative step
219   UINT32 :2;                         ///< Reserved
220   UINT32 CohPrefPrbLmt:3;            ///< Coherent prefetch probe limit
221   UINT32 DisIoCohPref:1;             ///< Disable coherent prefetched for IO
222   UINT32 EnSplitDctLimits:1;         ///< Split DCT write limits enable
223   UINT32 SpecPrefDis:1;              ///< Speculative prefetch disable
224   UINT32 SpecPrefMis:1;              ///< Speculative prefetch predict miss
225   UINT32 SpecPrefThreshold:3;        ///< Speculative prefetch threshold
226   UINT32 :4;                         ///< Reserved
227   UINT32 PrefFourConf:3;             ///< Prefetch four-ahead confidence
228   UINT32 PrefFiveConf:3;             ///< Prefetch five-ahead confidence
229   UINT32 DcqBwThrotWm:4;             ///< Dcq bandwidth throttle watermark
230 } EXT_MEMCTRL_CFG_LOW_REGISTER;
231
232
233 /* Scrub Rate Control Register F3x58 */
234 #define SCRUB_RATE_CTRL_REG 0x58
235
236 /// Scrub Rate Control PCI Register
237 typedef struct {
238   UINT32 DramScrub:5;                ///< DRAM scrub rate
239   UINT32 :3;                         ///< Reserved
240   UINT32 L2Scrub:5;                  ///< L2 cache scrub rate
241   UINT32 :3;                         ///< Reserved
242   UINT32 DcacheScrub:5;              ///< Data cache scrub rate
243   UINT32 :3;                         ///< Reserved
244   UINT32 L3Scrub:5;                  ///< L3 cache scrub rate
245   UINT32 :3;                         ///< Reserved
246 } SCRUB_RATE_CTRL_REGISTER;
247
248 /* DRAM Scrub Address Low Register F3x5C */
249 #define DRAM_SCRUB_ADDR_LOW_REG 0x5C
250
251 /// DRAM Scrub Address Low PCI Register
252 typedef struct {
253   UINT32 ScrubReDirEn:1;             ///< DRAM scrubber redirect enable
254   UINT32 :5;                         ///< Reserved
255   UINT32 ScrubAddrLo:26;             ///< DRAM scrubber address bits[31:6]
256 } DRAM_SCRUB_ADDR_LOW_REGISTER;
257
258
259 /* Hardware thermal control register F3x64 */
260 #define HTC_REG 0x64
261 #define HTC_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, HTC_REG))
262
263 /// Hardware Thermal Control PCI Register
264 typedef struct {
265   UINT32 HtcEn:1;                    ///< HTC Enable
266   UINT32 :3;                         ///< Reserved
267   UINT32 HtcAct:1;                   ///< HTC Active State
268   UINT32 HtcActSts:1;                ///< HTC Active Status
269   UINT32 PslApicHiEn:1;              ///< P-state limit higher APIC int enable
270   UINT32 PslApicLoEn:1;              ///< P-state limit lower APIC int enable
271   UINT32 :8;                         ///< Reserved
272   UINT32 HtcTmpLmt:7;                ///< HTC temperature limit
273   UINT32 HtcSlewSel:1;               ///< HTC slew-controlled temp select
274   UINT32 HtcHystLmt:4;               ///< HTC hysteresis
275   UINT32 HtcPstateLimit:3;           ///< HTC P-state limit select
276   UINT32 :1;                         ///< Reserved
277 } HTC_REGISTER;
278
279
280 /* Software thermal control register F3x68 */
281 #define STC_REG 0x68
282
283 /// Software Thermal Control PCI Register
284 typedef struct {
285   UINT32 StcSbcTmpHiEn:1;            ///< STC SBC temperature high enable
286   UINT32 StcSbcTmpLoEn:1;            ///< STC SBC temperature low enable
287   UINT32 StcApcTmpHiEn:1;            ///< STC APIC temperature high enable
288   UINT32 StcApcTmpLoEn:1;            ///< STC APIC temperature low enable
289   UINT32 :1;                         ///< Reserved
290   UINT32 StcPstateEn:1;              ///< STC P-state enable
291   UINT32 StcTmpHiSts:1;              ///< STC temperature high status
292   UINT32 StcTmpLoSts:1;              ///< STC temperature low status
293   UINT32 :8;                         ///< Reserved
294   UINT32 StcTmpLmt:7;                ///< STC temperature limit
295   UINT32 StcSlewSel:1;               ///< STC slew-controlled temp select
296   UINT32 StcHystLmt:4;               ///< STC hysteresis
297   UINT32 StcPstateLimit:3;           ///< STC P-state limit select
298   UINT32 :1;                         ///< Reserved
299 } STC_REGISTER;
300
301 /* ACPI Power State Control Registers F3x84:80 */
302
303 /// System Management Action Field (SMAF) Register
304 typedef struct {
305   UINT8 CpuPrbEn:1;                  ///< CPU direct probe enable
306   UINT8 NbLowPwrEn:1;                ///< Northbridge low-power enable
307   UINT8 NbGateEn:1;                  ///< Northbridge gate enable
308   UINT8 NbCofChg:1;                  ///< NbCofChg
309   UINT8 AltVidEn:1;                  ///< alternate VID enable
310   UINT8 ClkDivisor:3;                ///< Clock divisor
311 } SMAF_REGISTER;
312
313 /// union type for ACPI State SMAF setting
314 typedef union {
315   UINT8 SMAFValue;                   ///< SMAF raw value
316   SMAF_REGISTER SMAF;                ///< SMAF structure
317 } ACPI_STATE_SMAF;
318
319 /// ACPI Power State Control Register F3x80
320 typedef struct {
321   ACPI_STATE_SMAF C2;                ///< [7:0]   SMAF Code 000b - C2
322   ACPI_STATE_SMAF C3C1eLinkInit;     ///< [15:8]  SMAF Code 001b - C3, C1e or Link init
323   ACPI_STATE_SMAF FidVidChg;         ///< [23:16] SMAF Code 010b - FIDVID Change
324   ACPI_STATE_SMAF S1;                ///< [31:24] SMAF Code 011b - S1
325 } ACPI_PSC_0_REGISTER;
326
327 /// ACPI Power State Control Register F3x84
328 typedef struct {
329   ACPI_STATE_SMAF S3;                 ///< [7:0]   SMAF Code 100b - S3
330   ACPI_STATE_SMAF Throttling;         ///< [15:8]  SMAF Code 101b - Throttling
331   ACPI_STATE_SMAF S4S5;               ///< [23:16] SMAF Code 110b - S4/S5
332   ACPI_STATE_SMAF C1;                 ///< [31:24] SMAF Code 111b - C1
333 } ACPI_PSC_4_REGISTER;
334
335
336 /* Power Control Miscellaneous Register F3xA0 */
337 #define PW_CTL_MISC_REG 0xA0
338 #define PW_CTL_MISC_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, PW_CTL_MISC_REG))
339
340 /// Power Control Miscellaneous PCI Register
341 typedef struct {
342   UINT32 PsiVid:7;                   ///< PSI_L VID threshold
343   UINT32 PsiVidEn:1;                 ///< PSI_L VID enable
344   UINT32 PviMode:1;                  ///< Parallel VID interface mode
345   UINT32 SviHighFreqSel:1;           ///< SVI high frequency select
346   UINT32 IdleExitEn:1;               ///< IDLEEXIT_L Enable
347   UINT32 PllLockTime:3;              ///< PLL synchronization lock time
348   UINT32 BpPinsTriEn:1;              ///< Breakpoint pins tristate enable
349   UINT32 :1;                         ///< Reserved
350   UINT32 PstateId:12;                ///< Pstate ID
351   UINT32 :1;                         ///< Reserved
352   UINT32 SlamVidMode:1;              ///< Slam voltage ID mode
353   UINT32 :1;                         ///< Reserved
354   UINT32 CofVidProg:1;               ///< COF and VID of Pstate programmed
355 } POWER_CTRL_MISC_REGISTER;
356
357 /* Popup P-state Register F3xA8 */
358 #define POPUP_PSTATE_REG 0xA8
359 #define POPUP_PSTATE_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, POPUP_PSTATE_REG))
360
361 /// Popup P-state Register
362 typedef struct {
363   UINT32 PopupEn:1;                  ///< Popup enable
364   UINT32 :1;                         ///< Reserved
365   UINT32 PopupPstate:3;              ///< Popup P-state
366   UINT32 PopupCpuVid:7;              ///< Popup core VID
367   UINT32 PopupCpuFid:6;              ///< Popup core FID
368   UINT32 PopupCpuDid:3;              ///< Popup core DID
369   UINT32 :6;                         ///< Reserved
370   UINT32 CacheFlushPopDownEn:1;      ///< Cache Flush PopDown P-state Enable
371   UINT32 :1;                         ///< Reserved
372   UINT32 PopDownPstate:3;            ///< Pop-down P-state number
373 } POPUP_PSTATE_REGISTER;
374
375 /* Clock Power/Timing Control 0 Register F3xD4 */
376 #define CPTC0_REG 0xD4
377
378 /// Clock Power Timing Control PCI Register
379 typedef struct {
380   UINT32 NbFid:5;                    ///< NbFid
381   UINT32 NbFidEn:1;                  ///< NbFidEn
382   UINT32 :2;                         ///< Reserved
383   UINT32 ClkRampHystSel:4;           ///< Clock Ramp Hysteresis Select
384   UINT32 ClkRampHystCtl:1;           ///< Clock Ramp Hysteresis Control
385   UINT32 MTC1eEn:1;                  ///< Message Triggered C1e Enable
386   UINT32 CacheFlushImmOnAllHalt:1;   ///< Cache Flush Immediate on All Halt
387   UINT32 StutterScrubEn:1;           ///< Stutter Mode Scrub Enable
388   UINT32 LnkPllLock:2;               ///< Link PLL Lock
389   UINT32 :2;                         ///< Reserved
390   UINT32 PowerStepDown:4;            ///< Power Step Down
391   UINT32 PowerStepUp:4;              ///< Power Step Up
392   UINT32 NbClkDiv:3;                 ///< NbClkDiv
393   UINT32 NbClkDivApplyAll:1;         ///< NbClkDivApplyAll
394 } CLK_PWR_TIMING_CTRL_REGISTER;
395
396
397 /* Clock Power/Timing Control 1 Register F3xD8 */
398 #define CPTC1_REG 0xD8
399
400 /// Clock Power Timing Control 1 PCI Register
401 typedef struct {
402   UINT32 VSSlamTime:3;               ///< Voltage stabilization slam time
403   UINT32 :1;                         ///< Reserved
404   UINT32 VSRampTime:3;               ///< Voltage stabilization ramp time
405   UINT32 :1;                         ///< Reserved
406   UINT32 TdpVid:7;                   ///< Thermal design power VID
407   UINT32 :1;                         ///< Reserved
408   UINT32 AltVidStart:7;              ///< Alternate VID start limit
409   UINT32 :1;                         ///< Reserved
410   UINT32 ReConDel:4;                 ///< Link reconnect delay
411   UINT32 PwrPlanes:1;                ///< Power planes
412   UINT32 :3;                         ///< Reserved
413 } CLK_PWR_TIMING_CTRL1_REGISTER;
414
415
416 /* Clock Power/Timing Control 2 Register F3xDC */
417 #define CPTC2_REG 0xDC
418 #define CPTC2_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, CPTC2_REG))
419 /// Clock Power Timing Control 2 PCI Register
420 typedef struct {
421   UINT32 AltVid:7;                   ///< Alternate VID
422   UINT32 :1;                         ///< Reserved
423   UINT32 PstateMaxVal:3;             ///< P-state maximum value
424   UINT32 :1;                         ///< Reserved
425   UINT32 NbsynPtrAdj:3;              ///< NB/Core sync FIFO ptr adjust
426   UINT32 :1;                         ///< Reserved
427   UINT32 CacheFlushOnHaltCtl:3;      ///< Cache flush on halt control
428   UINT32 CacheFlushOnHaltTmr:7;      ///< Cache flush on halt timer
429   UINT32 :1;                         ///< Reserved
430   UINT32 SlamTimeMode:2;             ///< Slam time mode
431   UINT32 AltvidVSSlamTime:3;         ///< Altvid voltage stabilization slam time
432 } CLK_PWR_TIMING_CTRL2_REGISTER;
433
434
435 /* Northbridge Capabilities Register F3xE8 */
436 #define NB_CAPS_REG 0xE8
437
438 /// Northbridge Capabilities PCI Register
439 typedef struct {
440   UINT32 DctDualCap:1;               ///< Two-channel DRAM capable
441   UINT32 DualNodeCap:1;              ///< Dual-node multi-processor capable
442   UINT32 EightNodeCap:1;             ///< Eight-node multi-processor capable
443   UINT32 EccCapable:1;               ///< ECC capable
444   UINT32 ChipkillCapable:1;          ///< Chipkill ECC capable
445   UINT32 DdrMaxRate:3;               ///< Maximum DRAM data rate
446   UINT32 MctCap:1;                   ///< Memory controller capable
447   UINT32 SvmCapable:1;               ///< SVM capable
448   UINT32 HtcCapable:1;               ///< HTC capable
449   UINT32 LnkRtryCap:1;               ///< Link error-retry capable
450   UINT32 CmpCapLo:2;                 ///< CMP capable[1:0]
451   UINT32 MultiVidPlaneCap:1;         ///< Multiple VID plane capable
452   UINT32 CmpCapHi:1;                 ///< CMP capable[2]
453   UINT32 MpCap:3;                    ///< MP capability
454   UINT32 :1;                         ///< Reserved
455   UINT32 UnGangEn:4;                 ///< Link unganging enabled
456   UINT32 :1;                         ///< Reserved
457   UINT32 L3Capable:1;                ///< L3 capable
458   UINT32 HtAcCapable:1;              ///< HT AC capable
459   UINT32 :2;                         ///< Reserved
460   UINT32 MultiNodeCpu:1;             ///< Multinode processor
461   UINT32 IntNodeNum:2;               ///< Internal node number
462 } NB_CAPS_REGISTER;
463
464
465 /* NB Extended Configuration Low Register F3x188 */
466 #define NB_EXT_CFG_LO_REG 0x188
467
468 /// Northbridge Extended Configuration Low PCI Register
469 typedef struct {
470   UINT32 :4;                         ///< Reserved
471   UINT32 EnStpGntOnFlushMaskWakeup:1; ///< Enable stop grant on flush mask wakeup
472   UINT32 :27;                        ///< Reserved
473 } NB_EXT_CFG_LO_REGISTER;
474
475
476 /* L3 Cache Parameter Register F3x1C4 */
477 #define L3_CACHE_PARAM_REG 0x1C4
478
479 /// L3 Cache Parameter PCI Register
480 typedef struct {
481   UINT32 L3SubcacheSize0:1;          ///< L3 subcache size 0
482   UINT32 :3;                         ///< Reserved
483   UINT32 L3SubcacheSize1:1;          ///< L3 subcache size 1
484   UINT32 :3;                         ///< Reserved
485   UINT32 L3SubcacheSize2:2;          ///< L3 subcache size 2
486   UINT32 :2;                         ///< Reserved
487   UINT32 L3SubcacheSize3:2;          ///< L3 subcache size 3
488   UINT32 :17;                        ///< Reserved
489   UINT32 L3TagInit:1;                ///< L3 tag initialization
490 } L3_CACHE_PARAM_REGISTER;
491
492
493 /* Probe Filter Control Register F3x1D4 */
494 #define PROBE_FILTER_CTRL_REG 0x1D4
495
496 /// Probe Filter Control PCI Register
497 typedef struct {
498   UINT32 PFMode:2;                   ///< Probe Filter Mode
499   UINT32 PFWayNum:2;                 ///< Probe Filter way number
500   UINT32 PFSubCacheSize0:2;          ///< Probe filter subcache 0 size
501   UINT32 PFSubCacheSize1:2;          ///< Probe filter subcache 1 size
502   UINT32 PFSubCacheSize2:2;          ///< Probe filter subcache 2 size
503   UINT32 PFSubCacheSize3:2;          ///< Probe filter subcache 3 size
504   UINT32 PFSubCacheEn:4;             ///< Probe filter subcache enable
505   UINT32 :3;                         ///< Reserved
506   UINT32 PFInitDone:1;               ///< Probe filter initialization done
507   UINT32 PFPreferredSORepl:2;        ///< PF preferredSO replacement mode
508   UINT32 PFErrInt:2;                 ///< Probe filter error interrupt type
509   UINT32 PFErrIntLvtOff:4;           ///< Probe filter error interrupt LVT offset
510   UINT32 PFEccError:1;               ///< Probe filter ECC error
511   UINT32 PFLoIndexHashEn:1;          ///< Probe filter low index hash enable
512   UINT32 :2;                         ///< Reserved
513 } PROBE_FILTER_CTRL_REGISTER;
514
515
516 /* Product Info Register F3x1FC */
517 #define PRCT_INFO_REG 0x1FC
518 #define PRCT_INFO_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, PRCT_INFO_REG))
519
520 /// Product Information PCI Register
521 typedef struct {
522   UINT32 NbCofVidUpdate:1;           ///< NbCofVidUpdate
523   UINT32 NbVidUpdateAll:1;           ///< NbVidUpdateAll
524   UINT32 SinglePlaneNbFid:5;         ///< SinglePlaneNbFid
525   UINT32 SinglePlaneNbVid:7;         ///< SinglePlaneNbVid
526   UINT32 DualPlaneNbFidOff:3;        ///< DualPlaneNbFidOff
527   UINT32 DualPlaneNbVidOff:5;        ///< DualPlaneNbVidOff
528   UINT32 SinglePlaneNbIdd:4;         ///< SinglePlaneNbIdd
529 } PRODUCT_INFO_REGISTER;
530
531 /* Core Performance Boost Control Register D18F4x15C */
532 #define CPB_CTRL_REG 0x15C
533 #define CPB_CTRL_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_4, CPB_CTRL_REG))
534
535 /// Core Performance Boost Control Register
536 typedef struct {
537   UINT32 BoostSrc:2;                 ///< Boost source
538   UINT32 NumBoostStates:1;           ///< Number of boosted states
539   UINT32 :27;                        ///< Reserved
540   UINT32 BoostLock:1;                ///< Boost Lock
541 } CPB_CTRL_REGISTER;
542 #endif /* _CPUF10POWERMGMT_H */
543
544 /* Boost Offset Register F3x10C */
545 #define F3x10C_REG 0x10C
546 #define F3x10C_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, F3x10C_REG))
547