Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp1510554rdb; Thu, 7 Dec 2023 00:42:23 -0800 (PST) X-Google-Smtp-Source: AGHT+IFd+hyDZfJgfqwJnpw4JdDZoQopK8ZWypr52A/NYVMKxSrFdUpkq7vJg7zNMvQuS/tFNBJ1 X-Received: by 2002:a17:903:1c4:b0:1d0:6eae:8e78 with SMTP id e4-20020a17090301c400b001d06eae8e78mr2363886plh.18.1701938543632; Thu, 07 Dec 2023 00:42:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701938543; cv=none; d=google.com; s=arc-20160816; b=pADOGvg9hlpXS/U7S377bhJ6G+0BNebGQ1vWQg5DlYj1vozcvy2vGyF/9KJiVgBqbo M0ljWBvqa9ZQvGYphWQoHMqTmHT3pCdzMOy6ipddj2jFWY0rOxCgOyqwvHogi+rnlGg9 TtiveEUpOw8uDCS6lmQaL/ryOEH6l2yCSbgmGX8ZhyHBAYoKZalL9mPXuBrlHmRDErgJ PnYZCz7q9qDQHV+8nTmwvKoZ1+gN7YV8zB+O2KN5v34iHV8Cb0uZYFKkQfnoFBhbki70 0I6QOxh8JHjFFZ/5/AZMiIlSPVVUHYMp+vBGNXQQs4yrl+brWaX3d7NEKC+5Ucm7kZdB diaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=rSh9gO+7aiqSoK8Q0lTevNd0WDRcePzWVmY+H4lC+2s=; fh=HZlYB2LAQ1e4bYbeSnJ2Wv2V4NF4wb/Mtcp53Wx9ng0=; b=ge1S6GSUKgWD3IC2KYh817O+2CKxo+UPrANbOl1JuaKPrZWUBSpQ4xjI7Jh3ph+jUg OkpvuD1KmfNrAhYBY+kdqlcfG0c4opxCXhE44evAQf+Jvyn4eGycFU+qhodJ9dzSiOTu mCK8x1/s8p7ItS1IzQRWmoMJBMmOhHdmr4h4mpjpm5D3AuZYQrXbis77Rdt/RY7qE3tk IkOBhR0DruMYAHEQ3IfBPImz+JPruL9SJHv3ec4i9qgI9qnhqBYtCgQ9lQgXVV4eYgmA naTHUnJabnKc6x7G9FrXcRPSSI9k4/Zl/T1Xrl4D30WMv/Wf2KegqlWerqiERyH6Wq1Z dJAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=TgWQ86Sk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id x20-20020a170902ea9400b001cf9d88a0desi758581plb.242.2023.12.07.00.42.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 00:42:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=TgWQ86Sk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 4C464806A41C; Thu, 7 Dec 2023 00:42:22 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229936AbjLGImC (ORCPT + 99 others); Thu, 7 Dec 2023 03:42:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35382 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229379AbjLGImB (ORCPT ); Thu, 7 Dec 2023 03:42:01 -0500 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0E65BC6; Thu, 7 Dec 2023 00:42:08 -0800 (PST) Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3B76ZReY028237; Thu, 7 Dec 2023 08:41:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=rSh9gO+7aiqSoK8Q0lTevNd0WDRcePzWVmY+H4lC+2s=; b=TgWQ86Skox2ngP92/AHRjO6uGQri+nVsQT60Co7ZCF9RcnBWT6G5CPjfhh4wtwzflKiw 5ourggAIvgApMYg1d1qBiyFrUkv8l3ZnQ5liV8oXKZWwHUTE8TG6ROb5+KAk0nk6e+UH IAvxgwlurW7t+IZit5W9DtfXGa6ZdZED2X/IPCOJnZ3cVrrEqguQjY0DerdX/WP4c4Dh 2Pqn88qktg/VbBMqwcX+q3G0N/6TsJxkfBTsZRIEHqFgD97I7FIVRplTJ9ojbB729sHu NTuGTu9csAhDNgz2poFwcajygeksG2h7kyUnW1o3eSCFXZoeOXkSCpraJsI8iRzoBqnV cQ== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3uu0w514dp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 07 Dec 2023 08:41:54 +0000 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 3B78frKl003843 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 7 Dec 2023 08:41:53 GMT Received: from [10.218.45.181] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Thu, 7 Dec 2023 00:41:47 -0800 Message-ID: <4819834c-b861-a507-8d6c-94a05760a03d@quicinc.com> Date: Thu, 7 Dec 2023 14:11:43 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.3.2 Subject: Re: [PATCH v8 08/10] scsi: ufs: ufs-qcom: Add support for UFS device version detection Content-Language: en-US To: Can Guo , , , , , , , , CC: , , "Bao D. Nguyen" , Andy Gross , "Bjorn Andersson" , Konrad Dybcio , "James E.J. Bottomley" , open list References: <1701520577-31163-1-git-send-email-quic_cang@quicinc.com> <1701520577-31163-9-git-send-email-quic_cang@quicinc.com> From: Nitin Rawat In-Reply-To: <1701520577-31163-9-git-send-email-quic_cang@quicinc.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: 7hIEbJMi7CCPYkmSsF6w3a_9GmidTbVt X-Proofpoint-ORIG-GUID: 7hIEbJMi7CCPYkmSsF6w3a_9GmidTbVt X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-12-07_06,2023-12-06_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 mlxscore=0 suspectscore=0 bulkscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 clxscore=1015 impostorscore=0 priorityscore=1501 adultscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2312070069 X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 07 Dec 2023 00:42:22 -0800 (PST) On 12/2/2023 6:06 PM, Can Guo wrote: > From: "Bao D. Nguyen" > > Start from HW ver 5, a spare register in UFS host controller is added and > used to indicate the UFS device version. The spare register is populated by > bootloader for now, but in future it will be populated by HW automatically > during link startup with its best efforts in any boot stage prior to Linux. > > During host driver init, read the spare register, if it is not populated > with a UFS device version, go ahead with the dual init mechanism. If a UFS > device version is in there, use the UFS device version together with host > controller's HW version to decide the proper PHY gear which should be used > to configure the UFS PHY without going through the second init. > > Signed-off-by: Bao D. Nguyen > Signed-off-by: Can Guo > --- > > v7 -> v8: > Fixed a BUG introduced from v6 -> v7. The spare register is added since HW ver 5, hence exclude HW ver == 4. > > --- > drivers/ufs/host/ufs-qcom.c | 35 ++++++++++++++++++++++++++++------- > drivers/ufs/host/ufs-qcom.h | 4 ++++ > 2 files changed, 32 insertions(+), 7 deletions(-) > > diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c > index ee3f07a..968a4c0 100644 > --- a/drivers/ufs/host/ufs-qcom.c > +++ b/drivers/ufs/host/ufs-qcom.c > @@ -1065,17 +1065,38 @@ static void ufs_qcom_advertise_quirks(struct ufs_hba *hba) > static void ufs_qcom_set_phy_gear(struct ufs_qcom_host *host) > { > struct ufs_host_params *host_params = &host->host_params; > + u32 val, dev_major; > > host->phy_gear = host_params->hs_tx_gear; > > - /* > - * For controllers whose major HW version is < 4, power up the PHY using > - * minimum supported gear (UFS_HS_G2). Switching to max gear will be > - * performed during reinit if supported. For newer controllers, whose > - * major HW version is >= 4, power up the PHY using max supported gear. > - */ > - if (host->hw_ver.major < 0x4) > + if (host->hw_ver.major < 0x4) { > + /* > + * For controllers whose major HW version is < 4, power up the > + * PHY using minimum supported gear (UFS_HS_G2). Switching to > + * max gear will be performed during reinit if supported. > + * For newer controllers, whose major HW version is >= 4, power > + * up the PHY using max supported gear. > + */ > host->phy_gear = UFS_HS_G2; > + } else if (host->hw_ver.major >= 0x5) { > + val = ufshcd_readl(host->hba, REG_UFS_DEBUG_SPARE_CFG); > + dev_major = FIELD_GET(UFS_DEV_VER_MAJOR_MASK, val); > + > + /* > + * Since the UFS device version is populated, let's remove the > + * REINIT quirk as the negotiated gear won't change during boot. > + * So there is no need to do reinit. > + */ > + if (dev_major != 0x0) > + host->hba->quirks &= ~UFSHCD_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH; > + > + /* > + * For UFS 3.1 device and older, power up the PHY using HS-G4 > + * PHY gear to save power. > + */ > + if (dev_major > 0x0 && dev_major < 0x4) > + host->phy_gear = UFS_HS_G4; > + } > } > > static void ufs_qcom_set_host_params(struct ufs_hba *hba) > diff --git a/drivers/ufs/host/ufs-qcom.h b/drivers/ufs/host/ufs-qcom.h > index 11419eb..32e51d9 100644 > --- a/drivers/ufs/host/ufs-qcom.h > +++ b/drivers/ufs/host/ufs-qcom.h > @@ -23,6 +23,8 @@ > #define UFS_HW_VER_MINOR_MASK GENMASK(27, 16) > #define UFS_HW_VER_STEP_MASK GENMASK(15, 0) > > +#define UFS_DEV_VER_MAJOR_MASK GENMASK(7, 4) > + > /* vendor specific pre-defined parameters */ > #define SLOW 1 > #define FAST 2 > @@ -54,6 +56,8 @@ enum { > UFS_AH8_CFG = 0xFC, > > REG_UFS_CFG3 = 0x271C, > + > + REG_UFS_DEBUG_SPARE_CFG = 0x284C, > }; > > /* QCOM UFS host controller vendor specific debug registers */ Reviewed-by: Nitin Rawat