CTA15-A7Helper.asm 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // Copyright (c) 2012-2013, ARM Limited. All rights reserved.
  3. //
  4. // SPDX-License-Identifier: BSD-2-Clause-Patent
  5. //
  6. //
  7. #include <Library/ArmLib.h>
  8. #include <ArmPlatform.h>
  9. INCLUDE AsmMacroIoLib.inc
  10. EXPORT ArmPlatformPeiBootAction
  11. EXPORT ArmPlatformGetCorePosition
  12. EXPORT ArmPlatformIsPrimaryCore
  13. EXPORT ArmPlatformGetPrimaryCoreMpId
  14. PRESERVE8
  15. AREA CTA15A7Helper, CODE, READONLY
  16. ArmPlatformPeiBootAction FUNCTION
  17. bx lr
  18. ENDFUNC
  19. //UINTN
  20. //ArmPlatformGetCorePosition (
  21. // IN UINTN MpId
  22. // );
  23. ArmPlatformGetCorePosition FUNCTION
  24. and r1, r0, #ARM_CORE_MASK
  25. and r0, r0, #ARM_CLUSTER_MASK
  26. add r0, r1, r0, LSR #7
  27. bx lr
  28. ENDFUNC
  29. //UINTN
  30. //ArmPlatformIsPrimaryCore (
  31. // IN UINTN MpId
  32. // );
  33. ArmPlatformIsPrimaryCore FUNCTION
  34. // Extract cpu_id and cluster_id from ARM_SCC_CFGREG48
  35. // with cpu_id[0:3] and cluster_id[4:7]
  36. mov32 r1, ARM_CTA15A7_SCC_CFGREG48
  37. ldr r1, [r1]
  38. lsr r1, #24
  39. // Shift the SCC value to get the cluster ID at the offset #8
  40. lsl r2, r1, #4
  41. and r2, r2, #0xF00
  42. // Keep only the cpu ID from the original SCC
  43. and r1, r1, #0x0F
  44. // Add the Cluster ID to the Cpu ID
  45. orr r1, r1, r2
  46. // Keep the Cluster ID and Core ID from the MPID
  47. mov32 r2, ARM_CLUSTER_MASK :OR: ARM_CORE_MASK
  48. and r0, r0, r2
  49. // Compare mpid and boot cpu from ARM_SCC_CFGREG48
  50. cmp r0, r1
  51. moveq r0, #1
  52. movne r0, #0
  53. bx lr
  54. ENDFUNC
  55. //UINTN
  56. //ArmPlatformGetPrimaryCoreMpId (
  57. // VOID
  58. // );
  59. ArmPlatformGetPrimaryCoreMpId FUNCTION
  60. // Extract cpu_id and cluster_id from ARM_SCC_CFGREG48
  61. // with cpu_id[0:3] and cluster_id[4:7]
  62. mov32 r0, ARM_CTA15A7_SCC_CFGREG48
  63. ldr r0, [r0]
  64. lsr r0, #24
  65. // Shift the SCC value to get the cluster ID at the offset #8
  66. lsl r1, r0, #4
  67. and r1, r1, #0xF00
  68. // Keep only the cpu ID from the original SCC
  69. and r0, r0, #0x0F
  70. // Add the Cluster ID to the Cpu ID
  71. orr r0, r0, r1
  72. bx lr
  73. ENDFUNC
  74. END