vendorcode/amd/pi/00670F00/Lib/AmdLib.c: Remove VENDORCODE_FULL_SUPPORT
Remove VENDORCODE_FULL_SUPPORT from file above mentioned file, in preparation to full removal of VENDORCODE_FULL_SUPPORT functions. BUG=b:112578491 TEST=none, VENDORCODE_FULL_SUPPORT already not used. Change-Id: Ic23dcf245b2cee24f7363ca3bb9918eb2f11179c Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com> Reviewed-on: https://review.coreboot.org/28091 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
		
				
					committed by
					
						 Martin Roth
						Martin Roth
					
				
			
			
				
	
			
			
			
						parent
						
							1d0de7874d
						
					
				
				
					commit
					c1cefba150
				
			| @@ -61,18 +61,6 @@ GetPciMmioAddress ( | ||||
|   IN       AMD_CONFIG_PARAMS *StdHeader | ||||
|   ); | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| VOID | ||||
| STATIC | ||||
| LibAmdGetDataFromPtr ( | ||||
|   IN       ACCESS_WIDTH AccessWidth, | ||||
|   IN       CONST VOID   *Data, | ||||
|   IN       CONST VOID   *DataMask, | ||||
|      OUT   UINT32       *TemData, | ||||
|      OUT   UINT32       *TempDataMask | ||||
|   ); | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
|  | ||||
| VOID | ||||
| IdsOutPort ( | ||||
|   IN       UINT32 Addr, | ||||
| @@ -277,123 +265,6 @@ Write64Mem32 ( | ||||
|   } | ||||
| } | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| LibAmdReadCpuReg ( | ||||
|   IN       UINT8 RegNum, | ||||
|      OUT   UINT32 *Value | ||||
|   ) | ||||
| { | ||||
|     *Value = 0; | ||||
|     switch (RegNum){ | ||||
|     case CR4_REG: | ||||
|       *Value = __readcr4 (); | ||||
|       break; | ||||
|     case DR0_REG: | ||||
|       *Value = __readdr (0); | ||||
|       break; | ||||
|     case DR1_REG: | ||||
|       *Value = __readdr (1); | ||||
|       break; | ||||
|     case DR2_REG: | ||||
|       *Value = __readdr (2); | ||||
|       break; | ||||
|     case DR3_REG: | ||||
|       *Value = __readdr (3); | ||||
|       break; | ||||
|     case DR7_REG: | ||||
|       *Value = __readdr (7); | ||||
|       break; | ||||
|     default: | ||||
|       *Value = -1; | ||||
|       break; | ||||
|   } | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| LibAmdWriteCpuReg ( | ||||
|   IN       UINT8 RegNum, | ||||
|   IN       UINT32 Value | ||||
|   ) | ||||
| { | ||||
|    switch (RegNum){ | ||||
|     case CR4_REG: | ||||
|       __writecr4 (Value); | ||||
|       break; | ||||
|     case DR0_REG: | ||||
|       __writedr (0, Value); | ||||
|       break; | ||||
|     case DR1_REG: | ||||
|       __writedr (1, Value); | ||||
|       break; | ||||
|     case DR2_REG: | ||||
|       __writedr (2, Value); | ||||
|       break; | ||||
|     case DR3_REG: | ||||
|       __writedr (3, Value); | ||||
|       break; | ||||
|     case DR7_REG: | ||||
|       __writedr (7, Value); | ||||
|       break; | ||||
|     default: | ||||
|       break; | ||||
|   } | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| LibAmdWriteBackInvalidateCache ( | ||||
|   void | ||||
|   ) | ||||
| { | ||||
|   __wbinvd (); | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| LibAmdHDTBreakPoint ( | ||||
|   void | ||||
|   ) | ||||
| { | ||||
|   __writemsr (0xC001100A, __readmsr (0xC001100A) | 1); | ||||
|   __debugbreak (); // do you really need icebp? If so, go back to asm code | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| UINT8 | ||||
| LibAmdBitScanForward ( | ||||
|   IN       UINT32 value | ||||
|   ) | ||||
| { | ||||
|   UINTN Index; | ||||
|   for (Index = 0; Index < 32; Index++){ | ||||
|     if (value & (1 << Index)) break; | ||||
|   } | ||||
|   return (UINT8) Index; | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| UINT8 | ||||
| LibAmdBitScanReverse ( | ||||
|   IN       UINT32 value | ||||
| ) | ||||
| { | ||||
|   uint8_t bit = 31; | ||||
|   do { | ||||
|     if (value & (1 << 31)) | ||||
|       return bit; | ||||
|  | ||||
|     value <<= 1; | ||||
|     bit--; | ||||
|  | ||||
|   } while (value != 0); | ||||
|  | ||||
|   return 0xFF; /* Error code indicating no bit found */ | ||||
| } | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| LibAmdMsrRead ( | ||||
| @@ -419,93 +290,6 @@ LibAmdMsrWrite ( | ||||
|   __writemsr (MsrAddress, *Value); | ||||
| } | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| AMDLIB_OPTIMIZE | ||||
| void LibAmdCpuidRead ( | ||||
|   IN       UINT32 CpuidFcnAddress, | ||||
|      OUT   CPUID_DATA* Value, | ||||
|   IN OUT   AMD_CONFIG_PARAMS *ConfigPtr | ||||
|   ) | ||||
| { | ||||
|   __cpuid ((int *)Value, CpuidFcnAddress); | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| UINT64 | ||||
| ReadTSC ( | ||||
|   void | ||||
|   ) | ||||
| { | ||||
|   return __rdtsc (); | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| LibAmdSimNowEnterDebugger ( | ||||
|   void | ||||
|   ) | ||||
| { | ||||
|   STATIC CONST UINT8 opcode [] = {0x60,                             // pushad | ||||
|                                    0xBB, 0x02, 0x00, 0x00, 0x00,     // mov ebx, 2 | ||||
|                                    0xB8, 0x0B, 0xD0, 0xCC, 0xBA,     // mov eax, 0xBACCD00B | ||||
|                                    0x0F, 0xA2,                       // cpuid | ||||
|                                    0x61,                             // popad | ||||
|                                    0xC3                              // ret | ||||
|                                  }; | ||||
|   ((VOID (*)(VOID)) (size_t) opcode) (); // call the function | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| IdsOutPort ( | ||||
|   IN       UINT32 Addr, | ||||
|   IN       UINT32 Value, | ||||
|   IN       UINT32 Flag | ||||
|   ) | ||||
| { | ||||
|   __outdword ((UINT16) Addr, Value); | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| StopHere ( | ||||
|   void | ||||
|   ) | ||||
| { | ||||
|   VOLATILE UINTN x = 1; | ||||
|   while (x); | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| LibAmdCLFlush ( | ||||
|   IN       UINT64 Address, | ||||
|   IN       UINT8  Count | ||||
|   ) | ||||
| { | ||||
|   UINT64 hwcrSave; | ||||
|   UINT8  *address32; | ||||
|   UINTN  Index; | ||||
|   address32 = 0; | ||||
|   hwcrSave = SetFsBase (Address); | ||||
|   for (Index = 0; Index < Count; Index++){ | ||||
|     _mm_mfence (); | ||||
|     _mm_clflush_fs (&address32 [Index * 64]); | ||||
|   } | ||||
|   RestoreHwcr (hwcrSave); | ||||
| } | ||||
|  | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| LibAmdFinit( | ||||
|   void | ||||
|   ) | ||||
| { | ||||
| 	/* TODO: finit */ | ||||
| 	__asm__ volatile ("finit"); | ||||
| } | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Read IO port | ||||
| @@ -582,41 +366,6 @@ LibAmdIoWrite ( | ||||
|   } | ||||
| } | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Poll IO register | ||||
|  * | ||||
|  *  Poll register until (RegisterValue & DataMask) ==  Data | ||||
|  * | ||||
|  * @param[in] AccessWidth   Access width | ||||
|  * @param[in] IoAddress     IO address | ||||
|  * @param[in] Data          Data to compare | ||||
|  * @param[in] DataMask      And mask | ||||
|  * @param[in] Delay         Poll for time in 100ns (not supported) | ||||
|  * @param[in] StdHeader     Standard configuration header | ||||
|  * | ||||
|  */ | ||||
| VOID | ||||
| LibAmdIoPoll ( | ||||
|   IN       ACCESS_WIDTH AccessWidth, | ||||
|   IN       UINT16 IoAddress, | ||||
|   IN       CONST VOID *Data, | ||||
|   IN       CONST VOID *DataMask, | ||||
|   IN       UINT64 Delay, | ||||
|   IN OUT   AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   UINT32  TempData; | ||||
|   UINT32  TempMask; | ||||
|   UINT32  Value; | ||||
|   LibAmdGetDataFromPtr (AccessWidth, Data,  DataMask, &TempData, &TempMask); | ||||
|   do { | ||||
|     LibAmdIoRead (AccessWidth, IoAddress, &Value, NULL); | ||||
|   } while (TempData != (Value & TempMask)); | ||||
| } | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Read memory/MMIO | ||||
| @@ -694,41 +443,6 @@ LibAmdMemWrite ( | ||||
|   } | ||||
| } | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Poll Mmio | ||||
|  * | ||||
|  *  Poll register until (RegisterValue & DataMask) ==  Data | ||||
|  * | ||||
|  * @param[in] AccessWidth   Access width | ||||
|  * @param[in] MemAddress    Memory address | ||||
|  * @param[in] Data          Data to compare | ||||
|  * @param[in] DataMask      AND mask | ||||
|  * @param[in] Delay         Poll for time in 100ns (not supported) | ||||
|  * @param[in] StdHeader     Standard configuration header | ||||
|  * | ||||
|  */ | ||||
| VOID | ||||
| LibAmdMemPoll ( | ||||
|   IN       ACCESS_WIDTH AccessWidth, | ||||
|   IN       UINT64 MemAddress, | ||||
|   IN       CONST VOID *Data, | ||||
|   IN       CONST VOID *DataMask, | ||||
|   IN       UINT64 Delay, | ||||
|   IN OUT   AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   UINT32  TempData = 0; | ||||
|   UINT32  TempMask = 0; | ||||
|   UINT32  Value; | ||||
|   LibAmdGetDataFromPtr (AccessWidth, Data,  DataMask, &TempData, &TempMask); | ||||
|   do { | ||||
|     LibAmdMemRead (AccessWidth, MemAddress, &Value, NULL); | ||||
|   } while (TempData != (Value & TempMask)); | ||||
| } | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Read PCI config space | ||||
| @@ -835,41 +549,6 @@ LibAmdPciWrite ( | ||||
|   } | ||||
| } | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Poll PCI config space register | ||||
|  * | ||||
|  *  Poll register until (RegisterValue & DataMask) ==  Data | ||||
|  * | ||||
|  * @param[in] AccessWidth   Access width | ||||
|  * @param[in] PciAddress    Pci address | ||||
|  * @param[in] Data          Data to compare | ||||
|  * @param[in] DataMask      AND mask | ||||
|  * @param[in] Delay         Poll for time in 100ns (not supported) | ||||
|  * @param[in] StdHeader     Standard configuration header | ||||
|  * | ||||
|  */ | ||||
| VOID | ||||
| LibAmdPciPoll ( | ||||
|   IN       ACCESS_WIDTH AccessWidth, | ||||
|   IN       PCI_ADDR PciAddress, | ||||
|   IN       CONST VOID *Data, | ||||
|   IN       CONST VOID *DataMask, | ||||
|   IN       UINT64 Delay, | ||||
|   IN OUT   AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   UINT32  TempData = 0; | ||||
|   UINT32  TempMask = 0; | ||||
|   UINT32  Value; | ||||
|   LibAmdGetDataFromPtr (AccessWidth, Data,  DataMask, &TempData, &TempMask); | ||||
|   do { | ||||
|     LibAmdPciRead (AccessWidth, PciAddress, &Value, NULL); | ||||
|   } while (TempData != (Value & TempMask)); | ||||
| } | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Get MMIO base address for PCI accesses | ||||
| @@ -903,207 +582,6 @@ GetPciMmioAddress ( | ||||
|   return MmioIsEnabled; | ||||
| } | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Read field of PCI config register. | ||||
|  * | ||||
|  * | ||||
|  * | ||||
|  * @param[in]   Address       Pci address  (register must be DWORD aligned) | ||||
|  * @param[in]   Highbit       High bit position of the field in DWORD | ||||
|  * @param[in]   Lowbit        Low bit position of the field in DWORD | ||||
|  * @param[out]  Value         Pointer to data | ||||
|  * @param[in]   StdHeader     Standard configuration header | ||||
|  */ | ||||
| VOID | ||||
| LibAmdPciReadBits ( | ||||
|   IN       PCI_ADDR Address, | ||||
|   IN       UINT8 Highbit, | ||||
|   IN       UINT8 Lowbit, | ||||
|      OUT   UINT32 *Value, | ||||
|   IN       AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   ASSERT (Highbit < 32 && Lowbit < 32 && Highbit >= Lowbit && (Address.AddressValue & 3) == 0); | ||||
|  | ||||
|   LibAmdPciRead (AccessWidth32, Address, Value, NULL); | ||||
|   *Value >>= Lowbit;  // Shift | ||||
|  | ||||
|   // A 1 << 32 == 1 << 0 due to x86 SHL instruction, so skip if that is the case | ||||
|  | ||||
|   if ((Highbit - Lowbit) != 31) { | ||||
|     *Value &= (((UINT32) 1 << (Highbit - Lowbit + 1)) - 1); | ||||
|   } | ||||
| } | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Write field of PCI config register. | ||||
|  * | ||||
|  * | ||||
|  * | ||||
|  * @param[in]   Address       Pci address  (register must be DWORD aligned) | ||||
|  * @param[in]   Highbit       High bit position of the field in DWORD | ||||
|  * @param[in]   Lowbit        Low bit position of the field in DWORD | ||||
|  * @param[in]   Value         Pointer to data | ||||
|  * @param[in]   StdHeader     Standard configuration header | ||||
|  */ | ||||
| VOID | ||||
| LibAmdPciWriteBits ( | ||||
|   IN       PCI_ADDR Address, | ||||
|   IN       UINT8 Highbit, | ||||
|   IN       UINT8 Lowbit, | ||||
|   IN       CONST UINT32 *Value, | ||||
|   IN       AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   UINT32 Temp; | ||||
|   UINT32 Mask; | ||||
|  | ||||
|   ASSERT (Highbit < 32 && Lowbit < 32 && Highbit >= Lowbit && (Address.AddressValue & 3) == 0); | ||||
|  | ||||
|   // A 1<<32 == 1<<0 due to x86 SHL instruction, so skip if that is the case | ||||
|  | ||||
|   if ((Highbit - Lowbit) != 31) { | ||||
|     Mask = (((UINT32) 1 << (Highbit - Lowbit + 1)) - 1); | ||||
|   } else { | ||||
|     Mask = (UINT32) 0xFFFFFFFF; | ||||
|   } | ||||
|  | ||||
|   LibAmdPciRead (AccessWidth32, Address, &Temp, NULL); | ||||
|   Temp &= ~(Mask << Lowbit); | ||||
|   Temp |= (*Value & Mask) << Lowbit; | ||||
|   LibAmdPciWrite (AccessWidth32, Address, &Temp, NULL); | ||||
| } | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Locate next capability pointer | ||||
|  * | ||||
|  *  Given a SBDFO this routine will find the next PCI capabilities list entry. | ||||
|  *  if the end of the list is reached, or if a problem is detected, then ILLEGAL_SBDFO is | ||||
|  *  returned. | ||||
|  *  To start a new search from the head of the list, specify a SBDFO with an offset of zero. | ||||
|  * | ||||
|  * @param[in,out] Address       Pci address | ||||
|  * @param[in]     StdHeader     Standard configuration header | ||||
|  */ | ||||
|  | ||||
| VOID | ||||
| LibAmdPciFindNextCap ( | ||||
|   IN OUT   PCI_ADDR *Address, | ||||
|   IN       AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   PCI_ADDR Base; | ||||
|   UINT32 Offset; | ||||
|   UINT32 Temp; | ||||
|   PCI_ADDR TempAddress; | ||||
|  | ||||
|   ASSERT (Address != NULL); | ||||
|   ASSERT (*(UINT32 *) Address != ILLEGAL_SBDFO); | ||||
|  | ||||
|   Base.AddressValue = Address->AddressValue; | ||||
|   Offset = Base.Address.Register; | ||||
|   Base.Address.Register = 0; | ||||
|  | ||||
|   Address->AddressValue = (UINT32) ILLEGAL_SBDFO; | ||||
|  | ||||
|   // Verify that the SBDFO points to a valid PCI device SANITY CHECK | ||||
|   LibAmdPciRead (AccessWidth32, Base, &Temp, NULL); | ||||
|   if (Temp == 0xFFFFFFFF) { | ||||
|     ASSERT (FALSE); | ||||
|     return; // There is no device at this address | ||||
|   } | ||||
|  | ||||
|   // Verify that the device supports a capability list | ||||
|   TempAddress.AddressValue = Base.AddressValue + 0x04; | ||||
|   LibAmdPciReadBits (TempAddress, 20, 20, &Temp, NULL); | ||||
|   if (Temp == 0) { | ||||
|     return; // This PCI device does not support capability lists | ||||
|   } | ||||
|  | ||||
|   if (Offset != 0) { | ||||
|     // If we are continuing on an existing list | ||||
|     TempAddress.AddressValue = Base.AddressValue + Offset; | ||||
|     LibAmdPciReadBits (TempAddress, 15, 8, &Temp, NULL); | ||||
|   } else { | ||||
|     // We are starting on a new list | ||||
|     TempAddress.AddressValue = Base.AddressValue + 0x34; | ||||
|     LibAmdPciReadBits (TempAddress, 7, 0, &Temp, NULL); | ||||
|   } | ||||
|  | ||||
|   if (Temp == 0) { | ||||
|     return; // We have reached the end of the capabilities list | ||||
|   } | ||||
|  | ||||
|   // Error detection and recovery- The statement below protects against | ||||
|   //   PCI devices with broken PCI capabilities lists.  Detect a pointer | ||||
|   //   that is not uint32 aligned, points into the first 64 reserved DWORDs | ||||
|   //   or points back to itself. | ||||
|   if (((Temp & 3) != 0) || (Temp == Offset) || (Temp < 0x40)) { | ||||
|     ASSERT (FALSE); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   Address->AddressValue = Base.AddressValue + Temp; | ||||
|   return; | ||||
| } | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Set memory with value | ||||
|  * | ||||
|  * | ||||
|  * @param[in,out] Destination   Pointer to memory range | ||||
|  * @param[in]     Value         Value to set memory with | ||||
|  * @param[in]     FillLength    Size of the memory range | ||||
|  * @param[in]     StdHeader     Standard configuration header (Optional) | ||||
|  */ | ||||
| VOID | ||||
| LibAmdMemFill ( | ||||
|   IN       VOID *Destination, | ||||
|   IN       UINT8 Value, | ||||
|   IN       UINTN FillLength, | ||||
|   IN OUT   AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   UINT8 *Dest; | ||||
|   Dest = Destination; | ||||
|   while ((FillLength--) != 0) { | ||||
|     *Dest++ = Value; | ||||
|   } | ||||
| } | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Copy memory | ||||
|  * | ||||
|  * | ||||
|  * @param[in,out] Destination   Pointer to destination buffer | ||||
|  * @param[in]     Source        Pointer to source buffer | ||||
|  * @param[in]     CopyLength    buffer length | ||||
|  * @param[in]     StdHeader     Standard configuration header (Optional) | ||||
|  */ | ||||
| VOID | ||||
| LibAmdMemCopy ( | ||||
|   IN       VOID *Destination, | ||||
|   IN       CONST VOID *Source, | ||||
|   IN       UINTN CopyLength, | ||||
|   IN OUT   AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   UINT8 *Dest; | ||||
|   CONST UINT8 *SourcePtr; | ||||
|   Dest = Destination; | ||||
|   SourcePtr = Source; | ||||
|   while ((CopyLength--) != 0) { | ||||
|     *Dest++ = *SourcePtr++; | ||||
|   } | ||||
| } | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Verify checksum of binary image (B1/B2/B3) | ||||
| @@ -1187,138 +665,6 @@ LibAmdLocateImage ( | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Returns the package type mask for the processor | ||||
|  * | ||||
|  * | ||||
|  * @param[in]     StdHeader     Standard configuration header (Optional) | ||||
|  */ | ||||
|  | ||||
| //  Returns the package type mask for the processor | ||||
| UINT32 | ||||
| LibAmdGetPackageType ( | ||||
|   IN       AMD_CONFIG_PARAMS *StdHeader | ||||
|   ) | ||||
| { | ||||
|   UINT32      ProcessorPackageType; | ||||
|   CPUID_DATA  CpuId; | ||||
|  | ||||
|   LibAmdCpuidRead (0x80000001, &CpuId, NULL); | ||||
|   ProcessorPackageType = (UINT32) (CpuId.EBX_Reg >> 28) & 0xF; // bit 31:28 | ||||
|   return (UINT32) (1 << ProcessorPackageType); | ||||
| } | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
|  | ||||
| #if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Returns the package type mask for the processor | ||||
|  * | ||||
|  * | ||||
|  * @param[in]     AccessWidth     Access width | ||||
|  * @param[in]     Data            data | ||||
|  * @param[in]     DataMask        data | ||||
|  * @param[out]    TemData         typecast data | ||||
|  * @param[out]    TempDataMask    typecast data | ||||
|  */ | ||||
|  | ||||
| VOID | ||||
| STATIC | ||||
| LibAmdGetDataFromPtr ( | ||||
|   IN       ACCESS_WIDTH AccessWidth, | ||||
|   IN       CONST VOID   *Data, | ||||
|   IN       CONST VOID   *DataMask, | ||||
|      OUT   UINT32       *TemData, | ||||
|      OUT   UINT32       *TempDataMask | ||||
|   ) | ||||
| { | ||||
|   switch (AccessWidth) { | ||||
|   case AccessWidth8: | ||||
|   case AccessS3SaveWidth8: | ||||
|     *TemData = (UINT32)*(UINT8 *) Data; | ||||
|     *TempDataMask = (UINT32)*(UINT8 *) DataMask; | ||||
|     break; | ||||
|   case AccessWidth16: | ||||
|   case AccessS3SaveWidth16: | ||||
|     *TemData = (UINT32)*(UINT16 *) Data; | ||||
|     *TempDataMask = (UINT32)*(UINT16 *) DataMask; | ||||
|     break; | ||||
|   case AccessWidth32: | ||||
|   case AccessS3SaveWidth32: | ||||
|     *TemData = *(UINT32 *) Data; | ||||
|     *TempDataMask = *(UINT32 *) DataMask; | ||||
|     break; | ||||
|   default: | ||||
|     IDS_ERROR_TRAP; | ||||
|     break; | ||||
|   } | ||||
| } | ||||
|  | ||||
| /*---------------------------------------------------------------------------------------*/ | ||||
| /** | ||||
|  * Returns the package type mask for the processor | ||||
|  * | ||||
|  * | ||||
|  * @param[in]     AccessWidth     Access width | ||||
|  * @retval        Width in number of bytes | ||||
|  */ | ||||
|  | ||||
| UINT8 | ||||
| LibAmdAccessWidth ( | ||||
|   IN       ACCESS_WIDTH AccessWidth | ||||
|   ) | ||||
| { | ||||
|   UINT8 Width; | ||||
|  | ||||
|   switch (AccessWidth) { | ||||
|   case AccessWidth8: | ||||
|   case AccessS3SaveWidth8: | ||||
|     Width = 1; | ||||
|     break; | ||||
|   case AccessWidth16: | ||||
|   case AccessS3SaveWidth16: | ||||
|     Width = 2; | ||||
|     break; | ||||
|   case AccessWidth32: | ||||
|   case AccessS3SaveWidth32: | ||||
|     Width = 4; | ||||
|     break; | ||||
|   case AccessWidth64: | ||||
|   case AccessS3SaveWidth64: | ||||
|     Width = 8; | ||||
|     break; | ||||
|   default: | ||||
|     Width = 0; | ||||
|     IDS_ERROR_TRAP; | ||||
|     break; | ||||
|   } | ||||
|   return Width; | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| VOID | ||||
| CpuidRead ( | ||||
|   IN        UINT32      CpuidFcnAddress, | ||||
|   OUT       CPUID_DATA  *Value | ||||
|   ) | ||||
| { | ||||
|   __cpuid ((int *)Value, CpuidFcnAddress); | ||||
| } | ||||
|  | ||||
| AMDLIB_OPTIMIZE | ||||
| UINT8 | ||||
| ReadNumberOfCpuCores( | ||||
|   void | ||||
|   ) | ||||
| { | ||||
|   CPUID_DATA  Value; | ||||
|   CpuidRead (0x80000008, &Value); | ||||
|   return   Value.ECX_Reg & 0xff; | ||||
| } | ||||
| #endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ | ||||
|  | ||||
| BOOLEAN | ||||
| IdsErrorStop ( | ||||
|   IN      UINT32 FileCode | ||||
|   | ||||
		Reference in New Issue
	
	Block a user