From patchwork Thu May 24 07:18:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eyal Reizer X-Patchwork-Id: 10422927 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 5EF0B60327 for ; Thu, 24 May 2018 07:19:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4753628E68 for ; Thu, 24 May 2018 07:19:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3B94428FC8; Thu, 24 May 2018 07:19:11 +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=unavailable 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 7E66028FC6 for ; Thu, 24 May 2018 07:19:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964811AbeEXHTI (ORCPT ); Thu, 24 May 2018 03:19:08 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:35035 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935626AbeEXHTG (ORCPT ); Thu, 24 May 2018 03:19:06 -0400 Received: by mail-wm0-f65.google.com with SMTP id o78-v6so2183742wmg.0; Thu, 24 May 2018 00:19:05 -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=y+ytHQZCMcokX3MLIKjOL1hCrXj2tycREzx/Ngm95kw=; b=A4rYZRDfTr2KITsO08a2lysFB5LhfgmFgMd2rGOyLThF/5jNZfgW7haSxlE6qTC8v3 Sx58kZqf9pMIssaPlSvHsxzqzlt7uZ9zHyRD3PDLFq17JgswHkg6oB4HBcmtuJCgqp0P VTQeFnuWg4gJV4QLEKJOxQVRFntbzjsJeTNk5vVMhs1/wFkIOaFDfst4ua/qeRf4CwFf P86iIaMvEAq5u0qU8JZP9vhjCOAoMNN/S+s2DQk7uyJufRRiZeGErw+cUARBpfSGSyrd HLuYKBOBfPM5Gy86CrGk6x0VU9uRrYEuD6KOcMJMc4YZ8BQ0/AdMpd7/o6VfJujKEcId ceXA== 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=y+ytHQZCMcokX3MLIKjOL1hCrXj2tycREzx/Ngm95kw=; b=nS22keT20OxvHn4mEJa/HNzGGxVKUAS0PndoLYAC2ucxzjmbrS2FbbgsAe3P8o4n8v 1jwoZX+jVs0Apn0ts1h8akDrrnF34OVs0001cqIR+ZgIEq/99O/Fg7GddWIXlL8YDltF b3w73BDXKaum/tALBh5Ufkh4LWnD0i6hSKAZeqoMg/9CIqt1mQ/6tFynuj6Fxp2At/Q1 QKxfxyEmfUQWBOrrWXj5aw0mDkSFs7mmrZbneoyEtrHnBDmuYRltJrCgQSbCXU2u5jkt dTMtjU2jl1Sj1WqW0r6mdYVCNCbA8qed3WBh8FfCaFJJefGLzZRbSE8sPv3JYgxj7Fn6 TFWw== X-Gm-Message-State: ALKqPwc92eRYeeqiINUmPtjVA0XZ/JoVuyB/yB5cjNVekzESBs3T6kR/ A/qVAu+yZjKIcHpjg7mo2Z/jog== X-Google-Smtp-Source: AB8JxZr9uoiiNLODBMzwkjSsngV2Xnbvf1Ln24cVWqvvqckaEqWpmYQBcmL6oMwX7U7VD8iztWyf0w== X-Received: by 2002:a1c:57c6:: with SMTP id l189-v6mr6511227wmb.161.1527146344811; Thu, 24 May 2018 00:19:04 -0700 (PDT) Received: from localhost.localdomain ([141.226.181.188]) by smtp.gmail.com with ESMTPSA id l20-v6sm26532824wrf.90.2018.05.24.00.19.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 24 May 2018 00:19:04 -0700 (PDT) From: Eyal Reizer X-Google-Original-From: Eyal Reizer To: kvalo@codeaurora.org, tony@atomide.com, linux-wireless@vger.kernel.org, linux-omap@vger.kernel.org Cc: Eyal Reizer Subject: [PATCH] wlcore: use generic runtime pm calls for wowlan elp configuration Date: Thu, 24 May 2018 10:18:57 +0300 Message-Id: <1527146337-17562-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 generic calls to pm_generic_runtime_suspend and pm_generic_runtime_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 --- Dependent on the Runtime PM support for wlcore patch set that was submitted by Tony Lindgren 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 4c297aa..6c8e4fa 100644 --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c @@ -1001,24 +1001,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); @@ -1742,6 +1724,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); @@ -1800,19 +1783,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); /* @@ -1822,15 +1792,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_generic_runtime_suspend(wl->dev); } static int wl1271_op_resume(struct ieee80211_hw *hw) @@ -1845,6 +1814,12 @@ static int wl1271_op_resume(struct ieee80211_hw *hw) wl->wow_enabled); WARN_ON(!wl->wow_enabled); + ret = pm_generic_runtime_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.