<p>Richard Spiegel has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/28089">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vendorcode/amd/pi/00670F00/Proc/Psp: Remove VENDORCODE_FULL_SUPPORT<br><br>Remove VENDORCODE_FULL_SUPPORT from file:<br>vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c<br><br>BUG=b:112578491<br>TEST=none, VENDORCODE_FULL_SUPPORT already not used.<br><br>Change-Id: I0d590b175a3cf0426580dc9ee5164b3cedc838e2<br>Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com><br>---<br>M src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c<br>1 file changed, 0 insertions(+), 375 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/89/28089/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c b/src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c</span><br><span>index 2989265..392dda6 100644</span><br><span>--- a/src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c</span><br><span>+++ b/src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c</span><br><span>@@ -223,115 +223,6 @@</span><br><span>   return (FALSE);</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%);">- * Get specific PSP Entry information, this routine will auto detect the processor for loading</span><br><span style="color: hsl(0, 100%, 40%);">- * correct PSP Directory</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] EntryType               PSP DIR Entry Type</span><br><span style="color: hsl(0, 100%, 40%);">- * @param[in,out] EntryAddress        Address of the specific PSP Entry</span><br><span style="color: hsl(0, 100%, 40%);">- * @param[in,out] EntrySize           Size of the specific PSP Entry</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%);">-BOOLEAN</span><br><span style="color: hsl(0, 100%, 40%);">-PSPEntryInfo (</span><br><span style="color: hsl(0, 100%, 40%);">-  IN       PSP_DIRECTORY_ENTRY_TYPE    EntryType,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN OUT   UINT64                      *EntryAddress,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN OUT   UINT32                      *EntrySize</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%);">-  PSP_DIRECTORY         *PspDir;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINTN                 i;</span><br><span style="color: hsl(0, 100%, 40%);">-  PROGRAM_ID                ProgramId;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  PspDir = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-  if (GetPspDirBase ((UINT32 *)&PspDir ) != TRUE) {</span><br><span style="color: hsl(0, 100%, 40%);">-    return FALSE;</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%);">-  ProgramId = PspGetProgarmId ();</span><br><span style="color: hsl(0, 100%, 40%);">-  //Append BR Program ID</span><br><span style="color: hsl(0, 100%, 40%);">-  if ((ProgramId == BR_PROGRAM) &&</span><br><span style="color: hsl(0, 100%, 40%);">-      ((EntryType == SMU_OFFCHIP_FW) ||</span><br><span style="color: hsl(0, 100%, 40%);">-       (EntryType == SMU_OFF_CHIP_FW_2) ||</span><br><span style="color: hsl(0, 100%, 40%);">-       (EntryType == AMD_SCS_BINARY))) {</span><br><span style="color: hsl(0, 100%, 40%);">-    EntryType |= (PSP_ENTRY_BR_PROGRAM_ID << 8);</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%);">-  for (i = 0; i < PspDir->Header.TotalEntries; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-    if (PspDir->PspEntry[i].Type == EntryType) {</span><br><span style="color: hsl(0, 100%, 40%);">-      *EntryAddress = PspDir->PspEntry[i].Location;</span><br><span style="color: hsl(0, 100%, 40%);">-      *EntrySize = PspDir->PspEntry[i].Size;</span><br><span style="color: hsl(0, 100%, 40%);">-      return (TRUE);</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%);">-  return (FALSE);</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%);">-BOOLEAN</span><br><span style="color: hsl(0, 100%, 40%);">-PspSoftWareFuseInfo (</span><br><span style="color: hsl(0, 100%, 40%);">-  IN OUT   UINTN                       *FuseSpiAddress,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN OUT   UINT64                      *FuseValue</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%);">-  PSP_DIRECTORY         *PspDir;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINTN                 i;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  PspDir = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-  if (GetPspDirBase ((UINT32 *)&PspDir ) != TRUE) {</span><br><span style="color: hsl(0, 100%, 40%);">-    return FALSE;</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%);">-  for (i = 0; i < PspDir->Header.TotalEntries; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-    if (PspDir->PspEntry[i].Type == AMD_SOFT_FUSE_CHAIN_01) {</span><br><span style="color: hsl(0, 100%, 40%);">-      *FuseSpiAddress = (UINT32) (UINTN) &PspDir->PspEntry[i].Location;</span><br><span style="color: hsl(0, 100%, 40%);">-      *FuseValue = PspDir->PspEntry[i].Location;</span><br><span style="color: hsl(0, 100%, 40%);">-      return (TRUE);</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 (FALSE);</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 UINT32 Fletcher32 (</span><br><span style="color: hsl(0, 100%, 40%);">-  IN OUT   UINT16  *data,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN       UINTN   words</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 sum1;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINT32 sum2;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINTN tlen;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  sum1 = 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-  sum2 = 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  while (words) {</span><br><span style="color: hsl(0, 100%, 40%);">-    tlen = words >= 359 ? 359 : words;</span><br><span style="color: hsl(0, 100%, 40%);">-    words -= tlen;</span><br><span style="color: hsl(0, 100%, 40%);">-    do {</span><br><span style="color: hsl(0, 100%, 40%);">-      sum2 += sum1 += *data++;</span><br><span style="color: hsl(0, 100%, 40%);">-    } while (--tlen);</span><br><span style="color: hsl(0, 100%, 40%);">-    sum1 = (sum1 & 0xffff) + (sum1 >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-    sum2 = (sum2 & 0xffff) + (sum2 >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-  // Second reduction step to reduce sums to 16 bits</span><br><span style="color: hsl(0, 100%, 40%);">-  sum1 = (sum1 & 0xffff) + (sum1 >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-  sum2 = (sum2 & 0xffff) + (sum2 >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-  return sum2 << 16 | sum1;</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%);">-UpdataPspDirCheckSum (</span><br><span style="color: hsl(0, 100%, 40%);">-  IN OUT   PSP_DIRECTORY         *PspDir</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%);">-    PspDir->Header.Checksum = Fletcher32 ((UINT16 *) &PspDir->Header.TotalEntries, \</span><br><span style="color: hsl(0, 100%, 40%);">-      (sizeof (PSP_DIRECTORY_HEADER) - OFFSET_OF (PSP_DIRECTORY_HEADER, TotalEntries) + PspDir->Header.TotalEntries * sizeof (PSP_DIRECTORY_ENTRY)) / 2);</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>   Check if PSP device is present</span><br><span> </span><br><span>@@ -353,76 +244,6 @@</span><br><span>   return (FALSE);</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%);">-  Check PSP Platform Seucre Enable State</span><br><span style="color: hsl(0, 100%, 40%);">-  HVB & Secure S3 (Resume vector set to Dram, & core content will restore by uCode)</span><br><span style="color: hsl(0, 100%, 40%);">-  will be applied if Psp Plaform Secure is enabled</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  @retval BOOLEAN  0: PSP Platform Secure Disabled, 1: PSP Platform Secure  Enabled</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%);">-BOOLEAN</span><br><span style="color: hsl(0, 100%, 40%);">-CheckPspPlatformSecureEnable (</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%);">-  UINT32 SecureFuseReg;</span><br><span style="color: hsl(0, 100%, 40%);">-  PspLibPciWriteConfig ( (UINT32)PCI_CONFIG_SMU_INDIRECT_INDEX, (UINT32)SMU_CC_PSP_FUSES_STATUS);</span><br><span style="color: hsl(0, 100%, 40%);">-  SecureFuseReg = PspLibPciReadConfig ( (UINT32)PCI_CONFIG_SMU_INDIRECT_DATA);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if (SecureFuseReg &= PLATFORM_SECURE_BOOT_EN) {</span><br><span style="color: hsl(0, 100%, 40%);">-    return (TRUE);</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-  return (FALSE);</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%);">-  Check PSP Recovery Flag</span><br><span style="color: hsl(0, 100%, 40%);">-  Target will set Recovery flag if some PSP entry point by PSP directory has been corrupted.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  @retval BOOLEAN  0: Recovery Flag is cleared, 1: Recovery Flag has been set</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%);">-BOOLEAN</span><br><span style="color: hsl(0, 100%, 40%);">-CheckPspRecoveryFlag (</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%);">-  MBOX_STATUS *MboxStatus;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  //Init PSP MMIO</span><br><span style="color: hsl(0, 100%, 40%);">-  PspBarInitEarly ();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  GetPspMboxStatus (&MboxStatus);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  return (BOOLEAN) (MboxStatus->Recovery);</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%);">-  Return the PspMbox MMIO location</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%);">-  @retval BOOLEAN  FALSE: ERROR, TRUE: SUCCEED</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%);">-BOOLEAN</span><br><span style="color: hsl(0, 100%, 40%);">-GetPspMboxStatus (</span><br><span style="color: hsl(0, 100%, 40%);">-  IN OUT   MBOX_STATUS **MboxStatus</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 PspMmio;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if (GetPspBar3Addr (&PspMmio) == FALSE) {</span><br><span style="color: hsl(0, 100%, 40%);">-    return (FALSE);</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%);">-  *MboxStatus = (MBOX_STATUS *)( (UINTN)PspMmio + PSP_MAILBOX_BASE + PSP_MAILBOX_STATUS_OFFSET);   // PSPMbox base is at offset CP2MSG_28 ie. offset 28*4 = 0x70</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  return (TRUE);</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> PspBarInitEarly ()</span><br><span> {</span><br><span>@@ -458,33 +279,6 @@</span><br><span>   return (TRUE);</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%);">-  Return the PspMMIO MMIO location</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  @param[in] PspMmio Pointer to Psp MMIO address</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  @retval BOOLEAN  0: Error, 1 Success</span><br><span style="color: hsl(0, 100%, 40%);">-**/</span><br><span style="color: hsl(0, 100%, 40%);">-BOOLEAN</span><br><span style="color: hsl(0, 100%, 40%);">-GetPspBar1Addr (</span><br><span style="color: hsl(0, 100%, 40%);">-  IN OUT   UINT32 *PspMmio</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 (CheckPspDevicePresent () == FALSE) {</span><br><span style="color: hsl(0, 100%, 40%);">-    return (FALSE);</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%);">-  *PspMmio = PspLibPciReadPspConfig  (PSP_PCI_BAR1_REG);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if ((*PspMmio) == 0xffffffff) {</span><br><span style="color: hsl(0, 100%, 40%);">-    return (FALSE);</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 (TRUE);</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>   Return the PspMMIO MMIO location</span><br><span> </span><br><span>@@ -519,172 +313,3 @@</span><br><span> </span><br><span>   return (TRUE);</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%);">- * Acquire the Mutex for access PSP,X86 co-accessed register</span><br><span style="color: hsl(0, 100%, 40%);">- * Call this routine before access SMIx98 & SMIxA8</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%);">-AcquirePspSmiRegMutex (</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%);">-  UINT32 PspBarAddr;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINT32 MutexReg0;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINT32 MutexReg1;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  PspBarAddr = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  if (GetPspBar3Addr (&PspBarAddr)) {</span><br><span style="color: hsl(0, 100%, 40%);">-    MutexReg0 = PspBarAddr + PSP_MUTEX_REG0_OFFSET;</span><br><span style="color: hsl(0, 100%, 40%);">-    MutexReg1 = PspBarAddr + PSP_MUTEX_REG1_OFFSET;</span><br><span style="color: hsl(0, 100%, 40%);">-    *(volatile UINT32*)(UINTN)(MutexReg0) |= BIT0;</span><br><span style="color: hsl(0, 100%, 40%);">-    *(volatile UINT32*)(UINTN)(MutexReg1) |= BIT0;</span><br><span style="color: hsl(0, 100%, 40%);">-    //Wait till PSP FW release the mutex</span><br><span style="color: hsl(0, 100%, 40%);">-    while ((*(volatile UINT32*)(UINTN)(MutexReg0)& BIT1) && (*(volatile UINT32*)(UINTN)(MutexReg1) & BIT0)) {</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%);">- * Release the Mutex for access PSP,X86 co-accessed register</span><br><span style="color: hsl(0, 100%, 40%);">- * Call this routine after access SMIx98 & SMIxA8</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%);">-ReleasePspSmiRegMutex (</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%);">-  UINT32 PspBarAddr;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINT32 MutexReg0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  PspBarAddr = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  if (GetPspBar3Addr (&PspBarAddr)) {</span><br><span style="color: hsl(0, 100%, 40%);">-    MutexReg0 = PspBarAddr + PSP_MUTEX_REG0_OFFSET;</span><br><span style="color: hsl(0, 100%, 40%);">-    *(volatile UINT32*)(UINTN)(MutexReg0) &= ~BIT0;</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 access width 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%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-UINT8</span><br><span style="color: hsl(0, 100%, 40%);">-static PspLibAccessWidth (</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%);">-  }</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%);">-/*----------------------------------------------------------------------------------------*/</span><br><span style="color: hsl(0, 100%, 40%);">-/**</span><br><span style="color: hsl(0, 100%, 40%);">- * Read GNB indirect registers</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 of indirect register</span><br><span style="color: hsl(0, 100%, 40%);">- * @param[in] IndirectAddress Offset of indirect register</span><br><span style="color: hsl(0, 100%, 40%);">- * @param[in] Width           Width</span><br><span style="color: hsl(0, 100%, 40%);">- * @param[out] Value           Pointer to value</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%);">-PspLibPciIndirectRead (</span><br><span style="color: hsl(0, 100%, 40%);">-  IN       PCI_ADDR     Address,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN       UINT32       IndirectAddress,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN       ACCESS_WIDTH Width,</span><br><span style="color: hsl(0, 100%, 40%);">-     OUT   VOID         *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%);">-  UINT32  IndexOffset;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  IndexOffset = PspLibAccessWidth (Width);</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdPciWrite (Width, Address, &IndirectAddress, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-  Address.AddressValue += IndexOffset;</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdPciRead (Width, Address, Value, 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%);">- * Write GNB indirect registers</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 of indirect register</span><br><span style="color: hsl(0, 100%, 40%);">- * @param[in] IndirectAddress Offset of indirect register</span><br><span style="color: hsl(0, 100%, 40%);">- * @param[in] Width           Width</span><br><span style="color: hsl(0, 100%, 40%);">- * @param[in] Value           Pointer to value</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%);">-PspLibPciIndirectWrite (</span><br><span style="color: hsl(0, 100%, 40%);">-  IN      PCI_ADDR      Address,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN      UINT32        IndirectAddress,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN      ACCESS_WIDTH  Width,</span><br><span style="color: hsl(0, 100%, 40%);">-  IN      VOID          *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%);">-  UINT32  IndexOffset;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  IndexOffset = PspLibAccessWidth (Width);</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdPciWrite (Width, Address, &IndirectAddress, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-  Address.AddressValue += IndexOffset;</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdPciWrite (Width, Address, Value, 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%);">-BOOLEAN</span><br><span style="color: hsl(0, 100%, 40%);">-IsS3Resume (</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%);">-  UINT16                  AcpiPm1CntBlk;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINT16                  SleepType;</span><br><span style="color: hsl(0, 100%, 40%);">-  UINT8                   PmioAddr;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  AcpiPm1CntBlk = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  //Get AcpiPm1CntBlk address</span><br><span style="color: hsl(0, 100%, 40%);">-  //PMIO register can only allow 8bits access</span><br><span style="color: hsl(0, 100%, 40%);">-  PmioAddr = PMIO_REG62;</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdIoWrite (AccessWidth8, PMIO_INDEX_PORT, &PmioAddr, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdIoRead (AccessWidth8, PMIO_DATA_PORT, &AcpiPm1CntBlk, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  PmioAddr++;</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdIoWrite (AccessWidth8, PMIO_INDEX_PORT, &PmioAddr, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdIoRead (AccessWidth8, PMIO_DATA_PORT, ((UINT8 *) &AcpiPm1CntBlk) + 1, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  //Get Sleep type</span><br><span style="color: hsl(0, 100%, 40%);">-  LibAmdIoRead (AccessWidth16, AcpiPm1CntBlk, &SleepType, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-  SleepType = SleepType & 0x1C00;</span><br><span style="color: hsl(0, 100%, 40%);">-  SleepType = ((SleepType >> 10) & 7);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  return ((SleepType == 3) ? TRUE : FALSE);</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></pre><p>To view, visit <a href="https://review.coreboot.org/28089">change 28089</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/28089"/><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: I0d590b175a3cf0426580dc9ee5164b3cedc838e2 </div>
<div style="display:none"> Gerrit-Change-Number: 28089 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Spiegel <richard.spiegel@silverbackltd.com> </div>