PeiSaPolicyUpdatePreMem.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /** @file
  2. Do Platform Stage System Agent initialization.
  3. Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "PeiSaPolicyUpdate.h"
  7. #include <CpuRegs.h>
  8. #include <Library/CpuPlatformLib.h>
  9. #include <Guid/MemoryTypeInformation.h>
  10. #include <Guid/MemoryOverwriteControl.h>
  11. #include <Library/HobLib.h>
  12. #include <PchAccess.h>
  13. #include <SaAccess.h>
  14. #include <Library/CpuMailboxLib.h>
  15. #include <Library/BaseMemoryLib.h>
  16. #include <Library/MemoryAllocationLib.h>
  17. #include <Library/PeiSaPolicyLib.h>
  18. #include <Library/GpioLib.h>
  19. #include <GpioPinsSklH.h>
  20. /**
  21. Performs FSP SA PEI Policy initialization in pre-memory.
  22. @param[in][out] FspmUpd Pointer to FSP UPD Data.
  23. @retval EFI_SUCCESS FSP UPD Data is updated.
  24. @retval EFI_NOT_FOUND Fail to locate required PPI.
  25. @retval Other FSP UPD Data update process fail.
  26. **/
  27. EFI_STATUS
  28. EFIAPI
  29. PeiFspSaPolicyUpdatePreMem (
  30. IN OUT FSPM_UPD *FspmUpd
  31. )
  32. {
  33. VOID *Buffer;
  34. CopyMem((VOID *)(UINTN)FspmUpd->FspmConfig.MemorySpdPtr00, (VOID *)(UINTN)PcdGet32 (PcdMrcSpdData), PcdGet16 (PcdMrcSpdDataSize));
  35. CopyMem((VOID *)(UINTN)FspmUpd->FspmConfig.MemorySpdPtr10, (VOID *)(UINTN)PcdGet32 (PcdMrcSpdData), PcdGet16 (PcdMrcSpdDataSize));
  36. DEBUG((DEBUG_INFO, "Updating Dq Byte Map and DQS Byte Swizzling Settings...\n"));
  37. Buffer = (VOID *) (UINTN) PcdGet32 (PcdMrcDqByteMap);
  38. if (Buffer) {
  39. CopyMem ((VOID *)FspmUpd->FspmConfig.DqByteMapCh0, Buffer, 12);
  40. CopyMem ((VOID *)FspmUpd->FspmConfig.DqByteMapCh1, (UINT8*) Buffer + 12, 12);
  41. }
  42. Buffer = (VOID *) (UINTN) PcdGet32 (PcdMrcDqsMapCpu2Dram);
  43. if (Buffer) {
  44. CopyMem ((VOID *)FspmUpd->FspmConfig.DqsMapCpu2DramCh0, Buffer, 8);
  45. CopyMem ((VOID *)FspmUpd->FspmConfig.DqsMapCpu2DramCh1, (UINT8*) Buffer + 8, 8);
  46. }
  47. DEBUG((DEBUG_INFO, "Updating Dq Pins Interleaved,Rcomp Resistor & Rcomp Target Settings...\n"));
  48. Buffer = (VOID *) (UINTN) PcdGet32 (PcdMrcRcompResistor);
  49. if (Buffer) {
  50. CopyMem ((VOID *)FspmUpd->FspmConfig.RcompResistor, Buffer, 6);
  51. }
  52. Buffer = (VOID *) (UINTN) PcdGet32 (PcdMrcRcompTarget);
  53. if (Buffer) {
  54. CopyMem ((VOID *)FspmUpd->FspmConfig.RcompTarget, Buffer, 10);
  55. }
  56. return EFI_SUCCESS;
  57. }