cancel
Showing results for 
Search instead for 
Did you mean: 

Linux on A35 Core-0 and RTOS on Core-1 on STM32MP2

Aiyps
Associate II

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.

1 REPLY 1
Olivier GALLIEN
ST Employee

Hi @Aiyps ,

 

The recommended way to do it is by virtualization, which is not supported on STM32MP25. 

 

Olivier 

Olivier GALLIEN
In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.