-
Notifications
You must be signed in to change notification settings - Fork 7.4k
ARM Cortex A Architecture support - ARMv8-A #11172
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
+1 |
@nashif Any plans for the item in V2.x? |
@timork as much as we'd like to support Armv7-A and Armv8-A (i.e. the non-M architectures), we would need individuals or companies with strong interest into having Zephyr ported to those in order for the port to happen, since this being an open source project features are typically added by those that require them. If you know of such company or individual please let us know. |
If we could find the right person/company, we would be willing to sponsor such effort. not knowing the exact effort, how much comes with cmsis, what needs to be done on top.. I've only seen some commercial rtos'es supporting armv8-a, but I guess there should be interest from people using hypervisors like jailhouse, acrn or similar. |
@carlescufi We working on Armv8-A port and can consider to mainline it (Marvell). |
The Cortex-R port got held up for 2 reasons, the 1.14/LTS effort and lack of a SoC/board port. The SoC/board port issue should be resolved by work Linaro has done to support Xilinx Ultra96 board. |
@raveslave can you connecting me on this. |
Do you have everything covered in your work? i.e.
Those are needed to validate the port and make sure it is maintained and kept in sync with the rest of Zephyr. |
@timork are you willing to share the work you guys are doing? |
Yes we plan for: |
Yes, |
just keeping this one warm. anyone (preferably in sweden) that would be interested working on this? |
Hi @timork was just wondering if you had anything to share. |
@timork Hi, I'm working on various improvements to the Cortex-R port at this time and wanted to know how you are handling the following issues on the Cortex-A port (since Cortex-R is very similar to Cortex-A, I would like to make sure that the "improvements" that I am about to make aren't already implemented in the Cortex-A port):
It would be very helpful if you could provide a brief answer to the questions above. |
Hello,
|
@vladimir-podbrezsky @timork Thanks for the prompt response.
Okay. In that case, I will proceed with the task #19979 "Implement Cortex-R floating-point support". This should support Cortex-A too.
Would you mind sharing |
@carlocaione we did not see your PR before and have got a minimal aarch64 port functional on Broadcom SoC with Cortex-A72 with cooperative scheduling. We want to discuss few topics on the arch port.
|
"PendSV" nomenclature does need to be changed- this can be misleading as PendSV is a Cortex-M-specific feature and does not exist in Cortex-A (the only reason Cortex-R kept "pendsv" is that it is trying to share code with Cortex-M). As for using SVC in terms of context switching, it should only be invoked when
While Cortex-A does not support hardware interrupt vectoring, GIC does support indexed interrupts and I think using _sw_isr_table for that is fine. SPI starts only at index 32 and, given that AArch64 is not a memory-constrained environment, it should not be that much of a problem. As for LPI starting at 8192, we should consider implementing segmented sw_isr_table (e.g. first segment covering 0-1023, second segment covering 8192-). But then, 8 * 8192 is only 64KiB and whether that matters in AArch64 is seriously debatable (e.g. page tables would eat up a lot more than that). Also note that, practically speaking, GIC is a mandatory feature in AArch64 (given how tightly integrated GIC is to the ARMv8-A arch, there is no good reason for any SoC vendor to use a different interrupt controller), so the "fake multi-level interrupt controller" or "forward arch interrupt control functions to the SoC layer" scheme could potentially be removed. The only reason Cortex-R port currently uses this scheme is that the ARMv7-R SoC can be/are actually implemented with many different types of interrupt controllers connected to the core VIC port. |
This is really cool, looking forward to your review and comments on my PR then.
While agree that the naming could be misleading using SVC for the context switch also simplifies a bit the code when introducing the preemptive context switching. In latter case the task swapping is performed in the ISR so you can partially reuse the entry/exit code (
Expanding on what @stephanosio said (thank you) one more reason I used
I'm not sure I fully understood this point but I tried to be as agnostic as possible regarding the EL, I'm currently using the same code running in EL3 or EL1 using two different QEMUs. In 9124118 I introduced an option to drop from EL3 to EL1 if needed. |
I need to think on it and get back on trade-offs. May be not an item for the first PR. |
.
Agree. This can be changed later. |
The choice will influence rest of the software stack, boot flow and configurations. may be we should have |
Now |
ARM Cortex A Architecture support is needed for new generation of automotive devices with strong security, reliability, real-time, connectivity (automotive ethernet) requirements.
New Cortex A class devices devices are targeted for these applications (like Cortex A55).
Integration with ARM Trusted Firmware is needed for secure boot, basic system initialization and power management.
The text was updated successfully, but these errors were encountered: