5 * Install of family 15h support
7 * This file generates the defaults tables for family 15h processors.
9 * @xrefitem bom "File Content Label" "Release Content"
11 * @e sub-project: Core
12 * @e \$Revision: 60770 $ @e \$Date: 2011-10-21 15:51:10 -0600 (Fri, 21 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 ***************************************************************************/
44 #ifndef _OPTION_FAMILY_15H_INSTALL_H_
45 #define _OPTION_FAMILY_15H_INSTALL_H_
47 #include "OptionFamily15hEarlySample.h"
50 * Pull in family specific services based on entry point
54 * Common Family 15h routines
56 extern F_IS_NB_PSTATE_ENABLED F15IsNbPstateEnabled;
59 * Install family 15h model 0 support
61 #ifdef OPTION_FAMILY15H_OR
62 #if OPTION_FAMILY15H_OR == TRUE
63 extern F_CPU_GET_IDD_MAX F15OrGetProcIddMax;
64 extern F_CPU_GET_NB_PSTATE_INFO F15OrGetNbPstateInfo;
65 extern F_CPU_IS_NBCOF_INIT_NEEDED F15CommonGetNbCofVidUpdate;
66 extern F_CPU_DISABLE_PSTATE F15DisablePstate;
67 extern F_CPU_TRANSITION_PSTATE F15TransitionPstate;
68 extern F_CPU_GET_TSC_RATE F15GetTscRate;
69 extern F_CPU_GET_NB_FREQ F15OrGetCurrentNbFrequency;
70 extern F_CPU_GET_MIN_MAX_NB_FREQ F15OrGetMinMaxNbFrequency;
71 extern F_CPU_AP_INITIAL_LAUNCH F15LaunchApCore;
72 extern F_CPU_NUMBER_OF_PHYSICAL_CORES F15OrGetNumberOfPhysicalCores;
73 extern F_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE F15OrGetApMailboxFromHardware;
74 extern F_CPU_SET_AP_CORE_NUMBER F15OrSetApCoreNumber;
75 extern F_CPU_GET_AP_CORE_NUMBER F15OrGetApCoreNumber;
76 extern F_CPU_TRANSFER_AP_CORE_NUMBER F15OrTransferApCoreNumber;
77 extern F_CORE_ID_POSITION_IN_INITIAL_APIC_ID F15CpuAmdCoreIdPositionInInitialApicId;
78 extern F_CPU_SET_WARM_RESET_FLAG F15SetAgesaWarmResetFlag;
79 extern F_CPU_GET_WARM_RESET_FLAG F15GetAgesaWarmResetFlag;
80 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15CacheInfo;
81 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15OrSysPmTable;
82 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15WheaInitData;
83 extern F_CPU_SET_CFOH_REG SetF15OrCacheFlushOnHaltRegister;
84 extern F_NEXT_LINK_HAS_HTFPY_FEATS F15NextLinkHasHtPhyFeats;
85 extern F_SET_HT_PHY_REGISTER F15SetHtPhyRegister;
86 extern F_GET_NEXT_HT_LINK_FEATURES F15GetNextHtLinkFeatures;
87 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15OrMicroCodePatchesStruct;
88 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15OrMicrocodeEquivalenceTable;
89 extern F_GET_EARLY_INIT_TABLE GetF15OrEarlyInitOnCoreTable;
90 extern CONST REGISTER_TABLE ROMDATA F15OrPciRegisterTable;
91 extern CONST REGISTER_TABLE ROMDATA F15OrMsrRegisterTable;
92 extern CONST REGISTER_TABLE ROMDATA F15OrAM3MsrWorkaroundTable;
93 extern CONST REGISTER_TABLE ROMDATA F15OrSharedMsrRegisterTable;
94 extern CONST REGISTER_TABLE ROMDATA F15OrSharedMsrCuRegisterTable;
95 extern CONST REGISTER_TABLE ROMDATA F15OrSharedMsrWorkaroundTable;
96 extern CONST REGISTER_TABLE ROMDATA F15OrHtPhyRegisterTable;
97 extern CONST REGISTER_TABLE ROMDATA F15PciRegisterTable;
98 extern CONST REGISTER_TABLE ROMDATA F15MsrRegisterTable;
99 extern CONST REGISTER_TABLE ROMDATA F15OrMultiLinkPciRegisterTable;
100 extern CONST REGISTER_TABLE ROMDATA F15OrSingleLinkPciRegisterTable;
101 extern CONST REGISTER_TABLE ROMDATA F15OrWorkaroundsTable;
102 extern CONST PACKAGE_HTLINK_MAP_ITEM ROMDATA HtFam15PackageLinkMap[];
104 #if OPTION_EARLY_SAMPLES == TRUE
105 extern CONST REGISTER_TABLE ROMDATA F15OrEarlySampleWorkaroundsTable;
106 extern CONST REGISTER_TABLE ROMDATA F15OrEarlySampleSharedMsrWorkaroundTable;
107 extern CONST REGISTER_TABLE ROMDATA F15OrEarlySampleSharedMsrRegisterTable;
108 extern CONST REGISTER_TABLE ROMDATA F15OrEarlySamplePciRegisterTable;
109 extern CONST REGISTER_TABLE ROMDATA F15OrEarlySampleMsrRegisterTable;
112 * Core Pair and core pair primary determination table.
114 * The two fields from the core pair hardware register can be used to determine whether
115 * even number cores are primary or all cores are primary. It can be extended if it is
116 * decided to have other configs as well. The other logically possible value sets are BitMapMapping,
117 * but they are currently not supported by the processor.
119 CONST CORE_PAIR_MAP ROMDATA HtFam15CorePairMapping[] =
121 {1, 1, EvenCoresMapping}, ///< 1 Compute Unit with 2 cores
122 {3, 3, EvenCoresMapping}, ///< 2 Compute Units both with 2 Cores
123 {7, 7, EvenCoresMapping}, ///< 3 Compute Units all with 2 Cores
124 {0xF, 0xF, EvenCoresMapping}, ///< 4 Compute Units all with 2 Cores
125 {1, 0, AllCoresMapping}, ///< 1 Compute Unit with 1 core
126 {3, 0, AllCoresMapping}, ///< 2 Compute Units both with 1 Core
127 {7, 0, AllCoresMapping}, ///< 3 Compute Units all with 1 Core
128 {0xF, 0, AllCoresMapping}, ///< 4 Compute Units all with 1 Core
129 {HT_LIST_TERMINAL, HT_LIST_TERMINAL, MaxComputeUnitMapping} ///< End
133 #if USES_REGISTER_TABLES == TRUE
134 CONST REGISTER_TABLE ROMDATA *F15OrRegisterTables[] =
136 #if BASE_FAMILY_PCI == TRUE
137 &F15PciRegisterTable,
139 #if MODEL_SPECIFIC_PCI == TRUE
140 &F15OrMultiLinkPciRegisterTable,
141 &F15OrSingleLinkPciRegisterTable,
143 #if MODEL_SPECIFIC_PCI == TRUE
144 &F15OrPciRegisterTable,
145 #if OPTION_EARLY_SAMPLES == TRUE
146 &F15OrEarlySamplePciRegisterTable,
149 #if BASE_FAMILY_MSR == TRUE
150 &F15MsrRegisterTable,
152 #if MODEL_SPECIFIC_MSR == TRUE
153 &F15OrMsrRegisterTable,
154 #if (OPTION_AM3_SOCKET_SUPPORT == TRUE) && (CFG_FORCE_MICROSERVER == FALSE)
155 &F15OrAM3MsrWorkaroundTable,
157 #if OPTION_EARLY_SAMPLES == TRUE
158 &F15OrEarlySampleMsrRegisterTable,
161 #if MODEL_SPECIFIC_MSR == TRUE
162 &F15OrSharedMsrRegisterTable,
163 &F15OrSharedMsrCuRegisterTable,
164 &F15OrSharedMsrWorkaroundTable,
165 #if OPTION_EARLY_SAMPLES == TRUE
166 &F15OrEarlySampleSharedMsrRegisterTable,
167 &F15OrEarlySampleSharedMsrWorkaroundTable,
170 #if MODEL_SPECIFIC_HT_PCI == TRUE
171 &F15OrHtPhyRegisterTable,
173 #if BASE_FAMILY_WORKAROUNDS == TRUE
174 &F15OrWorkaroundsTable,
175 #if OPTION_EARLY_SAMPLES == TRUE
176 &F15OrEarlySampleWorkaroundsTable,
184 #if USES_REGISTER_TABLES == TRUE
185 CONST TABLE_ENTRY_TYPE_DESCRIPTOR ROMDATA F15OrTableEntryTypeDescriptors[] =
187 {MsrRegister, SetRegisterForMsrEntry},
188 {PciRegister, SetRegisterForPciEntry},
189 {FamSpecificWorkaround, SetRegisterForFamSpecificWorkaroundEntry},
190 {HtPhyRegister, SetRegisterForHtPhyEntry},
191 {HtPhyRangeRegister, SetRegisterForHtPhyRangeEntry},
192 {DeemphasisRegister, SetRegisterForDeemphasisEntry},
193 {HtPhyFreqRegister, SetRegisterForHtPhyFreqEntry},
194 {ProfileFixup, SetRegisterForPerformanceProfileEntry},
195 {HtHostPciRegister, SetRegisterForHtHostEntry},
196 {HtHostPerfPciRegister, SetRegisterForHtHostPerfEntry},
197 {HtTokenPciRegister, SetRegisterForHtLinkTokenEntry},
198 {CoreCountsPciRegister, SetRegisterForCoreCountsPerformanceEntry},
199 {ProcCountsPciRegister, SetRegisterForProcessorCountsEntry},
200 {CompUnitCountsPciRegister, SetRegisterForComputeUnitCountsEntry},
201 {TokenPciRegister, SetRegisterForTokenPciEntry},
202 {HtFeatPciRegister, SetRegisterForHtFeaturePciEntry},
203 {HtLinkPciRegister, SetRegisterForHtLinkPciEntry},
204 {CompUnitCountsMsr, SetMsrForComputeUnitCountsEntry},
206 {TableEntryTypeMax, (PF_DO_TABLE_ENTRY)CommonVoid}
210 CONST CPU_SPECIFIC_SERVICES ROMDATA cpuF15OrServices =
213 #if DISABLE_PSTATE == TRUE
216 (PF_CPU_DISABLE_PSTATE) CommonAssert,
218 #if TRANSITION_PSTATE == TRUE
221 (PF_CPU_TRANSITION_PSTATE) CommonAssert,
223 #if PROC_IDD_MAX == TRUE
226 (PF_CPU_GET_IDD_MAX) CommonAssert,
228 #if GET_TSC_RATE == TRUE
231 (PF_CPU_GET_TSC_RATE) CommonAssert,
233 #if GET_NB_FREQ == TRUE
234 F15OrGetCurrentNbFrequency,
236 (PF_CPU_GET_NB_FREQ) CommonAssert,
238 #if GET_NB_FREQ == TRUE
239 F15OrGetMinMaxNbFrequency,
241 (PF_CPU_GET_MIN_MAX_NB_FREQ) CommonAssert,
243 #if GET_NB_FREQ == TRUE
244 F15OrGetNbPstateInfo,
246 (PF_CPU_GET_NB_PSTATE_INFO) CommonAssert,
248 #if IS_NBCOF_INIT_NEEDED == TRUE
249 F15CommonGetNbCofVidUpdate,
251 (PF_CPU_IS_NBCOF_INIT_NEEDED) CommonAssert,
253 #if GET_NB_IDD_MAX == TRUE
254 (PF_CPU_GET_NB_IDD_MAX) CommonAssert,
256 (PF_CPU_GET_NB_IDD_MAX) CommonAssert,
258 #if AP_INITIAL_LAUNCH == TRUE
261 (PF_CPU_AP_INITIAL_LAUNCH) CommonAssert,
263 #if (BRAND_STRING1 == TRUE) || (BRAND_STRING2 == TRUE)
264 F15OrGetNumberOfPhysicalCores,
266 (PF_CPU_NUMBER_OF_PHYSICAL_CORES) CommonAssert,
268 #if GET_AP_MAILBOX_FROM_HW == TRUE
269 F15OrGetApMailboxFromHardware,
271 (PF_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE) CommonAssert,
273 #if SET_AP_CORE_NUMBER == TRUE
274 F15OrSetApCoreNumber,
276 (PF_CPU_SET_AP_CORE_NUMBER) CommonAssert,
278 #if GET_AP_CORE_NUMBER == TRUE
279 F15OrGetApCoreNumber,
281 (PF_CPU_GET_AP_CORE_NUMBER) CommonAssert,
283 #if TRANSFER_AP_CORE_NUMBER == TRUE
284 F15OrTransferApCoreNumber,
286 (PF_CPU_TRANSFER_AP_CORE_NUMBER) CommonAssert,
288 #if ID_POSITION_INITIAL_APICID == TRUE
289 F15CpuAmdCoreIdPositionInInitialApicId,
291 (PF_CORE_ID_POSITION_IN_INITIAL_APIC_ID) CommonAssert,
293 #if SAVE_FEATURES == TRUE
294 // F15OrSaveFeatures,
295 (PF_CPU_SAVE_FEATURES) CommonVoid,
297 (PF_CPU_SAVE_FEATURES) CommonAssert,
299 #if WRITE_FEATURES == TRUE
300 // F15OrWriteFeatures,
301 (PF_CPU_WRITE_FEATURES) CommonVoid,
303 (PF_CPU_WRITE_FEATURES) CommonAssert,
305 #if SET_WARM_RESET_FLAG == TRUE
306 F15SetAgesaWarmResetFlag,
308 (PF_CPU_SET_WARM_RESET_FLAG) CommonAssert,
310 #if GET_WARM_RESET_FLAG == TRUE
311 F15GetAgesaWarmResetFlag,
313 (PF_CPU_GET_WARM_RESET_FLAG) CommonAssert,
315 #if BRAND_STRING1 == TRUE
316 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
318 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
320 #if BRAND_STRING2 == TRUE
321 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
323 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
325 #if GET_PATCHES == TRUE
326 GetF15OrMicroCodePatchesStruct,
328 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
330 #if GET_PATCHES_EQUIVALENCE_TABLE == TRUE
331 GetF15OrMicrocodeEquivalenceTable,
333 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
335 #if GET_CACHE_INFO == TRUE
338 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
340 #if GET_SYSTEM_PM_TABLE == TRUE
343 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
345 #if GET_WHEA_INIT == TRUE
348 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
350 #if GET_PLATFORM_TYPE_SPECIFIC_INFO == TRUE
351 (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) CommonReturnAgesaSuccess,
353 (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) CommonAssert,
355 #if IS_NB_PSTATE_ENABLED == TRUE
356 F15IsNbPstateEnabled,
358 (PF_IS_NB_PSTATE_ENABLED) CommonAssert,
360 #if (BASE_FAMILY_HT_PCI == TRUE)
361 F15NextLinkHasHtPhyFeats,
363 (PF_NEXT_LINK_HAS_HTFPY_FEATS) CommonReturnFalse,
365 #if (BASE_FAMILY_HT_PCI == TRUE)
368 (PF_SET_HT_PHY_REGISTER) CommonAssert,
370 #if BASE_FAMILY_PCI == TRUE
371 F15GetNextHtLinkFeatures,
373 (PF_GET_NEXT_HT_LINK_FEATURES) CommonAssert,
375 #if USES_REGISTER_TABLES == TRUE
376 (REGISTER_TABLE **) F15OrRegisterTables,
380 #if USES_REGISTER_TABLES == TRUE
381 (TABLE_ENTRY_TYPE_DESCRIPTOR *) F15OrTableEntryTypeDescriptors,
385 #if MODEL_SPECIFIC_HT_PCI == TRUE
386 (PACKAGE_HTLINK_MAP) &HtFam15PackageLinkMap,
390 (CORE_PAIR_MAP *) &HtFam15CorePairMapping,
392 #if AGESA_ENTRY_INIT_EARLY == TRUE
393 GetF15OrEarlyInitOnCoreTable
395 (PF_GET_EARLY_INIT_TABLE) CommonVoid
401 #define OR_RECOVERY_SOCKETS 1
402 #define OR_RECOVERY_MODULES 1
403 extern F_CPU_GET_SUBFAMILY_ID_ARRAY GetF15OrLogicalIdAndRev;
404 #define OPT_F15_OR_ID (PF_CPU_GET_SUBFAMILY_ID_ARRAY) GetF15OrLogicalIdAndRev,
405 #ifndef ADVCFG_PLATFORM_SOCKETS
406 #define ADVCFG_PLATFORM_SOCKETS OR_SOCKETS
408 #if ADVCFG_PLATFORM_SOCKETS < OR_SOCKETS
409 #undef ADVCFG_PLATFORM_SOCKETS
410 #define ADVCFG_PLATFORM_SOCKETS OR_SOCKETS
413 #ifndef ADVCFG_PLATFORM_MODULES
414 #define ADVCFG_PLATFORM_MODULES OR_MODULES
416 #if ADVCFG_PLATFORM_MODULES < OR_MODULES
417 #undef ADVCFG_PLATFORM_MODULES
418 #define ADVCFG_PLATFORM_MODULES OR_MODULES
422 #if GET_PATCHES == TRUE
423 #define F15_OR_UCODE_17_UNENC
424 #define F15_OR_UCODE_11F_UNENC
425 #define F15_OR_UCODE_425
426 #define F15_OR_UCODE_50D
427 #define F15_OR_UCODE_624
429 #if AGESA_ENTRY_INIT_EARLY == TRUE
430 #if OPTION_EARLY_SAMPLES == TRUE
431 extern CONST UINT8 ROMDATA CpuF15OrMicrocodePatch06000425 [];
432 #undef F15_OR_UCODE_425
433 #define F15_OR_UCODE_425 CpuF15OrMicrocodePatch06000425,
435 extern CONST UINT8 ROMDATA CpuF15OrMicrocodePatch0600050D_Enc [];
436 #undef F15_OR_UCODE_50D
437 #define F15_OR_UCODE_50D CpuF15OrMicrocodePatch0600050D_Enc,
439 extern CONST UINT8 ROMDATA CpuF15OrMicrocodePatch06000624_Enc [];
440 #undef F15_OR_UCODE_624
441 #define F15_OR_UCODE_624 CpuF15OrMicrocodePatch06000624_Enc,
444 CONST UINT8 ROMDATA *CpuF15OrMicroCodePatchArray[] =
452 CONST UINT8 ROMDATA CpuF15OrNumberOfMicrocodePatches = (UINT8) ((sizeof (CpuF15OrMicroCodePatchArray) / sizeof (CpuF15OrMicroCodePatchArray[0])) - 1);
455 #if OPTION_EARLY_SAMPLES == TRUE
456 extern F_F15_OR_ES_AVOID_NB_CYCLES_START F15OrEarlySamplesAvoidNbCyclesStart;
457 extern F_F15_OR_ES_AVOID_NB_CYCLES_END F15OrEarlySamplesAvoidNbCyclesEnd;
458 extern F_F15_OR_ES_LOAD_MCU_PATCH F15OrEarlySamplesLoadMicrocodePatch;
459 extern F_F15_OR_ES_AFTER_PATCH_LOADED F15OrEarlySamplesAfterPatchLoaded;
461 CONST F15_OR_ES_MCU_PATCH ROMDATA F15OrEarlySampleLoadMcuPatch =
463 F15OrEarlySamplesAvoidNbCyclesStart,
464 F15OrEarlySamplesAvoidNbCyclesEnd,
465 F15OrEarlySamplesLoadMicrocodePatch,
466 F15OrEarlySamplesAfterPatchLoaded
469 CONST F15_OR_ES_MCU_PATCH ROMDATA F15OrEarlySampleLoadMcuPatch =
471 (PF_F15_OR_ES_AVOID_NB_CYCLES_START) CommonVoid,
472 (PF_F15_OR_ES_AVOID_NB_CYCLES_END) CommonVoid,
473 (PF_F15_OR_ES_LOAD_MCU_PATCH) LoadMicrocodePatch,
474 (PF_F15_OR_ES_AFTER_PATCH_LOADED) CommonVoid
478 #if OPTION_EARLY_SAMPLES == TRUE
479 extern F_F15_OR_ES_HTC_INIT_HOOK F15OrHtcInitEarlySampleHook;
481 CONST F15_OR_ES_CORE_SUPPORT ROMDATA F15OrEarlySampleCoreSupport =
483 #if AGESA_ENTRY_INIT_EARLY == TRUE
484 F15OrHtcInitEarlySampleHook,
486 (PF_F15_OR_ES_HTC_INIT_HOOK) CommonAssert,
490 CONST F15_OR_ES_CORE_SUPPORT ROMDATA F15OrEarlySampleCoreSupport =
492 #if AGESA_ENTRY_INIT_EARLY == TRUE
493 (PF_F15_OR_ES_HTC_INIT_HOOK) CommonVoid,
495 (PF_F15_OR_ES_HTC_INIT_HOOK) CommonAssert,
500 #define OPT_F15_OR_CPU {AMD_FAMILY_15_OR, &cpuF15OrServices},
502 #else // OPTION_FAMILY15H_OR == TRUE
503 #define OPT_F15_OR_CPU
504 #define OPT_F15_OR_ID
505 #endif // OPTION_FAMILY15H_OR == TRUE
506 #else // defined (OPTION_FAMILY15H_OR)
507 #define OPT_F15_OR_CPU
508 #define OPT_F15_OR_ID
509 #endif // defined (OPTION_FAMILY15H_OR)
513 * Install family 15h model 10h - 1Fh support
515 #ifdef OPTION_FAMILY15H_TN
516 #if OPTION_FAMILY15H_TN == TRUE
517 extern F_CPU_GET_IDD_MAX F15TnGetProcIddMax;
518 extern F_CPU_GET_NB_PSTATE_INFO F15TnGetNbPstateInfo;
519 extern F_CPU_IS_NBCOF_INIT_NEEDED F15CommonGetNbCofVidUpdate;
520 extern F_CPU_GET_NB_IDD_MAX F15TnGetNbIddMax;
521 extern F_CPU_DISABLE_PSTATE F15DisablePstate;
522 extern F_CPU_TRANSITION_PSTATE F15TransitionPstate;
523 extern F_CPU_GET_TSC_RATE F15GetTscRate;
524 extern F_CPU_GET_NB_FREQ F15TnGetCurrentNbFrequency;
525 extern F_CPU_GET_MIN_MAX_NB_FREQ F15TnGetMinMaxNbFrequency;
526 extern F_CPU_AP_INITIAL_LAUNCH F15LaunchApCore;
527 extern F_CPU_NUMBER_OF_PHYSICAL_CORES F15TnGetNumberOfPhysicalCores;
528 extern F_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE F15TnGetApMailboxFromHardware;
529 extern F_CPU_GET_AP_CORE_NUMBER F15TnGetApCoreNumber;
530 extern F_CORE_ID_POSITION_IN_INITIAL_APIC_ID F15CpuAmdCoreIdPositionInInitialApicId;
531 extern F_CPU_SET_WARM_RESET_FLAG F15SetAgesaWarmResetFlag;
532 extern F_CPU_GET_WARM_RESET_FLAG F15GetAgesaWarmResetFlag;
533 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15CacheInfo;
534 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15TnSysPmTable;
535 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15WheaInitData;
536 extern F_CPU_SET_CFOH_REG SetF15TnCacheFlushOnHaltRegister;
537 extern F_NEXT_LINK_HAS_HTFPY_FEATS F15NextLinkHasHtPhyFeats;
538 extern F_SET_HT_PHY_REGISTER F15SetHtPhyRegister;
539 extern F_GET_NEXT_HT_LINK_FEATURES F15GetNextHtLinkFeatures;
540 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15TnMicroCodePatchesStruct;
541 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15TnMicrocodeEquivalenceTable;
542 extern F_GET_EARLY_INIT_TABLE GetF15TnEarlyInitOnCoreTable;
543 extern CONST REGISTER_TABLE ROMDATA F15TnPciRegisterTable;
544 extern CONST REGISTER_TABLE ROMDATA F15TnPciWorkaroundTable;
545 extern CONST REGISTER_TABLE ROMDATA F15TnMsrRegisterTable;
546 extern CONST REGISTER_TABLE ROMDATA F15TnSharedMsrRegisterTable;
547 extern CONST REGISTER_TABLE ROMDATA F15TnSharedMsrCuRegisterTable;
548 extern CONST REGISTER_TABLE ROMDATA F15TnSharedMsrWorkaroundTable;
549 extern CONST REGISTER_TABLE ROMDATA F15PciRegisterTable;
550 extern CONST REGISTER_TABLE ROMDATA F15MsrRegisterTable;
553 * Core Pair and core pair primary determination table.
555 * The two fields from the core pair hardware register can be used to determine whether
556 * even number cores are primary or all cores are primary. It can be extended if it is
557 * decided to have other configs as well. The other logically possible value sets are BitMapMapping,
558 * but they are currently not supported by the processor.
560 CONST CORE_PAIR_MAP ROMDATA HtFam15TnCorePairMapping[] =
562 {1, 1, EvenCoresMapping}, ///< 1 Compute Unit with 2 cores
563 {3, 3, EvenCoresMapping}, ///< 2 Compute Units both with 2 Cores
564 {1, 0, AllCoresMapping}, ///< 1 Compute Unit with 1 core
565 {3, 0, AllCoresMapping}, ///< 2 Compute Units both with 1 Core
566 {HT_LIST_TERMINAL, HT_LIST_TERMINAL, MaxComputeUnitMapping} ///< End
570 #if USES_REGISTER_TABLES == TRUE
571 CONST REGISTER_TABLE ROMDATA *F15TnRegisterTables[] =
573 #if BASE_FAMILY_PCI == TRUE
574 &F15PciRegisterTable,
576 #if MODEL_SPECIFIC_PCI == TRUE
577 &F15TnPciRegisterTable,
578 &F15TnPciWorkaroundTable,
580 #if BASE_FAMILY_MSR == TRUE
581 &F15MsrRegisterTable,
583 #if MODEL_SPECIFIC_MSR == TRUE
584 &F15TnMsrRegisterTable,
585 &F15TnSharedMsrRegisterTable,
586 &F15TnSharedMsrCuRegisterTable,
587 &F15TnSharedMsrWorkaroundTable,
594 #if USES_REGISTER_TABLES == TRUE
595 CONST TABLE_ENTRY_TYPE_DESCRIPTOR ROMDATA F15TnTableEntryTypeDescriptors[] =
597 {MsrRegister, SetRegisterForMsrEntry},
598 {PciRegister, SetRegisterForPciEntry},
599 {FamSpecificWorkaround, SetRegisterForFamSpecificWorkaroundEntry},
600 {ProfileFixup, SetRegisterForPerformanceProfileEntry},
601 {CompUnitCountsMsr, SetMsrForComputeUnitCountsEntry},
602 {HtPhyRegister, SetRegisterForHtPhyEntry},
603 {HtPhyRangeRegister, SetRegisterForHtPhyRangeEntry},
604 {DeemphasisRegister, SetRegisterForDeemphasisEntry},
605 {HtPhyFreqRegister, SetRegisterForHtPhyFreqEntry},
606 {HtHostPciRegister, SetRegisterForHtHostEntry},
607 {HtHostPerfPciRegister, SetRegisterForHtHostPerfEntry},
608 {HtTokenPciRegister, SetRegisterForHtLinkTokenEntry},
609 {CoreCountsPciRegister, SetRegisterForCoreCountsPerformanceEntry},
610 {ProcCountsPciRegister, SetRegisterForProcessorCountsEntry},
611 {CompUnitCountsPciRegister, SetRegisterForComputeUnitCountsEntry},
612 {TokenPciRegister, SetRegisterForTokenPciEntry},
613 {HtFeatPciRegister, SetRegisterForHtFeaturePciEntry},
614 {HtLinkPciRegister, SetRegisterForHtLinkPciEntry},
616 {TableEntryTypeMax, (PF_DO_TABLE_ENTRY)CommonVoid}
620 CONST CPU_SPECIFIC_SERVICES ROMDATA cpuF15TnServices =
623 #if DISABLE_PSTATE == TRUE
626 (PF_CPU_DISABLE_PSTATE) CommonAssert,
628 #if TRANSITION_PSTATE == TRUE
631 (PF_CPU_TRANSITION_PSTATE) CommonAssert,
633 #if PROC_IDD_MAX == TRUE
636 (PF_CPU_GET_IDD_MAX) CommonAssert,
638 #if GET_TSC_RATE == TRUE
641 (PF_CPU_GET_TSC_RATE) CommonAssert,
643 #if GET_NB_FREQ == TRUE
644 F15TnGetCurrentNbFrequency,
646 (PF_CPU_GET_NB_FREQ) CommonAssert,
648 #if GET_NB_FREQ == TRUE
649 F15TnGetMinMaxNbFrequency,
651 (PF_CPU_GET_MIN_MAX_NB_FREQ) CommonAssert,
653 #if GET_NB_FREQ == TRUE
654 F15TnGetNbPstateInfo,
656 (PF_CPU_GET_NB_PSTATE_INFO) CommonAssert,
658 #if IS_NBCOF_INIT_NEEDED == TRUE
659 F15CommonGetNbCofVidUpdate,
661 (PF_CPU_IS_NBCOF_INIT_NEEDED) CommonAssert,
663 #if GET_NB_IDD_MAX == TRUE
664 (PF_CPU_GET_NB_IDD_MAX) F15TnGetNbIddMax,
666 (PF_CPU_GET_NB_IDD_MAX) CommonAssert,
668 #if AP_INITIAL_LAUNCH == TRUE
671 (PF_CPU_AP_INITIAL_LAUNCH) CommonAssert,
673 #if (BRAND_STRING1 == TRUE) || (BRAND_STRING2 == TRUE)
674 F15TnGetNumberOfPhysicalCores,
676 (PF_CPU_NUMBER_OF_PHYSICAL_CORES) CommonAssert,
678 #if GET_AP_MAILBOX_FROM_HW == TRUE
679 F15TnGetApMailboxFromHardware,
681 (PF_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE) CommonAssert,
683 #if SET_AP_CORE_NUMBER == TRUE
684 (PF_CPU_SET_AP_CORE_NUMBER) CommonVoid,
686 (PF_CPU_SET_AP_CORE_NUMBER) CommonAssert,
688 #if GET_AP_CORE_NUMBER == TRUE
689 F15TnGetApCoreNumber,
691 (PF_CPU_GET_AP_CORE_NUMBER) CommonAssert,
693 #if TRANSFER_AP_CORE_NUMBER == TRUE
694 (PF_CPU_TRANSFER_AP_CORE_NUMBER) CommonVoid,
696 (PF_CPU_TRANSFER_AP_CORE_NUMBER) CommonAssert,
698 #if ID_POSITION_INITIAL_APICID == TRUE
699 F15CpuAmdCoreIdPositionInInitialApicId,
701 (PF_CORE_ID_POSITION_IN_INITIAL_APIC_ID) CommonAssert,
703 #if SAVE_FEATURES == TRUE
704 (PF_CPU_SAVE_FEATURES) CommonVoid,
706 (PF_CPU_SAVE_FEATURES) CommonAssert,
708 #if WRITE_FEATURES == TRUE
709 (PF_CPU_WRITE_FEATURES) CommonVoid,
711 (PF_CPU_WRITE_FEATURES) CommonAssert,
713 #if SET_WARM_RESET_FLAG == TRUE
714 F15SetAgesaWarmResetFlag,
716 (PF_CPU_SET_WARM_RESET_FLAG) CommonAssert,
718 #if GET_WARM_RESET_FLAG == TRUE
719 F15GetAgesaWarmResetFlag,
721 (PF_CPU_GET_WARM_RESET_FLAG) CommonAssert,
723 #if BRAND_STRING1 == TRUE
724 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
726 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
728 #if BRAND_STRING2 == TRUE
729 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
731 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
733 #if GET_PATCHES == TRUE
734 GetF15TnMicroCodePatchesStruct,
736 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
738 #if GET_PATCHES_EQUIVALENCE_TABLE == TRUE
739 GetF15TnMicrocodeEquivalenceTable,
741 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
743 #if GET_CACHE_INFO == TRUE
746 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
748 #if GET_SYSTEM_PM_TABLE == TRUE
751 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
753 #if GET_WHEA_INIT == TRUE
756 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
758 #if GET_PLATFORM_TYPE_SPECIFIC_INFO == TRUE
759 (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) CommonReturnAgesaSuccess,
761 (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) CommonAssert,
763 #if IS_NB_PSTATE_ENABLED == TRUE
764 F15IsNbPstateEnabled,
766 (PF_IS_NB_PSTATE_ENABLED) CommonAssert,
768 #if (BASE_FAMILY_HT_PCI == TRUE)
769 F15NextLinkHasHtPhyFeats,
771 (PF_NEXT_LINK_HAS_HTFPY_FEATS) CommonReturnFalse,
773 #if (BASE_FAMILY_HT_PCI == TRUE)
776 (PF_SET_HT_PHY_REGISTER) CommonAssert,
778 #if BASE_FAMILY_PCI == TRUE
779 F15GetNextHtLinkFeatures,
781 (PF_GET_NEXT_HT_LINK_FEATURES) CommonAssert,
783 #if USES_REGISTER_TABLES == TRUE
784 (REGISTER_TABLE **) F15TnRegisterTables,
788 #if USES_REGISTER_TABLES == TRUE
789 (TABLE_ENTRY_TYPE_DESCRIPTOR *) F15TnTableEntryTypeDescriptors,
793 #if MODEL_SPECIFIC_HT_PCI == TRUE
798 (CORE_PAIR_MAP *) &HtFam15TnCorePairMapping,
800 #if AGESA_ENTRY_INIT_EARLY == TRUE
801 GetF15TnEarlyInitOnCoreTable
803 (PF_GET_EARLY_INIT_TABLE) CommonVoid
809 #define TN_RECOVERY_SOCKETS 1
810 #define TN_RECOVERY_MODULES 1
811 extern F_CPU_GET_SUBFAMILY_ID_ARRAY GetF15TnLogicalIdAndRev;
812 #define OPT_F15_TN_ID (PF_CPU_GET_SUBFAMILY_ID_ARRAY) GetF15TnLogicalIdAndRev,
813 #ifndef ADVCFG_PLATFORM_SOCKETS
814 #define ADVCFG_PLATFORM_SOCKETS TN_SOCKETS
816 #if ADVCFG_PLATFORM_SOCKETS < TN_SOCKETS
817 #undef ADVCFG_PLATFORM_SOCKETS
818 #define ADVCFG_PLATFORM_SOCKETS TN_SOCKETS
821 #ifndef ADVCFG_PLATFORM_MODULES
822 #define ADVCFG_PLATFORM_MODULES TN_MODULES
824 #if ADVCFG_PLATFORM_MODULES < TN_MODULES
825 #undef ADVCFG_PLATFORM_MODULES
826 #define ADVCFG_PLATFORM_MODULES TN_MODULES
830 #if GET_PATCHES == TRUE
831 #define F15_TN_UCODE_04
832 #define F15_TN_UCODE_04_UNENC
834 #if AGESA_ENTRY_INIT_EARLY == TRUE
835 #if OPTION_EARLY_SAMPLES == TRUE
836 extern CONST UINT8 ROMDATA CpuF15TnMicrocodePatch06001004_Unenc [];
837 #undef F15_TN_UCODE_04_UNENC
838 #define F15_TN_UCODE_04_UNENC CpuF15TnMicrocodePatch06001004_Unenc,
840 extern CONST UINT8 ROMDATA CpuF15TnMicrocodePatch06001004 [];
841 #undef F15_TN_UCODE_04
842 #define F15_TN_UCODE_04 CpuF15TnMicrocodePatch06001004,
846 CONST UINT8 ROMDATA *CpuF15TnMicroCodePatchArray[] =
849 F15_TN_UCODE_04_UNENC
853 CONST UINT8 ROMDATA CpuF15TnNumberOfMicrocodePatches = (UINT8) ((sizeof (CpuF15TnMicroCodePatchArray) / sizeof (CpuF15TnMicroCodePatchArray[0])) - 1);
856 #if OPTION_EARLY_SAMPLES == TRUE
857 extern F_F15_TN_ES_LOAD_MCU_PATCH F15TnEarlySamplesLoadMicrocodePatch;
859 CONST F15_TN_ES_MCU_PATCH ROMDATA F15TnEarlySampleLoadMcuPatch =
861 F15TnEarlySamplesLoadMicrocodePatch
864 CONST F15_TN_ES_MCU_PATCH ROMDATA F15TnEarlySampleLoadMcuPatch =
866 (PF_F15_TN_ES_LOAD_MCU_PATCH) LoadMicrocodePatch
870 #define OPT_F15_TN_CPU {AMD_FAMILY_15_TN, &cpuF15TnServices},
872 #else // OPTION_FAMILY15H_TN == TRUE
873 #define OPT_F15_TN_CPU
874 #define OPT_F15_TN_ID
875 #endif // OPTION_FAMILY15H_TN == TRUE
876 #else // defined (OPTION_FAMILY15H_TN)
877 #define OPT_F15_TN_CPU
878 #define OPT_F15_TN_ID
879 #endif // defined (OPTION_FAMILY15H_TN)
882 * Install family 15h model 20h - 2Fh support
884 #ifdef OPTION_FAMILY15H_KM
885 #if OPTION_FAMILY15H_KM == TRUE
886 extern F_CPU_GET_IDD_MAX F15KmGetProcIddMax;
887 extern F_CPU_GET_NB_PSTATE_INFO F15KmGetNbPstateInfo;
888 extern F_CPU_IS_NBCOF_INIT_NEEDED F15CommonGetNbCofVidUpdate;
889 extern F_CPU_DISABLE_PSTATE F15DisablePstate;
890 extern F_CPU_TRANSITION_PSTATE F15TransitionPstate;
891 extern F_CPU_GET_TSC_RATE F15GetTscRate;
892 extern F_CPU_GET_NB_FREQ F15KmGetCurrentNbFrequency;
893 extern F_CPU_GET_MIN_MAX_NB_FREQ F15KmGetMinMaxNbFrequency;
894 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15CacheInfo;
895 extern F_CPU_AP_INITIAL_LAUNCH F15LaunchApCore;
896 extern F_CPU_NUMBER_OF_PHYSICAL_CORES F15KmGetNumberOfPhysicalCores;
897 extern F_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE F15KmGetApMailboxFromHardware;
898 extern F_CPU_SET_AP_CORE_NUMBER F15KmSetApCoreNumber;
899 extern F_CPU_GET_AP_CORE_NUMBER F15KmGetApCoreNumber;
900 extern F_CPU_TRANSFER_AP_CORE_NUMBER F15KmTransferApCoreNumber;
901 extern F_CORE_ID_POSITION_IN_INITIAL_APIC_ID F15CpuAmdCoreIdPositionInInitialApicId;
902 extern F_CPU_SET_WARM_RESET_FLAG F15SetAgesaWarmResetFlag;
903 extern F_CPU_GET_WARM_RESET_FLAG F15GetAgesaWarmResetFlag;
904 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15KmSysPmTable;
905 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15WheaInitData;
906 extern F_CPU_SET_CFOH_REG SetF15KmCacheFlushOnHaltRegister;
907 extern F_NEXT_LINK_HAS_HTFPY_FEATS F15NextLinkHasHtPhyFeats;
908 extern F_SET_HT_PHY_REGISTER F15SetHtPhyRegister;
909 extern F_GET_NEXT_HT_LINK_FEATURES F15GetNextHtLinkFeatures;
910 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15KmMicroCodePatchesStruct;
911 extern F_CPU_GET_FAMILY_SPECIFIC_ARRAY GetF15KmMicrocodeEquivalenceTable;
912 extern F_GET_EARLY_INIT_TABLE GetF15KmEarlyInitOnCoreTable;
913 extern CONST REGISTER_TABLE ROMDATA F15KmPciRegisterTable;
914 extern CONST REGISTER_TABLE ROMDATA F15KmMsrRegisterTable;
915 extern CONST REGISTER_TABLE ROMDATA F15KmSharedMsrRegisterTable;
916 extern CONST REGISTER_TABLE ROMDATA F15KmSharedMsrCuRegisterTable;
917 extern CONST REGISTER_TABLE ROMDATA F15PciRegisterTable;
918 extern CONST REGISTER_TABLE ROMDATA F15MsrRegisterTable;
919 extern CONST PACKAGE_HTLINK_MAP_ITEM ROMDATA HtFam15Mod2xPackageLinkMap[];
921 * Core Pair and core pair primary determination table.
923 * The two fields from the core pair hardware register can be used to determine whether
924 * even number cores are primary or all cores are primary. It can be extended if it is
925 * decided to have other configs as well. The other logically possible value sets are BitMapMapping,
926 * but they are currently not supported by the processor.
928 CONST CORE_PAIR_MAP ROMDATA HtFam15KmCorePairMapping[] =
930 {1, 1, EvenCoresMapping}, ///< 1 Compute Unit with 2 cores
931 {3, 3, EvenCoresMapping}, ///< 2 Compute Units both with 2 Cores
932 {7, 7, EvenCoresMapping}, ///< 3 Compute Units all with 2 Cores
933 {0xF, 0xF, EvenCoresMapping}, ///< 4 Compute Units all with 2 Cores
934 {0x1F, 0x1F, EvenCoresMapping}, ///< 5 Compute Units all with 2 Cores
935 {1, 0, AllCoresMapping}, ///< 1 Compute Unit with 1 core
936 {3, 0, AllCoresMapping}, ///< 2 Compute Units both with 1 Core
937 {7, 0, AllCoresMapping}, ///< 3 Compute Units all with 1 Core
938 {0xF, 0, AllCoresMapping}, ///< 4 Compute Units all with 1 Core
939 {0x1F, 0, AllCoresMapping}, ///< 5 Compute Units all with 1 Core
940 {HT_LIST_TERMINAL, HT_LIST_TERMINAL, MaxComputeUnitMapping} ///< End
944 #if USES_REGISTER_TABLES == TRUE
945 CONST REGISTER_TABLE ROMDATA *F15KmRegisterTables[] =
947 #if BASE_FAMILY_PCI == TRUE
948 &F15PciRegisterTable,
950 #if MODEL_SPECIFIC_PCI == TRUE
951 &F15KmPciRegisterTable,
953 #if BASE_FAMILY_MSR == TRUE
954 &F15MsrRegisterTable,
956 #if MODEL_SPECIFIC_MSR == TRUE
957 &F15KmMsrRegisterTable,
959 #if MODEL_SPECIFIC_MSR == TRUE
960 &F15KmSharedMsrRegisterTable,
961 &F15KmSharedMsrCuRegisterTable,
968 #if USES_REGISTER_TABLES == TRUE
969 CONST TABLE_ENTRY_TYPE_DESCRIPTOR ROMDATA F15KmTableEntryTypeDescriptors[] =
971 {MsrRegister, SetRegisterForMsrEntry},
972 {PciRegister, SetRegisterForPciEntry},
973 {FamSpecificWorkaround, SetRegisterForFamSpecificWorkaroundEntry},
974 {HtPhyRegister, SetRegisterForHtPhyEntry},
975 {HtPhyRangeRegister, SetRegisterForHtPhyRangeEntry},
976 {DeemphasisRegister, SetRegisterForDeemphasisEntry},
977 {HtPhyFreqRegister, SetRegisterForHtPhyFreqEntry},
978 {ProfileFixup, SetRegisterForPerformanceProfileEntry},
979 {HtHostPciRegister, SetRegisterForHtHostEntry},
980 {HtHostPerfPciRegister, SetRegisterForHtHostPerfEntry},
981 {HtTokenPciRegister, SetRegisterForHtLinkTokenEntry},
982 {CoreCountsPciRegister, SetRegisterForCoreCountsPerformanceEntry},
983 {ProcCountsPciRegister, SetRegisterForProcessorCountsEntry},
984 {CompUnitCountsPciRegister, SetRegisterForComputeUnitCountsEntry},
985 {TokenPciRegister, SetRegisterForTokenPciEntry},
986 {HtFeatPciRegister, SetRegisterForHtFeaturePciEntry},
987 {HtLinkPciRegister, SetRegisterForHtLinkPciEntry},
988 {CompUnitCountsMsr, SetMsrForComputeUnitCountsEntry},
990 {TableEntryTypeMax, (PF_DO_TABLE_ENTRY)CommonVoid}
994 CONST CPU_SPECIFIC_SERVICES ROMDATA cpuF15KmServices =
997 #if DISABLE_PSTATE == TRUE
1000 (PF_CPU_DISABLE_PSTATE) CommonAssert,
1002 #if TRANSITION_PSTATE == TRUE
1003 F15TransitionPstate,
1005 (PF_CPU_TRANSITION_PSTATE) CommonAssert,
1007 #if PROC_IDD_MAX == TRUE
1010 (PF_CPU_GET_IDD_MAX) CommonAssert,
1012 #if GET_TSC_RATE == TRUE
1015 (PF_CPU_GET_TSC_RATE) CommonAssert,
1017 #if GET_NB_FREQ == TRUE
1018 F15KmGetCurrentNbFrequency,
1020 (PF_CPU_GET_NB_FREQ) CommonAssert,
1022 #if GET_NB_FREQ == TRUE
1023 F15KmGetMinMaxNbFrequency,
1025 (PF_CPU_GET_MIN_MAX_NB_FREQ) CommonAssert,
1027 #if GET_NB_FREQ == TRUE
1028 F15KmGetNbPstateInfo,
1030 (PF_CPU_GET_NB_PSTATE_INFO) CommonAssert,
1032 #if IS_NBCOF_INIT_NEEDED == TRUE
1033 F15CommonGetNbCofVidUpdate,
1035 (PF_CPU_IS_NBCOF_INIT_NEEDED) CommonAssert,
1037 #if GET_NB_IDD_MAX == TRUE
1038 (PF_CPU_GET_NB_IDD_MAX) CommonAssert,
1040 (PF_CPU_GET_NB_IDD_MAX) CommonAssert,
1042 #if AP_INITIAL_LAUNCH == TRUE
1045 (PF_CPU_AP_INITIAL_LAUNCH) CommonAssert,
1047 #if (BRAND_STRING1 == TRUE) || (BRAND_STRING2 == TRUE)
1048 F15KmGetNumberOfPhysicalCores,
1050 (PF_CPU_NUMBER_OF_PHYSICAL_CORES) CommonAssert,
1052 #if GET_AP_MAILBOX_FROM_HW == TRUE
1053 F15KmGetApMailboxFromHardware,
1055 (PF_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE) CommonAssert,
1057 #if SET_AP_CORE_NUMBER == TRUE
1058 F15KmSetApCoreNumber,
1060 (PF_CPU_SET_AP_CORE_NUMBER) CommonAssert,
1062 #if GET_AP_CORE_NUMBER == TRUE
1063 F15KmGetApCoreNumber,
1065 (PF_CPU_GET_AP_CORE_NUMBER) CommonAssert,
1067 #if TRANSFER_AP_CORE_NUMBER == TRUE
1068 F15KmTransferApCoreNumber,
1070 (PF_CPU_TRANSFER_AP_CORE_NUMBER) CommonAssert,
1072 #if ID_POSITION_INITIAL_APICID == TRUE
1073 F15CpuAmdCoreIdPositionInInitialApicId,
1075 (PF_CORE_ID_POSITION_IN_INITIAL_APIC_ID) CommonAssert,
1077 #if SAVE_FEATURES == TRUE
1078 (PF_CPU_SAVE_FEATURES) CommonVoid,
1080 (PF_CPU_SAVE_FEATURES) CommonAssert,
1082 #if WRITE_FEATURES == TRUE
1083 (PF_CPU_WRITE_FEATURES) CommonVoid,
1085 (PF_CPU_WRITE_FEATURES) CommonAssert,
1087 #if SET_WARM_RESET_FLAG == TRUE
1088 F15SetAgesaWarmResetFlag,
1090 (PF_CPU_SET_WARM_RESET_FLAG) CommonAssert,
1092 #if GET_WARM_RESET_FLAG == TRUE
1093 F15GetAgesaWarmResetFlag,
1095 (PF_CPU_GET_WARM_RESET_FLAG) CommonAssert,
1097 #if BRAND_STRING1 == TRUE
1098 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
1100 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1102 #if BRAND_STRING2 == TRUE
1103 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
1105 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1107 #if GET_PATCHES == TRUE
1108 GetF15KmMicroCodePatchesStruct,
1110 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1112 #if GET_PATCHES_EQUIVALENCE_TABLE == TRUE
1113 GetF15KmMicrocodeEquivalenceTable,
1115 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1117 #if GET_CACHE_INFO == TRUE
1120 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1122 #if GET_SYSTEM_PM_TABLE == TRUE
1125 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1127 #if GET_WHEA_INIT == TRUE
1130 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1132 #if GET_PLATFORM_TYPE_SPECIFIC_INFO == TRUE
1133 (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) CommonReturnAgesaSuccess,
1135 (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) CommonAssert,
1137 #if IS_NB_PSTATE_ENABLED == TRUE
1138 F15IsNbPstateEnabled,
1140 (PF_IS_NB_PSTATE_ENABLED) CommonAssert,
1142 #if (BASE_FAMILY_HT_PCI == TRUE)
1143 F15NextLinkHasHtPhyFeats,
1145 (PF_NEXT_LINK_HAS_HTFPY_FEATS) CommonReturnFalse,
1147 #if (BASE_FAMILY_HT_PCI == TRUE)
1148 F15SetHtPhyRegister,
1150 (PF_SET_HT_PHY_REGISTER) CommonAssert,
1152 #if BASE_FAMILY_PCI == TRUE
1153 F15GetNextHtLinkFeatures,
1155 (PF_GET_NEXT_HT_LINK_FEATURES) CommonAssert,
1157 #if USES_REGISTER_TABLES == TRUE
1158 (REGISTER_TABLE **) F15KmRegisterTables,
1162 #if USES_REGISTER_TABLES == TRUE
1163 (TABLE_ENTRY_TYPE_DESCRIPTOR *) F15KmTableEntryTypeDescriptors,
1167 #if MODEL_SPECIFIC_HT_PCI == TRUE
1168 (PACKAGE_HTLINK_MAP) &HtFam15Mod2xPackageLinkMap,
1172 (CORE_PAIR_MAP *) &HtFam15KmCorePairMapping,
1174 #if AGESA_ENTRY_INIT_EARLY == TRUE
1175 GetF15KmEarlyInitOnCoreTable
1177 (PF_GET_EARLY_INIT_TABLE) CommonVoid
1181 #define KM_SOCKETS 8
1182 #define KM_MODULES 2
1183 #define KM_RECOVERY_SOCKETS 1
1184 #define KM_RECOVERY_MODULES 1
1185 extern F_CPU_GET_SUBFAMILY_ID_ARRAY GetF15KmLogicalIdAndRev;
1186 #define OPT_F15_KM_ID (PF_CPU_GET_SUBFAMILY_ID_ARRAY) GetF15KmLogicalIdAndRev,
1187 #ifndef ADVCFG_PLATFORM_SOCKETS
1188 #define ADVCFG_PLATFORM_SOCKETS KM_SOCKETS
1190 #if ADVCFG_PLATFORM_SOCKETS < KM_SOCKETS
1191 #undef ADVCFG_PLATFORM_SOCKETS
1192 #define ADVCFG_PLATFORM_SOCKETS KM_SOCKETS
1195 #ifndef ADVCFG_PLATFORM_MODULES
1196 #define ADVCFG_PLATFORM_MODULES KM_MODULES
1198 #if ADVCFG_PLATFORM_MODULES < KM_MODULES
1199 #undef ADVCFG_PLATFORM_MODULES
1200 #define ADVCFG_PLATFORM_MODULES KM_MODULES
1204 #if GET_PATCHES == TRUE
1206 #if AGESA_ENTRY_INIT_EARLY == TRUE
1207 #if OPTION_EARLY_SAMPLES == TRUE
1211 CONST MICROCODE_PATCHES_4K ROMDATA *CpuF15KmMicroCodePatchArray[] =
1216 CONST UINT8 ROMDATA CpuF15KmNumberOfMicrocodePatches = (UINT8) ((sizeof (CpuF15KmMicroCodePatchArray) / sizeof (CpuF15KmMicroCodePatchArray[0])) - 1);
1219 #define OPT_F15_KM_CPU {AMD_FAMILY_15_KM, &cpuF15KmServices},
1221 #else // OPTION_FAMILY15H_KM == TRUE
1222 #define OPT_F15_KM_CPU
1223 #define OPT_F15_KM_ID
1224 #endif // OPTION_FAMILY15H_KM == TRUE
1225 #else // defined (OPTION_FAMILY15H_KM)
1226 #define OPT_F15_KM_CPU
1227 #define OPT_F15_KM_ID
1228 #endif // defined (OPTION_FAMILY15H_KM)
1231 * Install unknown family 15h support
1235 #if USES_REGISTER_TABLES == TRUE
1236 CONST REGISTER_TABLE ROMDATA *F15UnknownRegisterTables[] =
1238 #if BASE_FAMILY_PCI == TRUE
1239 &F15PciRegisterTable,
1241 #if BASE_FAMILY_MSR == TRUE
1242 &F15MsrRegisterTable,
1249 #if USES_REGISTER_TABLES == TRUE
1250 CONST TABLE_ENTRY_TYPE_DESCRIPTOR ROMDATA F15UnknownTableEntryTypeDescriptors[] =
1252 {MsrRegister, SetRegisterForMsrEntry},
1253 {PciRegister, SetRegisterForPciEntry},
1254 {FamSpecificWorkaround, SetRegisterForFamSpecificWorkaroundEntry},
1255 {HtPhyRegister, SetRegisterForHtPhyEntry},
1256 {HtPhyRangeRegister, SetRegisterForHtPhyRangeEntry},
1257 {DeemphasisRegister, SetRegisterForDeemphasisEntry},
1258 {ProfileFixup, SetRegisterForPerformanceProfileEntry},
1259 {HtHostPciRegister, SetRegisterForHtHostEntry},
1260 {HtHostPerfPciRegister, SetRegisterForHtHostPerfEntry},
1261 {HtTokenPciRegister, (PF_DO_TABLE_ENTRY)CommonVoid},
1262 {CoreCountsPciRegister, SetRegisterForCoreCountsPerformanceEntry},
1263 {ProcCountsPciRegister, SetRegisterForProcessorCountsEntry},
1264 {CompUnitCountsPciRegister, SetRegisterForComputeUnitCountsEntry},
1265 {HtFeatPciRegister, SetRegisterForHtFeaturePciEntry},
1266 {CompUnitCountsMsr, SetMsrForComputeUnitCountsEntry},
1268 {TableEntryTypeMax, (PF_DO_TABLE_ENTRY)CommonVoid}
1273 CONST CPU_SPECIFIC_SERVICES ROMDATA cpuF15UnknownServices =
1276 #if DISABLE_PSTATE == TRUE
1279 (PF_CPU_DISABLE_PSTATE) CommonAssert,
1281 #if TRANSITION_PSTATE == TRUE
1282 F15TransitionPstate,
1284 (PF_CPU_TRANSITION_PSTATE) CommonAssert,
1286 #if PROC_IDD_MAX == TRUE
1287 (PF_CPU_GET_IDD_MAX) CommonReturnFalse,
1289 (PF_CPU_GET_IDD_MAX) CommonAssert,
1291 #if GET_TSC_RATE == TRUE
1294 (PF_CPU_GET_TSC_RATE) CommonAssert,
1296 #if GET_NB_FREQ == TRUE
1297 (PF_CPU_GET_NB_FREQ) CommonAssert,
1299 (PF_CPU_GET_NB_FREQ) CommonAssert,
1301 #if GET_NB_FREQ == TRUE
1302 (PF_CPU_GET_MIN_MAX_NB_FREQ) CommonAssert,
1304 (PF_CPU_GET_MIN_MAX_NB_FREQ) CommonAssert,
1306 #if GET_NB_FREQ == TRUE
1307 (PF_CPU_GET_NB_PSTATE_INFO) CommonAssert,
1309 (PF_CPU_GET_NB_PSTATE_INFO) CommonAssert,
1311 #if IS_NBCOF_INIT_NEEDED == TRUE
1312 (PF_CPU_IS_NBCOF_INIT_NEEDED) CommonReturnFalse,
1314 (PF_CPU_IS_NBCOF_INIT_NEEDED) CommonAssert,
1316 #if GET_NB_IDD_MAX == TRUE
1317 (PF_CPU_GET_NB_IDD_MAX) CommonAssert,
1319 (PF_CPU_GET_NB_IDD_MAX) CommonAssert,
1321 #if AP_INITIAL_LAUNCH == TRUE
1324 (PF_CPU_AP_INITIAL_LAUNCH) CommonAssert,
1326 #if (BRAND_STRING1 == TRUE) || (BRAND_STRING2 == TRUE)
1327 (PF_CPU_NUMBER_OF_PHYSICAL_CORES) CommonVoid,
1329 (PF_CPU_NUMBER_OF_PHYSICAL_CORES) CommonAssert,
1331 #if GET_AP_MAILBOX_FROM_HW == TRUE
1332 (PF_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE) CommonAssert,
1334 (PF_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE) CommonAssert,
1336 #if SET_AP_CORE_NUMBER == TRUE
1337 (PF_CPU_SET_AP_CORE_NUMBER) CommonAssert,
1339 (PF_CPU_SET_AP_CORE_NUMBER) CommonAssert,
1341 #if GET_AP_CORE_NUMBER == TRUE
1342 (PF_CPU_GET_AP_CORE_NUMBER) CommonAssert,
1344 (PF_CPU_GET_AP_CORE_NUMBER) CommonAssert,
1346 #if TRANSFER_AP_CORE_NUMBER == TRUE
1347 (PF_CPU_TRANSFER_AP_CORE_NUMBER) CommonAssert,
1349 (PF_CPU_TRANSFER_AP_CORE_NUMBER) CommonAssert,
1351 #if ID_POSITION_INITIAL_APICID == TRUE
1352 F15CpuAmdCoreIdPositionInInitialApicId,
1354 (PF_CORE_ID_POSITION_IN_INITIAL_APIC_ID) CommonAssert,
1356 #if SAVE_FEATURES == TRUE
1358 (PF_CPU_SAVE_FEATURES) CommonVoid,
1360 (PF_CPU_SAVE_FEATURES) CommonAssert,
1362 #if WRITE_FEATURES == TRUE
1363 // F15WriteFeatures,
1364 (PF_CPU_WRITE_FEATURES) CommonVoid,
1366 (PF_CPU_WRITE_FEATURES) CommonAssert,
1368 #if SET_WARM_RESET_FLAG == TRUE
1369 F15SetAgesaWarmResetFlag,
1371 (PF_CPU_SET_WARM_RESET_FLAG) CommonAssert,
1373 #if GET_WARM_RESET_FLAG == TRUE
1374 F15GetAgesaWarmResetFlag,
1376 (PF_CPU_GET_WARM_RESET_FLAG) CommonAssert,
1378 #if BRAND_STRING1 == TRUE
1379 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
1381 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1383 #if BRAND_STRING2 == TRUE
1384 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
1386 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1388 #if GET_PATCHES == TRUE
1391 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1393 #if GET_PATCHES_EQUIVALENCE_TABLE == TRUE
1396 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1398 #if GET_CACHE_INFO == TRUE
1399 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonVoid,
1401 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1403 #if GET_SYSTEM_PM_TABLE == TRUE
1406 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1408 #if GET_WHEA_INIT == TRUE
1411 (PF_CPU_GET_FAMILY_SPECIFIC_ARRAY) CommonAssert,
1413 #if GET_PLATFORM_TYPE_SPECIFIC_INFO == TRUE
1414 (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) CommonReturnAgesaSuccess,
1416 (PF_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO) CommonAssert,
1418 #if IS_NB_PSTATE_ENABLED == TRUE
1419 F15IsNbPstateEnabled,
1421 (PF_IS_NB_PSTATE_ENABLED) CommonAssert,
1423 #if (BASE_FAMILY_HT_PCI == TRUE)
1424 F15NextLinkHasHtPhyFeats,
1426 (PF_NEXT_LINK_HAS_HTFPY_FEATS) CommonReturnFalse,
1428 #if (BASE_FAMILY_HT_PCI == TRUE)
1429 F15SetHtPhyRegister,
1431 (PF_SET_HT_PHY_REGISTER) CommonVoid,
1433 #if BASE_FAMILY_PCI == TRUE
1434 F15GetNextHtLinkFeatures,
1436 (PF_GET_NEXT_HT_LINK_FEATURES) CommonAssert,
1438 #if USES_REGISTER_TABLES == TRUE
1439 (REGISTER_TABLE **) F15UnknownRegisterTables,
1443 #if USES_REGISTER_TABLES == TRUE
1444 (TABLE_ENTRY_TYPE_DESCRIPTOR *) F15UnknownTableEntryTypeDescriptors,
1451 #if AGESA_ENTRY_INIT_EARLY == TRUE
1452 (PF_GET_EARLY_INIT_TABLE) CommonVoid
1454 (PF_GET_EARLY_INIT_TABLE) CommonVoid
1458 // Family 15h maximum base address is 48 bits. Limit BLDCFG to 48 bits, if appropriate.
1459 #if (FAMILY_MMIO_BASE_MASK < 0xFFFF000000000000ull)
1460 #undef FAMILY_MMIO_BASE_MASK
1461 #define FAMILY_MMIO_BASE_MASK (0xFFFF000000000000ull)
1465 #undef OPT_F15_ID_TABLE
1466 #define OPT_F15_ID_TABLE {0x15, {AMD_FAMILY_15, AMD_F15_UNKNOWN}, F15LogicalIdTable, (sizeof (F15LogicalIdTable) / sizeof (F15LogicalIdTable[0]))},
1467 #define OPT_F15_UNKNOWN_CPU {AMD_FAMILY_15, &cpuF15UnknownServices},
1469 #undef OPT_F15_TABLE
1470 #define OPT_F15_TABLE OPT_F15_OR_CPU OPT_F15_TN_CPU OPT_F15_KM_CPU OPT_F15_UNKNOWN_CPU
1473 #if OPTION_G34_SOCKET_SUPPORT == TRUE
1474 #define F15_G34_BRANDSTRING1 NULL,
1475 #define F15_G34_BRANDSTRING2 NULL,
1477 #define F15_G34_BRANDSTRING1
1478 #define F15_G34_BRANDSTRING2
1480 #if OPTION_C32_SOCKET_SUPPORT == TRUE
1481 #define F15_C32_BRANDSTRING1 NULL,
1482 #define F15_C32_BRANDSTRING2 NULL,
1484 #define F15_C32_BRANDSTRING1
1485 #define F15_C32_BRANDSTRING2
1487 #if OPTION_AM3_SOCKET_SUPPORT == TRUE
1488 #define F15_AM3_BRANDSTRING1 NULL,
1489 #define F15_AM3_BRANDSTRING2 NULL,
1491 #define F15_AM3_BRANDSTRING1
1492 #define F15_AM3_BRANDSTRING2
1494 #if OPTION_FS1_SOCKET_SUPPORT == TRUE
1495 #define F15_FS1_BRANDSTRING1 NULL,
1496 #define F15_FS1_BRANDSTRING2 NULL,
1498 #define F15_FS1_BRANDSTRING1
1499 #define F15_FS1_BRANDSTRING2
1501 #if OPTION_FM2_SOCKET_SUPPORT == TRUE
1502 #define F15_FM2_BRANDSTRING1 NULL,
1503 #define F15_FM2_BRANDSTRING2 NULL,
1505 #define F15_FM2_BRANDSTRING1
1506 #define F15_FM2_BRANDSTRING2
1508 #if OPTION_FP2_SOCKET_SUPPORT == TRUE
1509 #define F15_FP2_BRANDSTRING1 NULL,
1510 #define F15_FP2_BRANDSTRING2 NULL,
1512 #define F15_FP2_BRANDSTRING1
1513 #define F15_FP2_BRANDSTRING2
1515 #if OPTION_G2012_SOCKET_SUPPORT == TRUE
1516 #define F15_G2012_BRANDSTRING1 NULL,
1517 #define F15_G2012_BRANDSTRING2 NULL,
1519 #define F15_G2012_BRANDSTRING1
1520 #define F15_G2012_BRANDSTRING2
1522 #if OPTION_C2012_SOCKET_SUPPORT == TRUE
1523 #define F15_C2012_BRANDSTRING1 NULL,
1524 #define F15_C2012_BRANDSTRING2 NULL,
1526 #define F15_C2012_BRANDSTRING1
1527 #define F15_C2012_BRANDSTRING2
1531 #if BRAND_STRING1 == TRUE
1532 CONST CPU_BRAND_TABLE ROMDATA *F15BrandIdString1Tables[] =
1534 F15_G34_BRANDSTRING1
1535 F15_C32_BRANDSTRING1
1536 F15_AM3_BRANDSTRING1
1537 F15_FS1_BRANDSTRING1
1538 F15_FM2_BRANDSTRING1
1539 F15_FP2_BRANDSTRING1
1540 F15_G2012_BRANDSTRING1
1541 F15_C2012_BRANDSTRING1
1544 CONST UINT8 F15BrandIdString1TableCount = (sizeof (F15BrandIdString1Tables) / sizeof (F15BrandIdString1Tables[0]));
1547 #if BRAND_STRING2 == TRUE
1548 CONST CPU_BRAND_TABLE ROMDATA *F15BrandIdString2Tables[] =
1550 F15_G34_BRANDSTRING2
1551 F15_C32_BRANDSTRING2
1552 F15_AM3_BRANDSTRING2
1553 F15_FS1_BRANDSTRING2
1554 F15_FM2_BRANDSTRING2
1555 F15_FP2_BRANDSTRING2
1556 F15_G2012_BRANDSTRING2
1557 F15_C2012_BRANDSTRING2
1560 CONST UINT8 F15BrandIdString2TableCount = (sizeof (F15BrandIdString2Tables) / sizeof (F15BrandIdString2Tables[0]));
1563 CONST PF_CPU_GET_SUBFAMILY_ID_ARRAY ROMDATA F15LogicalIdTable[] =
1570 #endif // _OPTION_FAMILY_15H_INSTALL_H_