HiKey960.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /** @file
  2. *
  3. * Copyright (c) 2018, Linaro Limited. All rights reserved.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause-Patent
  6. *
  7. **/
  8. #include <Library/ArmPlatformLib.h>
  9. #include <Library/DebugLib.h>
  10. #include <Library/IoLib.h>
  11. #include <Library/PcdLib.h>
  12. #include <Ppi/ArmMpCoreInfo.h>
  13. ARM_CORE_INFO mHiKey960InfoTable[] = {
  14. {
  15. // Cluster 0, Core 0
  16. 0x0, 0x0,
  17. // MP Core MailBox Set/Get/Clear Addresses and Clear Value
  18. (UINT64)0xFFFFFFFF
  19. },
  20. {
  21. // Cluster 0, Core 1
  22. 0x0, 0x1,
  23. // MP Core MailBox Set/Get/Clear Addresses and Clear Value
  24. (UINT64)0xFFFFFFFF
  25. },
  26. {
  27. // Cluster 0, Core 2
  28. 0x0, 0x2,
  29. // MP Core MailBox Set/Get/Clear Addresses and Clear Value
  30. (UINT64)0xFFFFFFFF
  31. },
  32. {
  33. // Cluster 0, Core 3
  34. 0x0, 0x3,
  35. // MP Core MailBox Set/Get/Clear Addresses and Clear Value
  36. (UINT64)0xFFFFFFFF
  37. },
  38. {
  39. // Cluster 1, Core 0
  40. 0x1, 0x0,
  41. // MP Core MailBox Set/Get/Clear Addresses and Clear Value
  42. (UINT64)0xFFFFFFFF
  43. },
  44. {
  45. // Cluster 1, Core 1
  46. 0x1, 0x1,
  47. // MP Core MailBox Set/Get/Clear Addresses and Clear Value
  48. (UINT64)0xFFFFFFFF
  49. },
  50. {
  51. // Cluster 1, Core 2
  52. 0x1, 0x2,
  53. // MP Core MailBox Set/Get/Clear Addresses and Clear Value
  54. (UINT64)0xFFFFFFFF
  55. },
  56. {
  57. // Cluster 1, Core 3
  58. 0x1, 0x3,
  59. // MP Core MailBox Set/Get/Clear Addresses and Clear Value
  60. (UINT64)0xFFFFFFFF
  61. }
  62. };
  63. /**
  64. Return the current Boot Mode
  65. This function returns the boot reason on the platform
  66. @return Return the current Boot Mode of the platform
  67. **/
  68. EFI_BOOT_MODE
  69. ArmPlatformGetBootMode (
  70. VOID
  71. )
  72. {
  73. return BOOT_WITH_FULL_CONFIGURATION;
  74. }
  75. /**
  76. Initialize controllers that must setup in the normal world
  77. This function is called by the ArmPlatformPkg/Pei or ArmPlatformPkg/Pei/PlatformPeim
  78. in the PEI phase.
  79. **/
  80. RETURN_STATUS
  81. ArmPlatformInitialize (
  82. IN UINTN MpId
  83. )
  84. {
  85. return RETURN_SUCCESS;
  86. }
  87. EFI_STATUS
  88. PrePeiCoreGetMpCoreInfo (
  89. OUT UINTN *CoreCount,
  90. OUT ARM_CORE_INFO **ArmCoreTable
  91. )
  92. {
  93. // Only support one cluster
  94. *CoreCount = sizeof(mHiKey960InfoTable) / sizeof(ARM_CORE_INFO);
  95. *ArmCoreTable = mHiKey960InfoTable;
  96. return EFI_SUCCESS;
  97. }
  98. // Needs to be declared in the file. Otherwise gArmMpCoreInfoPpiGuid is undefined in the contect of PrePeiCore
  99. EFI_GUID mArmMpCoreInfoPpiGuid = ARM_MP_CORE_INFO_PPI_GUID;
  100. ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };
  101. EFI_PEI_PPI_DESCRIPTOR gPlatformPpiTable[] = {
  102. {
  103. EFI_PEI_PPI_DESCRIPTOR_PPI,
  104. &mArmMpCoreInfoPpiGuid,
  105. &mMpCoreInfoPpi
  106. }
  107. };
  108. VOID
  109. ArmPlatformGetPlatformPpiList (
  110. OUT UINTN *PpiListSize,
  111. OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
  112. )
  113. {
  114. *PpiListSize = sizeof(gPlatformPpiTable);
  115. *PpiList = gPlatformPpiTable;
  116. }