diff options
Diffstat (limited to 'src/vendorcode')
-rw-r--r-- | src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c | 375 |
1 files changed, 0 insertions, 375 deletions
diff --git a/src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c b/src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c index 2989265b42..392dda6b4c 100644 --- a/src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c +++ b/src/vendorcode/amd/pi/00670F00/Proc/Psp/PspBaseLib/PspBaseLib.c @@ -223,115 +223,6 @@ GetPspDirBase ( return (FALSE); } -#if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) -/** - * Get specific PSP Entry information, this routine will auto detect the processor for loading - * correct PSP Directory - * - * - * - * @param[in] EntryType PSP DIR Entry Type - * @param[in,out] EntryAddress Address of the specific PSP Entry - * @param[in,out] EntrySize Size of the specific PSP Entry - */ - -BOOLEAN -PSPEntryInfo ( - IN PSP_DIRECTORY_ENTRY_TYPE EntryType, - IN OUT UINT64 *EntryAddress, - IN OUT UINT32 *EntrySize - ) -{ - PSP_DIRECTORY *PspDir; - UINTN i; - PROGRAM_ID ProgramId; - - PspDir = NULL; - if (GetPspDirBase ((UINT32 *)&PspDir ) != TRUE) { - return FALSE; - } - - ProgramId = PspGetProgarmId (); - //Append BR Program ID - if ((ProgramId == BR_PROGRAM) && - ((EntryType == SMU_OFFCHIP_FW) || - (EntryType == SMU_OFF_CHIP_FW_2) || - (EntryType == AMD_SCS_BINARY))) { - EntryType |= (PSP_ENTRY_BR_PROGRAM_ID << 8); - } - - for (i = 0; i < PspDir->Header.TotalEntries; i++) { - if (PspDir->PspEntry[i].Type == EntryType) { - *EntryAddress = PspDir->PspEntry[i].Location; - *EntrySize = PspDir->PspEntry[i].Size; - return (TRUE); - } - } - - return (FALSE); -} - -BOOLEAN -PspSoftWareFuseInfo ( - IN OUT UINTN *FuseSpiAddress, - IN OUT UINT64 *FuseValue - ) -{ - PSP_DIRECTORY *PspDir; - UINTN i; - - PspDir = NULL; - if (GetPspDirBase ((UINT32 *)&PspDir ) != TRUE) { - return FALSE; - } - - for (i = 0; i < PspDir->Header.TotalEntries; i++) { - if (PspDir->PspEntry[i].Type == AMD_SOFT_FUSE_CHAIN_01) { - *FuseSpiAddress = (UINT32) (UINTN) &PspDir->PspEntry[i].Location; - *FuseValue = PspDir->PspEntry[i].Location; - return (TRUE); - } - } - return (FALSE); -} - -static UINT32 Fletcher32 ( - IN OUT UINT16 *data, - IN UINTN words - ) -{ - UINT32 sum1; - UINT32 sum2; - UINTN tlen; - - sum1 = 0xffff; - sum2 = 0xffff; - - while (words) { - tlen = words >= 359 ? 359 : words; - words -= tlen; - do { - sum2 += sum1 += *data++; - } while (--tlen); - sum1 = (sum1 & 0xffff) + (sum1 >> 16); - sum2 = (sum2 & 0xffff) + (sum2 >> 16); - } - // Second reduction step to reduce sums to 16 bits - sum1 = (sum1 & 0xffff) + (sum1 >> 16); - sum2 = (sum2 & 0xffff) + (sum2 >> 16); - return sum2 << 16 | sum1; -} - -VOID -UpdataPspDirCheckSum ( - IN OUT PSP_DIRECTORY *PspDir - ) -{ - PspDir->Header.Checksum = Fletcher32 ((UINT16 *) &PspDir->Header.TotalEntries, \ - (sizeof (PSP_DIRECTORY_HEADER) - OFFSET_OF (PSP_DIRECTORY_HEADER, TotalEntries) + PspDir->Header.TotalEntries * sizeof (PSP_DIRECTORY_ENTRY)) / 2); -} -#endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ - /** Check if PSP device is present @@ -353,76 +244,6 @@ CheckPspDevicePresent ( return (FALSE); } -#if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) -/** - Check PSP Platform Seucre Enable State - HVB & Secure S3 (Resume vector set to Dram, & core content will restore by uCode) - will be applied if Psp Plaform Secure is enabled - - @retval BOOLEAN 0: PSP Platform Secure Disabled, 1: PSP Platform Secure Enabled - -**/ -BOOLEAN -CheckPspPlatformSecureEnable ( - VOID - ) -{ - UINT32 SecureFuseReg; - PspLibPciWriteConfig ( (UINT32)PCI_CONFIG_SMU_INDIRECT_INDEX, (UINT32)SMU_CC_PSP_FUSES_STATUS); - SecureFuseReg = PspLibPciReadConfig ( (UINT32)PCI_CONFIG_SMU_INDIRECT_DATA); - - if (SecureFuseReg &= PLATFORM_SECURE_BOOT_EN) { - return (TRUE); - } - return (FALSE); -} - -/** - Check PSP Recovery Flag - Target will set Recovery flag if some PSP entry point by PSP directory has been corrupted. - - @retval BOOLEAN 0: Recovery Flag is cleared, 1: Recovery Flag has been set - -**/ -BOOLEAN -CheckPspRecoveryFlag ( - VOID - ) -{ - MBOX_STATUS *MboxStatus; - - //Init PSP MMIO - PspBarInitEarly (); - - GetPspMboxStatus (&MboxStatus); - - return (BOOLEAN) (MboxStatus->Recovery); -} - -/** - Return the PspMbox MMIO location - - - @retval BOOLEAN FALSE: ERROR, TRUE: SUCCEED - -**/ -BOOLEAN -GetPspMboxStatus ( - IN OUT MBOX_STATUS **MboxStatus - ) -{ - UINT32 PspMmio; - - if (GetPspBar3Addr (&PspMmio) == FALSE) { - return (FALSE); - } - - *MboxStatus = (MBOX_STATUS *)( (UINTN)PspMmio + PSP_MAILBOX_BASE + PSP_MAILBOX_STATUS_OFFSET); // PSPMbox base is at offset CP2MSG_28 ie. offset 28*4 = 0x70 - - return (TRUE); -} -#endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ - BOOLEAN PspBarInitEarly () { @@ -458,33 +279,6 @@ PspBarInitEarly () return (TRUE); } -#if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) -/** - Return the PspMMIO MMIO location - - @param[in] PspMmio Pointer to Psp MMIO address - - @retval BOOLEAN 0: Error, 1 Success -**/ -BOOLEAN -GetPspBar1Addr ( - IN OUT UINT32 *PspMmio - ) -{ - if (CheckPspDevicePresent () == FALSE) { - return (FALSE); - } - - *PspMmio = PspLibPciReadPspConfig (PSP_PCI_BAR1_REG); - - if ((*PspMmio) == 0xffffffff) { - return (FALSE); - } - - return (TRUE); -} -#endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ - /** Return the PspMMIO MMIO location @@ -519,172 +313,3 @@ GetPspBar3Addr ( return (TRUE); } -#if IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) -/** - * Acquire the Mutex for access PSP,X86 co-accessed register - * Call this routine before access SMIx98 & SMIxA8 - * - */ -VOID -AcquirePspSmiRegMutex ( - VOID - ) -{ - UINT32 PspBarAddr; - UINT32 MutexReg0; - UINT32 MutexReg1; - - PspBarAddr = 0; - if (GetPspBar3Addr (&PspBarAddr)) { - MutexReg0 = PspBarAddr + PSP_MUTEX_REG0_OFFSET; - MutexReg1 = PspBarAddr + PSP_MUTEX_REG1_OFFSET; - *(volatile UINT32*)(UINTN)(MutexReg0) |= BIT0; - *(volatile UINT32*)(UINTN)(MutexReg1) |= BIT0; - //Wait till PSP FW release the mutex - while ((*(volatile UINT32*)(UINTN)(MutexReg0)& BIT1) && (*(volatile UINT32*)(UINTN)(MutexReg1) & BIT0)) { - ; - } - } -} -/** - * Release the Mutex for access PSP,X86 co-accessed register - * Call this routine after access SMIx98 & SMIxA8 - * - */ -VOID -ReleasePspSmiRegMutex ( - VOID - ) -{ - UINT32 PspBarAddr; - UINT32 MutexReg0; - - PspBarAddr = 0; - if (GetPspBar3Addr (&PspBarAddr)) { - MutexReg0 = PspBarAddr + PSP_MUTEX_REG0_OFFSET; - *(volatile UINT32*)(UINTN)(MutexReg0) &= ~BIT0; - } -} - -/*---------------------------------------------------------------------------------------*/ -/** - * Returns the access width mask for the processor - * - * - * @param[in] AccessWidth Access width - * @retval Width in number of bytes - */ - - -UINT8 -static PspLibAccessWidth ( - IN ACCESS_WIDTH AccessWidth - ) -{ - UINT8 Width; - - switch (AccessWidth) { - case AccessWidth8: - case AccessS3SaveWidth8: - Width = 1; - break; - case AccessWidth16: - case AccessS3SaveWidth16: - Width = 2; - break; - case AccessWidth32: - case AccessS3SaveWidth32: - Width = 4; - break; - case AccessWidth64: - case AccessS3SaveWidth64: - Width = 8; - break; - default: - Width = 0; - } - return Width; -} - -/*----------------------------------------------------------------------------------------*/ -/** - * Read GNB indirect registers - * - * - * - * @param[in] Address PCI address of indirect register - * @param[in] IndirectAddress Offset of indirect register - * @param[in] Width Width - * @param[out] Value Pointer to value - */ -VOID -PspLibPciIndirectRead ( - IN PCI_ADDR Address, - IN UINT32 IndirectAddress, - IN ACCESS_WIDTH Width, - OUT VOID *Value - ) -{ - UINT32 IndexOffset; - - IndexOffset = PspLibAccessWidth (Width); - LibAmdPciWrite (Width, Address, &IndirectAddress, NULL); - Address.AddressValue += IndexOffset; - LibAmdPciRead (Width, Address, Value, NULL); -} - -/*----------------------------------------------------------------------------------------*/ -/** - * Write GNB indirect registers - * - * - * - * @param[in] Address PCI address of indirect register - * @param[in] IndirectAddress Offset of indirect register - * @param[in] Width Width - * @param[in] Value Pointer to value - */ -VOID -PspLibPciIndirectWrite ( - IN PCI_ADDR Address, - IN UINT32 IndirectAddress, - IN ACCESS_WIDTH Width, - IN VOID *Value - ) -{ - UINT32 IndexOffset; - - IndexOffset = PspLibAccessWidth (Width); - LibAmdPciWrite (Width, Address, &IndirectAddress, NULL); - Address.AddressValue += IndexOffset; - LibAmdPciWrite (Width, Address, Value, NULL); -} - -BOOLEAN -IsS3Resume ( - ) -{ - UINT16 AcpiPm1CntBlk; - UINT16 SleepType; - UINT8 PmioAddr; - - AcpiPm1CntBlk = 0; - //Get AcpiPm1CntBlk address - //PMIO register can only allow 8bits access - PmioAddr = PMIO_REG62; - LibAmdIoWrite (AccessWidth8, PMIO_INDEX_PORT, &PmioAddr, NULL); - LibAmdIoRead (AccessWidth8, PMIO_DATA_PORT, &AcpiPm1CntBlk, NULL); - - PmioAddr++; - LibAmdIoWrite (AccessWidth8, PMIO_INDEX_PORT, &PmioAddr, NULL); - LibAmdIoRead (AccessWidth8, PMIO_DATA_PORT, ((UINT8 *) &AcpiPm1CntBlk) + 1, NULL); - - //Get Sleep type - LibAmdIoRead (AccessWidth16, AcpiPm1CntBlk, &SleepType, NULL); - SleepType = SleepType & 0x1C00; - SleepType = ((SleepType >> 10) & 7); - - return ((SleepType == 3) ? TRUE : FALSE); -} -#endif /* IS_ENABLED(CONFIG_VENDORCODE_FULL_SUPPORT) */ - |