Hi,
I want to run a RTOS on all cores of a iMX93. Is that possible?
On the Zephyr website I see there is a project to run Zephyr on the M33 core of the FRDM-IMX93 board. And there is also a project to run Zephyr on a A55 core.
But can I run them both? And can I run a separate Zephyr project on both A55 processors?
How does it work with the initialization of the chip. Like the initialization of the clock and memory controller? Who will do that?
If not possible, can I run a RTOS on the M33 core using MCUXPresso, which may then initialize the chip? And use Zephyr for both the A55 cores?
What is the way to get a RTOS running on all cores?
Hi @simmania
For two zephyr projects running on 2x A55, this is not supported. The supported framework is A55 running Linux -->Jailhouse --> other A55 running zephyr, so Jailhouse should manage the hardware isolation.
If not possible, can I run a RTOS on the M33 core using MCUXPresso, which may then initialize the chip? And use Zephyr for both the A55 cores?
--> The i.MX93 supports low power boot which kick up M33 from bootrom. To achieve your goal, it would require rewriting too much of the SDK's code..The core issue is that who initialize DDR. Based on the documentation, retaining U-Boot is the optimal choice, as it enables U-Boot to load Zephyr for both the M33 and A55 processors simultaneously.
https://docs.zephyrproject.org/latest/boards/nxp/imx93_evk/doc/index.html
Best Regards,
Zhiming
So a NXP employee says that it is possible using harpoon.
And the NXP TechSupports says that it is not possible.
Very confusing.
Both of the A core and mcore in imx93 support zephyr release, you could go to our zephyr landing page to get the MPU Zephyr use guide, if you wan tot run zephyr on both A core and m core at the same time , you could look for the harpoon release from NXP
https://www.nxp.com/design/design-center/software/embedded-software/zephyr-os-for-edge-connected-dev...
@simmania you could run harpoon on one of A core, another Acore run Zephyr, mcore run zephyr, otherwise you could run native zephyr on A core and use bootrom running mcore zephyr
please refer to Program flash.bin to SD/eMMC with UUU — MCUXpresso SDK Documentation
and copy zephyr.bin to m33_image.bin under imx-mkimage/i.MX9 in step 4 to create flash bin
Get the boot images and the imx-mkimage source repository from corresponding Linux BSP release. The boot images required to be put into imx-mkimage/i.MX9 are:
- u-boot-imx93evk.bin-sd (rename to u-boot.bin)
- u-boot-spl.bin-imx93evk-sd (rename to u-boot-spl.bin)
- bl31-imx93.bin (rename to bl31.bin)
- mx93a0-ahab-container.img
- lpddr4_dmem_1d_v202201.bin
- lpddr4_dmem_2d_v202201.bin
- lpddr4_imem_1d_v202201.bin
- lpddr4_imem_2d_v202201.bin
In the Harpoon documentation I found this:
Harpoon provides an environment for developing real-time demanding applications on an RTOS running on one (or several) Cortex-A core(s) in parallel of a Linux distribution, leveraging the 64-bit Arm architecture for higher performance.
So there is still Linux needed on some cores. So it seems running Zephyr on all cores of a iMX93 is not possible.
A core user guide is here
UG10199: NXP MPU Cortex-A Core Zephyr User Guide | NXP Semiconductors
in Zephyr webpage has already mention 93 A core and mcore supported
i.MX93 EVK — Zephyr Project Documentation
harpoon user guide
Tanks for the answer.
But we are not developing with iMX93 yet and for us the answer is still not clear.
We are in the process of selecting hardware for a new project. The only thing we need to know now is if it is possible to run Zephyr on all cores without the need of Linux.
Please refer to Real-time Edge Software User Guide chapter 3.3 Flexible Real-time System
Table 30 shows we could run all the possible AMP system on i.MX 93 platform:
And heterogeneous-multicore provides hello world examples to run all these possible AMP system, for example i.MX 93 could build out and Realtime Edge also provides the following prebuild binary images:
Some key technical point to run two Zephyr on each Cortex-A Core on i.MX93:
1. Resource allocation
Refer to chapter 3.3.2.2 Technical Points, use different UART and RAM memory for these two Zephyr instance to avoid resource confliction.
You could build your Zephyr example without using heterogeneous-multicore , but you could refer to heterogeneous-multicore for how to do resource allocation.
2. Booting method
Currently you could use uboot command to boot these two Zephyr install, the first Zephyr use "cpu release" command to boot, then use "go" command to boot, refer to user guide for more details.
And you need to use Real-time Edge repos such as TF-A, U-Boot to support unified Life Management for Cortex-A Core provided in Real-time Edge.
And in next Realtime Edge release (plan to release in July) will provide a new feature "fast boot", with this new feature TF-A will boot these two Zephyr instance with boot time less than one second.
Please feel free to let me know if you need any more help on this, thanks.
The answer is yes, but I can't provide more detail informaion, + @Jiafei_Pan for further question
That is great!
Using Harpoon? But the Harpoon documentation says:
"The system starts on Linux and the Jailhouse hypervisor partitions the hardware to run both Linux and the guest RTOS in parallel."
We want Zephyr to run on all cores without Linux.
Are you talking about running two Zephyr applications at the same time, or one that uses SMP to have both cores available for scheduling?
I would be very interested in the second case but can't get it to work.
@Jiafei_Pan , could you provide any information to enable two Zephyr running on A core and mcore without introduce harpoon. Thank you!