From patchwork Tue Dec 3 22:35:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kroah-Hartman X-Patchwork-Id: 180757 Delivered-To: patch@linaro.org Received: by 2002:a92:3001:0:0:0:0:0 with SMTP id x1csp2160597ile; Tue, 3 Dec 2019 14:56:03 -0800 (PST) X-Google-Smtp-Source: APXvYqy3taQug6Qn9fsRUVIMjKi4I+w5QeXhFKbuEdyrfbZ/owdn8mwUrK2/2xBKu9BufaEo3uDQ X-Received: by 2002:a05:6830:1cc4:: with SMTP id p4mr198381otg.349.1575413763003; Tue, 03 Dec 2019 14:56:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575413762; cv=none; d=google.com; s=arc-20160816; b=Ucn1Abp6xTSt0+7E6hJMwjTRNdSWOvhT6B1SEBXhPEkAipEz+mpxtRS9TM8sXIMdpx 9Ttedlhhf50o5JhGlWGaQvVX1znn6LaEP5BDyBXgLfOd2z0vOBJTpeGbAFuZM/VF4SlR 1WfMg4t0IlrZxRThm8L0G33WvQ/Ntnb2cQzZofb+2tCVdd9U6r9VwGkos/bNAX+uZt9F jVY87YVLQnSy7PTk1r0hONnni+ubjLCWSXcoRuW0wYjWGeNJq2Ip8/aX7Xa12RjIF1yq olA7iUaUT9CKRO0rUwBJBGmxXIRnkeaF9Je+Wk+fivM5QSmU8T+vHfD3NU3FUmwnJ/MD oDGQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=aBu2FnkTqSqmf1q206GJmCoa8fmwJ4efufiPvXw/oEA=; b=QP3kEgVzw1HKpsMqZmwRYn+Iza7dI94g8r0BdLUxQovmeOrQlstEi+3kTjLyMalR6/ FkawbKSh82H5Q2T5mpWchhyndCNkYmmsN3wAEMUlHvwmqSL3xObkp10wWTtjovBSr4fZ NbO5i+0Re+SuzEdfOq/vXf9c0VDUboZO31zSmxc9hjPOyCjvVlNlDIfjxCSC1lk2e6t1 nSB3zDCJ5o7bVen031rHXZBN+gM5rLxa03jZqRSqZ8FeAmBZIea3SVkiGxNRHeY82J8i nZYppzW9S6vYjA0PqkQrZ2SiJwRDZ9xfKBjQiQjUh0TlV1/iY5lciJZ8mgIbESQQCUgx ks5g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Frz5Pfy0; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x131si1018414oig.124.2019.12.03.14.56.02; Tue, 03 Dec 2019 14:56:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of stable-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=Frz5Pfy0; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730049AbfLCW4B (ORCPT + 15 others); Tue, 3 Dec 2019 17:56:01 -0500 Received: from mail.kernel.org ([198.145.29.99]:50686 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730070AbfLCW4A (ORCPT ); Tue, 3 Dec 2019 17:56:00 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 124032053B; Tue, 3 Dec 2019 22:55:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1575413759; bh=iPY+9EdkFVSlXDqWAJJ7coSysi2IA3A8A7kRWdUzco8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Frz5Pfy0IGUam04DHZNn6j8bvUYfmEjjlmQQQrZ0NqWyuW7tcnUrIS0Fr3go81yXw A32iw3xTK5GDBTemNk37U5Mz59ylq3KKwedmZimXYZmArvbyLoMei1GXCs1sm3wFqQ wZaeRlM1Vy2aFWuuC/JRz3bMLQwtiLB7OtvQk/9U= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jian Luo , John Garry , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 4.19 250/321] scsi: libsas: Support SATA PHY connection rate unmatch fixing during discovery Date: Tue, 3 Dec 2019 23:35:16 +0100 Message-Id: <20191203223440.143470977@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191203223427.103571230@linuxfoundation.org> References: <20191203223427.103571230@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: John Garry [ Upstream commit cec9771d2e954650095aa37a6a97722c8194e7d2 ] +----------+ +----------+ | | | | | |--- 3.0 G ---| |--- 6.0 G --- SAS disk | | | | | |--- 3.0 G ---| |--- 6.0 G --- SAS disk |initiator | | | | device |--- 3.0 G ---| Expander |--- 6.0 G --- SAS disk | | | | | |--- 3.0 G ---| |--- 6.0 G --- SATA disk -->failed to connect | | | | | | | |--- 6.0 G --- SATA disk -->failed to connect | | | | +----------+ +----------+ According to Serial Attached SCSI - 1.1 (SAS-1.1): If an expander PHY attached to a SATA PHY is using a physical link rate greater than the maximum connection rate supported by the pathway from an STP initiator port, a management application client should use the SMP PHY CONTROL function (see 10.4.3.10) to set the PROGRAMMED MAXIMUM PHYSICAL LINK RATE field of the expander PHY to the maximum connection rate supported by the pathway from that STP initiator port. Currently libsas does not support checking if this condition occurs, nor rectifying when it does. Such a condition is not at all common, however it has been seen on some pre-silicon environments where the initiator PHY only supports a 1.5 Gbit maximum linkrate, mated with 12G expander PHYs and 3/6G SATA phy. This patch adds support for checking and rectifying this condition during initial device discovery only. We do support checking min pathway connection rate during revalidation phase, when new devices can be detected in the topology. However we do not support in the case of the the user reprogramming PHY linkrates, such that min pathway condition is not met/maintained. A note on root port PHY rates: The libsas root port PHY rates calculation is broken. Libsas sets the rates (min, max, and current linkrate) of a root port to the same linkrate of the first PHY member of that same port. In doing so, it assumes that all other PHYs which subsequently join the port to have the same negotiated linkrate, when they could actually be different. In practice this doesn't happen, as initiator and expander PHYs are normally initialised with consistent min/max linkrates. This has not caused an issue so far, so leave alone for now. Tested-by: Jian Luo Signed-off-by: John Garry Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/libsas/sas_expander.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) -- 2.20.1 diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c index 2ee9c4ec7a541..f9d4a24c14b5a 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -817,6 +817,26 @@ static struct domain_device *sas_ex_discover_end_dev( #ifdef CONFIG_SCSI_SAS_ATA if ((phy->attached_tproto & SAS_PROTOCOL_STP) || phy->attached_sata_dev) { + if (child->linkrate > parent->min_linkrate) { + struct sas_phy_linkrates rates = { + .maximum_linkrate = parent->min_linkrate, + .minimum_linkrate = parent->min_linkrate, + }; + int ret; + + pr_notice("ex %016llx phy%02d SATA device linkrate > min pathway connection rate, attempting to lower device linkrate\n", + SAS_ADDR(child->sas_addr), phy_id); + ret = sas_smp_phy_control(parent, phy_id, + PHY_FUNC_LINK_RESET, &rates); + if (ret) { + pr_err("ex %016llx phy%02d SATA device could not set linkrate (%d)\n", + SAS_ADDR(child->sas_addr), phy_id, ret); + goto out_free; + } + pr_notice("ex %016llx phy%02d SATA device set linkrate successfully\n", + SAS_ADDR(child->sas_addr), phy_id); + child->linkrate = child->min_linkrate; + } res = sas_get_ata_info(child, phy); if (res) goto out_free;