Search Linux Wireless

Re: [PATCH] wifi: wilc1000: Do not operate uninitialized hardware during suspend/resume

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Marek,

On 8/21/24 11:36, Marek Vasut wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> In case the hardware is not initialized, do not operate it during
> suspend/resume cycle, the hardware is already off so there is no
> reason to access it.
> 
> In fact, wilc_sdio_enable_interrupt() in the resume callback does
> interfere with the same call when initializing the hardware after
> resume and makes such initialization after resume fail. Fix this
> by not operating uninitialized hardware during suspend/resume.

Is this behavior observed then power-save is enabled when interface is not up.
Ideally registers read/write commands should pass as soon the wilc module is
up. But anyway, it is good have this check to avoid these commands. if
possible, please add the similar check for wilc_spi_suspend/resume() to have
similar behavior.

> 
> Signed-off-by: Marek Vasut <marex@xxxxxxx>
> ---
> Cc: Ajay Singh <ajay.kathat@xxxxxxxxxxxxx>
> Cc: Alexis Lothoré <alexis.lothore@xxxxxxxxxxx>
> Cc: Claudiu Beznea <claudiu.beznea@xxxxxxxxx>
> Cc: Kalle Valo <kvalo@xxxxxxxxxx>
> Cc: Marek Vasut <marex@xxxxxxx>
> Cc: linux-wireless@xxxxxxxxxxxxxxx
> ---
>  drivers/net/wireless/microchip/wilc1000/sdio.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/net/wireless/microchip/wilc1000/sdio.c b/drivers/net/wireless/microchip/wilc1000/sdio.c
> index 0043f7a0fdf97..7999aeb76901f 100644
> --- a/drivers/net/wireless/microchip/wilc1000/sdio.c
> +++ b/drivers/net/wireless/microchip/wilc1000/sdio.c
> @@ -977,6 +977,9 @@ static int wilc_sdio_suspend(struct device *dev)
> 
>         dev_info(dev, "sdio suspend\n");
> 
> +       if (!wilc->initialized)
> +               return 0;
> +
>         if (!IS_ERR(wilc->rtc_clk))
>                 clk_disable_unprepare(wilc->rtc_clk);
> 
> @@ -999,6 +1002,10 @@ static int wilc_sdio_resume(struct device *dev)
>         struct wilc *wilc = sdio_get_drvdata(func);
> 
>         dev_info(dev, "sdio resume\n");
> +
> +       if (!wilc->initialized)
> +               return 0;
> +
>         wilc_sdio_init(wilc, true);
>         wilc_sdio_enable_interrupt(wilc);
> 
> --
> 2.43.0
> 





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux