Dear guys,
I need to route a specific interrupt to my non-root cell (based on
jetson-demo.cell) on a ARM64 device (TegraTX1), and I have the following
questions.
1. I've seen in gic-demo that interrupt 27, that seems to be tied to
ARMv8 CPU internal Timer, even thought this is not reporterd in TegraX1
RFM AFAICS, is available to the non-root cell even without providing any
specific IRQ configuration in the non-root cell configuration
(jetson-demo.c cell). However, if I try to enable a different IRQ, the
system hangs (I would have expected an exception TBH). Is there any
reason why the timer interrupt behaves differently than the others ?
2. How do I configure the non-root cell to route a specific IRQ to my
cell I guess that I've to use the jailhouse_irqchip structure and the
.irqchips field, providing the right address and bitmask. However, I
can't figure out these values.
I'm confused since I noted that in the FreeRTOS cell the GIC address
differs between the root cell and the non-root cell, and I can't figure
out the reason.
Even the bitmask value is not clear since the bit set by the FreeRTOS
cell is IRQNO - 32: is it this a constant requiremet for GIC? In other
words in any implementation of ARM that use GIC am I supposed to
subtract 32 from the number I find in the Hardware Reference Manual?
3. I also noted that the FreeRTOS porting has re-implemented the inmate
library from scratch and it does not link against the usual Jailhouse
library. Since their implementation provide basically the same services
with a few small additions (e.g., priorities handling for IRQs), I
wonder the reason why they have chosen to use a different implementation
rather than merging these additions to the mainline project.
4. This question is more a curiosity. In header.S the irq vector entries
do not save and restore the scratch/volatile registers. IMHO this seems
to not match the ARMv8 ABI and could even bring to abnormal behavior in
some circumstances. Is it correct or am I wrong ?
original ARM porting (32 bit) used GCC __attribute__((interrupt("IRQ")))
for vector_irq function, but this strategy is no more available on ARM64
(I don't know why this features has not been added for ARMv8 version of
the GCC too).
Many thanks and best regards,
Errico Guidieri
--
Errico Gudieri
Senior Embedded Engineer
Phone: +39.050.99.11.224 (122)
E-mail:[email protected]
EVIDENCE srl
Via Carducci 56 - Loc. Ghezzano - 56010 - S. Giuliano Terme - Pisa - Italy
Phone: +39.050.99.11.122 - 224
Fax: +39.050.99.10.812 - 855
--
You received this message because you are subscribed to the Google Groups
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.