1 ; ****************************************************************************
5 ; * Agesa structures and definitions
7 ; * Contains AMD AGESA core interface
9 ; * @xrefitem bom "File Content Label" "Release Content"
11 ; * @e sub-project: Include
12 ; * @e \$Revision: 60222 $ @e \$Date: 2011-10-10 23:39:36 -0600 (Mon, 10 Oct 2011) $
14 ; ****************************************************************************
16 ; * Copyright (C) 2012 Advanced Micro Devices, Inc.
17 ; * All rights reserved.
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.
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.
42 ; **************************************************************************
45 UINT64 TEXTEQU <QWORD>
46 UINT32 TEXTEQU <DWORD>
50 BOOLEAN TEXTEQU <BYTE>
51 POINTER TEXTEQU <DWORD>
53 ; AGESA Types and Definitions
57 ; AGESA BASIC CALLOUTS
58 AGESA_MEM_RELEASE EQU 00028000h
60 ; AGESA ADVANCED CALLOUTS, Processor
61 AGESA_CHECK_UMA EQU 00028100h
62 AGESA_DO_RESET EQU 00028101h
63 AGESA_ALLOCATE_BUFFER EQU 00028102h
64 AGESA_DEALLOCATE_BUFFER EQU 00028103h
65 AGESA_LOCATE_BUFFER EQU 00028104h
66 AGESA_RUNFUNC_ONAP EQU 00028105h
68 ; AGESA ADVANCED CALLOUTS, HyperTransport
70 ; AGESA ADVANCED CALLOUTS, Memory
71 AGESA_READ_SPD EQU 00028140h
72 AGESA_HOOKBEFORE_DRAM_INIT EQU 00028141h
73 AGESA_HOOKBEFORE_DQS_TRAINING EQU 00028142h
74 AGESA_READ_SPD_RECOVERY EQU 00028143h
75 AGESA_HOOKBEFORE_EXIT_SELF_REF EQU 00028144h
76 AGESA_HOOKBEFORE_DRAM_INIT_RECOVERY EQU 00028145h
77 AGESA_EXTERNAL____TRAIN_VREF_CHANGE EQU 00028146h
80 AGESA_GET_IDS_INIT_DATA EQU 00028200h
83 AGESA_GNB_PCIE_SLOT_RESET EQU 00028301h
86 AGESA_FCH_OEM_CALLOUT EQU 00028401h
88 ; ------------------------------------------------------------------------
90 ; HyperTransport Interface
94 ; -----------------------------------------------------------------------------
95 ; HT DEFINITIONS AND MACROS
97 ; -----------------------------------------------------------------------------
100 ; Width equates for call backs
101 HT_WIDTH_8_BITS EQU 8
102 HT_WIDTH_16_BITS EQU 16
103 HT_WIDTH_4_BITS EQU 4
104 HT_WIDTH_2_BITS EQU 2
105 HT_WIDTH_NO_LIMIT EQU HT_WIDTH_16_BITS
107 ; Frequency Limit equates for call backs which take a frequency supported mask.
108 HT_FREQUENCY_LIMIT_200M EQU 1
109 HT_FREQUENCY_LIMIT_400M EQU 7
110 HT_FREQUENCY_LIMIT_600M EQU 1Fh
111 HT_FREQUENCY_LIMIT_800M EQU 3Fh
112 HT_FREQUENCY_LIMIT_1000M EQU 7Fh
113 HT_FREQUENCY_LIMIT_HT1_ONLY EQU 7Fh
114 HT_FREQUENCY_LIMIT_1200M EQU 0FFh
115 HT_FREQUENCY_LIMIT_1400M EQU 1FFh
116 HT_FREQUENCY_LIMIT_1600M EQU 3FFh
117 HT_FREQUENCY_LIMIT_1800M EQU 7FFh
118 HT_FREQUENCY_LIMIT_2000M EQU 0FFFh
119 HT_FREQUENCY_LIMIT_2200M EQU 1FFFh
120 HT_FREQUENCY_LIMIT_2400M EQU 3FFFh
121 HT_FREQUENCY_LIMIT_2600M EQU 7FFFh
122 HT_FREQUENCY_LIMIT_2800M EQU 27FFFh
123 HT_FREQUENCY_LIMIT_3000M EQU 67FFFh
124 HT_FREQUENCY_LIMIT_3200M EQU 0E7FFFh
125 HT_FREQUENCY_LIMIT_3600M EQU 1E7FFFh
126 HT_FREQUENCY_LIMIT_MAX EQU HT_FREQUENCY_LIMIT_3600M
127 HT_FREQUENCY_NO_LIMIT EQU 0FFFFFFFFh
129 ; Unit ID Clumping special values
130 HT_CLUMPING_DISABLE EQU 00000000h
131 HT_CLUMPING_NO_LIMIT EQU 0FFFFFFFFh
133 HT_LIST_TERMINAL EQU 0FFh
134 HT_LIST_MATCH_ANY EQU 0FEh
135 HT_LIST_MATCH_INTERNAL_LINK EQU 0FDh
137 ; Event Notify definitions
141 ; Coherent subfunction events
142 HT_EVENT_COH_EVENTS EQU 10001000h
143 HT_EVENT_COH_NO_TOPOLOGY EQU 10011000h
144 HT_EVENT_COH_OBSOLETE000 EQU 10021000h
145 HT_EVENT_COH_PROCESSOR_TYPE_MIX EQU 10031000h
146 HT_EVENT_COH_NODE_DISCOVERED EQU 10041000h
147 HT_EVENT_COH_MPCAP_MISMATCH EQU 10051000h
149 ; Non-coherent subfunction events
150 HT_EVENT_NCOH_EVENTS EQU 10002000h
151 HT_EVENT_NCOH_BUID_EXCEED EQU 10012000h
152 HT_EVENT_NCOH_OBSOLETE000 EQU 10022000h
153 HT_EVENT_NCOH_BUS_MAX_EXCEED EQU 10032000h
154 HT_EVENT_NCOH_CFG_MAP_EXCEED EQU 10042000h
155 HT_EVENT_NCOH_DEVICE_FAILED EQU 10052000h
156 HT_EVENT_NCOH_AUTO_DEPTH EQU 10062000h
158 ; Optimization subfunction events
159 HT_EVENT_OPT_EVENTS EQU 10003000h
160 HT_EVENT_OPT_REQUIRED_CAP_RETRY EQU 10013000h
161 HT_EVENT_OPT_REQUIRED_CAP_GEN3 EQU 10023000h
162 HT_EVENT_OPT_UNUSED_LINKS EQU 10033000h
163 HT_EVENT_OPT_LINK_PAIR_EXCEED EQU 10043000h
166 HT_EVENT_HW_EVENTS EQU 10004000h
167 HT_EVENT_HW_SYNCFLOOD EQU 10014000h
168 HT_EVENT_HW_HTCRC EQU 10024000h
170 ; The Recovery HT component uses 0x10005000 for events.
171 ; For consistency, we avoid that range here.
173 HT_MAX_NC_BUIDS EQU 32
174 ; ----------------------------------------------------------------------------
175 ; HT TYPEDEFS, STRUCTURES, ENUMS
177 ; ----------------------------------------------------------------------------
178 MATCHED EQU 0 ; < The link matches the requested customization.
179 POWERED_OFF EQU 1 ; < Power the link off.
180 UNMATCHED EQU 2 ; < The link should be processed according to normal defaults.
181 MaxFinalLinkState EQU 3 ; < Not a final link state, use for limit checking.
182 FINAL_LINK_STATE TEXTEQU <DWORD>
184 ; Swap a device from its current id to a new one.
186 BUID_SWAP_ITEM STRUCT
187 FromId UINT8 ? ; < The device responding to FromId,
188 ToId UINT8 ? ; < will be moved to ToId.
192 ; Each Non-coherent chain may have a list of device swaps. After performing the swaps,
193 ; the final in order list of device ids is provided. (There can be more swaps than devices.)
194 ; The unused entries in both are filled with 0xFF.
196 BUID_SWAP_LIST STRUCT
197 Swaps BUID_SWAP_ITEM (HT_MAX_NC_BUIDS) DUP ({}) ; < The BUID Swaps to perform
198 FinalIds UINT8 (HT_MAX_NC_BUIDS) DUP (?) ; < The ordered final BUIDs, resulting from the swaps
202 ; Control Manual Initialization of Non-Coherent Chains
204 ; This interface is checked every time a non-coherent chain is
205 ; processed. BUID assignment may be controlled explicitly on a
206 ; non-coherent chain. Provide a swap list. Swaps controls the
207 ; BUID assignment and FinalIds provides the device to device
208 ; Linking. Device orientation can be detected automatically, or
209 ; explicitly. See interface documentation for more details.
211 ; If a manual swap list is not supplied,
212 ; automatic non-coherent init assigns BUIDs starting at 1 and incrementing sequentially
213 ; based on each device's unit count.
215 MANUAL_BUID_SWAP_LIST STRUCT
217 Socket UINT8 ? ; < The Socket on which this chain is located
218 Link UINT8 ? ; < The Link on the host for this chain
220 SwapList BUID_SWAP_LIST {} ; < The swap list
221 MANUAL_BUID_SWAP_LIST ENDS
224 ; Override options for DEVICE_CAP_OVERRIDE.
226 ; Specify which override actions should be performed. For Checks, 1 means to check the item
227 ; and 0 means to skip the check. For the override options, 1 means to apply the override and
228 ; 0 means to ignore the override.
230 DEVICE_CAP_OVERRIDE_OPTIONS STRUCT
231 IsCheckDevVenId UINT32 ?
232 ; IN UINT32 IsCheckDevVenId:1; ; < Check Match on Device/Vendor id
233 ; IN UINT32 IsCheckRevision:1; ; < Check Match on device Revision
234 ; IN UINT32 IsOverrideWidthIn:1; ; < Override Width In
235 ; IN UINT32 IsOverrideWidthOut:1; ; < Override Width Out
236 ; IN UINT32 IsOverrideFreq:1; ; < Override Frequency
237 ; IN UINT32 IsOverrideClumping:1; ; < Override Clumping
238 ; IN UINT32 IsDoCallout:1; ; < Make the optional callout
239 DEVICE_CAP_OVERRIDE_OPTIONS ENDS
241 ; Override capabilities of a device.
243 ; This interface is checked once for every Link on every IO device.
244 ; Provide the width and frequency capability if needed for this device.
245 ; This is used along with device capabilities, the limit interfaces, and northbridge
246 ; limits to compute the default settings. The components of the device's PCI config
247 ; address are provided, so its settings can be consulted if need be.
248 ; The optional callout is a catch all.
250 DEVICE_CAP_OVERRIDE STRUCT
252 HostSocket UINT8 ? ; < The Socket on which this chain is located.
253 HostLink UINT8 ? ; < The Link on the host for this chain.
254 Depth UINT8 ? ; < The Depth in the I/O chain from the Host.
255 DevVenId UINT32 ? ; < The Device's PCI Vendor + Device ID (offset 0x00).
256 Revision UINT8 ? ; < The Device's PCI Revision field (offset 0x08).
257 Link UINT8 ? ; < The Device's Link number (0 or 1).
258 Options DEVICE_CAP_OVERRIDE_OPTIONS {} ; < The options for this device override.
260 LinkWidthIn UINT8 ? ; < modify to change the Link Width In.
261 LinkWidthOut UINT8 ? ; < modify to change the Link Width Out.
262 FreqCap UINT32 ? ; < modify to change the Link's frequency capability.
263 Clumping UINT32 ? ; < modify to change Unit ID clumping support.
264 Callout CALLOUT_ENTRY ? ; < optional call for really complex cases, or NULL.
265 DEVICE_CAP_OVERRIDE ENDS
267 ; Callout param struct for override capabilities of a device.
269 ; If the optional callout is implemented this param struct is passed to it.
271 DEVICE_CAP_CALLOUT_PARAMS STRUCT
272 StdHeader AMD_CONFIG_PARAMS {} ; < The header
274 HostSocket UINT8 ? ; < The Socket on which this chain is located.
275 HostLink UINT8 ? ; < The Link on the host for this chain.
276 Depth UINT8 ? ; < The Depth in the I/O chain from the Host.
277 DevVenId UINT32 ? ; < The Device's PCI Vendor + Device ID (offset 0x00).
278 Revision UINT8 ? ; < The Device's PCI Revision field (offset 0x08).
279 Link UINT8 ? ; < The Device's Link number (0 or 1).
280 PciAddress PCI_ADDR {} ; < The Device's PCI Address.
282 LinkWidthIn POINTER ? ; < modify to change the Link Width In.
283 LinkWidthOut POINTER ? ; < modify to change the Link Width Out.
284 FreqCap POINTER ? ; < modify to change the Link's frequency capability.
285 Clumping POINTER ? ; < modify to change Unit ID clumping support.
286 DEVICE_CAP_CALLOUT_PARAMS ENDS
288 ; Limits for CPU to CPU Links.
290 ; For each coherent connection this interface is checked once.
291 ; Provide the frequency and width if needed for this Link (usually based on board
292 ; restriction). This is used with CPU device capabilities and northbridge limits
293 ; to compute the default settings.
295 CPU_TO_CPU_PCB_LIMITS STRUCT
297 SocketA UINT8 ? ; < One Socket on which this Link is located
298 LinkA UINT8 ? ; < The Link on this Node
299 SocketB UINT8 ? ; < The other Socket on which this Link is located
300 LinkB UINT8 ? ; < The Link on that Node
302 ABLinkWidthLimit UINT8 ? ; < modify to change the Link Width A->B
303 BALinkWidthLimit UINT8 ? ; < modify to change the Link Width B-<A
304 PcbFreqCap UINT32 ? ; < modify to change the Link's frequency capability
305 CPU_TO_CPU_PCB_LIMITS ENDS
307 ; Get limits for non-coherent Links.
309 ; For each non-coherent connection this interface is checked once.
310 ; Provide the frequency and width if needed for this Link (usually based on board
311 ; restriction). This is used with device capabilities, device overrides, and northbridge limits
312 ; to compute the default settings.
316 HostSocket UINT8 ? ; < The Socket on which this Link is located
317 HostLink UINT8 ? ; < The Link about to be initialized
318 Depth UINT8 ? ; < The Depth in the I/O chain from the Host
320 DownstreamLinkWidthLimit UINT8 ? ; < modify to change the Link Width going away from processor
321 UpstreamLinkWidthLimit UINT8 ? ; < modify to change the Link Width moving toward processor
322 PcbFreqCap UINT32 ? ; < modify to change the Link's frequency capability
325 ; Manually control bus number assignment.
327 ; This interface is checked every time a non-coherent chain is processed.
328 ; If a system can not use the auto Bus numbering feature for non-coherent chain bus
329 ; assignments, this interface can provide explicit control. For each chain, provide
330 ; the bus number range to use.
332 OVERRIDE_BUS_NUMBERS STRUCT
334 Socket UINT8 ? ; < The Socket on which this chain is located
335 Link UINT8 ? ; < The Link on the host for this chain
337 SecBus UINT8 ? ; < Secondary Bus number for this non-coherent chain
338 SubBus UINT8 ? ; < Subordinate Bus number
339 OVERRIDE_BUS_NUMBERS ENDS
344 ; This interface is checked every time a coherent Link is found and then every
345 ; time a non-coherent Link from a CPU is found.
346 ; Any coherent or non-coherent Link from a CPU can be ignored and not used
347 ; for discovery or initialization. Useful for connection based systems.
348 ; (Note: not checked for IO device to IO Device Links.)
352 Socket UINT8 ? ; < The Socket on which this Link is located
353 Link UINT8 ? ; < The Link about to be initialized
354 ; Customization fields
355 LinkState FINAL_LINK_STATE ? ; < The link may be left unitialized, or powered off.
359 ; Skip reganging of subLinks.
361 ; This interface is checked whenever two subLinks are both connected to the same CPUs.
362 ; Normally, unganged sublinks between the same two CPUs are reganged.
363 ; Provide a matching structure to leave the Links unganged.
367 SocketA UINT8 ? ; < One Socket on which this Link is located
368 LinkA UINT8 ? ; < The Link on this Node
369 SocketB UINT8 ? ; < The other Socket on which this Link is located
370 LinkB UINT8 ? ; < The Link on that Node
371 ; Customization fields
372 LinkState FINAL_LINK_STATE ? ; < The paired sublink may be active, or powered off.
375 ; The System Socket layout, which sockets are physically connected.
377 ; The hardware method for Socket naming is preferred. Use this software method only
380 SYSTEM_PHYSICAL_SOCKET_MAP STRUCT
381 CurrentSocket UINT8 ? ; < The socket from which this connection originates.
382 CurrentLink UINT8 ? ; < The Link from the source socket connects to another socket.
383 TargetSocket UINT8 ? ; < The target socket which is connected on that link.
384 SYSTEM_PHYSICAL_SOCKET_MAP ENDS
386 ; ----------------------------------------------------------------------------
388 ; This is the input structure for AmdHtInitialize.
390 AMD_HT_INTERFACE STRUCT
391 ; Basic level customization
392 AutoBusStart UINT8 ? ; < For automatic bus number assignment, starting bus number usually zero.
393 AutoBusMax UINT8 ? ; < For automatic bus number assignment, do not assign above max.
394 AutoBusIncrement UINT8 ? ; < For automatic bus number assignment, each chain gets this many busses.
396 ; Advanced Level Customization
397 ManualBuidSwapList POINTER ? ; < Provide Manual Swap List, if any.
398 DeviceCapOverrideList POINTER ? ; < Provide Device Overrides, if any.
399 CpuToCpuPcbLimitsList POINTER ? ; < Provide CPU PCB Limits, if any.
400 IoPcbLimitsList POINTER ? ; < Provide IO PCB Limits, if any.
401 OverrideBusNumbersList POINTER ? ; < Provide manual Bus Number assignment, if any.
402 ; < Use either auto bus numbering or override bus
403 ; < numbers, not both.
405 IgnoreLinkList POINTER ? ; < Provide links to ignore, if any.
406 SkipRegangList POINTER ? ; < Provide links to remain unganged, if any.
408 ; Expert Level Customization
409 Topolist POINTER ? ; < Use this topology list in addition to the built in, if not NULL.
410 SystemPhysicalSocketMap POINTER ?
411 ; < The hardware socket naming method is preferred,
412 ; < If it can't be used, this provides a software method.
413 AMD_HT_INTERFACE ENDS
415 ; -----------------------------------------------------------------------------
417 ; HT Recovery Interface
421 ; -----------------------------------------------------------------------------
422 ; * HT Recovery DEFINITIONS AND MACROS
424 ; *-----------------------------------------------------------------------------
427 ; BBHT subfunction events
428 HT_EVENT_BB_EVENTS EQU 10005000h
429 HT_EVENT_BB_BUID_EXCEED EQU 10015000h
430 HT_EVENT_BB_DEVICE_FAILED EQU 10055000h
431 HT_EVENT_BB_AUTO_DEPTH EQU 10065000h
433 ; ----------------------------------------------------------------------------
434 ; * HT Recovery TYPEDEFS, STRUCTURES, ENUMS
436 ; *----------------------------------------------------------------------------
440 ; The Interface structure to Recovery HT.
442 AMD_HT_RESET_INTERFACE STRUCT
443 ManualBuidSwapList POINTER ? ; < Option to manually control SB link init
444 Depth UINT32 ? ; < If auto init was used this is set to the depth of the chain,
445 ; < else, for manual init unmodified.
446 AMD_HT_RESET_INTERFACE ENDS
449 ;-----------------------------------------------------------------------------
450 ; FCH DEFINITIONS AND MACROS
452 ;-----------------------------------------------------------------------------
454 ; Configuration values for SdConfig
455 SdDisable EQU 0 ; Disabled
456 SdAmda EQU 1 ; AMDA, set 24,18,16, default
457 SdDma EQU 2 ; DMA clear 24, 16, set 18
458 SdPio EQU 3 ; PIO clear 24,18,16
459 SD_MODE TEXTEQU <DWORD>
461 ; Configuration values for SdClockControl
462 Sd50MhzTraceCableLengthWithinSixInches EQU 4 ; 50Mhz, default
463 Sd40MhzTraceCableLengthSix2ElevenInches EQU 6 ; 40Mhz
464 Sd25MhzTraceCableLengthEleven2TwentyfourInches EQU 7 ; 25Mhz
465 SD_CLOCK_CONTROL TEXTEQU <DWORD>
467 ; Configuration values for AzaliaController
468 AzAuto EQU 0 ; Auto - Detect Azalia controller automatically
469 AzDisable EQU 1 ; Diable - Disable Azalia controller
470 AzEnable EQU 2 ; Enable - Enable Azalia controller
471 HDA_CONFIG TEXTEQU <DWORD>
473 ; Configuration values for IrConfig
474 IrDisable EQU 0 ; Disable
475 IrRxTx0 EQU 1 ; Rx and Tx0
476 IrRxTx1 EQU 2 ; Rx and Tx1
477 IrRxTx0Tx1 EQU 3 ; Rx and both Tx0,Tx1
478 IR_CONFIG TEXTEQU <DWORD>
480 ; Configuration values for SataClass
481 SataNativeIde EQU 0 ; Native IDE mode
482 SataRaid EQU 1 ; RAID mode
483 SataAhci EQU 2 ; AHCI mode
484 SataLegacyIde EQU 3 ; Legacy IDE mode
485 SataIde2Ahci EQU 4 ; IDE->AHCI mode
486 SataAhci7804 EQU 5 ; AHCI mode as 7804 ID (AMD driver)
487 SataIde2Ahci7804 EQU 6 ; IDE->AHCI mode as 7804 ID (AMD driver)
488 SATA_CLASS TEXTEQU <DWORD>
490 ; Configuration values for GppLinkConfig
491 PortA4 EQU 0 ; 4:0:0:0
492 PortA2B2 EQU 2 ; 2:2:0:0
493 PortA2B1C1 EQU 3 ; 2:1:1:0
494 PortA1B1C1D1 EQU 4 ; 1:1:1:1
495 GPP_LINKMODE TEXTEQU <DWORD>
497 ; Configuration values for FchPowerFail
498 AlwaysOff EQU 0 ; Always power off after power resumes
499 AlwaysOn EQU 1 ; Always power on after power resumes
500 UsePrevious EQU 3 ; Resume to same setting when power fails
501 POWER_FAIL TEXTEQU <DWORD>
503 ; Configuration values for SATA Link Speed
504 Gen1 EQU 1 ; SATA port GEN1 speed
505 Gen2 EQU 2 ; SATA port GEN2 speed
506 Gen3 EQU 3 ; SATA port GEN3 speed
507 SATA_SPEED TEXTEQU <DWORD>
509 ; Configuration values for GPIO function
510 Function0 EQU 0 ; GPIO Function 1
511 Function1 EQU 1 ; GPIO Function 1
512 Function2 EQU 2 ; GPIO Function 2
513 Function3 EQU 3 ; GPIO Function 3
514 GPIO_FUN TEXTEQU <DWORD>
516 ; Configuration values for GPIO_CFG
517 OwnedByEc EQU 1 ; This bit can only be written by EC
518 OwnedByHost EQU 2 ; This bit can only be written by host (BIOS)
519 Sticky EQU 4 ; If set, [6:3] are sticky
520 PullUpB EQU 8 ; 0: Pullup enable; 1: Pullup disabled
521 PullDown EQU 16 ; 0: Pulldown disabled; 1: Pulldown enable
522 GpioOutEnB EQU 32 ; 0: Output enable; 1: Output disable
523 GpioOut EQU 64 ; Output state when GpioOutEnB is 0
524 GpioIn EQU 128 ; This bit is read only - current pin state
525 CFG_BYTE TEXTEQU <DWORD>
529 GpioPin UINT8 ? ; Gpio Pin, valid range: 0-67, 128-150, 160-228
530 PinFunction GPIO_FUN ? ; Multi-function selection
531 CfgByte CFG_BYTE ? ; GPIO Register value
534 ; FCH SCI MAP CONTROL
535 SCI_MAP_CONTROL STRUCT
536 InputPin UINT8 ? ; Input Pin, valid range 0-63
537 GpeMap UINT8 ? ; Gpe Map, valid range 0-31
540 ; FCH SATA PHY CONTROL
541 SATA_PHY_CONTROL STRUCT
542 CommonPhy BOOLEAN ? ; Common PHY or not
543 Gen SATA_SPEED ? ; SATA speed
544 Port UINT8 ? ; Port number, valid range: 0-7
545 PhyData UINT32 ? ; SATA PHY data, valid range: 0-0xFFFFFFFF
546 SATA_PHY_CONTROL ENDS
549 ; FCH Component Data Structure in InitReset stage
551 FCH_RESET_INTERFACE STRUCT
552 UmiGen2 BOOLEAN ? ; Enable Gen2 data rate of UMI
553 ; FALSE - Disable Gen2
556 SataEnable BOOLEAN ? ; SATA controller function
557 ; FALSE - SATA controller is disabled
558 ; TRUE - SATA controller is enabled
560 IdeEnable BOOLEAN ? ; SATA IDE controller mode enabled/disabled
561 ; FALSE - IDE controller is disabled
562 ; TRUE - IDE controller is enabled
564 GppEnable BOOLEAN ? ; Master switch of GPP function
565 ; FALSE - GPP disabled
568 Xhci0Enable BOOLEAN ? ; XHCI0 controller function
569 ; FALSE - XHCI0 controller disabled
570 ; TRUE - XHCI0 controller enabled
572 Xhci1Enable BOOLEAN ? ; XHCI1 controller function
573 ; FALSE - XHCI1 controller disabled
574 ; TRUE - XHCI1 controller enabled
576 FCH_RESET_INTERFACE ENDS
580 ; FCH Component Data Structure from InitEnv stage
583 SdConfig SD_MODE ? ; Secure Digital (SD) controller mode
584 AzaliaController HDA_CONFIG ? ; Azalia HD Audio Controller
585 IrConfig IR_CONFIG ? ; Infrared (IR) Configuration
586 UmiGen2 BOOLEAN ? ; Enable Gen2 data rate of UMI
587 ; FALSE - Disable Gen2
589 SataClass SATA_CLASS ? ; SATA controller mode
590 SataEnable BOOLEAN ? ; SATA controller function
591 ; FALSE - SATA controller is disabled
592 ; TRUE - SATA controller is enabled
593 IdeEnable BOOLEAN ? ; SATA IDE controller mode enabled/disabled
594 ; FALSE - IDE controller is disabled
595 ; TRUE - IDE controller is enabled
596 SataIdeMode BOOLEAN ? ; Native mode of SATA IDE controller
597 ; FALSE - Legacy IDE mode
598 ; TRUE - Native IDE mode
599 Ohci1Enable BOOLEAN ? ; OHCI controller #1 Function
600 ; FALSE - OHCI1 is disabled
601 ; TRUE - OHCI1 is enabled
602 Ohci2Enable BOOLEAN ? ; OHCI controller #2 Function
603 ; FALSE - OHCI2 is disabled
604 ; TRUE - OHCI2 is enabled
605 Ohci3Enable BOOLEAN ? ; OHCI controller #3 Function
606 ; FALSE - OHCI3 is disabled
607 ; TRUE - OHCI3 is enabled
608 Ohci4Enable BOOLEAN ? ; OHCI controller #4 Function
609 ; FALSE - OHCI4 is disabled
610 ; TRUE - OHCI4 is enabled
611 XhciSwitch BOOLEAN ? ; XHCI controller Function
612 ; FALSE - XHCI is disabled
613 ; TRUE - XHCI is enabled
614 GppEnable BOOLEAN ? ; Master switch of GPP function
615 ; FALSE - GPP disabled
617 FchPowerFail POWER_FAIL ? ; FCH power failure option
621 ; ---------------------------------------------------------------------------
622 ; CPU Feature related info
623 ; ---------------------------------------------------------------------------
624 ; Build Configuration values for BLDCFG_PLATFORM_C1E_MODE
625 C1eModeDisabled EQU 0 ; < Disabled
626 C1eModeAuto EQU 1 ; < Auto mode enables the best C1e method for the
627 ; < currently installed processor
628 C1eModeHardware EQU 2 ; < Hardware method
629 C1eModeMsgBased EQU 3 ; < Message-based method
630 C1eModeSoftwareDeprecated EQU 4 ; < Deprecated software SMI method
631 C1eModeHardwareSoftwareDeprecated EQU 5 ; < Hardware or Deprecated software SMI method
632 MaxC1eMode EQU 6 ; < Not a valid value, used for verifying input
633 PLATFORM_C1E_MODES TEXTEQU <DWORD>
635 ; Build Configuration values for BLDCFG_PLATFORM_CSTATE_MODE
636 CStateModeDisabled EQU 0 ; < Disabled
637 CStateModeC6 EQU 1 ; < C6 State
638 MaxCStateMode EQU 2 ; < Not a valid value, used for verifying input
639 PLATFORM_CSTATE_MODES TEXTEQU <DWORD>
641 ; Build Configuration values for BLDCFG_PLATFORM_CPB_MODE
642 CpbModeAuto EQU 0 ; < Auto
643 CpbModeDisabled EQU 1 ; < Disabled
644 MaxCpbMode EQU 2 ; < Not a valid value, used for verifying input
645 PLATFORM_CPB_MODES TEXTEQU <DWORD>
647 ; Build Configuration values for BLDCFG_LOW_POWER_PSTATE_FOR_PROCHOT_MODE
648 LOW_POWER_PSTATE_FOR_PROCHOT_AUTO EQU 0 ; < Auto
649 LOW_POWER_PSTATE_FOR_PROCHOT_DISABLE EQU 1 ; < Disabled
650 MAX_LOW_POWER_PSTATE_FOR_PROCHOT_MODE EQU 2 ; < Not a valid value, used for verifying input
651 PLATFORM_LOW_POWER_PSTATE_MODES TEXTEQU <DWORD>
653 ;----------------------------------------------------------------------------
654 ; GNB PCIe configuration info
655 ;----------------------------------------------------------------------------
657 GNB_EVENT_INVALID_CONFIGURATION EQU 20010000h ; User configuration invalid
658 GNB_EVENT_INVALID_PCIE_TOPOLOGY_CONFIGURATION EQU 20010001h ; Requested lane allocation for PCIe port can not be supported
659 GNB_EVENT_INVALID_PCIE_PORT_CONFIGURATION EQU 20010002h ; Requested incorrect PCIe port device address
660 GNB_EVENT_INVALID_DDI_LINK_CONFIGURATION EQU 20010003h ; Incorrect parameter in DDI link configuration
661 GNB_EVENT_INVALID_LINK_WIDTH_CONFIGURATION EQU 20010004h ; Invalid with for PCIe port or DDI link
662 GNB_EVENT_INVALID_LANES_CONFIGURATION EQU 20010005h ; Lane double subscribe lanes
663 GNB_EVENT_INVALID_DDI_TOPOLOGY_CONFIGURATION EQU 20010006h ; Requested lane allocation for DDI link(s) can not be supported
664 GNB_EVENT_LINK_TRAINING_FAIL EQU 20020000h ; PCIe Link training fail
665 GNB_EVENT_BROKEN_LANE_RECOVERY EQU 20030000h ; Broken lane workaround applied to recover link training
666 GNB_EVENT_GEN2_SUPPORT_RECOVERY EQU 20040000h ; Scale back to GEN1 to recover link training
668 DESCRIPTOR_TERMINATE_LIST EQU 80000000h
669 DESCRIPTOR_IGNORE EQU 40000000h
671 PCIe_PORT_MISC_CONTROL STRUCT
672 LinkComplianceMode UINT8 ?
673 ;IN UINT8 LinkComplianceMode :1; ;< Force port into compliance mode (device will not be trained, port output compliance pattern)
674 PCIe_PORT_MISC_CONTROL ENDS
676 PCIe_PORT_DATA STRUCT
677 PortPresent UINT8 ? ; < Enable PCIe port for initialization.
678 ChannelType UINT8 ? ; < Channel type.
686 DeviceNumber UINT8 ? ; < Device number for port. Available device numbers may very on different CPUs.
687 FunctionNumber UINT8 ? ; < Reserved for future use
688 LinkSpeedCapability UINT8 ? ; < Advertised Gen Capability
689 ; 0 - Maximum supported by silicon
694 LinkAspm UINT8 ? ; < ASPM control. (see OemPcieLinkAspm for additional option to control ASPM)
700 LinkHotplug UINT8 ? ; < Hotplug control.
706 ResetId UINT8 ? ; < Arbitrary number greater than 0 assigned by platform firmware for GPIO
707 ; identification which control reset for given port.
708 ; Each port with unique GPIO should have unique ResetId assigned.
709 ; All ports use same GPIO to control reset should have same ResetId assigned.
710 ; see AgesaPcieSlotResetControl
712 MiscControls PCIe_PORT_MISC_CONTROL {} ; < Misc extended controls
715 ;DDI channel lane mapping
717 CHANNEL_MAPPING STRUCT ;
719 ;IN UINT8 Lane0 :2; ;
720 ;IN UINT8 Lane1 :2; ///< Lane 1 mapping (see "Lane 0 mapping")
721 ;IN UINT8 Lane2 :2; ///< Lane 2 mapping (see "Lane 0 mapping")
722 ;IN UINT8 Lane3 :2; ///< Lane 3 mapping (see "Lane 0 mapping")
723 CHANNEL_MAPPING ENDS ;
725 CONN_CHANNEL_MAPPING UNION
726 ChannelMappingValue UINT8 ? ; < Raw lane mapping
727 ChannelMapping CHANNEL_MAPPING {} ;
728 CONN_CHANNEL_MAPPING ENDS ;
732 ConnectorType UINT8 ? ; < Display Connector Type
735 ; 2 - Single Link DVI
738 ; 5 - Travis DP-to-VGA
739 ; 6 - Travis DP-to-LVDS
740 ; 7 - Hudson-2 NutMeg DP-to-VGA
741 ; 8 - Single Link DVI-I
744 ; 11 - VBIOS auto detect connector type
745 AuxIndex UINT8 ? ; < Indicates which AUX or DDC Line is used
753 HdpIndex UINT8 ? ; < Indicates which HDP pin is used
760 Mapping CONN_CHANNEL_MAPPING (2) DUP ({}) ;< Set specific mapping of lanes to connector pins
761 ;Mapping[0] define mapping for group of 4 lanes starting at PCIe_ENGINE_DATA.StartLane
762 ;Mapping[1] define mapping for group of 4 lanes ending at PCIe_ENGINE_DATA.EndLane (only
763 ;applicable for Dual DDI link)
764 ;if Mapping[x] set to 0 than default mapping assumed
765 LanePnInversionMask UINT8 ? ; < Specifies whether to invert the state of P and N for each lane. Each bit represents a PCIe lane on the DDI port
766 ; 0 - Do not invert (default)
767 ; 1 - Invert P and N on this lane
771 ; Engine Configuration
772 PCIe_ENGINE_DATA STRUCT
773 EngineType UINT8 ? ; < Engine type
774 ; 0 - Ignore engine configuration
777 StartLane UINT16 ? ; < Start lane number (in reversed configuration StartLane > EndLane).
778 EndLane UINT16 ? ; < End lane number (in reversed configuration StartLane > EndLane).
779 PCIe_ENGINE_DATA ENDS
781 ; PCIe port descriptor
782 PCIe_PORT_DESCRIPTOR STRUCT
783 Flags UINT32 ? ; < Descriptor flags
784 ; Bit31 - last descriptor in complex
785 EngineData PCIe_ENGINE_DATA {} ; < Engine data
786 Port PCIe_PORT_DATA {} ; < PCIe port specific configuration info
787 PCIe_PORT_DESCRIPTOR ENDS
790 PCIe_DDI_DESCRIPTOR STRUCT
791 Flags UINT32 ? ; < Descriptor flags
792 EngineData PCIe_ENGINE_DATA {} ; < Engine data
793 Ddi PCIe_DDI_DATA {} ; < DDI port specific configuration info
794 PCIe_DDI_DESCRIPTOR ENDS
797 PCIe_SLOT_RESET_INFO STRUCT
798 StdHeader AMD_CONFIG_PARAMS {} ; < AGESA Standard Header
799 ResetId UINT8 ? ; < Slot reset ID as specified in PCIe_PORT_DESCRIPTOR
800 ResetControl UINT8 ? ; < Reset control as defined by PCIE_RESET_CONTROL
801 PCIe_SLOT_RESET_INFO ENDS
804 ; PCIe Complex descriptor
805 PCIe_COMPLEX_DESCRIPTOR STRUCT
806 Flags UINT32 ? ; < Descriptor flags
807 ; Bit31 - last descriptor in topology
810 SocketId UINT32 ? ; < Socket Id
811 PciePortList POINTER ? ;< Pointer to array of PCIe port descriptors or NULL (Last element of array must be terminated with DESCRIPTOR_TERMINATE_LIST).
812 DdiLinkList POINTER ? ;< Pointer to array DDI link descriptors (Last element of array must be terminated with DESCRIPTOR_TERMINATE_LIST).
813 Reserved POINTER ? ;< Reserved for future use
814 PCIe_COMPLEX_DESCRIPTOR ENDS
816 AssertSlotReset EQU 0
817 DeassertSlotReset EQU 1
818 PCIE_RESET_CONTROL TEXTEQU <DWORD>
820 PcieUnusedEngine EQU 0
823 MaxPcieEngine EQU 3 ; < Not a valid value, used for verifying input
824 PCIE_ENGINE_TYPE TEXTEQU <DWORD>
826 PcieGenMaxSupported EQU 0
829 MaxPcieGen EQU 3 ; < Not a valid value, used for verifying input
830 PCIE_LINK_SPEED_CAP TEXTEQU <DWORD>
833 PsppPerformance EQU 1
834 PsppBalanceHigh EQU 2
836 PsppPowerSaving EQU 4
837 MaxPspp EQU 5 ; < Not a valid value, used for verifying input
838 PCIE_PSPP_POLICY TEXTEQU <DWORD>
840 ConnectorTypeDP EQU 0
841 ConnectorTypeEDP EQU 1
842 ConnectorTypeSingleLinkDVI EQU 2
843 ConnectorTypeDualLinkDVI EQU 3
844 ConnectorTypeHDMI EQU 4
845 ConnectorTypeTravisDpToVga EQU 5
846 ConnectorTypeTravisDpToLvds EQU 6
847 ConnectorTypeNutmegDpToVga EQU 7
848 ConnectorTypeSingleLinkDviI EQU 8
849 ConnectorTypeCrt EQU 9
850 ConnectorTypeLvds EQU 10
851 ConnectorTypeAutoDetect EQU 11
852 MaxConnectorType EQU 12 ; < Not a valid value, used for verifying input
853 PCIE_CONNECTOR_TYPE TEXTEQU <DWORD>
855 ChannelTypeLowLoss EQU 0
856 ChannelTypeHighLoss EQU 1
857 ChannelTypeMob0db EQU 2
858 ChannelTypeMob3db EQU 3
859 ChannelTypeExt6db EQU 4
860 ChannelTypeExt8db EQU 5
861 MaxChannelType EQU 6 ; < Not a valid value, used for verifying input
862 PCIE_CHANNEL_TYPE TEXTEQU <DWORD>
868 MaxAspm EQU 4 ; < Not a valid value, used for verifying input
869 PCIE_ASPM_TYPE TEXTEQU <DWORD>
871 HotplugDisabled EQU 0
874 HotplugEnhanced EQU 3
876 MaxHotplug EQU 5 ; < Not a valid value, used for verifying input
877 PCIE_HOTPLUG_TYPE TEXTEQU <DWORD>
881 PCIE_PORT_ENABLE TEXTEQU <DWORD>
889 MaxAux EQU 6 ; < Not a valid value, used for verifying input
890 PCIE_AUX_TYPE TEXTEQU <DWORD>
898 MaxHdp EQU 6 ; < Not a valid value, used for verifying input
899 PCIE_HDP_TYPE TEXTEQU <DWORD>
903 IOMMU_REQUESTOR_ID STRUCT
904 Bus UINT16 ? ; <[15:8] - Bus number, [7:3] - Device number, [2:0] - Function number
905 IOMMU_REQUESTOR_ID ENDS
907 ;IVMD exclusion range descriptor
908 IOMMU_EXCLUSION_RANGE_DESCRIPTOR STRUCT
909 Flags UINT32 ? ; Descriptor flags
910 ; @li @b Flags[31] - Terminate descriptor array.
911 ; @li @b Flags[30] - Ignore descriptor.
912 RequestorIdStart IOMMU_REQUESTOR_ID {} ; Requestor ID start
913 RequestorIdEnd IOMMU_REQUESTOR_ID {} ; Requestor ID end (use same as start for single ID)
914 RangeBaseAddress UINT64 ? ; Phisical base address of exclusion range
915 RangeLength UINT64 ? ; Length of exclusion range in bytes
916 IOMMU_EXCLUSION_RANGE_DESCRIPTOR ENDS
918 ;----------------------------------------------------------------------------
919 ; GNB configuration info
920 ;----------------------------------------------------------------------------
923 ; LVDS Misc Control Field
924 LVDS_MISC_CONTROL_FIELD STRUCT
926 ;IN UINT8 FpdiMode:1;
927 ;IN UINT8 DlChSwap:1;
928 ;IN UINT8 VsyncActiveLow:1;
929 ;IN UINT8 HsyncActiveLow:1;
930 ;IN UINT8 BLONActiveLow:1;
931 ;IN UINT8 Reserved:3;
932 LVDS_MISC_CONTROL_FIELD ENDS
935 LVDS_MISC_CONTROL UNION
936 Field LVDS_MISC_CONTROL_FIELD {}
938 LVDS_MISC_CONTROL ENDS
940 ; Configuration settings for GNB.
941 GNB_ENV_CONFIGURATION STRUCT
942 Gnb3dStereoPinIndex UINT8 ? ;< 3D Stereo Pin ID.
943 ; @li 0 = Stereo 3D is disabled (default).
944 ; @li 1 = Use processor pin HPD1.
945 ; @li 2 = Use processor pin HPD2
946 ; @li 3 = Use processor pin HPD3
947 ; @li 4 = Use processor pin HPD4
948 ; @li 5 = Use processor pin HPD5
949 ; @li 6 = Use processor pin HPD6
950 IommuSupport BOOLEAN ? ; IOMMU support.
951 ; TRUE = Disable and hide IOMMU device.
952 ; FLASE = Initialize IOMMU subsystem. Generate ACPI IVRS table.
953 LvdsSpreadSpectrum UINT16 ? ; Spread spectrum value in 0.01 %
954 LvdsSpreadSpectrumRate UINT16 ? ; Spread spectrum frequency used by SS hardware logic in unit of 10Hz, 0 - default frequency 40kHz
955 LvdsPowerOnSeqDigonToDe UINT8 ? ; This item configures panel initialization timing.
956 LvdsPowerOnSeqDeToVaryBl UINT8 ? ; This item configures panel initialization timing.
957 LvdsPowerOnSeqDeToDigon UINT8 ? ; This item configures panel initialization timing.
958 LvdsPowerOnSeqVaryBlToDe UINT8 ? ; This item configures panel initialization timing.
959 LvdsPowerOnSeqOnToOffDelay UINT8 ? ; This item configures panel initialization timing.
960 LvdsPowerOnSeqVaryBlToBlon UINT8 ? ; This item configures panel initialization timing.
961 LvdsPowerOnSeqBlonToVaryBl UINT8 ? ; This item configures panel initialization timing.
962 LvdsMaxPixelClockFreq UINT16 ? ; This item configures the maximum pixel clock frequency supported.
963 LcdBitDepthControlValue UINT32 ? ; This item configures the LCD bit depth control settings.
964 Lvds24bbpPanelMode UINT8 ? ; This item configures the LVDS 24 BBP mode.
965 LvdsMiscControl LVDS_MISC_CONTROL {} ; This item configures LVDS swap/Hsync/Vsync/BLON
966 PcieRefClkSpreadSpectrum UINT16 ? ; Spread spectrum value in 0.01 %
967 GnbRemoteDisplaySupport BOOLEAN ? ; This item enables Wireless Display Support
968 GNB_ENV_CONFIGURATION ENDS
970 ; GNB configuration info
971 GNB_CONFIGURATION STRUCT
972 PcieComplexList POINTER ? ; Pointer to array of PCIe_COMPLEX_DESCRIPTOR structures describe PCIe topology on each processor package or NULL.
973 ; Last element of array must be terminated with DESCRIPTOR_TERMINATE_LIST
977 ; Topology organization definition assume PCIe_COMPLEX_DESCRIPTOR defined first following
978 ; PCIe_PORT_DESCRIPTOR and PCIe_DDI_DESCRIPTOR for given PCIe_COMPLEX_DESCRIPTOR
979 ; defined in arbitrary sequence:
980 ; Example of topology definition for single socket system:
981 ; PlatfromTopology LABEL DWORD
983 ; Port0_2 PCIe_PORT_DESCRIPTOR <>;
984 ; Port0_3 PCIe_PORT_DESCRIPTOR <DESCRIPTOR_TERMINATE_LIST> ;
986 ; Ddi0_A PCIe_DDI_DESCRIPTOR <>;
987 ; Ddi0_B PCIe_DDI_DESCRIPTOR <DESCRIPTOR_TERMINATE_LIST,>;
989 ; Cpu0 PCIe_COMPLEX_DESCRIPTOR <DESCRIPTOR_TERMINATE_LIST, 0, Port0_2, Ddi0_A>
992 PsppPolicy UINT8 ? ;< PSPP (PCIe Speed Power Policy)
993 ; @li @b 0 - Disabled
994 ; @li @b 1 - Performance
995 ; @li @b 2 - Balance-High
996 ; @li @b 3 - Balance-Low
997 ; @li @b 4 - Power Saving
999 GNB_CONFIGURATION ENDS
1002 ; ---------------------------------------------------------------------------
1004 ; MEMORY-SPECIFIC DATA STRUCTURES
1006 ; ---------------------------------------------------------------------------
1009 ; AGESA MAXIMIUM VALUES
1011 ; These Max values are used to define array sizes and associated loop
1012 ; counts in the code. They reflect the maximum values that AGESA
1013 ; currently supports and does not necessarily reflect the hardware
1014 ; capabilities of configuration.
1017 MAX_SOCKETS_SUPPORTED EQU 8 ; < Max number of sockets in system
1018 MAX_CHANNELS_PER_SOCKET EQU 4 ; < Max Channels per sockets
1019 MAX_DIMMS_PER_CHANNEL EQU 4 ; < Max DIMMs on a memory channel (independent of platform)
1020 NUMBER_OF_DELAY_TABLES EQU 9 ; < Number of tables defined in CH_DEF_STRUCT.
1021 ; < Eg: UINT16 *RcvEnDlys;
1022 ; < UINT8 *WrDqsDlys;
1023 ; < UINT8 *RdDqsDlys;
1024 ; < UINT8 *WrDatDlys;
1025 ; < UINT8 *RdDqsMinDlys;
1026 ; < UINT8 *RdDqsMaxDlys;
1027 ; < UINT8 *WrDatMinDlys;
1028 ; < UINT8 *WrDatMaxDlys;
1029 NUMBER_OF_FAILURE_MASK_TABLES EQU 1 ; < Number of failure mask tables
1030 MAX_PLATFORM_TYPES EQU 16 ; < Platform types per system
1032 MCT_TRNG_KEEPOUT_START EQU 00004000h ; < base [39:8]
1033 MCT_TRNG_KEEPOUT_END EQU 00007FFFh ; < base [39:8]
1035 UMA_ATTRIBUTE_INTERLEAVE EQU 80000000h ; < Uma Region is interleaved
1036 UMA_ATTRIBUTE_ON_DCT0 EQU 40000000h ; < UMA resides on memory that belongs to DCT0
1037 UMA_ATTRIBUTE_ON_DCT1 EQU 20000000h ; < UMA resides on memory that belongs to DCT1
1039 PSO_TABLE TEXTEQU <UINT8>; < Platform Configuration Table
1043 ; Many of these are derived from the platform and hardware specific definitions
1045 ; EccSymbolSize override value
1046 ECCSYMBOLSIZE_USE_BKDG EQU 0 ; < Use BKDG Recommended Value
1047 ECCSYMBOLSIZE_FORCE_X4 EQU 4 ; < Force to x4
1048 ECCSYMBOLSIZE_FORCE_X8 EQU 8 ; < Force to x8
1050 PT_L1 EQU 0 ; < L1 Package type
1051 PT_M2 EQU 1 ; < AM Package type
1052 PT_S1 EQU 2 ; < S1 Package type
1054 ; Structures use to pass system Logical CPU-ID
1055 CPU_LOGICAL_ID STRUCT
1056 Family UINT64 ? ; < Indicates logical ID Family
1057 Revision UINT64 ? ; < Indicates logical ID Family
1060 ; Build Configuration values for BLDCFG_AMD_PLATFORM_TYPE
1062 AMD_PLATFORM_SERVER EQU 8000h ; < Server
1063 AMD_PLATFORM_DESKTOP EQU 10000h ; < Desktop
1064 AMD_PLATFORM_MOBILE EQU 20000h ; < Mobile
1065 AMD_PLATFORM_TYPE TEXTEQU <DWORD>
1067 ; Dram technology type
1069 DDR2_TECHNOLOGY EQU 0 ; < DDR2 technology
1070 DDR3_TECHNOLOGY EQU 1 ; < DDR3 technology
1071 TECHNOLOGY_TYPE TEXTEQU <DWORD>
1073 ; Build Configuration values for BLDCFG_MEMORY_BUS_FREQUENCY_LIMIT & BLDCFG_MEMORY_CLOCK_SELECT
1075 DDR400_FREQUENCY EQU 200 ; < DDR 400
1076 DDR533_FREQUENCY EQU 266 ; < DDR 533
1077 DDR667_FREQUENCY EQU 333 ; < DDR 667
1078 DDR800_FREQUENCY EQU 400 ; < DDR 800
1079 DDR1066_FREQUENCY EQU 533 ; < DDR 1066
1080 DDR1333_FREQUENCY EQU 667 ; < DDR 1333
1081 DDR1600_FREQUENCY EQU 800 ; < DDR 1600
1082 DDR1866_FREQUENCY EQU 933 ; < DDR 1866
1083 DDR2100_FREQUENCY EQU 1050 ; < DDR 2100
1084 DDR2133_FREQUENCY EQU 1066 ; < DDR 2133
1085 DDR2400_FREQUENCY EQU 1200 ; < DDR 2400
1086 UNSUPPORTED_DDR_FREQUENCY EQU 1201 ; < Highest limit of DDR frequency
1087 MEMORY_BUS_SPEED TEXTEQU <DWORD>
1089 ; Build Configuration values for BLDCFG_MEMORY_QUADRANK_TYPE
1091 QUADRANK_REGISTERED EQU 0
1092 QUADRANK_UNBUFFERED EQU 1
1093 QUANDRANK_TYPE TEXTEQU <DWORD>
1095 ; Build Configuration values for BLDCFG_TIMING_MODE_SELECT
1097 TIMING_MODE_AUTO EQU 0 ; < Use best rate possible
1098 TIMING_MODE_LIMITED EQU 1 ; < Set user top limit
1099 TIMING_MODE_SPECIFIC EQU 2 ; < Set user specified speed
1100 USER_MEMORY_TIMING_MODE TEXTEQU <DWORD>
1102 ; Build Configuration values for BLDCFG_POWER_DOWN_MODE
1104 POWER_DOWN_BY_CHANNEL EQU 0
1105 POWER_DOWN_BY_CHIP_SELECT EQU 1
1106 POWER_DOWN_AUTO EQU 2
1107 POWER_DOWN_MODE TEXTEQU <DWORD>
1109 ; Low voltage support
1111 VOLT_INITIAL EQU 0 ; < Initial value for VDDIO
1112 VOLT1_5 EQU 1 ; < 1.5 Volt
1113 VOLT1_35 EQU 2 ; < 1.35 Volt
1114 VOLT1_25 EQU 3 ; < 1.25 Volt
1115 VOLT_UNSUPPORTED EQU 0FFh ; < No common voltage found
1116 DIMM_VOLTAGE TEXTEQU <DWORD>
1120 UMA_NONE EQU 0 ; < UMA None
1121 UMA_SPECIFIED EQU 1 ; < UMA Specified
1122 UMA_AUTO EQU 2 ; < UMA Auto
1123 UMA_MODE TEXTEQU <DWORD>
1125 ; Force Training Mode
1127 FORCE_TRAIN_1D EQU 0 ; < 1D Training only
1128 FORCE_TRAIN___ EQU 1 ; <
1129 FORCE_TRAIN_AUTO EQU 2 ; < Auto
1130 FORCE_TRAIN_MODE TEXTEQU <DWORD>
1132 ; The possible DRAM prefetch mode settings.
1133 DRAM_PREFETCHER_AUTO EQU 0 ; Use the recommended setting for the processor. In most cases, the recommended setting is enabled.
1134 DISABLE_DRAM_PREFETCH_FOR_IO EQU 1 ; Disable DRAM prefetching for I/O requests only.
1135 DISABLE_DRAM_PREFETCH_FOR_CPU EQU 2 ; Disable DRAM prefetching for requests from processor cores only.
1136 DISABLE_DRAM_PREFETCHER EQU 3 ; Disable DRAM prefetching.
1137 MAX_DRAM_FREFETCH_MODE EQU 4 ; Not a DRAM prefetch mode, use for limit checking.
1138 DRAM_PREFETCH_MODE TEXTEQU <DWORD>
1140 ; Build Configuration values for BLDCFG_UMA_ALIGNMENT
1142 NO_UMA_ALIGNED EQU 00FFFFFFh
1143 UMA_4MB_ALIGNED EQU 00FFFFC0h
1144 UMA_128MB_ALIGNED EQU 00FFF800h
1145 UMA_256MB_ALIGNED EQU 00FFF000h
1146 UMA_512MB_ALIGNED EQU 00FFE000h
1147 UMA_ALIGNMENT TEXTEQU <DWORD>
1148 ; ===============================================================================
1149 ; Global MCT Configuration Status Word (GStatus)
1150 ; ===============================================================================
1152 GsbMTRRshort EQU 0 ; < Ran out of MTRRs while mapping memory
1153 GsbAllECCDimms EQU 1 ; < All banks of all Nodes are ECC capable
1154 GsbDramECCDis EQU 2 ; < Dram ECC requested but not enabled.
1155 GsbSoftHole EQU 3 ; < A Node Base gap was created
1156 GsbHWHole EQU 4 ; < A HW dram remap was created
1157 GsbNodeIntlv EQU 5 ; < Node Memory interleaving was enabled
1158 GsbSpIntRemapHole EQU 6 ; < Special condition for Node Interleave and HW remapping
1159 GsbEnDIMMSpareNW EQU 7 ; < Indicates that DIMM Spare can be used without a warm reset
1161 GsbEOL EQU 8 ; < End of list
1162 GLOBAL_STATUS_FIELD TEXTEQU <DWORD>
1164 ; ===============================================================================
1165 ; Local Error Status (DIE_STRUCT.ErrStatus[31:0])
1166 ; ===============================================================================
1168 EsbNoDimms EQU 0 ; < No DIMMs
1169 EsbSpdChkSum EQU 1 ; < SPD Checksum fail
1170 EsbDimmMismatchM EQU 2 ; < dimm module type(buffer) mismatch
1171 EsbDimmMismatchT EQU 3 ; < dimm CL/T mismatch
1172 EsbDimmMismatchO EQU 4 ; < dimm organization mismatch (128-bit)
1173 EsbNoTrcTrfc EQU 5 ; < SPD missing Trc or Trfc info
1174 EsbNoCycTime EQU 6 ; < SPD missing byte 23 or 25
1175 EsbBkIntDis EQU 7 ; < Bank interleave requested but not enabled
1176 EsbDramECCDis EQU 8 ; < Dram ECC requested but not enabled
1177 EsbSpareDis EQU 9 ; < Online spare requested but not enabled
1178 EsbMinimumMode EQU 10 ; < Running in Minimum Mode
1179 EsbNoRcvrEn EQU 11 ; < No DQS Receiver Enable pass window found
1180 EsbSmallRcvr EQU 12 ; < DQS Rcvr En pass window too small (far right of dynamic range)
1181 EsbNoDqsPos EQU 13 ; < No DQS-DQ passing positions
1182 EsbSmallDqs EQU 14 ; < DQS-DQ passing window too small
1183 EsbDCBKScrubDis EQU 15 ; < DCache scrub requested but not enabled
1185 EsbEMPNotSupported EQU 16 ; < Processor is not capable for EMP.
1186 EsbEMPConflict EQU 17 ; < EMP requested but cannot be enabled since
1187 ; < channel interleaving, bank interleaving, or bank swizzle is enabled.
1188 EsbEMPDis EQU 18 ; < EMP requested but cannot be enabled since
1189 ; < memory size of each DCT is not a power of two.
1191 EsbEOL EQU 19 ; < End of list
1192 ERROR_STATUS_FIELD TEXTEQU <DWORD>
1194 ; ===============================================================================
1195 ; Local Configuration Status (DIE_STRUCT.Status[31:0])
1196 ; ===============================================================================
1198 SbRegistered EQU 0 ; < All DIMMs are Registered
1199 SbEccDimms EQU 1 ; < All banks ECC capable
1200 SbParDimms EQU 2 ; < All banks Addr/CMD Parity capable
1201 SbDiagClks EQU 3 ; < Jedec ALL slots clock enable diag mode
1202 Sb128bitmode EQU 4 ; < DCT in 128-bit mode operation
1203 Sb64MuxedMode EQU 5 ; < DCT in 64-bit mux'ed mode.
1204 Sb2TMode EQU 6 ; < 2T CMD timing mode is enabled.
1205 SbSWNodeHole EQU 7 ; < Remapping of Node Base on this Node to create a gap.
1206 SbHWHole EQU 8 ; < Memory Hole created on this Node using HW remapping.
1207 SbOver400Mhz EQU 9 ; < DCT freq greater than or equal to 400MHz flag
1208 SbDQSPosPass2 EQU 10 ; < Used for TrainDQSPos DIMM0/1, when freq greater than or equal to 400MHz
1209 SbDQSRcvLimit EQU 11 ; < Used for DQSRcvEnTrain to know we have reached the upper bound.
1210 SbExtConfig EQU 12 ; < Indicate the default setting for extended PCI configuration support
1211 SbLrdimms EQU 13 ; < All DIMMs are LRDIMMs
1212 SbEOL EQU 14 ; < End of list
1213 LOCAL_STATUS_FIELD TEXTEQU <DWORD>
1216 ; < CPU MSR Register definitions ------------------------------------------
1217 SYS_CFG EQU 0C0010010h
1218 TOP_MEM EQU 0C001001Ah
1219 TOP_MEM2 EQU 0C001001Dh
1221 NB_CFG EQU 0C001001Fh
1223 FS_BASE EQU 0C0000100h
1224 IORR0_BASE EQU 0C0010016h
1225 IORR0_MASK EQU 0C0010017h
1226 BU_CFG EQU 0C0011023h
1227 BU_CFG2 EQU 0C001102Ah
1228 COFVID_STAT EQU 0C0010071h
1231 ; ===============================================================================
1232 ; SPD Data for each DIMM
1233 ; ===============================================================================
1234 SPD_DEF_STRUCT STRUCT
1235 DimmPresent BOOLEAN ? ; < Indicates that the DIMM is present and Data is valid
1236 Data UINT8 (256) DUP (?) ; < Buffer for 256 Bytes of SPD data from DIMM
1239 ; ===============================================================================
1240 ; Channel Definition Structure
1241 ; This data structure defines entries that are specific to the channel initialization
1242 ; ===============================================================================
1243 CH_DEF_STRUCT STRUCT
1244 ChannelID UINT8 ? ; < Physical channel ID of a socket(0 = CH A, 1 = CH B, 2 = CH C, 3 = CH D)
1245 TechType TECHNOLOGY_TYPE ? ; < Technology type of this channel
1246 ChDimmPresent UINT8 ? ; < For each bit n 0..7, 1 = DIMM n is present.
1247 ; < DIMM# Select Signal
1248 ; < 0 MA0_CS_L[0, 1]
1249 ; < 1 MB0_CS_L[0, 1]
1250 ; < 2 MA1_CS_L[0, 1]
1251 ; < 3 MB1_CS_L[0, 1]
1252 ; < 4 MA2_CS_L[0, 1]
1253 ; < 5 MB2_CS_L[0, 1]
1254 ; < 6 MA3_CS_L[0, 1]
1255 ; < 7 MB3_CS_L[0, 1]
1257 DCTPtr POINTER ? ; < Pointer to the DCT data of this channel.
1258 MCTPtr POINTER ? ; < Pointer to the node data of this channel.
1259 SpdPtr POINTER ? ; < Pointer to the SPD data for this channel. (Setup by NB Constructor)
1260 DimmSpdPtr POINTER (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Array of pointers to
1261 ; < SPD Data for each Dimm. (Setup by Tech Block Constructor)
1262 ChDimmValid UINT8 ? ; < For each bit n 0..3, 1 = DIMM n is valid and is/will be configured where 4..7 are reserved.
1263 RegDimmPresent UINT8 ? ; < For each bit n 0..3, 1 = DIMM n is a registered DIMM where 4..7 are reserved.
1264 LrDimmPresent UINT8 ? ; < For each bit n 0..3, 1 = DIMM n is Load Reduced DIMM where 4..7 are reserved.
1265 SODimmPresent UINT8 ? ; < For each bit n 0..3, 1 = DIMM n is a SO-DIMM where 4..7 are reserved.
1266 Loads UINT8 ? ; < Number of devices loading bus
1267 Dimms UINT8 ? ; < Number of DIMMs loading Channel
1268 Ranks UINT8 ? ; < Number of ranks loading Channel DATA
1269 SlowMode BOOLEAN ? ; < 1T or 2T CMD mode (slow access mode)
1272 ; < The following pointers will be pointed to dynamically allocated buffers.
1273 ; < Each buffer is two dimensional (RowCount x ColumnCount) and is lay-outed as in below.
1274 ; < Example: If DIMM and Byte based training, then
1275 ; < XX is a value in Hex
1276 ; < BYTE 0, BYTE 1, BYTE 2, BYTE 3, BYTE 4, BYTE 5, BYTE 6, BYTE 7, ECC BYTE
1277 ; < Row1 - Logical DIMM0 XX XX XX XX XX XX XX XX XX
1278 ; < Row2 - Logical DIMM1 XX XX XX XX XX XX XX XX XX
1279 RcvEnDlys POINTER ? ; < DQS Receiver Enable Delays
1280 WrDqsDlys POINTER ? ; < Write DQS delays (only valid for DDR3)
1281 RdDqsDlys POINTER ? ; < Read Dqs delays
1282 WrDatDlys POINTER ? ; < Write Data delays
1283 RdDqs__Dlys POINTER ? ; < Read DQS data
1284 RdDqsMinDlys POINTER ? ; < Minimum Window for Read DQS
1285 RdDqsMaxDlys POINTER ? ; < Maximum Window for Read DQS
1286 WrDatMinDlys POINTER ? ; < Minimum Window for Write data
1287 WrDatMaxDlys POINTER ? ; < Maximum Window for Write data
1288 RcvEnDlysMemPs1 POINTER ? ; < DQS Receiver Enable Delays for Memory Pstate 1
1289 WrDqsDlysMemPs1 POINTER ? ; < Write DQS delays for Memory Pstate 1 (only valid for DDR3)
1290 RdDqsDlysMemPs1 POINTER ? ; < Read Dqs delays for Memory Pstate 1
1291 WrDatDlysMemPs1 POINTER ? ; < Write Data delays for Memory Pstate 1
1292 RdDqs__DlysMemPs1 POINTER ? ; < Read DQS data for Memory Pstate 1
1293 RdDqsMinDlysMemPs1 POINTER ? ; < Minimum Window for Read DQS for Memory Pstate 1
1294 RdDqsMaxDlysMemPs1 POINTER ? ; < Maximum Window for Read DQS for Memory Pstate 1
1295 WrDatMinDlysMemPs1 POINTER ? ; < Minimum Window for Write data for Memory Pstate 1
1296 WrDatMaxDlysMemPs1 POINTER ? ; < Maximum Window for Write data for Memory Pstate 1
1297 RowCount UINT8 ? ; < Number of rows of the allocated buffer.
1298 ColumnCount UINT8 ? ; < Number of columns of the allocated buffer.
1300 FailingBitMask POINTER ? ; < Table of masks to Track Failing bits
1301 FailingBitMaskMemPs1 POINTER ? ; < Table of masks to Track Failing bits for Memory Pstate 1
1302 DctOdcCtl UINT32 ? ; < Output Driver Strength (see BKDG FN2:Offset 9Ch, index 00h)
1303 DctAddrTmg UINT32 ? ; < Address Bus Timing (see BKDG FN2:Offset 9Ch, index 04h)
1304 PhyRODTCSLow UINT32 ? ; < Phy Read ODT Pattern Chip Select low (see BKDG FN2:Offset 9Ch, index 180h)
1305 PhyRODTCSHigh UINT32 ? ; < Phy Read ODT Pattern Chip Select high (see BKDG FN2:Offset 9Ch, index 181h)
1306 PhyWODTCSLow UINT32 ? ; < Phy Write ODT Pattern Chip Select low (see BKDG FN2:Offset 9Ch, index 182h)
1307 PhyWODTCSHigh UINT32 ? ; < Phy Write ODT Pattern Chip Select high (see BKDG FN2:Offset 9Ch, index 183)
1308 PhyWLODT UINT8 (4) DUP (?) ; < Write Levelization ODT Pattern for Dimm 0-3 (see BKDG FN2:Offset 9Ch, index 0x8[11:8])
1309 DctEccDqsLike UINT16 ? ; < DCT DQS ECC UINT8 like...
1310 DctEccDqsScale UINT8 ? ; < DCT DQS ECC UINT8 scale
1311 PtrPatternBufA UINT16 ? ; < Ptr on stack to aligned DQS testing pattern
1312 PtrPatternBufB UINT16 ? ; < Ptr on stack to aligned DQS testing pattern
1313 ByteLane UINT8 ? ; < Current UINT8 Lane (0..7)
1314 Direction UINT8 ? ; < Current DQS-DQ training write direction (0=read, 1=write)
1315 Pattern UINT8 ? ; < Current pattern
1316 DqsDelay UINT8 ? ; < Current DQS delay value
1317 HostBiosSrvc1 UINT16 ? ; < UINT16 sized general purpose field for use by host BIOS. Scratch space.
1318 HostBiosSrvc2 UINT32 ? ; < UINT32 sized general purpose field for use by host BIOS. Scratch space.
1319 DctMaxRdLat UINT16 (4) DUP (?) ; < Max Read Latency (ns) for the DCT
1320 ; < DctMaxRdLat [i] is for NBPstate i DIMMValidCh UINT8 ? ; < DIMM# in CH
1321 DIMMValidCh UINT8 ? ; < DIMM# in CH
1322 MaxCh UINT8 ? ; < Max number of CH in system
1323 Dct UINT8 ? ; < Dct pointer
1324 WrDatGrossH UINT8 ? ; < Write Data Gross delay high value
1325 DqsRcvEnGrossL UINT8 ? ; < DQS Receive Enable Gross Delay low
1327 TrwtWB UINT8 ? ; < Non-SPD timing value for TrwtWB
1328 CurrRcvrDctADelay UINT8 ? ; < for keep current RcvrEnDly
1329 T1000 UINT16 ? ; < get the T1000 figure (cycle time (ns) * 1K)
1330 DqsRcvEnPass UINT8 ? ; < for TrainRcvrEn UINT8 lane pass flag
1331 DqsRcvEnSaved UINT8 ? ; < for TrainRcvrEn UINT8 lane saved flag
1332 SeedPass1Remainder UINT8 ? ; < for Phy assisted DQS receiver enable training
1334 ClToNbFlag UINT8 ? ; < is used to restore ClLinesToNbDis bit after memory
1335 NodeSysBase UINT32 ? ; < for channel interleave usage
1336 RefRawCard UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Array of rawcards detected
1337 CtrlWrd02 UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Control Word 2 values per DIMM
1338 CtrlWrd03 UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Control Word 3 values per DIMM
1339 CtrlWrd04 UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Control Word 4 values per DIMM
1340 CtrlWrd05 UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Control Word 5 values per DIMM
1341 CtrlWrd08 UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Control Word 8 values per DIMM
1343 CsPresentDCT UINT16 ? ; < For each bit n 0..7, 1 = Chip-select n is present
1344 DimmMirrorPresent UINT8 ? ; < For each bit n 0..7, 1 = DIMM n is OnDimmMirror capable
1345 DimmSpdCse UINT8 ? ; < For each bit n 0..7, 1 = DIMM n SPD checksum error
1346 DimmExclude UINT8 ? ; < For each bit n 0..7, 1 = DIMM n gets excluded
1347 DimmYr06 UINT8 ? ; < Bitmap indicating which Dimms have a manufacturer's year code <= 2006
1348 DimmWk2406 UINT8 ? ; < Bitmap indicating which Dimms have a manufacturer's week code <= 24 of 2006 (June)
1349 DimmPlPresent UINT8 ? ; < Bitmap indicating that Planar (1) or Stacked (0) Dimms are present.
1350 DimmQrPresent UINT8 ? ; < QuadRank DIMM present?
1351 DimmDrPresent UINT8 ? ; < Bitmap indicating that Dual Rank Dimms are present
1352 DimmSRPresent UINT8 ? ; < Bitmap indicating that Single Rank Dimms are present
1353 Dimmx4Present UINT8 ? ; < For each bit n 0..3, 1 = DIMM n contains x4 data devices. where 4..7 are reserved.
1354 Dimmx8Present UINT8 ? ; < For each bit n 0..3, 1 = DIMM n contains x8 data devices. where 4..7 are reserved.
1355 Dimmx16Present UINT8 ? ; < For each bit n 0..3, 1 = DIMM n contains x16 data devices. where 4..7 are reserved.
1356 LrdimmPhysicalRanks UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Number of Physical Ranks for LRDIMMs
1357 LrDimmLogicalRanks UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Number of LRDIMM Logical ranks in this configuration
1358 LrDimmRankMult UINT8 (MAX_DIMMS_PER_CHANNEL) DUP (?) ; < Rank Multipication factor per dimm.
1359 DimmNibbleAccess UINT8 ? ; < For each bit n 0..3, 1 = DIMM n will use nibble signaling. Where 4..7 are reserved.
1360 MemClkDisMap POINTER ? ; < This pointer will be set to point to an array that describes
1361 ; < the routing of M[B,A]_CLK pins to the DIMMs' ranks. AGESA will
1362 ; < base on this array to disable unused MemClk to save power.
1364 ; < The array must have 8 entries. Each entry, which associates with
1365 ; < one MemClkDis bit, is a bitmap of 8 CS that that MemClk is routed to.
1367 ; < BKDG definition of Fn2x88[MemClkDis] bitmap for AM3 package
1369 ; < Bit AM3/S1g3 pin name
1370 ; < 0 M[B,A]_CLK_H/L[0]
1371 ; < 1 M[B,A]_CLK_H/L[1]
1372 ; < 2 M[B,A]_CLK_H/L[2]
1373 ; < 3 M[B,A]_CLK_H/L[3]
1374 ; < 4 M[B,A]_CLK_H/L[4]
1375 ; < 5 M[B,A]_CLK_H/L[5]
1376 ; < 6 M[B,A]_CLK_H/L[6]
1377 ; < 7 M[B,A]_CLK_H/L[7]
1378 ; < And platform has the following routing:
1379 ; < CS0 M[B,A]_CLK_H/L[4]
1380 ; < CS1 M[B,A]_CLK_H/L[2]
1381 ; < CS2 M[B,A]_CLK_H/L[3]
1382 ; < CS3 M[B,A]_CLK_H/L[5]
1383 ; < Then MemClkDisMap should be pointed to the following array:
1384 ; < CLK_2 CLK_3 CLK_4 CLK_5
1385 ; < 0x00, 0x00, 0x02, 0x04, 0x01, 0x08, 0x00, 0x00
1386 ; < Each entry of the array is the bitmask of 8 chip selects.
1388 CKETriMap POINTER ? ; < This pointer will be set to point to an array that describes
1389 ; < the routing of CKE pins to the DIMMs' ranks.
1390 ; < The array must have 2 entries. Each entry, which associates with
1391 ; < one CKE pin, is a bitmap of 8 CS that that CKE is routed to.
1392 ; < AGESA will base on this array to disable unused CKE pins to save power.
1394 ODTTriMap POINTER ? ; < This pointer will be set to point to an array that describes
1395 ; < the routing of ODT pins to the DIMMs' ranks.
1396 ; < The array must have 4 entries. Each entry, which associates with
1397 ; < one ODT pin, is a bitmap of 8 CS that that ODT is routed to.
1398 ; < AGESA will base on this array to disable unused ODT pins to save power.
1400 ChipSelTriMap POINTER ? ; < This pointer will be set to point to an array that describes
1401 ; < the routing of chip select pins to the DIMMs' ranks.
1402 ; < The array must have 8 entries. Each entry is a bitmap of 8 CS.
1403 ; < AGESA will base on this array to disable unused Chip select pins to save power.
1405 ExtendTmp BOOLEAN ? ; < If extended temperature is supported on all dimms on a channel.
1407 MaxVref UINT8 ? ; < Maximum Vref Value for channel
1409 Reserved UINT8 (100) DUP (?) ; < Reserved
1412 ; ===============================================================================
1413 ; DCT Channel Timing Parameters
1414 ; This data structure sets timings that are specific to the channel
1415 ; ===============================================================================
1416 CH_TIMING_STRUCT STRUCT
1417 DctDimmValid UINT16 ? ; < For each bit n 0..3, 1=DIMM n is valid and is/will be configured where 4..7 are reserved.
1418 DimmMirrorPresent UINT16 ? ; < For each bit n 0..3, 1=DIMM n is OnDimmMirror capable where 4..7 are reserved.
1419 DimmSpdCse UINT16 ? ; < For each bit n 0..3, 1=DIMM n SPD checksum error where 4..7 are reserved.
1420 DimmExclude UINT16 ? ; < For each bit n 0..3, 1 = DIMM n gets excluded because of no common voltage is found
1421 CsPresent UINT16 ? ; < For each bit n 0..7, 1=Chip-select n is present
1422 CsEnabled UINT16 ? ; < For each bit n 0..7, 1=Chip-select n is enabled
1423 CsTestFail UINT16 ? ; < For each bit n 0..7, 1=Chip-select n is present but disabled
1424 CsTrainFail UINT16 ? ; < Bitmap showing which chipselects failed training
1425 DIMM1KPage UINT16 ? ; < For each bit n 0..3, 1=DIMM n contains 1K page devices. where 4..7 are reserved.
1426 DimmQrPresent UINT16 ? ; < QuadRank DIMM present?
1427 DimmDrPresent UINT16 ? ; < Bitmap indicating that Dual Rank Dimms are present
1428 DimmSRPresent UINT8 ? ; < Bitmap indicating that Single Rank Dimms are present
1429 Dimmx4Present UINT16 ? ; < For each bit n 0..3, 1=DIMM n contains x4 data devices. where 4..7 are reserved.
1430 Dimmx8Present UINT16 ? ; < For each bit n 0..3, 1=DIMM n contains x8 data devices. where 4..7 are reserved.
1431 Dimmx16Present UINT16 ? ; < For each bit n 0..3, 1=DIMM n contains x16 data devices. where 4..7 are reserved.
1433 DIMMTrcd UINT16 ? ; < Minimax Trcd*40 (ns) of DIMMs
1434 DIMMTrp UINT16 ? ; < Minimax Trp*40 (ns) of DIMMs
1435 DIMMTrtp UINT16 ? ; < Minimax Trtp*40 (ns) of DIMMs
1436 DIMMTras UINT16 ? ; < Minimax Tras*40 (ns) of DIMMs
1437 DIMMTrc UINT16 ? ; < Minimax Trc*40 (ns) of DIMMs
1438 DIMMTwr UINT16 ? ; < Minimax Twr*40 (ns) of DIMMs
1439 DIMMTrrd UINT16 ? ; < Minimax Trrd*40 (ns) of DIMMs
1440 DIMMTwtr UINT16 ? ; < Minimax Twtr*40 (ns) of DIMMs
1441 DIMMTfaw UINT16 ? ; < Minimax Tfaw*40 (ns) of DIMMs
1442 TargetSpeed UINT16 ? ; < Target DRAM bus speed in MHz
1443 Speed UINT16 ? ; < DRAM bus speed in MHz
1449 CasL UINT8 ? ; < CAS latency DCT setting (busclocks)
1450 Trcd UINT8 ? ; < DCT Trcd (busclocks)
1451 Trp UINT8 ? ; < DCT Trp (busclocks)
1452 Trtp UINT8 ? ; < DCT Trtp (busclocks)
1453 Tras UINT8 ? ; < DCT Tras (busclocks)
1454 Trc UINT8 ? ; < DCT Trc (busclocks)
1455 Twr UINT8 ? ; < DCT Twr (busclocks)
1456 Trrd UINT8 ? ; < DCT Trrd (busclocks)
1457 Twtr UINT8 ? ; < DCT Twtr (busclocks)
1458 Tfaw UINT8 ? ; < DCT Tfaw (busclocks)
1459 Trfc0 UINT8 ? ; < DCT Logical DIMM0 Trfc
1460 ; < 0 = 75ns (for 256Mb devs)
1461 ; < 1 = 105ns (for 512Mb devs)
1462 ; < 2 = 127.5ns (for 1Gb devs)
1463 ; < 3 = 195ns (for 2Gb devs)
1464 ; < 4 = 327.5ns (for 4Gb devs)
1465 Trfc1 UINT8 ? ; < DCT Logical DIMM1 Trfc (see Trfc0 for format)
1466 Trfc2 UINT8 ? ; < DCT Logical DIMM2 Trfc (see Trfc0 for format)
1467 Trfc3 UINT8 ? ; < DCT Logical DIMM3 Trfc (see Trfc0 for format)
1468 DctMemSize UINT32 ? ; < Base[47:16], total DRAM size controlled by this DCT.
1469 SlowMode BOOLEAN ? ; < 1T or 2T CMD mode (slow access mode)
1472 TrwtTO UINT8 ? ; < DCT TrwtTO (busclocks)
1473 Twrrd UINT8 ? ; < DCT Twrrd (busclocks)
1474 Twrwr UINT8 ? ; < DCT Twrwr (busclocks)
1475 Trdrd UINT8 ? ; < DCT Trdrd (busclocks)
1476 TrwtWB UINT8 ? ; < DCT TrwtWB (busclocks)
1477 TrdrdSD UINT8 ? ; < DCT TrdrdSD (busclocks)
1478 TwrwrSD UINT8 ? ; < DCT TwrwrSD (busclocks)
1479 TwrrdSD UINT8 ? ; < DCT TwrrdSD (busclocks)
1480 MaxRdLat UINT16 ? ; < Max Read Latency
1481 WrDatGrossH UINT8 ? ; < Temporary variables must be removed
1482 DqsRcvEnGrossL UINT8 ? ; < Temporary variables must be removed
1483 CH_TIMING_STRUCT ENDS
1485 ; ===============================================================================
1487 ; This data structure defines data used to configure each DRAM controller
1488 ; ===============================================================================
1490 Dct UINT8 ? ; < Current Dct
1491 Timings CH_TIMING_STRUCT {} ; < Channel Timing structure
1492 TimingsMemPs1 POINTER ? ; < Pointed to channel timing structure for Memory Pstate 1
1493 ChData POINTER ? ; < Pointed to a dynamically allocated array of Channel structures
1494 ChannelCount UINT8 ? ; < Number of channel per this DCT
1495 BkIntDis BOOLEAN ? ; < Bank interleave requested but not enabled on current DCT
1499 ; ===============================================================================
1500 ; Data Structure defining each Die
1501 ; This data structure contains information that is used to configure each Die
1502 ; ===============================================================================
1507 NodeId UINT8 ? ; < Node ID of current controller
1508 SocketId UINT8 ? ; < Socket ID of this Die
1509 DieId UINT8 ? ; < ID of this die relative to the socket
1510 PciAddr PCI_ADDR {} ; < Pci bus and device number of this controller.
1511 ErrCode AGESA_STATUS ? ; < Current error condition of Node
1512 ; < 0x0 = AGESA_SUCCESS
1513 ; < 0x1 = AGESA_UNSUPPORTED
1514 ; < 0x2 = AGESA_BOUNDS_CHK
1515 ; < 0x3 = AGESA_ALERT
1516 ; < 0x4 = AGESA_WARNING
1517 ; < 0x5 = AGESA_ERROR
1518 ; < 0x6 = AGESA_CRITICAL
1519 ; < 0x7 = AGESA_FATAL
1521 ErrStatus BOOLEAN (EsbEOL) DUP (?) ; < Error Status bit Field
1522 Status BOOLEAN (SbEOL) DUP (?) ; < Status bit Field
1523 NodeMemSize UINT32 ? ; < Base[47:16], total DRAM size controlled by both DCT0 and DCT1 of this Node.
1524 NodeSysBase UINT32 ? ; < Base[47:16] (system address) DRAM base address of this Node.
1525 NodeHoleBase UINT32 ? ; < If not zero, Base[47:16] (system address) of dram hole for HW remapping. Dram hole exists on this Node
1526 NodeSysLimit UINT32 ? ; < Base[47:16] (system address) DRAM limit address of this Node.
1527 DimmPresent UINT32 ? ; < For each bit n 0..7, 1 = DIMM n is present.
1528 ; < DIMM# Select Signal
1529 ; < 0 MA0_CS_L[0, 1]
1530 ; < 1 MB0_CS_L[0, 1]
1531 ; < 2 MA1_CS_L[0, 1]
1532 ; < 3 MB1_CS_L[0, 1]
1533 ; < 4 MA2_CS_L[0, 1]
1534 ; < 5 MB2_CS_L[0, 1]
1535 ; < 6 MA3_CS_L[0, 1]
1536 ; < 7 MB3_CS_L[0, 1]
1537 DimmValid UINT32 ? ; < For each bit n 0..7, 1 = DIMM n is valid and is / will be configured
1538 RegDimmPresent UINT32 ? ; < For each bit n 0..7, 1 = DIMM n is registered DIMM
1539 LrDimmPresent UINT32 ? ; < For each bit n 0..3, 1 = DIMM n is Load Reduced DIMM where 4..7 are reserved.
1540 DimmEccPresent UINT32 ? ; < For each bit n 0..7, 1 = DIMM n is ECC capable.
1541 DimmParPresent UINT32 ? ; < For each bit n 0..7, 1 = DIMM n is ADR/CMD Parity capable.
1542 DimmTrainFail UINT16 ? ; < Bitmap showing which dimms failed training
1543 ChannelTrainFail UINT16 ? ; < Bitmap showing the channel information about failed Chip Selects
1544 ; < 0 in any bit field indicates Channel 0
1545 ; < 1 in any bit field indicates Channel 1
1546 Dct UINT8 ? ; < Need to be removed
1548 GangedMode BOOLEAN ? ; < Ganged mode
1551 LogicalCpuid CPU_LOGICAL_ID {} ; < The logical CPUID of the node
1552 HostBiosSrvc1 UINT16 ? ; < UINT16 sized general purpose field for use by host BIOS. Scratch space.
1553 HostBiosSrvc2 UINT32 ? ; < UINT32 sized general purpose field for use by host BIOS. Scratch space.
1554 MLoad UINT8 ? ; < Need to be removed
1555 ; < Number of devices loading MAA bus
1556 MaxAsyncLat UINT8 ? ; < Legacy wrapper
1557 ChbD3Rcvrdly UINT8 ? ; < Legacy wrapper
1558 ChaMaxRdLat UINT16 ? ; < Max Read Latency (ns) for DCT 0
1559 ChbD3BcRcvrdly UINT8 ? ; < CHB DIMM 3 Check UINT8 Receiver Enable Delay
1561 DctData POINTER ? ; < Pointed to a dynamically allocated array of DCT_STRUCTs
1562 DctCount UINT8 ? ; < Number of DCTs per this Die
1563 Reserved UINT8 (16) DUP (?) ; < Reserved
1566 ; *********************************************************************
1567 ; * S3 Support structure
1568 ; *********************************************************************
1569 ; AmdInitResume, AmdS3LateRestore, and AmdS3Save param structure
1570 AMD_S3_PARAMS STRUCT
1571 Signature UINT32 ? ; < "ASTR" for AMD Suspend-To-RAM
1572 Version UINT16 ? ; < S3 Params version number
1573 Flags UINT32 ? ; < Indicates operation
1574 NvStorage POINTER ? ; < Pointer to memory critical save state data
1575 NvStorageSize UINT32 ? ; < Size in bytes of the NvStorage region
1576 VolatileStorage POINTER ? ; < Pointer to remaining AMD save state data
1577 VolatileStorageSize UINT32 ? ; < Size in bytes of the VolatileStorage region
1580 ; ===============================================================================
1581 ; MEM_PARAMETER_STRUCT
1582 ; This data structure is used to pass wrapper parameters to the memory configuration code
1583 ; ===============================================================================
1584 MEM_PARAMETER_STRUCT STRUCT
1586 ; Basic (Return parameters)
1587 ; (This section contains the outbound parameters from the memory init code)
1589 GStatus BOOLEAN (GsbEOL) DUP (?) ; < Global Status bitfield
1590 HoleBase UINT32 ? ; < If not zero Base[47:16] (system address) of sub 4GB dram hole for HW remapping.
1591 Sub4GCacheTop UINT32 ? ; < If not zero, the 32-bit top of cacheable memory.
1592 Sub1THoleBase UINT32 ? ; < If not zero Base[47:16] (system address) of sub 1TB dram hole.
1593 SysLimit UINT32 ? ; < Limit[47:16] (system address)
1594 DDR3Voltage DIMM_VOLTAGE ? ; < Find support voltage and send back to platform BIOS.
1595 ExternalVrefValue UINT8 ? ; < Target reference voltage for external Vref for training
1596 MemData POINTER ? ; < Pointer to MEM_DATA_STRUCT
1597 ; Advanced (Optional parameters)
1598 ; Optional (all defaults values will be initialized by the
1599 ; 'AmdMemInitDataStructDef' based on AMD defaults. It is up
1600 ; to the IBV/OEM to change the defaults after initialization
1601 ; but prior to the main entry to the memory code):
1605 BottomIo UINT16 ? ; < Bottom of 32-bit IO space (8-bits)
1606 ; < NV_BOTTOM_IO[7:0]=Addr[31:24]
1607 MemHoleRemapping BOOLEAN ? ; < Memory Hole Remapping (1-bit)
1610 LimitMemoryToBelow1Tb BOOLEAN ? ; < Limit memory address space to below 1 TB
1615 UserTimingMode USER_MEMORY_TIMING_MODE ? ; < User Memclock Mode
1617 MemClockValue MEMORY_BUS_SPEED ? ; < Memory Clock Value
1619 ; Dram Configuration
1621 EnableBankIntlv BOOLEAN ? ; < Dram Bank (chip-select) Interleaving (1-bit)
1622 ; < FALSE =disable (AMD default)
1624 EnableNodeIntlv BOOLEAN ? ; < Node Memory Interleaving (1-bit)
1625 ; < FALSE = disable (AMD default)
1627 EnableChannelIntlv BOOLEAN ? ; < Channel Interleaving (1-bit)
1628 ; < FALSE = disable (AMD default)
1632 EnableEccFeature BOOLEAN ? ; < enable ECC error to go into MCE
1633 ; < FALSE = disable (AMD default)
1637 EnablePowerDown BOOLEAN ? ; < CKE based power down mode (1-bit)
1638 ; < FALSE =disable (AMD default)
1642 EnableOnLineSpareCtl BOOLEAN ? ; < Chip Select Spare Control bit 0:
1643 ; < FALSE = disable Spare (AMD default)
1644 ; < TRUE = enable Spare
1645 TableBasedAlterations POINTER ? ; < Point to an array of data bytes describing desired modifications to register settings.
1647 PlatformMemoryConfiguration POINTER ?
1648 ; < Points to a table that contains platform specific settings
1649 ; < (i.e. MemClk routing, the number of DIMM slots per channel,...)
1650 ; < AGESA initializes this pointer with DefaultPlatformMemoryConfiguration that
1651 ; < contains default conservative settings. Platform BIOS can either tweak
1652 ; < DefaultPlatformMemoryConfiguration or reassign this pointer to its own table.
1654 EnableParity BOOLEAN ? ; < Parity control
1656 ; < FALSE = disable (AMD default)
1657 EnableBankSwizzle BOOLEAN ? ; < BankSwizzle control
1659 ; < TRUE = enable (AMD default)
1660 EnableMemClr BOOLEAN ? ; < Memory Clear functionality control
1662 ; < TRUE = enable (AMD default)
1665 UmaMode UMA_MODE ? ; < Uma Mode
1669 UmaSize UINT32 ? ; < The size of shared graphics dram (16-bits)
1670 ; < NV_UMA_Size[31:0]=Addr[47:16]
1672 UmaBase UINT32 ? ; < The allocated Uma base address (32-bits)
1673 ; < NV_UMA_Base[31:0]=Addr[47:16]
1676 ; Memory Restore Feature
1678 MemRestoreCtl BOOLEAN ? ; < Memory context restore control
1679 ; < FALSE = perform memory init as normal (AMD default)
1680 ; < TRUE = restore memory context and skip training. This requires
1681 ; < MemContext is valid before AmdInitPost
1682 SaveMemContextCtl BOOLEAN ? ; < Control switch to save memory context at the end of MemAuto
1683 ; < TRUE = AGESA will setup MemContext block before exit AmdInitPost
1684 ; < FALSE = AGESA will not setup MemContext block. Platform is
1685 ; < expected to call S3Save later in POST if it wants to
1686 ; < use memory context restore feature.
1687 MemContext AMD_S3_PARAMS {} ; < Memory context block describes the data that platform needs to
1688 ; < save and restore for memory context restore feature to work.
1689 ; < It uses the subset of S3Save block to save/restore. Hence platform
1690 ; < may save only S3 block and uses it for both S3 resume and
1691 ; < memory context restore.
1692 ; < - If MemRestoreCtl is TRUE, platform needs to pass in MemContext
1693 ; < before AmdInitPost.
1694 ; < - If SaveMemContextCtl is TRUE, platform needs to save MemContext
1695 ; < right after AmdInitPost.
1696 ExternalVrefCtl BOOLEAN ? ; < Control the use of external Vref
1697 ; < TRUE = AGESA will use the function defined in "AGESA_EXTERNAL____TRAIN_VREF_CHANGE" in function list
1698 ; < to change the vref
1699 ; < FALSE = AGESA will will use the internal vref control.
1700 ForceTrainMode FORCE_TRAIN_MODE ? ; < Training Mode
1701 ; < 0 = Force 1D Training for all configurations
1702 ; < 1 = Force training for all configurations
1703 ; < 2 = Auto - AGESA will control
1704 MEM_PARAMETER_STRUCT ENDS
1707 ; ===============================================================================
1708 ; Function definition
1709 ; This data structure passes function pointers to the memory configuration code.
1710 ; The wrapper can use this structure with customized versions
1711 ; ================================================================================
1712 MEM_FUNCTION_STRUCT STRUCT
1714 ; PUBLIC required Internal functions
1716 amdMemGetPsCfgU POINTER ? ; < Proc for Unbuffered DIMMs, platform specific
1717 amdMemGetPsCfgR POINTER ? ; < Proc for Registered DIMMs, platform specific
1719 ; PUBLIC optional functions
1721 amdMemEccInit POINTER ? ; < NB proc for ECC feature
1722 amdMemChipSelectInterleaveInit POINTER ? ; < NB proc for CS interleave feature
1723 amdMemDctInterleavingInit POINTER ? ; < NB proc for Channel interleave feature
1724 amdMemMctInterleavingInit POINTER ? ; < NB proc for Node interleave feature
1725 amdMemParallelTraining POINTER ? ; < NB proc for parallel training feature
1726 amdMemEarlySampleSupport POINTER ? ; < NB code for early sample support feature
1727 amdMemMultiPartInitSupport POINTER ? ; < NB code for 'multi-part'
1728 amdMemOnlineSpareSupport POINTER ? ; < NB code for On-Line Spare feature
1729 amdMemUDimmInit POINTER ? ; < NB code for UDIMMs
1730 amdMemRDimmInit POINTER ? ; < NB code for RDIMMs
1731 amdMemLrDimmInit POINTER ? ; < NB code for LRDIMMs
1732 Reserved UINT32 (100) DUP (?) ; < Reserved for later function definition
1733 MEM_FUNCTION_STRUCT ENDS
1735 ; ===============================================================================
1738 ; ===============================================================================
1739 MEM_SOCKET_STRUCT STRUCT
1740 ChannelPtr POINTER (MAX_CHANNELS_PER_SOCKET) DUP (?) ; < Pointers to each channels training data
1742 TimingsPtr POINTER (MAX_CHANNELS_PER_SOCKET) DUP (?) ; < Pointers to each channels timing data
1744 MEM_SOCKET_STRUCT ENDS
1746 ; ===============================================================================
1748 ; ===============================================================================
1749 MEM_DATA_STRUCT STRUCT
1750 StdHeader AMD_CONFIG_PARAMS {} ; < AGESA Standard Header
1752 ParameterListPtr POINTER ? ; < List of input Parameters
1754 FunctionList MEM_FUNCTION_STRUCT {} ; < List of function Pointers
1756 GetPlatformCfg POINTER (MAX_PLATFORM_TYPES) DUP (?) ; < look-up platform info
1758 ErrorHandling POINTER ? ; < Error Handling
1760 ; SocketList is a shortcut for IBVs to retrieve training
1761 ; and timing data for each channel indexed by socket/channel,
1762 ; eliminating their need to parse die/dct/channel etc.
1763 ; It contains pointers to the populated data structures for
1764 ; each channel and skips the channel structures that are
1765 ; unpopulated. In the case of channels sharing the same DCT,
1766 ; the pTimings pointers will point to the same DCT Timing data.
1768 SocketList MEM_SOCKET_STRUCT (MAX_SOCKETS_SUPPORTED) DUP ({}) ; < Socket list for memory code
1770 DiesPerSystem POINTER ? ; < Pointed to an array of DIE_STRUCTs
1771 DieCount UINT8 ? ; < Number of MCTs in the system.
1773 SpdDataStructure POINTER ? ; < Pointer to SPD Data structure
1775 PlatFormConfig POINTER ? ; < Pointer to Platform profile/build option config structure
1777 IsFlowControlSupported BOOLEAN ? ; < Indicates if flow control is supported
1779 TscRate UINT32 ? ; < The rate at which the TSC increments in megahertz.
1781 MEM_DATA_STRUCT ENDS
1783 ; ===============================================================================
1785 ; ===============================================================================
1787 UmaBase UINT64 ? ; < UmaBase[63:0] = Addr[63:0]
1788 UmaSize UINT32 ? ; < UmaSize[31:0] = Addr[31:0]
1789 UmaAttributes UINT32 ? ; < Indicate the attribute of Uma
1790 UmaMode UINT8 ? ; < Indicate the mode of Uma
1791 MemClock UINT16 ? ; < Indicate memory running speed in MHz
1792 Reserved UINT8 (3) DUP (?) ; < Reserved for future usage
1795 ; ===============================================================================
1797 ; ===============================================================================
1800 ; OUT UINT16 SocketId:8; ; < Socket ID
1801 ; OUT UINT16 ModuleId:8; ; < Module ID
1804 ; ===============================================================================
1805 ; Union for ID of socket and module that will be passed out in call out
1806 ; ===============================================================================
1808 IdField ID_FIELD {} ; < Bitfield for ID
1809 IdInformation UINT16 ? ; < ID information for call out
1812 ; AGESA MEMORY ERRORS
1814 ; AGESA_ALERT Memory Errors
1815 MEM_ALERT_USER_TMG_MODE_OVERRULED EQU 04010000h ; < TIMING_MODE_SPECIFIC is requested but
1816 ; < cannot be applied to current configurations.
1817 MEM_ALERT_ORG_MISMATCH_DIMM EQU 04010100h ; < DIMM organization miss-match
1818 MEM_ALERT_BK_INT_DIS EQU 04010200h ; < Bank interleaving disable for internal issue
1820 ; AGESA_ERROR Memory Errors
1821 MEM_ERROR_NO_DQS_POS_RD_WINDOW EQU 04010300h ; < No DQS Position window for RD DQS
1822 MEM_ERROR_SMALL_DQS_POS_RD_WINDOW EQU 04020300h ; < Small DQS Position window for RD DQS
1823 MEM_ERROR_NO_DQS_POS_WR_WINDOW EQU 04030300h ; < No DQS Position window for WR DQS
1824 MEM_ERROR_SMALL_DQS_POS_WR_WINDOW EQU 04040300h ; < Small DQS Position window for WR DQS
1825 MEM_ERROR_ECC_DIS EQU 04010400h ; < ECC has been disabled as a result of an internal issue
1826 MEM_ERROR_DIMM_SPARING_NOT_ENABLED EQU 04010500h ; < DIMM sparing has not been enabled for an internal issues
1827 MEM_ERROR_RCVR_EN_VALUE_TOO_LARGE EQU 04050300h ; < Receive Enable value is too large
1828 MEM_ERROR_RCVR_EN_NO_PASSING_WINDOW EQU 04060300h ; < There is no DQS receiver enable window
1829 MEM_ERROR_DRAM_ENABLED_TIME_OUT EQU 04010600h ; < Time out when polling DramEnabled bit
1830 MEM_ERROR_DCT_ACCESS_DONE_TIME_OUT EQU 04010700h ; < Time out when polling DctAccessDone bit
1831 MEM_ERROR_SEND_CTRL_WORD_TIME_OUT EQU 04010800h ; < Time out when polling SendCtrlWord bit
1832 MEM_ERROR_PREF_DRAM_TRAIN_MODE_TIME_OUT EQU 04010900h ; < Time out when polling PrefDramTrainMode bit
1833 MEM_ERROR_ENTER_SELF_REF_TIME_OUT EQU 04010A00h ; < Time out when polling EnterSelfRef bit
1834 MEM_ERROR_FREQ_CHG_IN_PROG_TIME_OUT EQU 04010B00h ; < Time out when polling FreqChgInProg bit
1835 MEM_ERROR_EXIT_SELF_REF_TIME_OUT EQU 04020A00h ; < Time out when polling ExitSelfRef bit
1836 MEM_ERROR_SEND_MRS_CMD_TIME_OUT EQU 04010C00h ; < Time out when polling SendMrsCmd bit
1837 MEM_ERROR_SEND_ZQ_CMD_TIME_OUT EQU 04010D00h ; < Time out when polling SendZQCmd bit
1838 MEM_ERROR_DCT_EXTRA_ACCESS_DONE_TIME_OUT EQU 04010E00h ; < Time out when polling DctExtraAccessDone bit
1839 MEM_ERROR_MEM_CLR_BUSY_TIME_OUT EQU 04010F00h ; < Time out when polling MemClrBusy bit
1840 MEM_ERROR_MEM_CLEARED_TIME_OUT EQU 04020F00h ; < Time out when polling MemCleared bit
1841 MEM_ERROR_FLUSH_WR_TIME_OUT EQU 04011000h ; < Time out when polling FlushWr bit
1842 MEM_ERROR_MAX_LAT_NO_WINDOW EQU 04070300h ; < Fail to find pass during Max Rd Latency training
1843 MEM_ERROR_PARALLEL_TRAINING_LAUNCH_FAIL EQU 04080300h ; < Fail to launch training code on an AP
1844 MEM_ERROR_PARALLEL_TRAINING_TIME_OUT EQU 04090300h ; < Fail to finish parallel training
1845 MEM_ERROR_NO_ADDRESS_MAPPING EQU 04011100h ; < No address mapping found for a dimm
1846 MEM_ERROR_RCVR_EN_NO_PASSING_WINDOW_EQUAL_LIMIT EQU 040A0300h ; < There is no DQS receiver enable window and the value is equal to the largest value
1847 MEM_ERROR_RCVR_EN_VALUE_TOO_LARGE_LIMIT_LESS_ONE EQU 040B0300h ; < Receive Enable value is too large and is 1 less than limit
1848 MEM_ERROR_CHECKSUM_NV_SPDCHK_RESTRT_ERROR EQU 04011200h ; < SPD Checksum error for NV_SPDCHK_RESTRT
1849 MEM_ERROR_NO_CHIPSELECT EQU 04011300h ; < No chipselects found
1850 MEM_ERROR_UNSUPPORTED_333MHZ_UDIMM EQU 04011500h ; < Unbuffered dimm is not supported at 333MHz
1851 MEM_ERROR_WL_PRE_OUT_OF_RANGE EQU 040C0300h ; < Returned PRE value during write levelization was out of range
1852 MEM_ERROR_NO____RDDQS_WINDOW EQU 040D0300h ; < No RdDqs Window
1853 MEM_ERROR_NO____RDDQS_HEIGHT EQU 040E0300h ; < No RdDqs Height
1854 MEM_ERROR____DQS_ERROR EQU 040F0300h ; < RdDqs Error
1855 MEM_ERROR_INVALID____RDDQS_VALUE EQU 04022400h ; < RdDqs invalid value found
1856 MEM_ERROR____DQS_VREF_MARGIN_ERROR EQU 04023400h ; < RdDqs Vef Margin error found
1857 MEM_ERROR_LR_IBT_NOT_FOUND EQU 04013500h ; < No LR dimm IBT value is found
1858 MEM_ERROR_MR0_NOT_FOUND EQU 04023500h ; < No MR0 value is found
1859 MEM_ERROR_ODT_PATTERN_NOT_FOUND EQU 04033500h ; < No odt pattern value is found
1860 MEM_ERROR_RC2_IBT_NOT_FOUND EQU 04043500h ; < No RC2 IBT value is found
1861 MEM_ERROR_RC10_OP_SPEED_NOT_FOUND EQU 04053500h ; < No RC10 op speed is found
1862 MEM_ERROR_RTT_NOT_FOUND EQU 04063500h ; < No RTT value is found
1863 MEM_ERROR_P___NOT_FOUND EQU 04073500h ; < No training config value is found
1864 MEM_ERROR_SAO_NOT_FOUND EQU 04083500h ; < No slow access mode, Address timing and Output driver compensation value is found
1865 MEM_ERROR_CLK_DIS_MAP_NOT_FOUND EQU 04093500h ; < No CLK disable map is found
1866 MEM_ERROR_CKE_TRI_MAP_NOT_FOUND EQU 040A3500h ; < No CKE tristate map is found
1867 MEM_ERROR_ODT_TRI_MAP_NOT_FOUND EQU 040B3500h ; < No ODT tristate map is found
1868 MEM_ERROR_CS_TRI_MAP_NOT_FOUND EQU 040C3500h ; < No CS tristate map is found
1869 MEM_ERROR_TRAINING_SEED_NOT_FOUND EQU 040D3500h ; < No training seed is found
1871 ; AGESA_WARNING Memory Errors
1872 MEM_WARNING_UNSUPPORTED_QRDIMM EQU 04011600h ; < QR DIMMs detected but not supported
1873 MEM_WARNING_UNSUPPORTED_UDIMM EQU 04021600h ; < U DIMMs detected but not supported
1874 MEM_WARNING_UNSUPPORTED_SODIMM EQU 04031600h ; < SO-DIMMs detected but not supported
1875 MEM_WARNING_UNSUPPORTED_X4DIMM EQU 04041600h ; < x4 DIMMs detected but not supported
1876 MEM_WARNING_UNSUPPORTED_RDIMM EQU 04051600h ; < R DIMMs detected but not supported
1877 MEM_WARNING_UNSUPPORTED_LRDIMM EQU 04061600h ; < LR DIMMs detected but not supported
1879 MEM_WARNING_EMP_NOT_SUPPORTED EQU 04011700h ; < Processor is not capable for EMP
1880 MEM_WARNING_EMP_CONFLICT EQU 04021700h ; < EMP cannot be enabled if channel interleaving,
1881 ; < bank interleaving, or bank swizzle is enabled.
1882 MEM_WARNING_EMP_NOT_ENABLED EQU 04031700h ; < Memory size is not power of two.
1883 MEM_WARNING_ECC_DIS EQU 04041700h ; < ECC has been disabled as a result of an internal issue
1884 MEM_WARNING_PERFORMANCE_ENABLED_BATTERY_LIFE_PREFERRED EQU 04011800h ; < Performance has been enabled, but battery life is preferred.
1885 MEM_WARNING_NO_SPDTRC_FOUND EQU 04011900h ; < No Trc timing value found in SPD of a dimm.
1886 MEM_WARNING_NODE_INTERLEAVING_NOT_ENABLED EQU 04012000h ; < Node Interleaveing Requested, but could not be enabled
1887 MEM_WARNING_CHANNEL_INTERLEAVING_NOT_ENABLED EQU 04012100h ; < Channel Interleaveing Requested, but could not be enabled
1888 MEM_WARNING_BANK_INTERLEAVING_NOT_ENABLED EQU 04012200h ; < Bank Interleaveing Requested, but could not be enabled
1889 MEM_WARNING_VOLTAGE_1_35_NOT_SUPPORTED EQU 04012300h ; < Voltage 1.35 determined, but could not be supported
1890 MEM_WARNING_INITIAL_DDR3VOLT_NONZERO EQU 04012400h ; < DDR3 voltage initial value is not 0
1891 MEM_WARNING_NO_COMMONLY_SUPPORTED_VDDIO EQU 04012500h ; < Cannot find a commonly supported VDDIO
1893 ; AGESA_FATAL Memory Errors
1894 MEM_ERROR_MINIMUM_MODE EQU 04011A00h ; < Running in minimum mode
1895 MEM_ERROR_MODULE_TYPE_MISMATCH_DIMM EQU 04011B00h ; < DIMM modules are miss-matched
1896 MEM_ERROR_NO_DIMM_FOUND_ON_SYSTEM EQU 04011C00h ; < No DIMMs have been found on system
1897 MEM_ERROR_MISMATCH_DIMM_CLOCKS EQU 04011D00h ; < DIMM clocks miss-matched
1898 MEM_ERROR_NO_CYC_TIME EQU 04011E00h ; < No cycle time found
1899 MEM_ERROR_HEAP_ALLOCATE_DYN_STORING_OF_TRAINED_TIMINGS EQU 04011F00h ; < Heap allocation error with dynamic storing of trained timings
1900 MEM_ERROR_HEAP_ALLOCATE_FOR_DCT_STRUCT_AND_CH_DEF_STRUCTs EQU 04021F00h ; < Heap allocation error for DCT_STRUCT and CH_DEF_STRUCT
1901 MEM_ERROR_HEAP_ALLOCATE_FOR_REMOTE_TRAINING_ENV EQU 04031F00h ; < Heap allocation error with REMOTE_TRAINING_ENV
1902 MEM_ERROR_HEAP_ALLOCATE_FOR_SPD EQU 04041F00h ; < Heap allocation error for SPD data
1903 MEM_ERROR_HEAP_ALLOCATE_FOR_RECEIVED_DATA EQU 04051F00h ; < Heap allocation error for RECEIVED_DATA during parallel training
1904 MEM_ERROR_HEAP_ALLOCATE_FOR_S3_SPECIAL_CASE_REGISTERS EQU 04061F00h ; < Heap allocation error for S3 "SPECIAL_CASE_REGISTER"
1905 MEM_ERROR_HEAP_ALLOCATE_FOR_TRAINING_DATA EQU 04071F00h ; < Heap allocation error for Training Data
1906 MEM_ERROR_HEAP_ALLOCATE_FOR_IDENTIFY_DIMM_MEM_NB_BLOCK EQU 04081F00h ; < Heap allocation error for DIMM Identify "MEM_NB_BLOCK
1907 MEM_ERROR_NO_CONSTRUCTOR_FOR_IDENTIFY_DIMM EQU 04022300h ; < No Constructor for DIMM Identify
1908 MEM_ERROR_VDDIO_UNSUPPORTED EQU 04022500h ; < VDDIO of the dimms on the board is not supported
1909 MEM_ERROR_HEAP_ALLOCATE_FOR___ EQU 040B1F00h ; < Heap allocation error for training data
1910 MEM_ERROR_HEAP_DEALLOCATE_FOR___ EQU 040C1F00h ; < Heap de-allocation error for training data
1912 ; AGESA_CRITICAL Memory Errors
1913 MEM_ERROR_HEAP_ALLOCATE_FOR_DMI_TABLE_DDR3 EQU 04091F00h ; < Heap allocation error for DMI table for DDR3
1914 MEM_ERROR_HEAP_ALLOCATE_FOR_DMI_TABLE_DDR2 EQU 040A1F00h ; < Heap allocation error for DMI table for DDR2
1915 MEM_ERROR_UNSUPPORTED_DIMM_CONFIG EQU 04011400h ; < Dimm population is not supported
1918 ; ----------------------------------------------------------------------------
1920 ; * END OF MEMORY-SPECIFIC DATA STRUCTURES
1922 ; *----------------------------------------------------------------------------
1926 ; ----------------------------------------------------------------------------
1928 ; * CPU RELATED DEFINITIONS
1930 ; *----------------------------------------------------------------------------
1933 ; CPU Event definitions.
1935 ; Defines used to filter CPU events based on functional blocks
1936 CPU_EVENT_PM_EVENT_MASK EQU 0FF00FF00h
1937 CPU_EVENT_PM_EVENT_CLASS EQU 008000400h
1939 ;================================================================
1940 ; CPU General events
1941 ; Heap allocation (AppFunction = 01h)
1942 CPU_ERROR_HEAP_BUFFER_IS_NOT_PRESENT EQU 008000100h
1943 CPU_ERROR_HEAP_IS_ALREADY_INITIALIZED EQU 008010100h
1944 CPU_ERROR_HEAP_IS_FULL EQU 008020100h
1945 CPU_ERROR_HEAP_BUFFER_HANDLE_IS_ALREADY_USED EQU 008030100h
1946 CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT EQU 008040100h
1947 ; BrandId (AppFunction = 02h)
1948 CPU_ERROR_BRANDID_HEAP_NOT_AVAILABLE EQU 008000200h
1949 ; Micro code patch (AppFunction = 03h)
1950 CPU_ERROR_MICRO_CODE_PATCH_IS_NOT_LOADED EQU 008000300h
1951 ; Power management (AppFunction = 04h)
1952 CPU_EVENT_PM_PSTATE_OVERCURRENT EQU 008000400h
1953 CPU_EVENT_PM_ALL_PSTATE_OVERCURRENT EQU 008010400h
1954 CPU_ERROR_PSTATE_HEAP_NOT_AVAILABLE EQU 008020400h
1955 CPU_ERROR_PM_NB_PSTATE_MISMATCH EQU 008030400h
1956 ; Other CPU events (AppFunction = 05h)
1957 CPU_EVENT_BIST_ERROR EQU 008000500h
1958 CPU_EVENT_UNKNOWN_PROCESSOR_FAMILY EQU 008010500h
1959 CPU_EVENT_STACK_REENTRY EQU 008020500h
1960 CPU_EVENT_CORE_NOT_IDENTIFIED EQU 008030500h
1961 ;=================================================================
1962 ; CPU Feature events
1963 ; Execution cache (AppFunction = 21h)
1964 ; AGESA_CACHE_SIZE_REDUCED 2101
1965 ; AGESA_CACHE_REGIONS_ACROSS_1MB 2102
1966 ; AGESA_CACHE_REGIONS_ACROSS_4GB 2103
1967 ; AGESA_REGION_NOT_ALIGNED_ON_BOUNDARY 2104
1968 ; AGESA_CACHE_START_ADDRESS_LESS_D0000 2105
1969 ; AGESA_THREE_CACHE_REGIONS_ABOVE_1MB 2106
1970 ; AGESA_DEALLOCATE_CACHE_REGIONS 2107
1971 CPU_EVENT_EXECUTION_CACHE_ALLOCATION_ERROR EQU 008002100h
1972 ; Core Leveling (AppFunction = 22h)
1973 CPU_WARNING_ADJUSTED_LEVELING_MODE EQU 008002200h
1974 ; HT Assist (AppFunction = 23h)
1975 CPU_WARNING_NONOPTIMAL_HT_ASSIST_CFG EQU 008002300h
1977 ; CPU Build Configuration structures and definitions
1979 ; Build Configuration values for BLDGCFG_AP_MTRR_SETTINGS
1980 AP_MTRR_SETTINGS STRUCT
1981 MsrAddr UINT32 ? ; < Fixed-Sized MTRR address
1982 MsrData UINT64 ? ; < MTRR Settings
1983 AP_MTRR_SETTINGS ENDS
1985 AMD_AP_MTRR_FIX64k_00000 EQU 000000250h
1986 AMD_AP_MTRR_FIX16k_80000 EQU 000000258h
1987 AMD_AP_MTRR_FIX16k_A0000 EQU 000000259h
1988 AMD_AP_MTRR_FIX4k_C0000 EQU 000000268h
1989 AMD_AP_MTRR_FIX4k_C8000 EQU 000000269h
1990 AMD_AP_MTRR_FIX4k_D0000 EQU 00000026Ah
1991 AMD_AP_MTRR_FIX4k_D8000 EQU 00000026Bh
1992 AMD_AP_MTRR_FIX4k_E0000 EQU 00000026Ch
1993 AMD_AP_MTRR_FIX4k_E8000 EQU 00000026Dh
1994 AMD_AP_MTRR_FIX4k_F0000 EQU 00000026Eh
1995 AMD_AP_MTRR_FIX4k_F8000 EQU 00000026Fh
1996 CPU_LIST_TERMINAL EQU 0FFFFFFFFh
1998 ; ***********************************************************************
2000 ; * AGESA interface Call-Out function parameter structures
2002 ; **********************************************************************
2004 ; Parameters structure for interface call-out AgesaAllocateBuffer
2005 AGESA_BUFFER_PARAMS STRUCT
2006 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2007 BufferLength UINT32 ? ; < Size of buffer to allocate
2008 BufferHandle UINT32 ? ; < Identifier or name for the buffer
2009 BufferPointer POINTER ? ; < location of the created buffer
2010 AGESA_BUFFER_PARAMS ENDS
2012 ; Parameters structure for interface call-out AgesaRunCodeOnAp
2013 AP_EXE_PARAMS STRUCT
2014 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2015 FunctionNumber UINT32 ? ; < Index of the procedure to execute
2016 RelatedDataBlock POINTER ? ; < Location of data structure the procedure will use
2017 RelatedBlockLength UINT32 ? ; < Size of the related data block
2020 ; Parameters structure for the interface call-out AgesaReadSpd & AgesaReadSpdRecovery
2021 AGESA_READ_SPD_PARAMS STRUCT
2022 StdHeader AMD_CONFIG_PARAMS {} ; < standard header
2023 SocketId UINT8 ? ; < Address of SPD - socket ID
2024 MemChannelId UINT8 ? ; < Address of SPD - memory channel ID
2025 DimmId UINT8 ? ; < Address of SPD - DIMM ID
2026 Buffer POINTER ? ; < Location where to place the SPD content
2027 MemData POINTER ? ; < Location of the MemData structure, for reference
2028 AGESA_READ_SPD_PARAMS ENDS
2031 AMD_DMI_INFO_BUFFER_HANDLE EQU 000D000h ; < Assign 0x000D000 buffer handle to DMI function
2032 AMD_PSTATE_DATA_BUFFER_HANDLE EQU 000D001h ; < Assign 0x000D001 buffer handle to Pstate data
2033 AMD_PSTATE_ACPI_BUFFER_HANDLE EQU 000D002h ; < Assign 0x000D002 buffer handle to Pstate table
2034 AMD_BRAND_ID_BUFFER_HANDLE EQU 000D003h ; < Assign 0x000D003 buffer handle to Brand ID
2035 AMD_ACPI_SLIT_BUFFER_HANDLE EQU 000D004h ; < Assign 0x000D004 buffer handle to SLIT function
2036 AMD_SRAT_INFO_BUFFER_HANDLE EQU 000D005h ; < Assign 0x000D005 buffer handle to SRAT function
2037 AMD_WHEA_BUFFER_HANDLE EQU 000D006h ; < Assign 0x000D006 buffer handle to WHEA function
2038 AMD_S3_INFO_BUFFER_HANDLE EQU 000D007h ; < Assign 0x000D007 buffer handle to S3 function
2039 AMD_S3_NB_INFO_BUFFER_HANDLE EQU 000D008h ; < Assign 0x000D008 buffer handle to S3 NB device info
2040 AMD_ACPI_ALIB_BUFFER_HANDLE EQU 000D009h ; < Assign 0x000D009 buffer handle to ALIB SSDT table
2041 AMD_ACPI_IVRS_BUFFER_HANDLE EQU 000D00Ah ; < Assign 0x000D00A buffer handle to IOMMU IVRS table
2042 AMD_BUFFER_HANDLE TEXTEQU <DWORD>
2043 ; ***********************************************************************
2045 ; * AGESA interface Call-Out function prototypes
2047 ; **********************************************************************
2049 ; ***********************************************************************
2051 ; * AGESA interface structure definition and function prototypes
2053 ; **********************************************************************
2055 ; *********************************************************************
2056 ; * Platform Configuration: The parameters in boot branch function
2057 ; *********************************************************************
2059 ; The possible platform control flow settings.
2060 Nfcm EQU 0 ; < Normal Flow Control Mode.
2061 UmaDr EQU 1 ; < UMA using Display Refresh flow control.
2062 UmaIfcm EQU 2 ; < UMA using Isochronous Flow Control.
2063 Ifcm EQU 3 ; < Isochronous Flow Control Mode (other than for UMA).
2064 Iommu EQU 4 ; < An IOMMU is in use in the system.
2065 MaxControlFlow EQU 5 ; < Not a control flow mode, use for limit checking.
2066 PLATFORM_CONTROL_FLOW TEXTEQU <DWORD>
2068 ; Platform Deemphasis Levels.
2069 DeemphasisLevelNone EQU 0 ; < No Deemphasis.
2070 DeemphasisLevelMinus3 EQU 1 ; < Minus 3 db deemphasis.
2071 DeemphasisLevelMinus6 EQU 2 ; < Minus 6 db deemphasis.
2072 DeemphasisLevelMinus8 EQU 3 ; < Minus 8 db deemphasis.
2073 DeemphasisLevelMinus11 EQU 4 ; < Minus 11 db deemphasis.
2074 DeemphasisLevelMinus11pre8 EQU 5 ; < Minus 11, Minus 8 precursor db deemphasis.
2075 DcvLevelNone EQU 16 ; < No DCV Deemphasis.
2076 DcvLevelMinus2 EQU 17 ; < Minus 2 db DCV deemphasis.
2077 DcvLevelMinus3 EQU 18 ; < Minus 3 db DCV deemphasis.
2078 DcvLevelMinus5 EQU 19 ; < Minus 5 db DCV deemphasis.
2079 DcvLevelMinus6 EQU 20 ; < Minus 6 db DCV deemphasis.
2080 DcvLevelMinus7 EQU 21 ; < Minus 7 db DCV deemphasis.
2081 DcvLevelMinus8 EQU 22 ; < Minus 8 db DCV deemphasis.
2082 DcvLevelMinus9 EQU 23 ; < Minus 9 db DCV deemphasis.
2083 DcvLevelMinus11 EQU 24 ; < Minus 11 db DCV deemphasis.
2084 MaxPlatformDeemphasisLevel EQU 25 ; < Not a deemphasis level, use for limit checking.
2085 PLATFORM_DEEMPHASIS_LEVEL TEXTEQU <DWORD>
2087 ; Provide Deemphasis Levels for HT Links.
2089 ; For each CPU to CPU or CPU to IO device HT link, the list of Deemphasis Levels will
2090 ; be checked for a match. The item matches for a Socket, Link if the link frequency is
2091 ; is in the inclusive range HighFreq:LoFreq.
2092 ; AGESA does not set deemphasis in IO devices, only in processors.
2094 CPU_HT_DEEMPHASIS_LEVEL STRUCT
2096 Socket UINT8 ? ; < One Socket on which this Link is located
2097 Link UINT8 ? ; < The Link on this Processor.
2098 LoFreq UINT8 ? ; < If the link is set to this frequency or greater, apply these levels, and
2099 HighFreq UINT8 ? ; < If the link is set to this frequency or less, apply these levels.
2101 ReceiverDeemphasis PLATFORM_DEEMPHASIS_LEVEL ? ; < The deemphasis level for this link
2102 DcvDeemphasis PLATFORM_DEEMPHASIS_LEVEL ? ; < The DCV, or far transmitter deemphasis level.
2103 CPU_HT_DEEMPHASIS_LEVEL ENDS
2105 ; The possible hardware prefetch mode settings.
2106 HARDWARE_PREFETCHER_AUTO EQU 0 ; Use the recommended setting for the processor. In most cases, the recommended setting is enabled.
2107 DISABLE_L1_PREFETCHER EQU 1 ; Use the recommended settings for the hardware prefetcher, but disable L1 prefetching.
2108 DISABLE_HW_PREFETCHER_TRAINING_ON_SOFTWARE_PREFETCHES EQU 2 ; Use the recommended setting for the hardware prefetcher, but disable training on software prefetches.
2109 DISABLE_L1_PREFETCHER_AND_HW_PREFETCHER_TRAINING_ON_SOFTWARE_PREFETCHES EQU 3 ; Use the recommended settings for the hardware prefetcher, but disable both the L1 prefetcher and training on software prefetches.
2110 DISABLE_HARDWARE_PREFETCH EQU 4 ; Disable hardware prefetching.
2111 MAX_HARDWARE_PREFETCH_MODE EQU 5 ; Not a hardware prefetch mode, use for limit checking.
2112 HARDWARE_PREFETCH_MODE TEXTEQU <DWORD>
2114 ; The possible software prefetch mode settings.
2115 SOFTWARE_PREFETCHES_AUTO EQU 0 ; Use the recommended setting for the processor. In most cases, the recommended setting is enabled.
2116 DISABLE_SOFTWARE_PREFETCHES EQU 1 ; Disable software prefetches (convert software prefetch instructions to NOP).
2117 MAX_SOFTWARE_PREFETCH_MODE EQU 2 ; Not a software prefetch mode, use for limit checking.
2118 SOFTWARE_PREFETCH_MODE TEXTEQU <DWORD>
2120 ; Advanced performance tunings, prefetchers.
2121 ; These settings provide for performance tuning to optimize for specific workloads.
2122 ADVANCED_PERFORMANCE_PROFILE STRUCT
2123 HardwarePrefetchMode HARDWARE_PREFETCH_MODE ? ; This value provides for advanced performance tuning by controlling the hardware prefetcher setting.
2124 SoftwarePrefetchMode SOFTWARE_PREFETCH_MODE ? ; This value provides for advanced performance tuning by controlling the software prefetch instructions.
2125 DramPrefetchMode DRAM_PREFETCH_MODE ? ; This value provides for advanced performance tuning by controlling the DRAM prefetcher setting.
2126 ADVANCED_PERFORMANCE_PROFILE ENDS
2128 ; The possible platform power policy settings.
2129 Performance EQU 0 ; < Optimize for performance.
2130 BatteryLife EQU 1 ; < Optimize for battery life.
2131 MaxPowerPolicy EQU 2 ; < Not a power policy mode, use for limit checking.
2132 PLATFORM_POWER_POLICY TEXTEQU <DWORD>
2134 ; Platform performance settings for optimized settings.
2135 ; Several configuration settings for the processor depend upon other parts and
2136 ; general designer choices for the system. The determination of these data points
2137 ; is not standard for all platforms, so the host environment needs to provide these
2138 ; to specify how the system is to be configured.
2139 PERFORMANCE_PROFILE STRUCT
2140 PlatformControlFlowMode PLATFORM_CONTROL_FLOW ? ; < The platform's control flow mode for optimum platform performance.
2141 UseHtAssist BOOLEAN ? ; < HyperTransport link traffic optimization.
2142 UseAtmMode BOOLEAN ? ; < HyperTransport link traffic optimization.
2143 Use32ByteRefresh BOOLEAN ? ; < Display Refresh traffic generates 32 byte requests.
2144 UseVariableMctIsocPriority BOOLEAN ? ; < The Memory controller will be set to Variable Isoc Priority.
2145 AdvancedPerformanceProfile ADVANCED_PERFORMANCE_PROFILE {} ; < The advanced platform performance settings.
2146 PlatformPowerPolicy PLATFORM_POWER_POLICY ? ; < The platform's desired power policy
2147 PERFORMANCE_PROFILE ENDS
2149 ; Platform settings that describe the voltage regulator modules of the system.
2150 ; Many power management settings are dependent upon the characteristics of the
2151 ; on-board voltage regulator module (VRM). The host environment needs to provide
2152 ; these to specify how the system is to be configured.
2153 PLATFORM_VRM_CONFIGURATION STRUCT
2154 CurrentLimit UINT32 ? ; < Vrm Current Limit.
2155 LowPowerThreshold UINT32 ? ; < Vrm Low Power Threshold.
2156 SlewRate UINT32 ? ; < Vrm Slew Rate.
2157 AdditionalDelay UINT32 ? ; < Vrm Additional Delay.
2158 HiSpeedEnable BOOLEAN ? ; < Select high speed VRM.
2159 InrushCurrentLimit UINT32 ? ; < Vrm Inrush Current Limit.
2160 PLATFORM_VRM_CONFIGURATION ENDS
2162 ; The VRM types to characterize.
2163 CoreVrm EQU 0 ; < VDD plane.
2164 NbVrm EQU 1 ; < VDDNB plane.
2165 MaxVrmType EQU 2 ; < Not a valid VRM type, use for limit checking.
2166 PLATFORM_VRM_TYPE TEXTEQU <DWORD>
2168 ; FCH Platform Configuration Policy
2169 FCH_PLATFORM_POLICY STRUCT
2170 CfgSmbus0BaseAddress UINT16 ? ; SMBUS0 Controller Base Address
2171 CfgSmbus1BaseAddress UINT16 ? ; SMBUS1 Controller Base Address
2172 CfgSioPmeBaseAddress UINT16 ? ; I/O base address for LPC I/O target range
2173 CfgAcpiPm1EvtBlkAddr UINT16 ? ; I/O base address of ACPI power management Event Block
2174 CfgAcpiPm1CntBlkAddr UINT16 ? ; I/O base address of ACPI power management Control Block
2175 CfgAcpiPmTmrBlkAddr UINT16 ? ; I/O base address of ACPI power management Timer Block
2176 CfgCpuControlBlkAddr UINT16 ? ; I/O base address of ACPI power management CPU Control Block
2177 CfgAcpiGpe0BlkAddr UINT16 ? ; I/O base address of ACPI power management General Purpose Event Block
2178 CfgSmiCmdPortAddr UINT16 ? ; I/O base address of ACPI SMI Command Block
2179 CfgAcpiPmaCntBlkAddr UINT16 ? ; I/O base address of ACPI power management additional control block
2180 CfgGecShadowRomBase UINT32 ? ; 32-bit base address to the GEC shadow ROM
2181 CfgWatchDogTimerBase UINT32 ? ; Watchdog Timer base address
2182 CfgSpiRomBaseAddress UINT32 ? ; Base address for the SPI ROM controller
2183 CfgHpetBaseAddress UINT32 ? ; HPET MMIO base address
2184 CfgAzaliaSsid UINT32 ? ; Subsystem ID of HD Audio controller
2185 CfgSmbusSsid UINT32 ? ; Subsystem ID of SMBUS controller
2186 CfgIdeSsid UINT32 ? ; Subsystem ID of IDE controller
2187 CfgSataAhciSsid UINT32 ? ; Subsystem ID of SATA controller in AHCI mode
2188 CfgSataIdeSsid UINT32 ? ; Subsystem ID of SATA controller in IDE mode
2189 CfgSataRaid5Ssid UINT32 ? ; Subsystem ID of SATA controller in RAID5 mode
2190 CfgSataRaidSsid UINT32 ? ; Subsystem ID of SATA controller in RAID mode
2191 CfgEhciSsid UINT32 ? ; Subsystem ID of EHCI
2192 CfgOhciSsid UINT32 ? ; Subsystem ID of OHCI
2193 CfgLpcSsid UINT32 ? ; Subsystem ID of LPC ISA Bridge
2194 CfgSdSsid UINT32 ? ; Subsystem ID of SecureDigital controller
2195 CfgXhciSsid UINT32 ? ; Subsystem ID of XHCI
2196 CfgFchPort80BehindPcib BOOLEAN ? ; Is port80 cycle going to the PCI bridge
2197 CfgFchEnableAcpiSleepTrap BOOLEAN ? ; ACPI sleep SMI enable/disable
2198 CfgFchGppLinkConfig GPP_LINKMODE ? ; FCH GPP link configuration
2199 CfgFchGppPort0Present BOOLEAN ? ; Is FCH GPP port 0 present
2200 CfgFchGppPort1Present BOOLEAN ? ; Is FCH GPP port 1 present
2201 CfgFchGppPort2Present BOOLEAN ? ; Is FCH GPP port 2 present
2202 CfgFchGppPort3Present BOOLEAN ? ; Is FCH GPP port 3 present
2203 CfgFchGppPort0HotPlug BOOLEAN ? ; Is FCH GPP port 0 hotplug capable
2204 CfgFchGppPort1HotPlug BOOLEAN ? ; Is FCH GPP port 1 hotplug capable
2205 CfgFchGppPort2HotPlug BOOLEAN ? ; Is FCH GPP port 2 hotplug capable
2206 CfgFchGppPort3HotPlug BOOLEAN ? ; Is FCH GPP port 3 hotplug capable
2208 CfgFchEsataPortBitMap UINT8 ? ; ESATA Port definition, eg: [0]=1, means port 0 is ESATA capable
2209 CfgFchIrPinControl UINT8 ? ; Register bitfield describing Infrared Pin Control:
2210 CfgFchSdClockControl SD_CLOCK_CONTROL ? ; FCH SD Clock Control
2211 CfgFchSciMapControl POINTER ? ; FCH SCI Mapping Control
2212 CfgFchSataPhyControl POINTER ? ; FCH SATA PHY Control
2213 CfgFchGpioControl POINTER ? ; FCH GPIO Control
2214 FCH_PLATFORM_POLICY ENDS
2217 ; Build Option/Configuration Boolean Structure
2218 BUILD_OPT_CFG STRUCT
2220 VersionString AMD_CODE_HEADER {} ; < AMD embedded code version string
2221 OptionUDimms BOOLEAN ? ; < UDIMMS
2222 OptionRDimms BOOLEAN ? ; < RDIMMS
2223 OptionLrDimms BOOLEAN ? ; < LRDIMMS
2224 OptionEcc BOOLEAN ? ; < ECC
2225 OptionBankInterleave BOOLEAN ? ; < BANK_INTERLEAVE
2226 OptionDctInterleave BOOLEAN ? ; < DCT_INTERLEAVE
2227 OptionNodeInterleave BOOLEAN ? ; < NODE_INTERLEAVE
2228 OptionParallelTraining BOOLEAN ? ; < PARALLEL_TRAINING
2229 OptionOnlineSpare BOOLEAN ? ; < ONLINE_SPARE
2230 OptionMemRestore BOOLEAN ? ; < MEM CONTEXT RESTORE
2231 OptionMultisocket BOOLEAN ? ; < MULTISOCKET
2232 OptionAcpiPstates BOOLEAN ? ; < ACPI_PSTATES
2233 OptionPStatesInHpcMode BOOLEAN ? ; < PSTATES_HPC_MODE
2234 OptionSrat BOOLEAN ? ; < SRAT
2235 OptionSlit BOOLEAN ? ; < SLIT
2236 OptionWhea BOOLEAN ? ; < WHEA
2237 OptionDmi BOOLEAN ? ; < DMI
2238 OptionEarlySamples BOOLEAN ? ; < EARLY_SAMPLES
2239 OptionAddrToCsTranslator BOOLEAN ? ; < ADDR_TO_CS_TRANSLATOR
2241 ; Build Configuration Area
2242 CfgPciMmioAddress UINT64 ? ; < PciMmioBase
2243 CfgPciMmioSize UINT32 ? ; < PciMmioSize
2244 CfgPlatVrmCfg PLATFORM_VRM_CONFIGURATION (MaxVrmType) DUP ({}) ; < Several configuration settings for the voltage regulator modules.
2245 CfgPlatNumIoApics UINT32 ? ; < PlatformApicIoNumber
2246 CfgMemInitPstate UINT32 ? ; < MemoryInitPstate
2247 CfgPlatformC1eMode PLATFORM_C1E_MODES ? ; < PlatformC1eMode
2248 CfgPlatformC1eOpData UINT32 ? ; < PlatformC1eOpData
2249 CfgPlatformC1eOpData1 UINT32 ? ; < PlatformC1eOpData1
2250 CfgPlatformC1eOpData2 UINT32 ? ; < PlatformC1eOpData2
2251 CfgPlatformC1eOpData3 UINT32 ? ; < PlatformC1eOpData3
2252 CfgPlatformCStateMode PLATFORM_CSTATE_MODES ? ; < PlatformCStateMode
2253 CfgPlatformCStateOpData UINT32 ? ; < PlatformCStateOpData
2254 CfgPlatformCStateIoBaseAddress UINT16 ? ; < PlatformCStateIoBaseAddress
2255 CfgPlatformCpbMode PLATFORM_CPB_MODES ? ; < PlatformCpbMode
2256 CfgLowPowerPstateForProcHot PLATFORM_LOW_POWER_PSTATE_MODES ? ; < Low power Pstate for PROCHOT mode
2257 CfgCoreLevelingMode UINT32 ? ; < CoreLevelingCofig
2258 CfgPerformanceProfile PERFORMANCE_PROFILE {} ; < The platform's control flow mode and platform performance settings.
2259 CfgPlatformDeemphasisList POINTER ? ; < HT Deemphasis
2260 CfgAmdPlatformType UINT32 ? ; < AmdPlatformType
2261 CfgAmdPstateCapValue UINT32 ? ; < Amd pstate ceiling enabling deck
2263 CfgMemoryBusFrequencyLimit MEMORY_BUS_SPEED ? ; < Memory Bus Frequency Limit
2264 CfgMemoryModeUnganged BOOLEAN ? ; < Memory Mode Unganged
2265 CfgMemoryQuadRankCapable BOOLEAN ? ; < Memory Quad Rank Capable
2266 CfgMemoryQuadrankType QUANDRANK_TYPE ? ; < Memory Quadrank Type
2267 CfgMemoryRDimmCapable BOOLEAN ? ; < Memory RDIMM Capable
2268 CfgMemoryLRDimmCapable BOOLEAN ? ; < Memory LRDIMM Capable
2269 CfgMemoryUDimmCapable BOOLEAN ? ; < Memory UDIMM Capable
2270 CfgMemorySODimmCapable BOOLEAN ? ; < Memory SODimm Capable
2271 CfgLimitMemoryToBelow1Tb BOOLEAN ? ; < Limit memory address space to below 1TB
2272 CfgMemoryEnableBankInterleaving BOOLEAN ? ; < Memory Enable Bank Interleaving
2273 CfgMemoryEnableNodeInterleaving BOOLEAN ? ; < Memory Enable Node Interleaving
2274 CfgMemoryChannelInterleaving BOOLEAN ? ; < Memory Channel Interleaving
2275 CfgMemoryPowerDown BOOLEAN ? ; < Memory Power Down
2276 CfgPowerDownMode POWER_DOWN_MODE ? ; < Power Down Mode
2277 CfgOnlineSpare BOOLEAN ? ; < Online Spare
2278 CfgMemoryParityEnable BOOLEAN ? ; < Memory Parity Enable
2279 CfgBankSwizzle BOOLEAN ? ; < Bank Swizzle
2280 CfgTimingModeSelect USER_MEMORY_TIMING_MODE ? ; < Timing Mode Select
2281 CfgMemoryClockSelect MEMORY_BUS_SPEED ? ; < Memory Clock Select
2282 CfgDqsTrainingControl BOOLEAN ? ; < Dqs Training Control
2283 CfgIgnoreSpdChecksum BOOLEAN ? ; < Ignore Spd Checksum
2284 CfgUseBurstMode BOOLEAN ? ; < Use Burst Mode
2285 CfgMemoryAllClocksOn BOOLEAN ? ; < Memory All Clocks On
2286 CfgEnableEccFeature BOOLEAN ? ; < Enable ECC Feature
2287 CfgEccRedirection BOOLEAN ? ; < ECC Redirection
2288 CfgScrubDramRate UINT16 ? ; < Scrub Dram Rate
2289 CfgScrubL2Rate UINT16 ? ; < Scrub L2Rate
2290 CfgScrubL3Rate UINT16 ? ; < Scrub L3Rate
2291 CfgScrubIcRate UINT16 ? ; < Scrub Ic Rate
2292 CfgScrubDcRate UINT16 ? ; < Scrub Dc Rate
2293 CfgEccSyncFlood BOOLEAN ? ; < ECC Sync Flood
2294 CfgEccSymbolSize UINT16 ? ; < ECC Symbol Size
2295 CfgHeapDramAddress UINT64 ? ; < Heap contents will be temporarily stored in this address during the transition
2296 CfgNodeMem1GBAlign BOOLEAN ? ; < Node Mem 1GB boundary Alignment
2297 CfgS3LateRestore BOOLEAN ? ; < S3 Late Restore
2298 CfgAcpiPstateIndependent BOOLEAN ? ; < PSD method dependent/Independent
2299 CfgApMtrrSettingsList POINTER ? ; < The AP's MTRR settings before final halt
2300 CfgUmaMode UMA_MODE ? ; < Uma Mode
2301 CfgUmaSize UINT32 ? ; < Uma Size [31:0]=Addr[47:16]
2302 CfgUmaAbove4G BOOLEAN ? ; < Uma Above 4G Support
2303 CfgUmaAlignment UMA_ALIGNMENT ? ; < Uma alignment
2304 CfgProcessorScopeInSb BOOLEAN ? ; < ACPI Processor Object in \_SB scope
2305 CfgProcessorScopeName0 CHAR8 ? ; < OEM specific 1st character of processor scope name.
2306 CfgProcessorScopeName1 CHAR8 ? ; < OEM specific 2nd character of processor scope name.
2307 CfgGnbHdAudio UINT8 ? ; < Gnb HD Audio Enable
2308 CfgAbmSupport UINT8 ? ; < ABM support
2309 CfgDynamicRefreshRate UINT8 ? ; < Dynamic refresh rate
2310 CfgLcdBackLightControl UINT16 ? ; < Lcd back light control
2311 CfgGnb3dStereoPinIndex UINT8 ? ; < 3D Stereo Pin ID
2312 CfgTempPcieMmioBaseAddress UINT32 ? ; < Temp pcie MMIO base address
2313 CfgGnbIGPUSSID UINT32 ? ; < Gnb internal GPU SSID
2314 CfgGnbHDAudioSSID UINT32 ? ; < Gnb HD Audio SSID
2315 CfgGnbPcieSSID UINT32 ? ; < Gnb PCIe SSID
2316 CfgLvdsSpreadSpectrum UINT16 ? ; < Lvds Spread Spectrum. Build-time customizable only
2317 CfgLvdsSpreadSpectrumRate UINT16 ? ; < Lvds Spread Spectrum Rate. Build-time customizable only
2318 FchBldCfg POINTER ? ; < FCH platform build configuration policy
2319 CfgIommuSupport BOOLEAN ? ; IOMMU support
2320 CfgLvdsPowerOnSeqDigonToDe UINT8 ? ; Panel initialization timing
2321 CfgLvdsPowerOnSeqDeToVaryBl UINT8 ? ; Panel initialization timing
2322 CfgLvdsPowerOnSeqDeToDigon UINT8 ? ; Panel initialization timing
2323 CfgLvdsPowerOnSeqVaryBlToDe UINT8 ? ; Panel initialization timing
2324 CfgLvdsPowerOnSeqOnToOffDelay UINT8 ? ; Panel initialization timing
2325 CfgLvdsPowerOnSeqVaryBlToBlon UINT8 ? ; Panel initialization timing
2326 CfgLvdsPowerOnSeqBlonToVaryBl UINT8 ? ; Panel initialization timing
2327 CfgLvdsMaxPixelClockFreq UINT16 ? ; The maximum pixel clock frequency supported
2328 CfgLcdBitDepthControlValue UINT32 ? ; The LCD bit depth control settings
2329 CfgLvds24bbpPanelMode UINT8 ? ; The LVDS 24 BBP mode
2330 CfgLvdsMiscControl LVDS_MISC_CONTROL {}; THe LVDS Misc control
2331 CfgPcieRefClkSpreadSpectrum UINT16 ? ; PCIe Reference Clock Spread Spectrum
2332 CfgExternalVrefCtlFeature BOOLEAN ? ; External Vref control
2333 CfgForceTrainMode FORCE_TRAIN_MODE ? ; < Force Train Mode
2334 CfgGnbRemoteDisplaySupport BOOLEAN ? ; Wireless Display Support
2335 CfgIvrsExclusionRangeList POINTER ? ; IOMMU Exclusion Range List
2336 Reserved BOOLEAN ? ; < reserved...
2339 ; A structure containing platform specific operational characteristics. This
2340 ; structure is initially populated by the initializer with a copy of the same
2341 ; structure that was created at build time using the build configuration controls.
2342 PLATFORM_CONFIGURATION STRUCT
2343 PlatformProfile PERFORMANCE_PROFILE {} ; < Several configuration settings for the processor.
2344 PlatformDeemphasisList POINTER ? ; < Deemphasis levels for the platform's HT links.
2345 CoreLevelingMode UINT8 ? ; < Indicates how to balance the number of cores per processor.
2346 C1eMode PLATFORM_C1E_MODES ? ; < Specifies the method of C1e enablement - Disabled, HW, or message based.
2347 C1ePlatformData UINT32 ? ; < If C1eMode is HW, specifies the P_LVL3 I/O port of the platform.
2348 C1ePlatformData1 UINT32 ? ; < If C1eMode is SW, specifies the address of chipset's SMI command port.
2349 C1ePlatformData2 UINT32 ? ; < If C1eMode is SW, specifies the unique number used by the SMI handler to identify SMI source.
2350 C1ePlatformData3 UINT32 ? ; < If C1eMode is Auto, specifies the P_LVL3 I/O port of the platform for HW C1e
2351 CStateMode PLATFORM_CSTATE_MODES ? ; < Specifies the method of C-State enablement - Disabled, or C6.
2352 CStatePlatformData UINT32 ? ; < This element specifies some pertinent data needed for the operation of the Cstate feature
2353 ; < If CStateMode is CStateModeC6, this item is reserved
2354 CStateIoBaseAddress UINT16 ? ; < This item specifies a free block of 8 consecutive bytes of I/O ports that
2355 ; < can be used to allow the CPU to enter Cstates.
2356 CpbMode PLATFORM_CPB_MODES ? ; < Specifies the method of core performance boost enablement - Disabled, or Auto.
2357 UserOptionDmi BOOLEAN ? ; < When set to TRUE, the DMI data table is generated.
2358 UserOptionPState BOOLEAN ? ; < When set to TRUE, the PState data tables are generated.
2359 UserOptionSrat BOOLEAN ? ; < When set to TRUE, the SRAT data table is generated.
2360 UserOptionSlit BOOLEAN ? ; < When set to TRUE, the SLIT data table is generated.
2361 UserOptionWhea BOOLEAN ? ; < When set to TRUE, the WHEA data table is generated.
2362 LowPowerPstateForProcHot PLATFORM_LOW_POWER_PSTATE_MODES ? ; < Specifies the method of low power Pstate for PROCHOT enablement - Disabled, or Auto.
2363 PowerCeiling UINT32 ? ; < P-State Ceiling Enabling Deck - Max power milli-watts.
2364 ForcePstateIndependent BOOLEAN ? ; < P-State _PSD independence or dependence.
2365 PStatesInHpcMode BOOLEAN ? ; < High performance computing (HPC) mode
2366 NumberOfIoApics UINT32 ? ; < Number of I/O APICs in the system
2367 VrmProperties PLATFORM_VRM_CONFIGURATION (MaxVrmType) DUP ({}) ; < Several configuration settings for the voltage regulator modules.
2368 ProcessorScopeInSb BOOLEAN ? ; < ACPI Processor Object in \_SB scope
2369 ProcessorScopeName0 CHAR8 ? ; < OEM specific 1st character of processor scope name.
2370 ProcessorScopeName1 CHAR8 ? ; < OEM specific 2nd character of processor scope name.
2371 GnbHdAudio UINT8 ? ; < Control GFX HD Audio controller(Used for HDMI and DP display output),
2372 ; < essentially it enables function 1 of graphics device.
2373 ; < @li 0 = HD Audio disable
2374 ; < @li 1 = HD Audio enable
2375 AbmSupport UINT8 ? ; < Automatic adjust LVDS/eDP Back light level support.It is
2376 ; < characteristic specific to display panel which used by platform design.
2377 ; < @li 0 = ABM support disabled
2378 ; < @li 1 = ABM support enabled
2379 DynamicRefreshRate UINT8 ? ; < Adjust refresh rate on LVDS/eDP.
2380 LcdBackLightControl UINT16 ? ; < The PWM frequency to LCD backlight control.
2381 ; < If equal to 0 backlight not controlled by iGPU.
2382 PLATFORM_CONFIGURATION ENDS
2385 ; *********************************************************************
2386 ; * Structures for: AmdInitLate
2387 ; *********************************************************************
2388 PROC_VERSION_LENGTH EQU 48
2389 MAX_DIMMS_PER_SOCKET EQU 16
2392 ; Interface Parameter Structures
2393 ; DMI Type4 - Processor ID
2394 TYPE4_PROC_ID STRUCT
2395 ProcIdLsd UINT32 ? ; < Lower half of 64b ID
2396 ProcIdMsd UINT32 ? ; < Upper half of 64b ID
2399 ; DMI Type 4 - Processor information
2400 TYPE4_DMI_INFO STRUCT
2401 T4ProcType UINT8 ? ; < CPU Type
2402 T4ProcFamily UINT8 ? ; < Family 1
2403 T4ProcId TYPE4_PROC_ID {} ; < Id
2404 T4Voltage UINT8 ? ; < Voltage
2405 T4ExternalClock UINT16 ? ; < External clock
2406 T4MaxSpeed UINT16 ? ; < Max speed
2407 T4CurrentSpeed UINT16 ? ; < Current speed
2408 T4Status UINT8 ? ; < Status
2409 T4ProcUpgrade UINT8 ? ; < Up grade
2410 T4CoreCount UINT8 ? ; < Core count
2411 T4CoreEnabled UINT8 ? ; < Core Enable
2412 T4ThreadCount UINT8 ? ; < Thread count
2413 T4ProcCharacteristics UINT16 ? ; < Characteristics
2414 T4ProcFamily2 UINT16 ? ; < Family 2
2415 T4ProcVersion CHAR8 (PROC_VERSION_LENGTH) DUP (?) ; < Cpu version
2418 ; DMI Type 7 - Cache information
2419 TYPE7_DMI_INFO STRUCT
2420 T7CacheCfg UINT16 ? ; < Cache cfg
2421 T7MaxCacheSize UINT16 ? ; < Max size
2422 T7InstallSize UINT16 ? ; < Install size
2423 T7SupportedSramType UINT16 ? ; < Supported Sram Type
2424 T7CurrentSramType UINT16 ? ; < Current type
2425 T7CacheSpeed UINT8 ? ; < Speed
2426 T7ErrorCorrectionType UINT8 ? ; < ECC type
2427 T7SystemCacheType UINT8 ? ; < Cache type
2428 T7Associativity UINT8 ? ; < Associativity
2431 ; DMI Type 16 offset 04h - Location
2433 OtherLocation EQU 01h ; < Assign 01 to Other
2434 UnknownLocation EQU 2 ; < Assign 02 to Unknown
2435 SystemboardOrMotherboard EQU 3 ; < Assign 03 to systemboard or motherboard
2436 IsaAddonCard EQU 4 ; < Assign 04 to ISA add-on card
2437 EisaAddonCard EQU 5 ; < Assign 05 to EISA add-on card
2438 PciAddonCard EQU 6 ; < Assign 06 to PCI add-on card
2439 McaAddonCard EQU 7 ; < Assign 07 to MCA add-on card
2440 PcmciaAddonCard EQU 8 ; < Assign 08 to PCMCIA add-on card
2441 ProprietaryAddonCard EQU 9 ; < Assign 09 to proprietary add-on card
2442 NuBus EQU 10 ; < Assign 0A to NuBus
2443 Pc98C20AddonCard EQU 11 ; < Assign 0A0 to PC-98/C20 add-on card
2444 Pc98C24AddonCard EQU 12 ; < Assign 0A1 to PC-98/C24 add-on card
2445 Pc98EAddoncard EQU 13 ; < Assign 0A2 to PC-98/E add-on card
2446 Pc98LocalBusAddonCard EQU 14 ; < Assign 0A3 to PC-98/Local bus add-on card
2447 DMI_T16_LOCATION TEXTEQU <DWORD> ;} DMI_T16_LOCATION;
2449 ; DMI Type 16 offset 05h - Memory Error Correction
2451 OtherUse EQU 01h ; < Assign 01 to Other
2452 UnknownUse EQU 2 ; < Assign 02 to Unknown
2453 SystemMemory EQU 3 ; < Assign 03 to system memory
2454 VideoMemory EQU 4 ; < Assign 04 to video memory
2455 FlashMemory EQU 5 ; < Assign 05 to flash memory
2456 NonvolatileRam EQU 6 ; < Assign 06 to non-volatile RAM
2457 CacheMemory EQU 7 ; < Assign 07 to cache memory
2458 DMI_T16_USE TEXTEQU <DWORD> ;} DMI_T16_USE;
2460 ; DMI Type 16 offset 07h - Maximum Capacity
2462 Dmi16OtherErrCorrection EQU 01h ; < Assign 01 to Other
2463 Dmi16UnknownErrCorrection EQU 2 ; < Assign 02 to Unknown
2464 Dmi16NoneErrCorrection EQU 3 ; < Assign 03 to None
2465 Dmi16Parity EQU 4 ; < Assign 04 to parity
2466 Dmi16SingleBitEcc EQU 5 ; < Assign 05 to Single-bit ECC
2467 Dmi16MultiBitEcc EQU 6 ; < Assign 06 to Multi-bit ECC
2468 Dmi16Crc EQU 7 ; < Assign 07 to CRC
2469 DMI_T16_ERROR_CORRECTION TEXTEQU <DWORD> ;} DMI_T16_ERROR_CORRECTION;
2471 ; DMI Type 16 - Physical Memory Array
2472 TYPE16_DMI_INFO STRUCT
2473 Location DMI_T16_LOCATION ? ; < The physical location of the Memory Array,
2474 ; < whether on the system board or an add-in board.
2475 Use DMI_T16_USE ? ; < Identifies the function for which the array
2477 MemoryErrorCorrection DMI_T16_ERROR_CORRECTION ? ; < The primary hardware error correction or
2478 ; < detection method supported by this memory array.
2479 MaximumCapacity UINT32 ? ; < The maximum memory capacity, in kilobytes,
2481 NumberOfMemoryDevices UINT16 ? ; < The number of slots or sockets available
2482 ; < for memory devices in this array.
2483 ExtMaxCapacity UINT64 ? ; < The maximum memory capacity, in bytes,
2485 TYPE16_DMI_INFO ENDS
2487 ; DMI Type 17 offset 0Eh - Form Factor
2488 OtherFormFactor EQU 01h ; < Assign 01 to Other
2489 UnknowFormFactor EQU 2 ; < Assign 02 to Unknown
2490 SimmFormFactor EQU 3 ; < Assign 03 to SIMM
2491 SipFormFactor EQU 4 ; < Assign 04 to SIP
2492 ChipFormFactor EQU 5 ; < Assign 05 to Chip
2493 DipFormFactor EQU 6 ; < Assign 06 to DIP
2494 ZipFormFactor EQU 7 ; < Assign 07 to ZIP
2495 ProprietaryCardFormFactor EQU 8 ; < Assign 08 to Proprietary Card
2496 DimmFormFactorFormFactor EQU 9 ; < Assign 09 to DIMM
2497 TsopFormFactor EQU 10 ; < Assign 10 to TSOP
2498 RowOfChipsFormFactor EQU 11 ; < Assign 11 to Row of chips
2499 RimmFormFactor EQU 12 ; < Assign 12 to RIMM
2500 SodimmFormFactor EQU 13 ; < Assign 13 to SODIMM
2501 SrimmFormFactor EQU 14 ; < Assign 14 to SRIMM
2502 FbDimmFormFactor EQU 15 ; < Assign 15 to FB-DIMM
2503 DMI_T17_FORM_FACTOR TEXTEQU <DWORD>
2505 ; DMI Type 17 offset 12h - Memory Type
2506 OtherMemType EQU 01h ; < Assign 01 to Other
2507 UnknownMemType EQU 2 ; < Assign 02 to Unknown
2508 DramMemType EQU 3 ; < Assign 03 to DRAM
2509 EdramMemType EQU 4 ; < Assign 04 to EDRAM
2510 VramMemType EQU 5 ; < Assign 05 to VRAM
2511 SramMemType EQU 6 ; < Assign 06 to SRAM
2512 RamMemType EQU 7 ; < Assign 07 to RAM
2513 RomMemType EQU 8 ; < Assign 08 to ROM
2514 FlashMemType EQU 9 ; < Assign 09 to Flash
2515 EepromMemType EQU 10 ; < Assign 10 to EEPROM
2516 FepromMemType EQU 11 ; < Assign 11 to FEPROM
2517 EpromMemType EQU 12 ; < Assign 12 to EPROM
2518 CdramMemType EQU 13 ; < Assign 13 to CDRAM
2519 ThreeDramMemType EQU 14 ; < Assign 14 to 3DRAM
2520 SdramMemType EQU 15 ; < Assign 15 to SDRAM
2521 SgramMemType EQU 16 ; < Assign 16 to SGRAM
2522 RdramMemType EQU 17 ; < Assign 17 to RDRAM
2523 DdrMemType EQU 18 ; < Assign 18 to DDR
2524 Ddr2MemType EQU 19 ; < Assign 19 to DDR2
2525 Ddr2FbdimmMemType EQU 20 ; < Assign 20 to DDR2 FB-DIMM
2526 Ddr3MemType EQU 24 ; < Assign 24 to DDR3
2527 Fbd2MemType EQU 25 ; < Assign 25 to FBD2
2528 DMI_T17_MEMORY_TYPE TEXTEQU <DWORD>
2530 ; DMI Type 17 offset 13h - Type Detail
2531 DMI_T17_TYPE_DETAIL STRUCT
2533 ; OUT UINT16 Reserved1:1; ; < Reserved
2534 ; OUT UINT16 Other:1; ; < Other
2535 ; OUT UINT16 Unknown:1; ; < Unknown
2536 ; OUT UINT16 FastPaged:1; ; < Fast-Paged
2537 ; OUT UINT16 StaticColumn:1; ; < Static column
2538 ; OUT UINT16 PseudoStatic:1; ; < Pseudo-static
2539 ; OUT UINT16 Rambus:1; ; < RAMBUS
2540 ; OUT UINT16 Synchronous:1; ; < Synchronous
2541 ; OUT UINT16 Cmos:1; ; < CMOS
2542 ; OUT UINT16 Edo:1; ; < EDO
2543 ; OUT UINT16 WindowDram:1; ; < Window DRAM
2544 ; OUT UINT16 CacheDram:1; ; < Cache Dram
2545 ; OUT UINT16 NonVolatile:1; ; < Non-volatile
2546 ; OUT UINT16 Reserved2:3; ; < Reserved
2547 DMI_T17_TYPE_DETAIL ENDS
2549 ; DMI Type 17 - Memory Device
2550 TYPE17_DMI_INFO STRUCT
2551 TotalWidth UINT16 ? ; < Total Width, in bits, of this memory device, including any check or error-correction bits.
2552 DataWidth UINT16 ? ; < Data Width, in bits, of this memory device.
2553 MemorySize UINT16 ? ; < The size of the memory device.
2554 FormFactor DMI_T17_FORM_FACTOR ? ; < The implementation form factor for this memory device.
2555 DeviceSet UINT8 ? ; < Identifies when the Memory Device is one of a set of
2556 ; < Memory Devices that must be populated with all devices of
2557 ; < the same type and size, and the set to which this device belongs.
2558 DeviceLocator CHAR8 (8) DUP (?) ; < The string number of the string that identifies the physically labeled socket or board position where the memory device is located.
2559 BankLocator CHAR8 (10) DUP (?) ; < The string number of the string that identifies the physically labeled bank where the memory device is located.
2560 MemoryType DMI_T17_MEMORY_TYPE ? ; < The type of memory used in this device.
2561 TypeDetail DMI_T17_TYPE_DETAIL {} ; < Additional detail on the memory device type
2562 Speed UINT16 ? ; < Identifies the speed of the device, in megahertz (MHz).
2563 ManufacturerIdCode UINT64 ? ; < Manufacturer ID code.
2564 SerialNumber CHAR8 (9) DUP (?) ; < Serial Number.
2565 PartNumber CHAR8 (19) DUP (?) ; < Part Number.
2566 Attributes UINT8 ? ; < Bits 7-4: Reserved, Bits 3-0: rank.
2567 ExtSize UINT32 ? ; < Extended Size.
2568 ConfigSpeed UINT16 ? ; < Configured memory clock speed
2569 TYPE17_DMI_INFO ENDS
2571 ; Memory DMI Type 17 and 20 - for memory use
2573 TotalWidth UINT16 ? ; < Total Width, in bits, of this memory device, including any check or error-correction bits.
2574 DataWidth UINT16 ? ; < Data Width, in bits, of this memory device.
2575 MemorySize UINT16 ? ; < The size of the memory device.
2576 FormFactor DMI_T17_FORM_FACTOR ? ; < The implementation form factor for this memory device.
2577 DeviceLocator UINT8 ? ; < The string number of the string that identifies the physically labeled socket or board position where the memory device is located.
2578 BankLocator UINT8 ? ; < The string number of the string that identifies the physically labeled bank where the memory device is located.
2579 Speed UINT16 ? ; < Identifies the speed of the device, in megahertz (MHz).
2580 ManufacturerIdCode UINT64 ? ; < Manufacturer ID code.
2581 SerialNumber UINT8 (4) DUP (?) ; < Serial Number.
2582 PartNumber UINT8 (18) DUP (?) ; < Part Number.
2583 Attributes UINT8 ? ; < Bits 7-4: Reserved, Bits 3-0: rank.
2584 ExtSize UINT32 ? ; < Extended Size.
2586 ; OUT UINT8 Socket:3 ; < Socket ID
2587 ; OUT UINT8 Channel:2 ; < Channel ID
2588 ; OUT UINT8 Dimm:2 ; < DIMM ID
2589 ; OUT UINT8 DimmPresent:1 ; < Dimm Present
2590 StartingAddr UINT32 ? ; < The physical address, in kilobytes, of a range
2591 ; < of memory mapped to the referenced Memory Device.
2592 EndingAddr UINT32 ? ; < The handle, or instance number, associated with
2593 ; < the Memory Device structure to which this address
2594 ; < range is mapped.
2595 ConfigSpeed UINT16 ? ; < Configured memory clock speed
2596 ExtStartingAddr UINT64 ? ; < The physical address, in bytes, of a range of
2597 ; < memory mapped to the referenced Memory Device.
2598 ExtEndingAddr UINT64 ? ; < The physical ending address, in bytes, of the last of
2599 ; < a range of addresses mapped to the referenced Memory Device.
2602 ; DMI Type 19 - Memory Array Mapped Address
2603 TYPE19_DMI_INFO STRUCT
2604 StartingAddr UINT32 ? ; < The physical address, in kilobytes,
2605 ; < of a range of memory mapped to the
2606 ; < specified physical memory array.
2607 EndingAddr UINT32 ? ; < The physical ending address of the
2608 ; < last kilobyte of a range of addresses
2609 ; < mapped to the specified physical memory array.
2610 MemoryArrayHandle UINT16 ? ; < The handle, or instance number, associated
2611 ; < with the physical memory array to which this
2612 ; < address range is mapped.
2613 PartitionWidth UINT8 ? ; < Identifies the number of memory devices that
2614 ; < form a single row of memory for the address
2615 ; < partition defined by this structure.
2616 ExtStartingAddr UINT64 ? ; < The physical address, in bytes, of a range of
2617 ; < memory mapped to the specified Physical Memory Array.
2618 ExtEndingAddr UINT64 ? ; < The physical address, in bytes, of a range of
2619 ; < memory mapped to the specified Physical Memory Array.
2620 TYPE19_DMI_INFO ENDS
2622 ; DMI Type 20 - Memory Device Mapped Address
2623 TYPE20_DMI_INFO STRUCT
2624 StartingAddr UINT32 ? ; < The physical address, in kilobytes, of a range
2625 ; < of memory mapped to the referenced Memory Device.
2626 EndingAddr UINT32 ? ; < The handle, or instance number, associated with
2627 ; < the Memory Device structure to which this address
2628 ; < range is mapped.
2629 MemoryDeviceHandle UINT16 ? ; < The handle, or instance number, associated with
2630 ; < the Memory Device structure to which this address
2631 ; < range is mapped.
2632 MemoryArrayMappedAddressHandle UINT16 ? ; < The handle, or instance number, associated
2633 ; < with the Memory Array Mapped Address structure to
2634 ; < which this device address range is mapped.
2635 PartitionRowPosition UINT8 ? ; < Identifies the position of the referenced Memory
2636 ; < Device in a row of the address partition.
2637 InterleavePosition UINT8 ? ; < The position of the referenced Memory Device in
2639 InterleavedDataDepth UINT8 ? ; < The maximum number of consecutive rows from the
2640 ; < referenced Memory Device that are accessed in a
2641 ; < single interleaved transfer.
2642 ExtStartingAddr UINT64 ? ; < The physical address, in bytes, of a range of
2643 ; < memory mapped to the referenced Memory Device.
2644 ExtEndingAddr UINT64 ? ; < The physical ending address, in bytes, of the last of
2645 ; < a range of addresses mapped to the referenced Memory Device.
2646 TYPE20_DMI_INFO ENDS
2648 ; Collection of pointers to the DMI records
2650 T4 TYPE4_DMI_INFO (MAX_SOCKETS_SUPPORTED) DUP ({}) ; < Type 4 struc
2651 T7L1 TYPE7_DMI_INFO (MAX_SOCKETS_SUPPORTED) DUP ({}) ; < Type 7 struc 1
2652 T7L2 TYPE7_DMI_INFO (MAX_SOCKETS_SUPPORTED) DUP ({}) ; < Type 7 struc 2
2653 T7L3 TYPE7_DMI_INFO (MAX_SOCKETS_SUPPORTED) DUP ({}) ; < Type 7 struc 3
2654 T16 TYPE16_DMI_INFO {} ; < Type 16 struc
2655 T17 TYPE17_DMI_INFO (MAX_SOCKETS_SUPPORTED * MAX_CHANNELS_PER_SOCKET * MAX_DIMMS_PER_CHANNEL) DUP ({}) ; < Type 17 struc
2656 T19 TYPE19_DMI_INFO {} ; < Type 19 struc
2657 T20 TYPE20_DMI_INFO (MAX_SOCKETS_SUPPORTED * MAX_CHANNELS_PER_SOCKET * MAX_DIMMS_PER_CHANNEL) DUP ({}) ; < Type 20 struc
2662 ; *********************************************************************
2663 ; * Interface call: AllocateExecutionCache
2664 ; *********************************************************************
2665 MAX_CACHE_REGIONS EQU 3
2667 ; AllocateExecutionCache sub param structure for cached memory region
2668 EXECUTION_CACHE_REGION STRUCT
2669 ExeCacheStartAddr UINT32 ? ; < Start address
2670 ExeCacheSize UINT32 ? ; < Size
2671 EXECUTION_CACHE_REGION ENDS
2673 ; *********************************************************************
2674 ; * Interface call: AmdGetAvailableExeCacheSize
2675 ; *********************************************************************
2676 ; Get available Cache remain
2677 AMD_GET_EXE_SIZE_PARAMS STRUCT
2678 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2679 AvailableExeCacheSize UINT32 ? ; < Remain size
2680 AMD_GET_EXE_SIZE_PARAMS ENDS
2687 ; Selection type for core leveling
2688 CORE_LEVEL_LOWEST EQU 0 ; < Level to lowest common denominator
2689 CORE_LEVEL_TWO EQU 1 ; < Level to 2 cores
2690 CORE_LEVEL_POWER_OF_TWO EQU 2 ; < Level to 1,2,4 or 8
2691 CORE_LEVEL_NONE EQU 3 ; < Do no leveling
2692 CORE_LEVEL_COMPUTE_UNIT EQU 4 ; < Level cores to one core per compute unit
2693 CORE_LEVEL_ONE EQU 5 ; < Level to 1 core
2694 CORE_LEVEL_THREE EQU 6 ; < Level to 3 cores
2695 CORE_LEVEL_FOUR EQU 7 ; < Level to 4 cores
2696 CORE_LEVEL_FIVE EQU 8 ; < Level to 5 cores
2697 CORE_LEVEL_SIX EQU 9 ; < Level to 6 cores
2698 CORE_LEVEL_SEVEN EQU 10 ; < Level to 7 cores
2699 CORE_LEVEL_EIGHT EQU 11 ; < Level to 8 cores
2700 CORE_LEVEL_NINE EQU 12 ; < Level to 9 cores
2701 CORE_LEVEL_TEN EQU 13 ; < Level to 10 cores
2702 CORE_LEVEL_ELEVEN EQU 14 ; < Level to 11 cores
2703 CORE_LEVEL_TWELVE EQU 15 ; < Level to 12 cores
2704 CORE_LEVEL_THIRTEEN EQU 16 ; < Level to 13 cores
2705 CORE_LEVEL_FOURTEEN EQU 17 ; < Level to 14 cores
2706 CORE_LEVEL_FIFTEEN EQU 18 ; < Level to 15 cores
2707 CoreLevelModeMax EQU 19 ; < Used for bounds checking
2708 CORE_LEVELING_TYPE TEXTEQU <DWORD>
2711 ; ***********************************************************************
2713 ; * AGESA Basic Level interface structure definition and function prototypes
2715 ; **********************************************************************
2717 ; *********************************************************************
2718 ; * Interface call: AmdCreateStruct
2719 ; *********************************************************************
2721 ; *********************************************************************
2722 ; * Interface call: AmdReleaseStruct
2723 ; *********************************************************************
2725 ; *********************************************************************
2726 ; * Interface call: AmdInitReset
2727 ; *********************************************************************
2728 ; AmdInitReset param structure
2729 AMD_RESET_PARAMS STRUCT
2730 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2731 CacheRegion EXECUTION_CACHE_REGION (3) DUP ({}) ; < The cached memory region
2732 HtConfig AMD_HT_RESET_INTERFACE {} ; < The interface for Ht Recovery
2733 FchInterface FCH_RESET_INTERFACE {} ; Interface for FCH configuration
2734 AMD_RESET_PARAMS ENDS
2736 ; *********************************************************************
2737 ; * Interface call: AmdInitEarly
2738 ; *********************************************************************
2739 ; InitEarly param structure
2741 ; Provide defaults or customizations to each service performed in AmdInitEarly.
2743 AMD_EARLY_PARAMS STRUCT
2744 StdHeader AMD_CONFIG_PARAMS {} ; < The standard header
2745 CacheRegion EXECUTION_CACHE_REGION (3) DUP ({}) ; < Execution Map Interface
2746 PlatformConfig PLATFORM_CONFIGURATION {} ; < platform operational characteristics.
2747 HtConfig AMD_HT_INTERFACE {} ; < HyperTransport Interface
2748 GnbConfig GNB_CONFIGURATION {} ; < GNB configuration
2749 AMD_EARLY_PARAMS ENDS
2751 ; *********************************************************************
2752 ; * Interface call: AmdInitPost
2753 ; *********************************************************************
2754 ; AmdInitPost param structure
2755 AMD_POST_PARAMS STRUCT
2756 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2757 PlatformConfig PLATFORM_CONFIGURATION {} ; < platform operational characteristics.
2758 MemConfig MEM_PARAMETER_STRUCT {} ; < Memory post param
2759 AMD_POST_PARAMS ENDS
2761 ; *********************************************************************
2762 ; * Interface call: AmdInitEnv
2763 ; *********************************************************************
2764 ; AmdInitEnv param structure
2765 AMD_ENV_PARAMS STRUCT
2766 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2767 PlatformConfig PLATFORM_CONFIGURATION {} ; < platform operational characteristics.
2768 GnbEnvConfiguration GNB_ENV_CONFIGURATION {} ; < platform operational characteristics.
2769 FchInterface FCH_INTERFACE {} ; FCH configuration
2772 ; *********************************************************************
2773 ; * Interface call: AmdInitMid
2774 ; *********************************************************************
2775 ; AmdInitMid param structure
2776 AMD_MID_PARAMS STRUCT
2777 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2778 PlatformConfig PLATFORM_CONFIGURATION {} ; < platform operational characteristics.
2779 FchInterface FCH_INTERFACE {} ; FCH configuration
2782 ; *********************************************************************
2783 ; * Interface call: AmdInitLate
2784 ; *********************************************************************
2785 ; AmdInitLate param structure
2786 AMD_LATE_PARAMS STRUCT
2787 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2788 PlatformConfig PLATFORM_CONFIGURATION {} ; < platform operational characteristics.
2789 IvrsExclusionRangeList POINTER ? ; < IVMD exclusion range descriptor
2790 DmiTable POINTER ? ; < DMI Interface
2791 AcpiPState POINTER ? ; < Acpi Pstate SSDT Table
2792 AcpiSrat POINTER ? ; < SRAT Table
2793 AcpiSlit POINTER ? ; < SLIT Table
2794 AcpiWheaMce POINTER ? ; < WHEA MCE Table
2795 AcpiWheaCmc POINTER ? ; < WHEA CMC Table
2796 AcpiAlib POINTER ? ; < ALIB Table
2797 AcpiIvrs POINTER ? ; < IOMMU ACPI IVRS(I/O Virtualization Reporting Structure) table
2798 AMD_LATE_PARAMS ENDS
2800 ; *********************************************************************
2801 ; * Interface call: AmdInitRecovery
2802 ; *********************************************************************
2803 ; CPU Recovery Parameters
2804 AMD_CPU_RECOVERY_PARAMS STRUCT
2805 StdHeader AMD_CONFIG_PARAMS {} ; < Standard Header
2806 PlatformConfig PLATFORM_CONFIGURATION {} ; < platform operational characteristics
2807 AMD_CPU_RECOVERY_PARAMS ENDS
2809 ; AmdInitRecovery param structure
2810 AMD_RECOVERY_PARAMS STRUCT
2811 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2812 MemConfig MEM_PARAMETER_STRUCT {} ; < Memory post param
2813 CacheRegion EXECUTION_CACHE_REGION (3) DUP ({}) ; < The cached memory region. And the max cache region is 3
2814 CpuRecoveryParams AMD_CPU_RECOVERY_PARAMS {} ; < Params for CPU related recovery init.
2815 AMD_RECOVERY_PARAMS ENDS
2818 ; *********************************************************************
2819 ; * Interface call: AmdInitResume
2820 ; *********************************************************************
2821 ; AmdInitResume param structure
2822 AMD_RESUME_PARAMS STRUCT
2823 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2824 PlatformConfig PLATFORM_CONFIGURATION {} ; < Platform operational characteristics
2825 S3DataBlock AMD_S3_PARAMS {} ; < Save state data
2826 AMD_RESUME_PARAMS ENDS
2828 ; *********************************************************************
2829 ; * Interface call: AmdS3LateRestore
2830 ; *********************************************************************
2831 ; AmdS3LateRestore param structure
2832 AMD_S3LATE_PARAMS STRUCT
2833 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2834 PlatformConfig PLATFORM_CONFIGURATION {} ; < platform operational characteristics.
2835 S3DataBlock AMD_S3_PARAMS {} ; < Save state data
2836 AMD_S3LATE_PARAMS ENDS
2838 ; *********************************************************************
2839 ; * Interface call: AmdS3Save
2840 ; *********************************************************************
2841 ; AmdS3Save param structure
2842 AMD_S3SAVE_PARAMS STRUCT
2843 StdHeader AMD_CONFIG_PARAMS {} ; < Standard header
2844 PlatformConfig PLATFORM_CONFIGURATION {} ; < platform operational characteristics.
2845 S3DataBlock AMD_S3_PARAMS {} ; < Standard header
2846 FchInterface FCH_INTERFACE {} ; FCH configuration
2847 AMD_S3SAVE_PARAMS ENDS
2849 ; General Services API
2852 ; *********************************************************************
2853 ; * Interface service call: AmdGetApicId
2854 ; *********************************************************************
2855 ; Request the APIC ID of a particular core.
2857 AMD_APIC_PARAMS STRUCT
2858 StdHeader AMD_CONFIG_PARAMS {} ; < Header for library and services.
2859 Socket UINT8 ? ; < The Core's Socket.
2860 Core UINT8 ? ; < The Core id.
2861 IsPresent BOOLEAN ? ; < The Core is present, and ApicAddress is valid.
2862 ApicAddress UINT8 ? ; < The Core's APIC ID.
2863 AMD_APIC_PARAMS ENDS
2865 ; *********************************************************************
2866 ; * Interface service call: AmdGetPciAddress
2867 ; *********************************************************************
2868 ; Request the PCI Address of a Processor Module (that is, its Northbridge)
2870 AMD_GET_PCI_PARAMS STRUCT
2871 StdHeader AMD_CONFIG_PARAMS {} ; < Header for library and services.
2872 Socket UINT8 ? ; < The Processor's socket
2873 Module UINT8 ? ; < The Module in that Processor
2874 IsPresent BOOLEAN ? ; < The Core is present, and PciAddress is valid.
2875 PciAddress PCI_ADDR {} ; < The Processor's PCI Config Space address (Function 0, Register 0)
2876 AMD_GET_PCI_PARAMS ENDS
2878 ; *********************************************************************
2879 ; * Interface service call: AmdIdentifyCore
2880 ; *********************************************************************
2881 ; Request the identity (Socket, Module, Core) of the current Processor Core
2883 AMD_IDENTIFY_PARAMS STRUCT
2884 StdHeader AMD_CONFIG_PARAMS {} ; < Header for library and services.
2885 Socket UINT8 ? ; < The current Core's Socket
2886 Module UINT8 ? ; < The current Core's Processor Module
2887 Core UINT8 ? ; < The current Core's core id.
2888 AMD_IDENTIFY_PARAMS ENDS
2890 ; *********************************************************************
2891 ; * Interface service call: AmdReadEventLog
2892 ; *********************************************************************
2893 ; An Event Log Entry.
2895 StdHeader AMD_CONFIG_PARAMS {} ; < Header for library and services.
2896 EventClass UINT32 ? ; < The severity of this event, matches AGESA_STATUS.
2897 EventInfo UINT32 ? ; < The unique event identifier, zero means "no event".
2898 DataParam1 UINT32 ? ; < Data specific to the Event.
2899 DataParam2 UINT32 ? ; < Data specific to the Event.
2900 DataParam3 UINT32 ? ; < Data specific to the Event.
2901 DataParam4 UINT32 ? ; < Data specific to the Event.
2904 ; *********************************************************************
2905 ; * Interface service call: AmdIdentifyDimm
2906 ; *********************************************************************
2907 ; Request the identity of dimm from system address
2909 AMD_IDENTIFY_DIMM STRUCT
2910 StdHeader AMD_CONFIG_PARAMS {} ; < Header for library and services.
2911 MemoryAddress UINT64 ? ; < System Address that needs to be translated to dimm identification.
2912 SocketId UINT8 ? ; < The socket on which the targeted address locates.
2913 MemChannelId UINT8 ? ; < The channel on which the targeted address locates.
2914 DimmId UINT8 ? ; < The dimm on which the targeted address locates.
2915 AMD_IDENTIFY_DIMM ENDS
2917 ; Data structure for the Mapping Item between Unified ID for IDS Setup Option
2918 ; and the option value.
2921 IdsNvId UINT16 ? ; < Unified ID for IDS Setup Option.
2922 IdsNvValue UINT16 ? ; < The value of IDS Setup Option.
2925 ; Data Structure for IDS CallOut Function
2926 IDS_CALLOUT_STRUCT STRUCT
2927 StdHeader AMD_CONFIG_PARAMS {} ; < The Standard Header for AGESA Service
2928 IdsNvPtr POINTER ? ; < Memory Pointer of IDS NV Table
2929 Reserved UINT32 ? ; < reserved
2930 IDS_CALLOUT_STRUCT ENDS
2932 AGESA_IDS_DFT_VAL EQU 0FFFFh; < Default value of every uninitlized NV item, the action for it will be ignored
2933 AGESA_IDS_NV_END EQU 0FFFFh; < Flag specify end of option structure
2934 ; WARNING: Don't change the comment below, it used as signature for script
2935 ; AGESA IDS NV ID Definitions
2936 AGESA_IDS_EXT_ID_START EQU 0000h; < specify the start of external NV id
2938 AGESA_IDS_NV_UCODE EQU 0001h; < Enable or disable microcode patching
2940 AGESA_IDS_NV_TARGET_PSTATE EQU 0002h; < Set the P-state required to be activated
2941 AGESA_IDS_NV_POSTPSTATE EQU 0003h; < Set the P-state required to be activated through POST
2943 AGESA_IDS_NV_BANK_INTERLEAVE EQU 0004h; < Enable or disable Bank Interleave
2944 AGESA_IDS_NV_CHANNEL_INTERLEAVE EQU 0005h; < Enable or disable Channel Interleave
2945 AGESA_IDS_NV_NODE_INTERLEAVE EQU 0006h; < Enable or disable Node Interleave
2946 AGESA_IDS_NV_MEMHOLE EQU 0007h; < Enables or disable memory hole
2948 AGESA_IDS_NV_SCRUB_REDIRECTION EQU 0008h; < Enable or disable a write to dram with corrected data
2949 AGESA_IDS_NV_DRAM_SCRUB EQU 0009h; < Set the rate of background scrubbing for DRAM
2950 AGESA_IDS_NV_DCACHE_SCRUB EQU 000Ah; < Set the rate of background scrubbing for the DCache.
2951 AGESA_IDS_NV_L2_SCRUB EQU 000Bh; < Set the rate of background scrubbing for the L2 cache
2952 AGESA_IDS_NV_L3_SCRUB EQU 000Ch; < Set the rate of background scrubbing for the L3 cache
2953 AGESA_IDS_NV_ICACHE_SCRUB EQU 000Dh; < Set the rate of background scrubbing for the Icache
2954 AGESA_IDS_NV_SYNC_ON_ECC_ERROR EQU 000Eh; < Enable or disable the sync flood on un-correctable ECC error
2955 AGESA_IDS_NV_ECC_SYMBOL_SIZE EQU 000Fh; < Set ECC symbol size
2957 AGESA_IDS_NV_ALL_MEMCLKS EQU 0010h; < Enable or disable all memory clocks enable
2958 AGESA_IDS_NV_DCT_GANGING_MODE EQU 0011h; < Set the Ganged mode
2959 AGESA_IDS_NV_DRAM_BURST_LENGTH32 EQU 0012h; < Set the DRAM Burst Length 32
2960 AGESA_IDS_NV_MEMORY_POWER_DOWN EQU 0013h; < Enable or disable Memory power down mode
2961 AGESA_IDS_NV_MEMORY_POWER_DOWN_MODE EQU 0014h; < Set the Memory power down mode
2962 AGESA_IDS_NV_DLL_SHUT_DOWN EQU 0015h; < Enable or disable DLLShutdown
2963 AGESA_IDS_NV_ONLINE_SPARE EQU 0016h; < Enable or disable the Dram controller to designate a DIMM bank as a spare for logical swap
2965 AGESA_IDS_NV_HT_ASSIST EQU 0017h; < Enable or Disable HT Assist
2966 AGESA_IDS_NV_ATMMODE EQU 0018h; < Enable or Disable ATM mode
2968 AGESA_IDS_NV_HDTOUT EQU 0019h; < Enable or disable HDTOUT feature
2970 AGESA_IDS_NV_HTLINKSOCKET EQU 001Ah; < HT Link Socket
2971 AGESA_IDS_NV_HTLINKPORT EQU 001Bh; < HT Link Port
2972 AGESA_IDS_NV_HTLINKFREQ EQU 001Ch; < HT Link Frequency
2973 AGESA_IDS_NV_HTLINKWIDTHIN EQU 001Dh; < HT Link In Width
2974 AGESA_IDS_NV_HTLINKWIDTHOUT EQU 001Eh; < HT Link Out Width
2976 AGESA_IDS_NV_GNBHDAUDIOEN EQU 001Fh; < Enable or disable GNB HD Audio
2978 AGESA_IDS_NV_CPB_EN EQU 0020h; < Core Performance Boost
2980 AGESA_IDS_NV_HTC_EN EQU 0021h; < HTC Enable
2981 AGESA_IDS_NV_HTC_OVERRIDE EQU 0022h; < HTC Override
2982 AGESA_IDS_NV_HTC_PSTATE_LIMIT EQU 0023h; < HTC P-state limit select
2983 AGESA_IDS_NV_HTC_TEMP_HYS EQU 0024h; < HTC Temperature Hysteresis
2984 AGESA_IDS_NV_HTC_ACT_TEMP EQU 0025h; < HTC Activation Temp
2986 AGESA_IDS_NV_POWER_POLICY EQU 0026h; < Select Platform Power Policy
2987 AGESA_IDS_EXT_ID_END EQU 0027h; < specify the end of external NV ID
2989 IDS_EX_NV_ID TEXTEQU <DWORD>