Improvements to SMP under the arch64 architecture
zhengxiaojun
17935334 at qq.com
Wed May 8 00:31:35 UTC 2024
Hi, all
The current RTEMS can not run on the multi-core CPUs arranged in
clusters, the current code treat mpidr as processor index,
but when multi-core arranged in cluster, mpidr is 0,0x100,0x200 ...
So a mapping needs to be established between mpidr and processor index.
MPIDR_EL1
+-------+-------+----+----+-------+----+-------+------+-----+
|[63:40]|[39:32]|[31]|[30]|[29:25]|[24]|[23:16]|[15:8]|[7:0]|
+-------+-------+----+----+-------+----+-------+------+-----+
| | Aff3 | | U | UNK | | Aff2 | Aff1 | Aff0|
+-------+-------+----+----+-------+----+-------+------+-----+
For the purpose of multi-core arranged in cluster,there are several
places need to be improved.
1.start.S: calc and setup stack pointer for each core
2.cpu.h:_CPU_SMP_Get_current_processor()
3.bspsmp-arm-psci.c:_CPU_SMP_Start_processor()
4.arm_gicv3.c:arm_gic_irq_processor_count()
5.arm_gicv3.c:bsp_interrupt_raise_on()
I have made it run on a RK3568 board, use an array to map mpidr to
processor index.But the changes may affect other BSPs, I need some
advice on how to reduce the affect and make the changes more generic,
so these changes can be merged into the main version.
Linux get core id from the device tree.
Please feel free to give me your advice.
More information about the devel
mailing list