Here, the description applies to MSM with MPM (MAO) block. When MSM is in deep sleep (TCXO shutdown), the CPU is put in SWFI (Stop and Wait For Interrupt) state, it needs a hardware interrupt to trigger the CPU into running again. Since the regular interrupt controller is disabled, and only the interrupt controller in MPM (MAO) block is active. Therefore, only interrupts described in maoint_isr_type can bring MSM out of sleep. Here are some descriptions of these interrupts.
1) MAO_WAKEUP_ISR: this interrupt is generated when a timer in MPM block expires. This is used to wake up MSM when the prescribed sleep time has expired. So you may think that MSM is waked up by MPM timer, whose expiration time is calculated and set by the sleep_task before entering sleep. Generally, such sleep time is determined by RF slot cycle and the next expiring software timers.
2) Special interrupts such as MAO_TOUCH_SCREEN_ISR and MAO_USB_HS_ISR: these interrupts are generated by the specific modules' hardware controllers (for instance, touch screen controller and USB controller).
3) GPIO interrupts: these interrupts are generated by specific GPIOs whose interrupts are enabled when the triggering condition is met.
4) PM_INT: PMIC uses one of the GPIO interrupts, which is wakeup capable, to interrupt MSM. In addition, PMIC has its own interrupt subsystem. Therefore, many PMIC interrupts (e.g. Wall charger, power key) that are handled by PMIC can wake up MSM through the PMIC GPIO pin. In other words, from MSM's perpective, all these PMIC interrupts are muxed together to wake up MSM through PMIC GPIO.
The wakeup GPIOs are generally fixed for each MSM. However, they can be completely different in different MSMs (for instance, QSD8650 and MSM7200A). As a initial step of board design, hardware engineers need to review the MSM GPIO assignment. One of the steps in GPIO assignment review is to see what pins are used as wakeup pins in the design, and make sure that the assigned GPIO pins have wakeup capability.
No comments:
Post a Comment