IMX6SLL-EVK Board Suspend Not waking from SDIO Interrupt

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMX6SLL-EVK Board Suspend Not waking from SDIO Interrupt

1,201 Views
pandivijayaraj
Contributor I

Hi All,

I am using MCIMX6SLL-EVK board as the Linux Host system in my testing. It is running the Linux kernel 4.9.11.

I am interfacing an external WiFi module via SDIO interface using the SD card slot SD3.

The WiFi module driver sets the MMC capability bit MMC_CAPS_NONREMOVABLE in the SDIO probe function to enable the WoWLAN Suspend/ Resume functionality. Also in SDIO probe fuction, the deivice wakeup is configured using the API device_init_wakeup(dev, true).

Also in SDIO suspend function, MMC_PM_KEEP_POWER & MMC_PM_WAKE_SDIO_IRQ capabilities are set. UART wake-up and the WoWLAN wake-up is configured before going to the suspend.

System suspend is tested using the commands,

      echo enabled > /sys/class/tty/ttymxc0/power/wakeup

      echo mem > /sys/power/state

The observation is that WiFi module SDIO interface power is sustained across Suspend/Resume tests. But the SDIO interrupts are not received in the host system. Host system doesn't wake-up from suspend based on SDIO interrupt, it wakes-up only based on UART interrupt.

Labels (3)
0 Kudos
2 Replies

767 Views
igorpadykov
NXP Employee
NXP Employee

Hi Pandi

please check that correct bsp was used, in particular "enable-sdio-wakeup"

was in dts file, like in imx6sll-evk.dts :

&usdhc1 {
    pinctrl-names = "default", "state_100mhz", "state_200mhz";
    pinctrl-0 = <&pinctrl_usdhc1>;
    pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
    pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
    cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
    keep-power-in-suspend;
    enable-sdio-wakeup;
    vmmc-supply = <&reg_sd1_vmmc>;
    status = "okay";
};

refer to "Linux 4.1.15_2.1.0 for i.MX 6SLL " patch

i.MX Software|NXP 

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

767 Views
pandivijayaraj
Contributor I

Hi Igor,

Thanks for the quick reply.

I have used the kernel linux-imx form the freescale branch imx_4.9.11_1.0.0_ga. It contains the DTS file imx6sll-evk.dts.

The DTS file provides the following SDHC platform settings. The WiFi card is inserted into the SD Slot.

The SD3 slot settings are used as given below.

&usdhc1 {
        pinctrl-names = "default", "state_100mhz", "state_200mhz";
        pinctrl-0 = <&pinctrl_usdhc1>;
        pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
        pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
        cd-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>;
        wp-gpios = <&gpio4 22 GPIO_ACTIVE_HIGH>;
        keep-power-in-suspend;
        enable-sdio-wakeup;
        vmmc-supply = <&reg_sd1_vmmc>;
        status = "okay";
};

&usdhc2 {
        pinctrl-names = "default", "state_100mhz", "state_200mhz";
        pinctrl-0 = <&pinctrl_usdhc2>;
        pinctrl-1 = <&pinctrl_usdhc2_100mhz>;
        pinctrl-2 = <&pinctrl_usdhc2_200mhz>;
        vqmmc-supply = <&reg_sd2_vmmc>;
        bus-width = <8>;
        no-removable;
        status = "okay";
};

&usdhc3 {
        pinctrl-names = "default", "state_100mhz", "state_200mhz";
        pinctrl-0 = <&pinctrl_usdhc3>;
        pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
        pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
        cd-gpios = <&gpio3 22 GPIO_ACTIVE_LOW>;
        keep-power-in-suspend;
        enable-sdio-wakeup;
        vmmc-supply = <&reg_sd3_vmmc>;
        status = "okay";
};

Could you point out if something is missing?

0 Kudos