<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>