Hi all,

We have the requirement to put our ARM i.MX6 based Xenomai system into the
suspend-to-RAM state. Just before entering the mode we put the realtime
application in a state such that we don't need to be realtime anymore.

The deep sleep mode is working on the system, however doesn't work well
with Xenomai:

One problem we solved was a hangup when entering suspend-to-RAM state. This
we traced down to Xenomai interrupts occurring during suspend mode where
interrupts need to be off. The lockup looks similar as described here:
http://www.xenomai.org/pipermail/xenomai/2014-January/029898.html.
Note: local_irq_disable_hw() cannot be used to disable the interrupts in
this case because later in the suspend sequence there are callbacks into
Xenomai which use xnlock_get_irqsave/xnlock_put_irqrestore which cannot be
called after local_irq_disable_hw() because of inbalance of
the IPIPE_STALL_FLAG.

Now after we fixed the problem with disabling interrupts, we run into a
problem which isn't solved yet:

Normally the system should go dormant on the WFI instruction, which it does
almost half the time. The other times it doesn't and directly returns. And
that is only when Xenomai is enabled; a system running just an ipipe
enalbed kernel works as expected.

I was trying to trace it down to Xenomai(-timer) interrupts, but cannot
prove it yet. The strange thing is that when I mask all interrupts on the
GPC, the wfi instruction still doesn't go dormant. Which doesn't make sense
to me. Does anyone know why the wfi doesn't go dormant and/or what the
relationship is with Xenomai?

Any help, suggestions, directions are highly appreciated!

Henri.
_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to