On Tue, 31 Jan 2012, Grazvydas Ignotas wrote:
> On Tue, Jan 31, 2012 at 3:48 AM, Paul Walmsley <[email protected]> wrote:
> >
> > If the DEBOUNCENABLE bit is set and the debounce clock is off and the GPIO
> > IP block is idle, then yeah, I'd assume that GPIO wakeups would not
> > work.
> >
> > But it sounds like they are working for you when DEBOUNCENABLE is set and
> > the debounce clock is on and the GPIO IP block is idle and CORE & PER are
> > ON?
>
> I think so. It works with DEBOUNCENABLE set when cpuidle is disabled
> or CPU is spinning. CORE & PER are ON according to pm_debug/count, I
> think debounce clock is enabled too but I don't know if GPIO is idle
> then (how do I check?).
Maybe try reading the appropriate CM_IDLEST bit? I can't remember at the
moment if this represents the PRCM's SIdleReq signal or the module's
SIdleAck, but it's worth a quick look.
> > And when DEBOUNCENABLE is clear and the debounce clock is off and the GPIO
> > IP block is idle and CORE & PER are still ON, then they work?
>
> Yes.
>
> > If the answer to those two latter questions are true, then it sounds like
> > the hardware is working more or less as expected...
>
> So when does all wakeup stuff come into effect, when CORE+PER go to
> low power state?
>From the perspective of the GPIO IP block, it comes into effect when the
GPIO module has IdleAcked ("is idle"). At that point the module needs to
assert its SWAKEUP signal when it wants to have its clocks re-enabled,
wake up other parts of the system, etc. Maybe try searching the 34xx TRM
for SWAKEUP; there are a few bits and pieces scattered around that might
help build a larger mosaic :-) As far as CORE & PER powerstates go, the
CORE & PER still might be ON while the module is idle; that's a separate
thing.
Let me also answer the question from the MPU's perspective. Suppose the
MPU powerdomain has entered a low power state. That means that the MPU
INTC -- part of the MPU powerdomain -- is also in a low power state. So
neither the MPU nor the MPU INTC are working: clocks are disabled, the
voltage may be scaled down, etc. So even if an IP block elsewhere on the
chip asserts an MPU interrupt, the MPU INTC won't notice it; it's
non-functional at this point. So for the MPU to notice the interrupt, it
has to first come out of its low-power state. That happens when some IP
block asserts that SWAKEUP signal to the PRCM, which, if it's programmed
correctly, will then bring the MPU powerdomain out of its low-power state,
re-enable clocks, etc. At that point, the MPU INTC should notice the
interrupt, and the kernel should take it from there.
- Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html