From patchwork Wed May 30 08:57:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eyal Reizer X-Patchwork-Id: 10437919 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 58F1F601E9 for ; Wed, 30 May 2018 08:58:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4A57928358 for ; Wed, 30 May 2018 08:58:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3EF52283A5; Wed, 30 May 2018 08:58:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B394C28358 for ; Wed, 30 May 2018 08:58:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936038AbeE3I62 (ORCPT ); Wed, 30 May 2018 04:58:28 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:55119 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935975AbeE3I6X (ORCPT ); Wed, 30 May 2018 04:58:23 -0400 Received: by mail-wm0-f67.google.com with SMTP id f6-v6so46350111wmc.4; Wed, 30 May 2018 01:58:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=NbnkrzxpvCE5GuHjCgr6GwzkjCY3+mVIrXduVvF6PJA=; b=MNZvXaR2YYr9AR6rlxPprOP7iLz43J2AWVxRr+5iqjQzk0FhtC0u/UHTBKdZV1KOQN 0Lx9dvPaEVkTJi/hm2gmADdPKb5OpPtTNjd4RVBoppPBxj8wUJSnihmRqBOFOaYrWGPE GO+bjNDMkbRBzkyrVOyCyi/FBswFcBqozugUWGfq9QEp7fpy/WAHKHp4keWMKx0IzYaU H4zqHdA7okOVv8y5ZcMpeuFmPYoStCOmDxwCrl8/zokUf487aeIFXwzc8f7yY8cuXpTk Pr3Y9X/bKqtGYJ8Y4JHiNLYUaAdNnoCzw0E2C2jJa8gbFrmb3EW4xuk9iZarZyE4kKjp tviw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=NbnkrzxpvCE5GuHjCgr6GwzkjCY3+mVIrXduVvF6PJA=; b=P5bTJ7puCXiUBl7dBWJeYG0/DgduF8+CqHv6LAspBpfInxhdxHQfcMMGzeEVddEa3t csXOpiWzcbN8iK9E6QA+YuCFPDYdhMpLg1RTJbbuXnrKuaXTc5jjBALDRpSjWxdDGMFb XzdDvoTzKbrHNB9mXL4zQC0xooh+VLJgs8d2xMo/LJkKYzrZny4nxvyAe9QI0Y4pP+YH Q8qosnY6PBFkZxRJPpmVkPUoqLFQkBU1A+NeV/Vlia0YCveMBiiBPBciqAo3e5EW/7Kc mNN7ztoJOGPsobQQF1j2a0cLWu9XgRdhI4++yypTqc2ghOFX8MRkeae3gf0iBgF26bmm 5E4g== X-Gm-Message-State: ALKqPwfUV7EK1fTyAMaSbVHXID2FTN1frqfXHPCwbQoWsLugUY7kAB6R LRkey82skuvDp1UE2kwpyQo= X-Google-Smtp-Source: ADUXVKJyWa840x1KP/PbT/eUUgzCgxzQuvdEetiu5tLznrx1/hWT5I2Jwpp2RD6XVFvY2nv34ZcSPg== X-Received: by 2002:a1c:bf0c:: with SMTP id p12-v6mr780957wmf.120.1527670702273; Wed, 30 May 2018 01:58:22 -0700 (PDT) Received: from localhost.localdomain ([141.226.162.230]) by smtp.gmail.com with ESMTPSA id s2-v6sm13328597wrn.75.2018.05.30.01.58.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 30 May 2018 01:58:21 -0700 (PDT) From: Eyal Reizer X-Google-Original-From: Eyal Reizer To: Kalle Valo , Eyal Reizer , Kishon Vijay Abraham I , Guy Mishol , Luca Coelho , Maital Hahn , MaximAltshul , linux-wireless@vger.kernel.org, linux-omap@vger.kernel.org Cc: Tony Lindgren Subject: [RFT v2, 6/6] wlcore: Use generic runtime pm calls for wowlan elp configuration Date: Wed, 30 May 2018 11:57:46 +0300 Message-Id: <1527670666-22779-1-git-send-email-eyalr@ti.com> X-Mailer: git-send-email 2.7.4 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP With runtime PM enabled, we can now use calls to pm_runtime_force_suspend and pm_runtime_force_resume for enabling elp during suspend when wowlan is enabled and waking the chip from elp on resume. Remove the custom API that was used to ensure that the command that is used to allow ELP during suspend is completed before the system suspend. Signed-off-by: Eyal Reizer Signed-off-by: Tony Lindgren --- Changes since v1: use pm_runtime_force_() instaed of pm_generic_runtime_() calls drivers/net/wireless/ti/wlcore/main.c | 51 +++++++++-------------------------- 1 file changed, 13 insertions(+), 38 deletions(-) diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c index 890397a..36d7055 100644 --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c @@ -1000,24 +1000,6 @@ static int wlcore_fw_wakeup(struct wl1271 *wl) return wlcore_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_WAKE_UP); } -static int wlcore_fw_sleep(struct wl1271 *wl) -{ - int ret; - - mutex_lock(&wl->mutex); - ret = wlcore_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_SLEEP); - if (ret < 0) { - wl12xx_queue_recovery_work(wl); - goto out; - } - set_bit(WL1271_FLAG_IN_ELP, &wl->flags); -out: - mutex_unlock(&wl->mutex); - mdelay(WL1271_SUSPEND_SLEEP); - - return 0; -} - static int wl1271_setup(struct wl1271 *wl) { wl->raw_fw_status = kzalloc(wl->fw_status_len, GFP_KERNEL); @@ -1741,6 +1723,7 @@ static int wl1271_op_suspend(struct ieee80211_hw *hw, { struct wl1271 *wl = hw->priv; struct wl12xx_vif *wlvif; + unsigned long flags; int ret; wl1271_debug(DEBUG_MAC80211, "mac80211 suspend wow=%d", !!wow); @@ -1799,19 +1782,6 @@ static int wl1271_op_suspend(struct ieee80211_hw *hw, /* flush any remaining work */ wl1271_debug(DEBUG_MAC80211, "flushing remaining works"); - /* - * disable and re-enable interrupts in order to flush - * the threaded_irq - */ - wlcore_disable_interrupts(wl); - - /* - * set suspended flag to avoid triggering a new threaded_irq - * work. no need for spinlock as interrupts are disabled. - */ - set_bit(WL1271_FLAG_SUSPENDED, &wl->flags); - - wlcore_enable_interrupts(wl); flush_work(&wl->tx_work); /* @@ -1821,15 +1791,14 @@ static int wl1271_op_suspend(struct ieee80211_hw *hw, cancel_delayed_work(&wl->tx_watchdog_work); /* - * Use an immediate call for allowing the firmware to go into power - * save during suspend. - * Using a workque for this last write was only hapenning on resume - * leaving the firmware with power save disabled during suspend, - * while consuming full power during wowlan suspend. + * set suspended flag to avoid triggering a new threaded_irq + * work. */ - wlcore_fw_sleep(wl); + spin_lock_irqsave(&wl->wl_lock, flags); + set_bit(WL1271_FLAG_SUSPENDED, &wl->flags); + spin_unlock_irqrestore(&wl->wl_lock, flags); - return 0; + return pm_runtime_force_suspend(wl->dev); } static int wl1271_op_resume(struct ieee80211_hw *hw) @@ -1844,6 +1813,12 @@ static int wl1271_op_resume(struct ieee80211_hw *hw) wl->wow_enabled); WARN_ON(!wl->wow_enabled); + ret = pm_runtime_force_resume(wl->dev); + if (ret < 0) { + wl1271_error("ELP wakeup failure!"); + goto out_sleep; + } + /* * re-enable irq_work enqueuing, and call irq_work directly if * there is a pending work.