123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /*
- * Copyright (c) 2006-2023, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Email: opensource_embedded@phytium.com.cn
- *
- * Change Logs:
- * Date Author Notes
- * 2022-10-26 huanghe first commit
- *
- */
- #include "rtconfig.h"
- #include <rtthread.h>
- #include "gicv3.h"
- #include "fparameters.h"
- #include "fcpu_info.h"
- #include "phytium_cpu.h"
- #if defined(TARGET_ARMV8_AARCH64)
- /**
- @name: phytium_cpu_id_mapping
- @msg: Map Phytium CPU ID
- @brief: Map the input CPU ID to a new CPU ID based on the type and quantity of CPUs on the target board.
- @param {int} cpu_id Input CPU ID
- @return {int} Mapped CPU ID
- */
- int phytium_cpu_id_mapping(int cpu_id)
- {
- #if defined(TARGET_E2000Q) || defined(TARGET_PHYTIUMPI)
- #if RT_CPUS_NR <= 2
- switch (cpu_id)
- {
- case 0:
- return 2;
- case 1:
- return 3;
- case 2:
- return 0;
- case 3:
- return 1;
- default:
- RT_ASSERT(0);
- return 0;
- break;
- }
- #else
- return (int)cpu_id;
- #endif
- #else
- return (int)cpu_id;
- #endif
- }
- int phytium_cpu_id(void)
- {
- FError ret;
- u32 cpu_id;
- ret = GetCpuId(&cpu_id);
- if (ret != ERR_SUCCESS)
- {
- RT_ASSERT(0);
- }
- return phytium_cpu_id_mapping(cpu_id);
- }
- int rt_hw_cpu_id(void)
- {
- FError ret;
- u32 cpu_id;
- ret = GetCpuId(&cpu_id);
- if (ret != ERR_SUCCESS)
- {
- RT_ASSERT(0);
- }
- return phytium_cpu_id_mapping(cpu_id);
- }
- #else
- int phytium_cpu_id_mapping(int cpu_id)
- {
- #if defined(TARGET_E2000Q) || defined(TARGET_PHYTIUMPI)
- switch (cpu_id)
- {
- case 0:
- return 2;
- case 1:
- return 3;
- case 2:
- return 0;
- case 3:
- return 1;
- default:
- RT_ASSERT(0);
- return 0;
- break;
- }
- #else
- return (int)cpu_id;
- #endif
- }
- int rt_hw_cpu_id(void)
- {
- FError ret;
- u32 cpu_id;
- ret = GetCpuId(&cpu_id);
- if (ret != ERR_SUCCESS)
- {
- RT_ASSERT(0);
- }
- return phytium_cpu_id_mapping(cpu_id);
- }
- rt_uint64_t get_main_cpu_affval(void)
- {
- #if defined(TARGET_E2000Q) || defined(TARGET_PHYTIUMPI)
- return CORE2_AFF;
- #else
- return CORE0_AFF;
- #endif
- }
- extern u32 GetCpuMaskToAffval(u32 *cpu_mask, u32 *cluster_id, u32 *target_list);
- rt_uint32_t arm_gic_cpumask_to_affval(rt_uint32_t *cpu_mask, rt_uint32_t *cluster_id, rt_uint32_t *target_list)
- {
- return GetCpuMaskToAffval(cpu_mask, cluster_id, target_list);
- }
- #ifdef RT_USING_SMP
- void send_core_isg(void)
- {
- for (rt_size_t i = 0; i <= 0xf; i++)
- {
- /* code */
- rt_kprintf("i %x \r\n", i);
- arm_gic_send_affinity_sgi(0, 0, i, 0);
- rt_thread_mdelay(100);
- }
- }
- MSH_CMD_EXPORT(send_core_isg, send_core_isg);
- #endif
- #endif
|