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