1 /*
2 * Copyright (c) 2006-2021, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2021-04-29 Carl the first version
9 *
10 */
11
12 #include <rtthread.h>
13 #include "ft2004.h"
14 #include "gicv3.h"
15
get_main_cpu_affval(void)16 rt_uint64_t get_main_cpu_affval(void)
17 {
18 return 0;
19 }
20
arm_gic_cpumask_to_affval(rt_uint32_t * cpu_mask,rt_uint32_t * cluster_id,rt_uint32_t * target_list)21 rt_uint32_t arm_gic_cpumask_to_affval(rt_uint32_t *cpu_mask, rt_uint32_t *cluster_id, rt_uint32_t *target_list)
22 {
23
24 if (*cpu_mask == 0)
25 {
26 return 0;
27 }
28
29 *target_list = 0;
30 *cluster_id = 0;
31
32 if (*cpu_mask & 0x3)
33 {
34 if ((*cpu_mask & 0x3) == 0x3)
35 {
36 *target_list = 3;
37 }
38 else if ((*cpu_mask & 0x1))
39 {
40 *target_list = 1;
41 }
42 else
43 {
44 *target_list = 2;
45 }
46 *cpu_mask &= ~0x3;
47 }
48 else if (*cpu_mask & 0xc)
49 {
50 *cluster_id = 0x100;
51 if ((*cpu_mask & 0xc) == 0xc)
52 {
53 *target_list = 3;
54 }
55 else if ((*cpu_mask & 0x4))
56 {
57 *target_list = 1;
58 }
59 else
60 {
61 *target_list = 2;
62 }
63 *cpu_mask &= ~0xc;
64 }
65 else
66 {
67 *cpu_mask = 0;
68 return 0;
69 }
70
71 return 1;
72 }
73
74 #ifdef RT_USING_SMP
75
send_core_isg(void)76 void send_core_isg(void)
77 {
78 for (rt_size_t i = 0; i <= 0xf; i++)
79 {
80 /* code */
81 rt_kprintf("i %x \r\n", i);
82 arm_gic_send_affinity_sgi(0, 0, i, 0);
83 rt_thread_mdelay(100);
84 }
85 }
86 MSH_CMD_EXPORT(send_core_isg, send_core_isg);
87
88 #endif
89