Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp5655390img; Wed, 27 Mar 2019 12:33:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqy/YYv1oDzITQFykbPgsITZtToBrWiw3LGGi2b8rGmN0Ma1nDGfX3kSwL/TZyUCjNfWedXH X-Received: by 2002:a17:902:1101:: with SMTP id d1mr37484023pla.19.1553715180118; Wed, 27 Mar 2019 12:33:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553715180; cv=none; d=google.com; s=arc-20160816; b=EgkvLfd1QcgluJd0DCRxVMKpjEyi7L7Si3fX/WzxyioJxuoTLvBL8jmvMxr16rsZcK AthJJEt7FOKN6vi15s5nI8QWhLv8P7lQhPv8BEBfD2709+XgZMYkkx/XKTTGIWJCsMbK EmYgj5Vck1hxhgjV+xcHazBMIs8EFWpyN0dsJaT9oHmLxYM8IzzLVedgEHUmz40vlVA7 PeVJOfSG7RAo27YFd+TchX+I0m6cD35HnncwbxZgeAejajx0fwEJ1CBkclx5aqIM9HPC uF2aIV8TEuSCVZRVH9w/puaOxkSDboFB0IVzygIfszU3Zz6b/O2fTpWKFF2JaoJB5kq+ 6DLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=em/KIijBC7pjYE3UiVQWGW7kc9tiMxcuwqUxhFAXe1Y=; b=RU3xCvSEsNayCgMqaOxVE4ZmwADXkOeNX9+8/h5GU5Lw81h41FiDEGjrkhfC0/0PQL r3UEWByCQZy9AvYs0kIcHTuttztych4N4ghGMhGJ4M3hQRbuLwo9rUc8tCYA16NBaGxh 6MCXYBmI5VPw4AUM/napgb0K+7V+uSW5rbid5S3HQONczEUKBDDy/LPdJmil1BuQrcOt NUqw0Yyue15BWe2K+Zu2pvNj0QucvDAuNkq/ywAYo0OlntOiqH6Vyinx0/ZoUNDAZGGe GzwC+jzmoeVnQapxOVVrPoUdqf7phlglN6oe9+spBFQoLRZNhktw/XCJFe/aAoOkDRsa qgjw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=cwveuR05; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x7si8496212pgg.565.2019.03.27.12.32.45; Wed, 27 Mar 2019 12:33:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=cwveuR05; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731372AbfC0SCn (ORCPT + 99 others); Wed, 27 Mar 2019 14:02:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:42592 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731250AbfC0SCk (ORCPT ); Wed, 27 Mar 2019 14:02:40 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CFFC9217D7; Wed, 27 Mar 2019 18:02:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553709759; bh=wmVCxm4dWRKu4L9N1asji1Mm1nB+gh1kSFrSUxegsEE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cwveuR05F/yLi0l5MTrp+oPG0lrYXXJFJSVm4zlTjEd1rg8djCd1PBhVTFjLVNlJr ZC4Znp6fPdCBEc/JGLKo8heZw9Q7HkX0kzFxwoHQ2OfOONtBpH4vNPMr/KMdiDbW1B rjdgqzKZN4Z2R6Ta0IkBrpUP9zd+vmNWgOTEv/CA= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: John Garry , "Martin K . Petersen" , Sasha Levin , linux-scsi@vger.kernel.org Subject: [PATCH AUTOSEL 5.0 025/262] scsi: hisi_sas: Set PHY linkrate when disconnected Date: Wed, 27 Mar 2019 13:58:00 -0400 Message-Id: <20190327180158.10245-25-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190327180158.10245-1-sashal@kernel.org> References: <20190327180158.10245-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: John Garry [ Upstream commit efdcad62e7b8a02fcccc5ccca57806dce1482ac8 ] When the PHY comes down, we currently do not set the negotiated linkrate: root@(none)$ pwd /sys/class/sas_phy/phy-0:0 root@(none)$ more enable 1 root@(none)$ more negotiated_linkrate 12.0 Gbit root@(none)$ echo 0 > enable root@(none)$ more negotiated_linkrate 12.0 Gbit root@(none)$ This patch fixes the driver code to set it properly when the PHY comes down. If the PHY had been enabled, then set unknown; otherwise, flag as disabled. The logical place to set the negotiated linkrate for this scenario is PHY down routine, which is called from the PHY down ISR. However, it is not possible to know if the PHY comes down due to PHY disable or loss of link, as sas_phy.enabled member is not set until after the transport disable routine is complete, which races with the PHY down ISR. As an imperfect solution, use sas_phy_data.enable as the flag to know if the PHY is down due to disable. It's imperfect, as sas_phy_data is internal to libsas. I can't see another way without adding a new field to hisi_sas_phy and managing it, or changing SCSI SAS transport. Signed-off-by: John Garry Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/hisi_sas/hisi_sas_main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index bc17fa0d8375..88ae415e907a 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -10,6 +10,7 @@ */ #include "hisi_sas.h" +#include "../libsas/sas_internal.h" #define DRV_NAME "hisi_sas" #define DEV_IS_GONE(dev) \ @@ -1972,9 +1973,18 @@ static int hisi_sas_write_gpio(struct sas_ha_struct *sha, u8 reg_type, static void hisi_sas_phy_disconnected(struct hisi_sas_phy *phy) { + struct asd_sas_phy *sas_phy = &phy->sas_phy; + struct sas_phy *sphy = sas_phy->phy; + struct sas_phy_data *d = sphy->hostdata; + phy->phy_attached = 0; phy->phy_type = 0; phy->port = NULL; + + if (d->enable) + sphy->negotiated_linkrate = SAS_LINK_RATE_UNKNOWN; + else + sphy->negotiated_linkrate = SAS_PHY_DISABLED; } void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy) -- 2.19.1