Received: by 10.223.185.116 with SMTP id b49csp273286wrg; Tue, 20 Feb 2018 21:05:16 -0800 (PST) X-Google-Smtp-Source: AH8x2256z6GDKL7tsJlyDWi7od3y1ioAKoKTy5Bseeq6Wh19HfgxXDf/dLz/whDub9dUWISYyfM1 X-Received: by 10.99.165.9 with SMTP id n9mr1704112pgf.324.1519189516622; Tue, 20 Feb 2018 21:05:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519189516; cv=none; d=google.com; s=arc-20160816; b=wwZvZaoMsebwDjG64pTUE9/KOfQeAN092iL2EB9Vdv1geWrEB+WBfHLJVUCo8Mmw+Z t7J08E1Xha/i5IeZhkG4vHpUUEwbq+idZjlU9BkTNEAXjwsyM9ocNXE6Q/BQQ4SI3xg6 PgFkEGjo1dsxkhvTIP8ta8eQ+kgjJ7L2avnNuVyVS3UBAymax+GnsjweOW9+ATehKAiW MG319b3AclqdZWPpCrYG3PQOZ+LUysSpYZ38kevId+j04mQ2HdZTVI+hyh2FIC3X0RIc cov1o0haddil2Zy4bKVu37LBBWb8G2EgXqnx626ddUIsCtzSmcXHWd1YsN2GZeB8y7TA tCmg== 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=Qk9lHHWsYQQv3poFjs5FvNt1mso22Rk4CU0KAqNsaN4=; b=HNqs5y3YYzKzbbHRcFnuve6NnCgr3nL17vpqcmgfY6vD1hV0MxEqoXUj3pW/VjMQ97 u8eItdDvF3BI/wIDz1+DrgP8lCuVbPYMfGkPQGy+ohEps1kxJo6UC1rHnSa2qTKSllFy IBuFaz4nghAwGH0xUwalgbGw4F9DFNaeVmslHaDGURLjp/t65/HIJhulPHMOANej8RHJ CkxsOkNZnYdl3LBP2idK+oThnd39AQAyivXNF+pzApzmKXBatfKXcnaBeiG2GybEPkBE JiD2ZqBmsPwSMOiKyGkYKNHj/q3CoRGR78dkkZJzeRIPSqfjrFkobHhf938ntocMCtDI 90TQ== 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 p64si661527pga.789.2018.02.20.21.05.02; Tue, 20 Feb 2018 21:05:16 -0800 (PST) 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 S1751519AbeBUFEF (ORCPT + 99 others); Wed, 21 Feb 2018 00:04:05 -0500 Received: from alexa-out-tai-01.qualcomm.com ([103.229.16.226]:64584 "EHLO alexa-out-tai-01.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751180AbeBUFDX (ORCPT ); Wed, 21 Feb 2018 00:03:23 -0500 X-IronPort-AV: E=Sophos;i="5.46,542,1511798400"; d="scan'208";a="719" Received: from ironmsg03-tai.qualcomm.com ([10.249.140.8]) by alexa-out-tai-01.qualcomm.com with ESMTP; 21 Feb 2018 12:57:07 +0800 X-IronPort-AV: E=McAfee;i="5900,7806,8810"; a="2373330" Received: from asutoshd-linux.qualcomm.com ([10.206.24.163]) by ironmsg03-tai.qualcomm.com with ESMTP; 20 Feb 2018 20:56:49 -0800 Received: by asutoshd-linux.qualcomm.com (Postfix, from userid 92687) id 6F302238B; Wed, 21 Feb 2018 10:26:48 +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 Cc: linux-scsi@vger.kernel.org, Venkat Gopalakrishnan , Asutosh Das , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/9] scsi: ufs: Add LCC quirk for host and device Date: Wed, 21 Feb 2018 10:26:33 +0530 Message-Id: <9ba83c0585b9354f6d521c51fbfdc4acf6bf760e.1519120988.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 From: Subhash Jadavani 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 | 11 +++++++++++ 2 files changed, 27 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index d74d529..cc7eb1e 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4121,6 +4121,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); @@ -4175,6 +4180,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 1332e54..7a2dad3 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -591,6 +591,17 @@ struct ufs_hba { */ #define UFSHCD_QUIRK_PRDT_BYTE_GRAN 0x80 + /* + * 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.