Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp246960pxf; Wed, 31 Mar 2021 02:16:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxb93fo+nAdKs7PEZQTqkIXcqLiUYKUW/k4nrnYOq/wWINx1hEQaQeaPHQh9E64sQTXLtqF X-Received: by 2002:a05:6402:312b:: with SMTP id dd11mr2453188edb.149.1617182175037; Wed, 31 Mar 2021 02:16:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617182175; cv=none; d=google.com; s=arc-20160816; b=1KRdEy1vm57ZDiECwyJwkS9YjAUe4oZ9AWXkC3dfwX18w2wrB/VE42pELKi0RKFl6L PIkdCFm1C6WjRXt97GThpRs4MAw3cdG8gWKkx6Be7wJCvPBiR1F3HPqYz+16EoRT6+cu n3/2VjRp6u/sydz3hQO2FVBIFx3RPljdaeHvztPTQEcq3wm/eV7yvqIv2jsmQMkNBuTF mu6nJPCip2p7rOQ9JCQZWfWbvH9CoFmfLx5o0+tCtETR0wj7vGQ+cKRdBR0/gY4k1cTM RZ8Gr2qB2RJJgx1aXcon7FUBVWvF/cOD5e6Fk2JGmwfmkGe4AjPzYyt42gEUqiGtzYhw peKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:subject:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:cc:to:from; bh=hzjE7hKyVoRAt7uN74H883Zv02VI5T0ssLN2ilRfBhQ=; b=gHcamis9H+1wef8qnmvwBy/+OsZJtkNOG9unrrU9n3VfAeTy6p6jECSBbiHv9+24P8 Wo+x9DFrtScWXH3Csor9P7+WqO0ZfUYQaUEo7tnDcwbSYw1D5mzFPBlsPtuBnO3Ssyl5 YRzzZ9C8PVdFwsmS7rvAJXOj5yyuvjz+zEqEPeQi/F/ruLet8W7OU+QWk/owGrPsQnld yIiYW3gUTU2VwIq4WKTMad89usPLRm7RzW92P2No24pEqwwy3tIom5t4i8iNOzPThDnX eL9BybIKrux+6J339Mb908iiNRLCOUiABoYo3ev2zNcYSsAyipOr8KVq33EGo+US/BB5 Jqzg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f1si1144740ejc.617.2021.03.31.02.15.51; Wed, 31 Mar 2021 02:16:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234637AbhCaJPI (ORCPT + 99 others); Wed, 31 Mar 2021 05:15:08 -0400 Received: from paleale.coelho.fi ([176.9.41.70]:43754 "EHLO farmhouse.coelho.fi" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S234697AbhCaJO7 (ORCPT ); Wed, 31 Mar 2021 05:14:59 -0400 Received: from 91-156-6-193.elisa-laajakaista.fi ([91.156.6.193] helo=kveik.ger.corp.intel.com) by farmhouse.coelho.fi with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94) (envelope-from ) id 1lRWwC-00087q-OO; Wed, 31 Mar 2021 12:14:58 +0300 From: Luca Coelho To: kvalo@codeaurora.org Cc: linux-wireless@vger.kernel.org Date: Wed, 31 Mar 2021 12:14:45 +0300 Message-Id: X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210331091452.543321-1-luca@coelho.fi> References: <20210331091452.543321-1-luca@coelho.fi> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on farmhouse.coelho.fi X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00, TVD_RCVD_IP autolearn=ham autolearn_force=no version=3.4.5-pre1 Subject: [PATCH 05/12] iwlwifi: pcie: try to grab NIC access early Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Johannes Berg Sometimes some NICs may fail to initialize, but if we have such a scenario we may only see an alive timeout (i.e. the firmware doesn't send us the alive message), and that will only cause us to fail the interface up. Try to once grab NIC access during device probe to ensure we can properly talk to the hardware at all, and to do all the potential workarounds in that function. Since we now finish NIC init here, we can remove it from the later potential read of the RF ID. Signed-off-by: Johannes Berg Signed-off-by: Luca Coelho --- drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index 8e3fc160e083..3186de93d769 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c @@ -1112,6 +1112,24 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans); + /* + * Let's try to grab NIC access early here. Sometimes, NICs may + * fail to initialize, and if that happens it's better if we see + * issues early on (and can reprobe, per the logic inside), than + * first trying to load the firmware etc. and potentially only + * detecting any problems when the first interface is brought up. + */ + ret = iwl_finish_nic_init(iwl_trans, trans); + if (ret) + goto out_free_trans; + if (iwl_trans_grab_nic_access(iwl_trans)) { + /* all good */ + iwl_trans_release_nic_access(iwl_trans); + } else { + ret = -EIO; + goto out_free_trans; + } + iwl_trans->hw_rf_id = iwl_read32(iwl_trans, CSR_HW_RF_ID); for (i = 0; i < ARRAY_SIZE(iwl_dev_info_table); i++) { -- 2.31.0