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

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ic23dcf245b2cee24f7363ca3bb9918eb2f11179c </div>
<div style="display:none"> Gerrit-Change-Number: 28091 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Spiegel <richard.spiegel@silverbackltd.com> </div>