From patchwork Thu Oct 23 14:05:49 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Markowski X-Patchwork-Id: 5140871 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 0124F9F3ED for ; Thu, 23 Oct 2014 14:07:27 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 245392024F for ; Thu, 23 Oct 2014 14:07:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7358720256 for ; Thu, 23 Oct 2014 14:07:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755911AbaJWOGB (ORCPT ); Thu, 23 Oct 2014 10:06:01 -0400 Received: from mail-wi0-f179.google.com ([209.85.212.179]:50191 "EHLO mail-wi0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755809AbaJWOF6 (ORCPT ); Thu, 23 Oct 2014 10:05:58 -0400 Received: by mail-wi0-f179.google.com with SMTP id d1so2104036wiv.0 for ; Thu, 23 Oct 2014 07:05:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tieto.com; s=google; h=from:to:cc:subject:date:message-id; bh=pyK3NSQteoJ8CiACLrTj9y2FWknvLIMrrdkXacNiDW4=; b=qaGFgpNI0jJiME5d6cnXYs/CSL72YeH0Ff5HP8u6WCvMlBouGzsUbbH22PQY7rcyvh Ps+tFTb0pKurI2YvZ7wPMjgUuEXrX1y37O8UTDiq7Lb7dEkD9KDq8eFxRQSqmUNf9OQD tDLvAGM3Jo18jpsnAVWy2q4CEQWJ5nj1C4jxg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=pyK3NSQteoJ8CiACLrTj9y2FWknvLIMrrdkXacNiDW4=; b=Yp7PCZnjMA/cXctZ8bB3i7krq0qnK37bYmk7TP9JilDPooP3FZtpTQgSwrRuDFEkD2 KO1XHZ3TkmATWlqBR31lSWgGpil5rSpYAN+3aVupXdaEmzPnp88xqJTLt1r+mWw+OgT4 bmwFzFaMvrDeWbHeiB/2CLnXAzI29Xfk19ysl9Khjr/weDIl3/G3nm0lc8NUS3Vn7avJ 0pWhHW+iTbgJ3jKGg70ozwaKJoSy5bXcQf1Bk4Z93MwSgF84aTwnl4Uz9bvA6ky8moSM EZvZFau/j48kQZltzqOk6SqZq5hGJUQbfEqSJWUEMvdKovEb4KYtuagp7HyY1sW33x3f 4haw== X-Gm-Message-State: ALoCoQnYi98fE4OhwOdCIgmdZH1+X2r7wMbc+4hmzFwN5m6rysAOXE7cSTeTaFtaL55erjHN0jJ7RSKNteZHaKDVqshb9kFmFvPYa5zP6vxYGZH2MwBnFJkzRtQ4SAFXu2FLJdPNbqg5 X-Received: by 10.180.73.19 with SMTP id h19mr44226939wiv.3.1414073157149; Thu, 23 Oct 2014 07:05:57 -0700 (PDT) Received: from uw000975.eu.tieto.com ([91.198.246.10]) by mx.google.com with ESMTPSA id xw9sm2282565wjc.24.2014.10.23.07.05.56 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 23 Oct 2014 07:05:56 -0700 (PDT) From: Bartosz Markowski To: ath10k@lists.infradead.org Cc: linux-wireless@vger.kernel.org, Bartosz Markowski Subject: [PATCH] ath10k: fix pm resume after suspend Date: Thu, 23 Oct 2014 16:05:49 +0200 Message-Id: <1414073150-11593-1-git-send-email-bartosz.markowski@tieto.com> X-Mailer: git-send-email 1.8.2 X-DomainID: tieto.com Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-8.2 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Firmware was crashing when we were trying to warm reset it after suspend. This was due to the fact that target registeres can be accessed only if the hardware is awaken. This patch makes sure to awake the device also on the hif up, not only in case of probe call path. Signed-off-by: Bartosz Markowski --- drivers/net/wireless/ath/ath10k/pci.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index 86f734e..4dee319 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -1858,10 +1858,16 @@ static int ath10k_pci_hif_power_up_warm(struct ath10k *ar) static int ath10k_pci_hif_power_up(struct ath10k *ar) { - int ret; + int ret = 0; ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif power up\n"); + ret = ath10k_pci_wake(ar); + if (ret) { + ath10k_err(ar, "failed to wake up target: %d\n", ret); + return ret; + } + /* * Hardware CUS232 version 2 has some issues with cold reset and the * preferred (and safer) way to perform a device reset is through a @@ -1876,7 +1882,7 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar) ret); if (ath10k_pci_reset_mode == ATH10K_PCI_RESET_WARM_ONLY) - return ret; + goto err_sleep; ath10k_warn(ar, "trying cold reset\n"); @@ -1884,11 +1890,15 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar) if (ret) { ath10k_err(ar, "failed to power up target using cold reset too (%d)\n", ret); - return ret; + goto err_sleep; } } - return 0; + return ret; + +err_sleep: + ath10k_pci_sleep(ar); + return ret; } static void ath10k_pci_hif_power_down(struct ath10k *ar) @@ -1896,6 +1906,7 @@ static void ath10k_pci_hif_power_down(struct ath10k *ar) ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif power down\n"); ath10k_pci_warm_reset(ar); + ath10k_pci_sleep(ar); } #ifdef CONFIG_PM @@ -2513,6 +2524,8 @@ static int ath10k_pci_probe(struct pci_dev *pdev, /* This shouldn't race as the device has been reset above. */ ath10k_pci_irq_disable(ar); + ath10k_pci_sleep(ar); + ret = ath10k_core_register(ar, chip_id); if (ret) { ath10k_err(ar, "failed to register driver core: %d\n", ret); @@ -2564,7 +2577,6 @@ static void ath10k_pci_remove(struct pci_dev *pdev) ath10k_pci_deinit_irq(ar); ath10k_pci_ce_deinit(ar); ath10k_pci_free_ce(ar); - ath10k_pci_sleep(ar); ath10k_pci_release(ar); ath10k_core_destroy(ar); }