Browse Source

AMP-step3: 添加conifg ARCH_ARM_CORTEX_A55, rt_hw_cpu_id_set 适配A55架构, 添加aarch64 rt_… (#7628)

wangqinglin 2 years ago
parent
commit
194a2efdf4
3 changed files with 23 additions and 0 deletions
  1. 4 0
      libcpu/Kconfig
  2. 3 0
      libcpu/aarch64/common/context_gcc.S
  3. 16 0
      libcpu/aarch64/common/cpu.c

+ 4 - 0
libcpu/Kconfig

@@ -152,6 +152,10 @@ config ARCH_ARM_CORTEX_A9
     bool
     select ARCH_ARM_CORTEX_A
 
+config ARCH_ARM_CORTEX_A55
+    bool
+    select ARCH_ARM_CORTEX_A
+
 config ARCH_ARM_SECURE_MODE
     bool "Running in secure mode [ARM Cortex-A]"
     default n

+ 3 - 0
libcpu/aarch64/common/context_gcc.S

@@ -18,6 +18,9 @@
 .type rt_hw_cpu_id_set, @function
 rt_hw_cpu_id_set:
     mrs x0, mpidr_el1           /* MPIDR_EL1: Multi-Processor Affinity Register */
+#ifdef ARCH_ARM_CORTEX_A55
+    lsr x0, x0, #8
+#endif
     and x0, x0, #15
     msr tpidr_el1, x0
     ret

+ 16 - 0
libcpu/aarch64/common/cpu.c

@@ -374,4 +374,20 @@ rt_weak void rt_hw_cpu_shutdown()
 }
 MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_shutdown, shutdown, shutdown machine);
 
+#ifdef RT_USING_CPU_FFS
+/**
+ * This function finds the first bit set (beginning with the least significant bit)
+ * in value and return the index of that bit.
+ *
+ * Bits are numbered starting at 1 (the least significant bit).  A return value of
+ * zero from any of these functions means that the argument was zero.
+ *
+ * @return return the index of the first bit set. If value is 0, then this function
+ * shall return 0.
+ */
+int __rt_ffs(int value)
+{
+    return __builtin_ffs(value);
+}
+#endif
 /*@}*/