2024-09-16 01:18 AM - edited 2024-09-16 11:06 AM
Hi,
I am developing Linux/RTOS for STM32MP257F-EV1 with a slight twist.
The STM32MP257F has two A35 cores (Core-0 and Core-1), a M33 Sub-core (Core-3) and a Cortex- M0+.
By default Linux uses A35 Core0 and Core-1(both cores). I want to run Linux on A35 Core0 and RTOS on A35 Core-1.
To achieve this I am setting [nr_cpus=1] in the Kernel command.
This option forces the Kernel to use only Core-0 for execution.
Since Linux uses SDRAM for execution, I am loading my RTOS in SRAM via a debugger.
But the moment the contents of SDRAM are changed, there is an exception/abort on Linux and the following message is displayed:
------------------------------------------------------------------------------------
E/TC:0
E/TC:0 Core data-abort at address 0x7a480050
E/TC:0 esr 0x96000210 ttbr0 0x8213b000 ttbr1 0x00000000 cidr 0x0
E/TC:0 cpu #0 cpsr 0x800003c4
E/TC:0 x0 0000000000000000 x1 0000000000000000
E/TC:0 x2 0000000000008080 x3 0000000000002020
E/TC:0 x4 00000000dededede x5 00000000abababab
E/TC:0 x6 00000000abababab x7 0000000000000005
E/TC:0 x8 0000000059682f00 x9 0000000000000000
E/TC:0 x10 0000000082105d80 x11 0000000000000000
E/TC:0 x12 0000000000000000 x13 0000000000000000
E/TC:0 x14 0000000000000000 x15 0000000000000000
E/TC:0 x16 000000008205a604 x17 0000000000000000
E/TC:0 x18 0000000000000000 x19 0000000000000000
E/TC:0 x20 00000000000000bf x21 0000000000000000
E/TC:0 x22 00000000820a4000 x23 00000000820a4000
E/TC:0 x24 000000007a48000c x25 000000007a48004c
E/TC:0 x26 000000000000007f x27 000000007a480090
E/TC:0 x28 000000000000007f x29 00000000821470a0
E/TC:0 x30 0000000082029650 elr 0000000082029574
E/TC:0 sp_el0 00000000821470a0
E/TC:0
E/TC:0 Core data-abort at address 0x7a480050
E/TC:0 esr 0x96000210 ttbr0 0x8213b000 ttbr1 0x00000000 cidr 0x0
E/TC:0 cpu #0 cpsr 0x800003c4
E/TC:0 x0 0000000000000000 x1 0000000000000000
E/TC:0 x2 0000000008e01090 x3 0000008000000000
E/TC:0 x4 0000000000000030 x5 0000000000000008
E/TC:0 x6 0000000000000010 x7 00000000ffffffe8
E/TC:0 x8 0000000000000006 x9 0000000000000000
E/TC:0 x10 0000000000000010 x11 0000000082145938
E/TC:0 x12 0000000000000000 x13 0000000000000000
E/TC:0 x14 0000000000000000 x15 0000000000000000
E/TC:0 x16 000000008201ee50 x17 0000000000000000
E/TC:0 x18 0000000000000000 x19 0000000000000000
E/TC:0 x20 00000000000000bf x21 0000000000000000
E/TC:0 x22 00000000820a4000 x23 00000000820a4000
E/TC:0 x24 000000007a48000c x25 000000007a48004c
E/TC:0 x26 000000000000007f x27 000000007a480090
E/TC:0 x28 000000000000007f x29 0000000082145bb0
E/TC:0 x30 0000000082004f50 elr 0000000082029574
E/TC:0 sp_el0 0000000082145bb0
E/TC:0 TEE load address @ 0x82000000
E/TC:0 Call stack:
E/TC:0 0x82029574
E/TC:0 Panic '[abort] abort in abort handler (trap CPU)' at /usr/src/debug/optee-os-stm32mp/3.19.0-stm32mp-r2-r0/core/arch/arm/kernel/abort.c:481 <get_fault_type>
E/TC:0 TEE load address @ 0x82000000
E/TC:0 Call stack:
E/TC:0 0x8200831c
E/TC:0 0x82035670
E/TC:0 0x8200775c
E/TC:0 0x82004f4c
------------------------------------------------------------------------------------
I have the following questions:
1. Is this due to the MMU settings or is there some memory monitor that tracks memory changes?
2. Please let me know if there is a guide to run Linux on one core and another OS/application on the other core of the same MPU.
Thank you.
2024-09-20 02:19 AM
Hi @Aiyps ,
The recommended way to do it is by virtualization, which is not supported on STM32MP25.
Olivier