Received: by 10.192.165.148 with SMTP id m20csp1711101imm; Thu, 3 May 2018 04:17:16 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpbzjqFcHQLX4m9FpvS6PsVpE/0gE9hO2e8/1RH1FT/g7HbhozR6Q3DZzrpPSwohUVNava5 X-Received: by 2002:a63:7a43:: with SMTP id j3-v6mr18805029pgn.172.1525346236679; Thu, 03 May 2018 04:17:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525346236; cv=none; d=google.com; s=arc-20160816; b=wejHv2wdwNhTveZlhqj2o0NqqN38wl0AEzj9UB/G52vmLE8BlqWSncned7tGhIyW9H rqb0aCCvLh8ePxjC3oXZcXQBzRWzZoAt7aFkmadDHgHRt9ldPKmhV0HJ2/WQC2cQxOLq NR56FIBftwoGtKkoPiRS/higGStzR55Dj3G85G3JH3QpaLvAvPaqZebHjrjWRYW0O904 DDDvzrFmBtdAgGD3h7YLhIPg2NPY9z1a4usFe4dsTCXR0G5hyoz9ujX6pnzr3NKftcEe dwumHRjHqMeEQp3Oizfty85mLQsxV7ipYOILyEXBiXcY24i+NAOeJS0OuiarXdkpZ0DS HbJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=cq5OPFefq0lWlax4/yUjMx7Vcz70kqbFzhnJsfYW/14=; b=hlFBm5UoyZWPvqNjheyWZdDPukPfKUUgV50pDDidcQhoztMCLI1hqjqYsU0io3Cm8q R3NHglwjrC0ibLHvOLwkqSAY4ibWKHW03twBRrEHBfI/dez/Xwt38NM9GYcwIUSxnKAz ZQmfG4pgbAjKF8O09Aza5dndfhNYABO2iIvh5QRee/OftC1fYlov4fqov2Zmmlu/3MYF laB5NGYyH3QbpZa1qWE1qE/LTJ2NNSU0mOiMguphipY8RFEjIrtVsdw8IWGXsRt3kwXF t9u2lQJkefLieR1gQ4KLXg1UDbAtqnk8krSFwVo71l1GopRhJ2sbOr8piVpYLZSF4xKu ZMEQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j7-v6si13555002plt.356.2018.05.03.04.17.01; Thu, 03 May 2018 04:17:16 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751568AbeECLOX (ORCPT + 99 others); Thu, 3 May 2018 07:14:23 -0400 Received: from alexa-out-tai-02.qualcomm.com ([103.229.16.227]:53487 "EHLO alexa-out-tai-02.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751447AbeECLOP (ORCPT ); Thu, 3 May 2018 07:14:15 -0400 X-Greylist: delayed 375 seconds by postgrey-1.27 at vger.kernel.org; Thu, 03 May 2018 07:14:07 EDT X-IronPort-AV: E=Sophos;i="5.49,358,1520870400"; d="scan'208";a="447824" Received: from ironmsg03-tai.qualcomm.com ([10.249.140.8]) by alexa-out-tai-02.qualcomm.com with ESMTP; 03 May 2018 19:07:54 +0800 X-IronPort-AV: E=McAfee;i="5900,7806,8881"; a="7258975" Received: from asutoshd-linux.qualcomm.com ([10.206.24.163]) by ironmsg03-tai.qualcomm.com with ESMTP; 03 May 2018 19:07:39 +0800 Received: by asutoshd-linux.qualcomm.com (Postfix, from userid 92687) id 165142E89; Thu, 3 May 2018 16:37:38 +0530 (IST) From: Asutosh Das To: subhashj@codeaurora.org, cang@codeaurora.org, vivek.gautam@codeaurora.org, rnayak@codeaurora.org, vinholikatti@gmail.com, jejb@linux.vnet.ibm.com, martin.petersen@oracle.com, asutoshd@codeaurora.org, linux-mmc@vger.kernel.org Cc: linux-scsi@vger.kernel.org, linux-arm-msm@vger.kernel.org, Venkat Gopalakrishnan , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 03/10] scsi: ufs: Add LCC quirk for host and device Date: Thu, 3 May 2018 16:37:15 +0530 Message-Id: <0aa7ff1ff67e0c01d6347b932cfe7ce801ef09fc.1525343531.git.asutoshd@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org LCC (Line Control Command) is being used for communication between UFS host and UFS device. But some hosts might have the issue with issuing the LCC commands to UFS device and in this case LCC could be explicitly disabled. But there could be a need where we don't want to disable the LCC on both host & device; hence this change splits the quirk in 2 parts one for host and one for device. Signed-off-by: Subhash Jadavani Signed-off-by: Venkat Gopalakrishnan Signed-off-by: Can Guo Signed-off-by: Asutosh Das --- drivers/scsi/ufs/ufshcd.c | 16 ++++++++++++++++ drivers/scsi/ufs/ufshcd.h | 12 ++++++++++++ 2 files changed, 28 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index f3083fe..6dabce8 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4116,6 +4116,11 @@ static int ufshcd_disable_tx_lcc(struct ufs_hba *hba, bool peer) return err; } +static inline int ufshcd_disable_host_tx_lcc(struct ufs_hba *hba) +{ + return ufshcd_disable_tx_lcc(hba, false); +} + static inline int ufshcd_disable_device_tx_lcc(struct ufs_hba *hba) { return ufshcd_disable_tx_lcc(hba, true); @@ -4172,6 +4177,17 @@ static int ufshcd_link_startup(struct ufs_hba *hba) ufshcd_dme_set(hba, UIC_ARG_MIB(TX_LCC_ENABLE), 1); } + if (hba->quirks & UFSHCD_BROKEN_LCC_PROCESSING_ON_HOST) { + ret = ufshcd_disable_device_tx_lcc(hba); + if (ret) + goto out; + } + + if (hba->quirks & UFSHCD_BROKEN_LCC_PROCESSING_ON_DEVICE) { + ret = ufshcd_disable_host_tx_lcc(hba); + if (ret) + goto out; + } if (link_startup_again) { link_startup_again = false; retries = DME_LINKSTARTUP_RETRIES; diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index bb4ecfb..0417c42 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -598,6 +598,18 @@ struct ufs_hba { * TX_LCC. */ #define UFSHCD_QUIRK_BROKEN_PWR_MODE_CHANGE UFS_BIT(8) + + /* + * If UFS device is having issue in processing LCC (Line Control + * Command) coming from UFS host controller then enable this quirk. + * When this quirk is enabled, host controller driver should disable + * the LCC transmission on UFS host controller (by clearing + * TX_LCC_ENABLE attribute of host to 0). + */ + #define UFSHCD_BROKEN_LCC_PROCESSING_ON_DEVICE 0x100 + + #define UFSHCD_BROKEN_LCC_PROCESSING_ON_HOST 0x200 + unsigned int quirks; /* Deviations from standard UFSHCI spec. */ /* Device deviations from standard UFS device spec. */ -- Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.