SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
The eMMC/SD/SDIO host controller can enter into different modes and save power:
The two modes are mutually exclusive (the module can be in normal mode or in idle mode). The eMMC/SD/SDIO host controller is compliant with the handshake protocol of the power, reset, and clock management (PRCM) module.
Normal Mode
The autogating of interface and functional clocks occurs when the following conditions are met:
The autogating of interface and functional clocks stops when the following conditions are met:
When a card removal event is detected the eMMC/SD/SDIO host controller automatically clears MMCHS_HCTL[8] SDBP and MMCHS_SYSCTL[2] CEN bits. Then it enters into low power state with auto gated interface clock even if MMCHS_SYSCONFIG[0] AUTOIDLE bit is set to 0. The functional clock is internally switched off and only interconnect read and write accesses are allowed.
Idle Mode
The MMCi_ICLK and MMCi_FCLK clocks provided to the eMMC/SD/SDIO host controller are switched off upon a PRCM module request. They are switched back upon module request.
The eMMC/SD/SDIO host controller complies with the handshaking protocol of the PRCM module:
The idle acknowledgment varies according to the MMCi.MMCHS_SYSCONFIG[4:3] SIDLEMODE bit field:
During the smart-idle mode period, the eMMC/SD/SDIO host controller acknowledges that the MMCi_ICLK and MMCi_FCLK clocks may be switched off, regardless of the value set in the MMCi.MMCHS_SYSCONFIG[9:8] CLOCKACTIVITY bit field.
The debounce clock is used to debounce the signals related to the card insertion and the card removal that are also sources of wake-up in idle mode. The debounce clock must never be switched off by the system power manager in order to detect card removal in functional mode, and detect wake-up in idle mode.
Transition From Normal Mode to Smart-Idle Mode
Smart-idle mode is enabled when the MMCi.MMCHS_SYSCONFIG[4:3] SIDLEMODE bit field is set to 0x2 or 0x3.
The eMMC/SD/SDIOi host controller goes into idle mode when the PRCM issues an IDLE request, according to its internal activity.
The eMMC/SD/SDIO host controller acknowledges the IDLE request from the PRCM after ensuring the following:
As long as the eMMC/SD/SDIOi controller does not acknowledge the IDLE request, if an event occurs, the eMMC/SD/SDIOi host controller can still generate an interrupt or a DMA request. In this case, the module ignores the IDLE request from the PRCM module.
As soon as the eMMC/SD/SDIOi controller acknowledges the IDLE request from the PRCM module:
Wake-Up Event in Smart-Idle Mode
The wake-up feature is enabled when both the MMCi.MMCHS_SYSCONFIG[2] ENAWAKEUP bit and one of the three bits MMCi.MMCHS_HCTL[26] REM, MMCi.MMCHS_HCTL[25] INS, MMCi.MMCHS_HCTL[24] IWE are set to 0x1.
The corresponding interrupt status enable bits must also be set before going in idle mode. Setting one of the following bits:
The wakeup is generated only in smart-idle mode, when the module is in idle mode.
Table 25-8 lists the supported cases in smart-idle mode.
Mode | MMCi_ICLK Clock | MMCi_FCLK Clock | Wake-Up Event |
---|---|---|---|
Card interrupt | May be switched off(1) | May be switched off(1) | The module sends an asynchronous wake-up request when a card interrupt on the DATA[1] signal is detected. |
Card insertion | May be switched off(1) | May be switched off(1) | The module sends an asynchronous wake-up request when card insertion is detected. |
Card removal | May be switched off(1) | May be switched off(1) | The module sends an asynchronous wake-up request when card removal is detected. |
Transition From Smart-Idle Mode to Normal Mode
The eMMC/SD/SDIO host controller detects the end of the idle period when the PRCM module deasserts the IDLE request.
For the wake-up event, there is a corresponding interrupt status in the MMCi.MMCHS_STAT register. The eMMC/SD/SDIOi host controller operates the conversion between the wake-up and interrupt (or DMA request) upon exit from smart-idle mode, if the associated enable bit is set in the MMCi.MMCHS_ISE register.
Interrupts and wake-up events have independent enable and disable controls, accessible through the MMCi.MMCHS_HCTL and MMCi.MMCHS_ISE registers. The overall consistency must be ensured by software.
One of the bits MMCHS_STAT[8] CIRQ, MMCHS_STAT[7] CREM, MMCHS_STAT[6] CINS in the interrupt status register is updated with the event that caused the wake-up when one of the bits MMCHS_IE[8] CIRQ_ENABLE, MMCHS_IE[7] CREM_ENABLE, MMCHS_IE[6] CINS_ENABLE is enabled.
Then, the wake-up event at the origin of the transition from smart-idle mode to normal mode is converted into its corresponding interrupt or DMA request. (The MMCi.MMCHS_STAT register is updated and the status of the interrupt signal changes.)
When the IDLE request from the PRCM module is deasserted, the module switches back to normal mode. The module is fully operational.
Force-Idle Mode
Force-idle mode is enabled when the MMCi.MMCHS_SYSCONFIG[4:3] SIDLEMODE bit field is set to 0x0.
Force-idle mode is an idle mode in which the eMMC/SD/SDIOi host controller responds unconditionally to the IDLE request from the PRCM module. Moreover, in this mode, the eMMC/SD/SDIOi host controller unconditionally deasserts interrupts and DMA request lines if they are asserted.
The transition from normal mode to force-idle mode does not affect the bits of the MMCi.MMCHS_STAT register.
In force-idle mode, the interrupt and DMA request lines are deasserted. MMCi_ICLK and MMCi_FCLK can be switched off.
In force-idle mode, an IDLE request from the PRCM module during a command or a data transfer can lead to an unexpected and unpredictable result.
When the module is idle, any access to the module generates an error as long as the MMCi_ICLK clock is alive.
The module exits force-idle mode when the PRCM module deasserts the IDLE request. Then the module switches back to normal mode. The module is fully operational. Interrupt and DMA request lines are optionally asserted one clock cycle later.
Standby Mode
The eMMC/SD/SDIO host controller also provides standby information to the system power manager if the generic parameter MMCHS_HL_HWINFO[0] MADMA_EN is set to 1.
The eMMC/SD/SDIO host controller complies with the handshaking protocol of the PRCM module:
The standby request varies according to the MMCi.MMCHS_SYSCONFIG[13:12] STANDBYMODE bit field:
Power Pad Control
The eMMC/SD/SDIO host controller has the ability to reduce the pad power leakage when no transfer is sent through the pad. According to the MMCHS_CON[15] PADEN there are two different pad power management modes: automatic and manual.
If MMCHS_CON[15] PADEN is set to 1, pads CLK, CMD, DAT[0] and DATA[i] (where i = 2 through 7) are always powerd on.
If MMCHS_CON[15] PADEN is set to 0, the power for pads CLK, CMD, DAT[0] and DATA[i] (where i = 2 through 7) is "ON" only when there is a transfer on going. This is automatically managed by an internal state machine of the eMMC/SD/SDIO host controller.
The DATA[1] pad active state is controlled through MMCHS_CON[11] CTPL in order to detect SDIO asynchronous interrupt when there is no transaction.
The delay between pad power "ON" and the command transmission is controlled through the MMCHS_PWCNT register which act as a programmable counter. It is also used to delay the pad power "OFF" after the end of transmission. By default this counter is reset which means that no additional delay is added. But there is approximately 6-7 clock cycles margin between pad power "ON" and real start of the command due to an internal state machine of the eMMC/SD/SDIO host controller.
The MMCHS_PWCNT register is considered as static. No dynamic configuration during the transfer is supported. This results in an unpredictable behavior.
Local Power Management
Table 25-9 describes the power-management features available for the eMMC/SD/SDIOi modules.
For information about source clock gating and a description of the sleep/wake-up transitions, see Clock Management Functional Description, in Power, Reset, and Clock Management.
Feature | Registers | Description |
---|---|---|
Clock auto gating | MMCHS_SYSCONFIG[0] AUTOIDLE | This bit allows a local power optimization inside the module by gating the MMCi_ICLK clock upon the interface activity, or gating the MMCi_FCLK clock upon the internal activity. |
Slave-idle modes | MMCHS_SYSCONFIG[3:4] SIDLEMODE | Force-idle, No-idle, Smart-idle and Smart-idle wake-up-capable modes are available. |
Clock activity | MMCHS_SYSCONFIG[8:9] CLOCKACTIVITY | For configuration details, see Table 25-10. |
Master standby modes | MMCHS_SYSCONFIG[12:13] STANDBYMODE | Force-standby, No-standby and Smart-standby modes are available. |
Global wake-up enable | MMCHS_SYSCONFIG[2] ENAWAKEUP | This bit enables the wake-up feature at the module level. |
Wake-up sources enable | MMCHS_HCTL register | This register holds one active-high enable bit per event source that is able to generate a wake-up signal. |
CLOCKACTIVITY Values | Clock State When Module is in IDLE State | Features Available When Module is in IDLE State | Wake-Up Events | |
---|---|---|---|---|
MMCi_ICLK | MMCi_ FCLK | |||
00 | OFF | OFF | None | Card interrupt, Card insertion, Card removal |
10 | OFF | ON | None | |
01 | ON | OFF | None | |
11 | ON | ON | All |
The PRCM module has no hardware means of reading CLOCKACTIVITY settings. Thus, software must ensure consistent programming between the CLOCKACTIVITY and MMCi clock PRCM control bits. For a description of the Clock activity feature, see Module-Level Clock Management, in Power, Reset, and Clock Management.