From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA58737B014 for ; Thu, 28 May 2026 08:41:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779957668; cv=none; b=YHN90p33bQNQdSmZG79CCoMGWc6Qd2PCwPPtQLm9xWSfCM+sN0Qk2kcYze22VFtz22S3HkK1T+rCxBijIWfC5fUTRhuPDNfHNorsXZlTMVVHMMtyJbBRm6Jd4xrfkZXrDH5vHFsI8PwGgJCnhJecq4GMW+lO+s8FAJoL97ADN0I= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779957668; c=relaxed/simple; bh=yOdeBiRTRbxTsFz2vy4M1LjC+LxmTda9ET1VQT78ITQ=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=HR7oEBmyF5HoQn5Wov0dld4aKCbOl1BSwHnieU2a1usWw7F0Y9V71JANYpke/CaK4onY7yADTa/MQWGHUor/Wsxa89sOuVGc3yeN11yPszVANmiGywwsUCvbFbCyDwjJMigVGq8OCVocg/Ol3oISbfYhQ66I9zxwi7r7ZWWarNo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=n0vNo9Qw; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=UQVLtv9V; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="n0vNo9Qw"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="UQVLtv9V" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64S71WKc1975625 for ; Thu, 28 May 2026 08:41:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 0ir8R8Z/AozA5z1osME2QAEHkBduKOUZz705xr/MzPg=; b=n0vNo9Qwzui822Bh jCZnADR7zkmkLHk+XZ7twC29cpLOcUzZkKO3B1omQkP2DWoHgeyOHWCfpaawRQNV Od1K5u+7mkYbpQpeYUT/8jP1hqnt9QEjQTwTT8B5inzjOWy3LslYU+tP34gVhr+W WVGLOGRrkJcWNBxxzx0jSZjjlyGzBEmDLEA36urLrhEeu2pAayN/uWN3Swmk9Y0c YMuFDTv7RoS9gCyDmEenlrqPQhEpLF7lh55Trnak7EHgIGCINtTmgKcxm1VHSa3S kCyzth4cX8o/RJIyUvb7vbTWj6SXS8xGiZm+ujbEGXzfNq40ApsgbifroG9Vs0V5 3k4BDA== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ee7y3t1n0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 28 May 2026 08:41:05 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-82fa2165c3eso8176873b3a.0 for ; Thu, 28 May 2026 01:41:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779957665; x=1780562465; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=0ir8R8Z/AozA5z1osME2QAEHkBduKOUZz705xr/MzPg=; b=UQVLtv9VQ5Kj4ZwN6fUc+oKYk53fKPi9dS/nE/H18DBPVzhnIRUGUeBztbCB0HqxU2 WQRcro3V+6r2m6UGGnIrc1n/qpfy12O5fU4GCNr3kuOzihYLjP8bBQ76zQ1b6eQf/asA 8SbWAb+LdliUX4P2fAxZGuKuNh5Twhp1WGl0ULdjoiQSHdACMzZp/H0XlUAOAGcdtB7S b4VRml7taRTPrC8nnFf/qxKDTI/bHuRUUGW4yuuva0HdXElGzbcTjvplIyFNFfFovdns dO9qSFQ3Md6WGZfuj5G06TvjqskFYWv4F2JsDgCnRCgfgy4afso/2BwSCjVEdkIoQYIX ah0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779957665; x=1780562465; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=0ir8R8Z/AozA5z1osME2QAEHkBduKOUZz705xr/MzPg=; b=clYiRffgtwiNYRg61G7+Aalodx7AHqqEBRhTbzt83H04CUSWW9Cayp0+R853W5FgTw cOAA6l/oJ2qKQ4gtbnHgsQTdWzxqhwyhbFTj4AYKCxFzHvpCe2lAOpaGP2iC3Q17iMnJ S3WM9V7pv6ph4Yno6PjhN858F1srQ0xSxPKy4+4w6+PDhKCUvWHcb7CSJyFn/99a1Cnh t12Vo6w4SG7CJR/+TTg51yQfPNxuoEQ+WAEnK1mv9T5HU9s6n8LIZzJaQwi5O/EbrZub qd/f7ukmnQXEvwMNU+DNZCjPCv/oEkh/hLzflwih/TRu3N6ShR+osJhv+LUGLSaS5xut tz/w== X-Forwarded-Encrypted: i=1; AFNElJ8AKuLQXGIJMPLbho/2G/QjC4nN5JWg2+l7kZbzRFc4mXqOkw8C2xSK0L7HqYk5TSIFcSQJLwDEzJrbVBE=@vger.kernel.org X-Gm-Message-State: AOJu0YyyS65KJUqJJtsdwhOg+q+ielK8sVnX2ceAM+lveqSmlkjLkWnG qpEomnf/uleb4/37Zyuy1Omp/ltvOvB2snDZLHxUccDTvVYFw9MynLQYso/yuqFuXwfdqCR2aOH pxT5Q9omxVru+wprOiTNbB6s3hl3DPsvOMxr+JTM5R3mXnSTQg20qSYBGSCytYKOzQfk= X-Gm-Gg: Acq92OFJA3DfMbfUSLpxnLHGzgiDasqVFzlkRNYB/csSuVEd6xer/hjarePqXdTUPMe vFk9o4FlysAmVjWY95TH/PBD8Ru6mtJc92JHrFGrzxKxksm2Q2eOSUib/lypOWDHX6RNKN8Wuny 9zV7k2teQu5CQ9Ehpw0k3VykxrVYPMCoZ9sNyRsH9zKg7c2cIphUvi4/B54T5Dc9HI6O++PHst+ Lt9gv+D888n6wHKBpznGHjg+219C8y56f89GP4IrPEEGbt5u9Ftg8MaSrvkZ9L8ffRV/Hf+a136 6RqqvWckBo7e5Me1HcTIdL8w4DC1kzGsDvTMUWg+s1trc4NiKJ1U96Hh/LWFa2tbkcrEPkzspPn a4TQ78P+qxKksG75VTw9C019ZgbJ+DlFFLPzaaLLHwn1XXN13Ic0jxMmu8upbeatW9ALS2bOhsV jymNfeQqmYXsoINGulmm6RTw== X-Received: by 2002:a05:6a00:180a:b0:835:405a:7e72 with SMTP id d2e1a72fcca58-8415f141d5fmr24673870b3a.11.1779957665099; Thu, 28 May 2026 01:41:05 -0700 (PDT) X-Received: by 2002:a05:6a00:180a:b0:835:405a:7e72 with SMTP id d2e1a72fcca58-8415f141d5fmr24673842b3a.11.1779957664542; Thu, 28 May 2026 01:41:04 -0700 (PDT) Received: from [10.133.33.247] (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-841d6e82bc6sm4207202b3a.8.2026.05.28.01.41.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 28 May 2026 01:41:04 -0700 (PDT) Message-ID: <330662df-b2e3-45df-a801-4e84573fa6ec@oss.qualcomm.com> Date: Thu, 28 May 2026 16:40:59 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] scsi: ufs: core: Add support for static TX Equalization settings To: Manivannan Sadhasivam Cc: bvanassche@acm.org, beanhuo@micron.com, peter.wang@mediatek.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, Alim Akhtar , Avri Altman , "James E.J. Bottomley" , Ram Kumar Dwivedi , Nitin Rawat , open list References: <20260527144055.2758170-1-can.guo@oss.qualcomm.com> <20260527144055.2758170-3-can.guo@oss.qualcomm.com> <35rqdgvdtf2jjjjdfajhhansmzzem2gllbw5olcopdmcdfdd3k@rqwlcht5uzsw> Content-Language: en-US From: Can Guo In-Reply-To: <35rqdgvdtf2jjjjdfajhhansmzzem2gllbw5olcopdmcdfdd3k@rqwlcht5uzsw> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Proofpoint-ORIG-GUID: vaIHeUoTVpO_nqSn82FTNcg_2ge83KzT X-Authority-Analysis: v=2.4 cv=JMYLdcKb c=1 sm=1 tr=0 ts=6a17ffa1 cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=qO2SoHkUHa4WZMVLpLAA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-GUID: vaIHeUoTVpO_nqSn82FTNcg_2ge83KzT X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI4MDA4NiBTYWx0ZWRfXykVUL1wMrIut N3K1W3VP0LW6FN1jwvu2JgrL7wifubN5O/iWk1CzourGXEWcX10D1NMpgS4Nzy4iqNjy3JbYRAQ xmXmjKvNo5EdFUnsiItqlGJwX0cM7VrImwizQdqYnpdsWi449WzxJwYUbI2Or+0/tOx99UVIdE3 XGDNzk6xQocGlpCt8NmI3MX69tAhwbPFB/dGbhFnSZzKmkpdYINo4ZhcHwFyCtb+4BerKou/gLP hG/Wgu/p+/fndUD0kBB5TVXcbB3YbJ07kVe8uti2Dqu+f8njqeMWzumQnfO/BGu5Jd0CjZZ6uJo l1P1BoZrSn3RAx1zVPERn6yOImNEKl2xKnwlzJ4vCClxU9Ll0+ED6WmDnsLkAQoHaE/za2bdCen iOUghuCZf2aDHUeIUBK6rCTwAvg4EIwtgKGXcXa7fUNbCkD1a1E3LTbhJv8bVU8iAFO04BlPPd4 LDIilizWe3bIBhK5/7A== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-28_02,2026-05-26_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 malwarescore=0 suspectscore=0 priorityscore=1501 adultscore=0 phishscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2605280086 On 5/28/2026 4:16 PM, Manivannan Sadhasivam wrote: > On Thu, May 28, 2026 at 03:24:37PM +0800, Can Guo wrote: >> >> On 5/28/2026 2:13 PM, Manivannan Sadhasivam wrote: >>> On Wed, May 27, 2026 at 07:40:55AM -0700, Can Guo wrote: >>>> Static TX Equalization settings and TX Precode enable indication from DT >>>> properties txeq-preshoot-g[1-6], txeq-deemphasis-g[1-6], and >>>> tx-precode-enable-g6 are board-specific baseline values. Values are >>>> provided as per-lane tuples: >>>> >>>> , [] >>>> >>>> Parse DT u32 properties with explicit range checks by using >>>> of_property_count_u32_elems()/of_property_read_u32_array(). >>>> >>>> When adaptive TX Equalization is used, these static settings are not final: >>>> >>>> - If valid settings are retrieved from qTxEQGnSettings/wTxEQGnSettingsExt, >>>> those retrieved settings override static DT settings. >>>> - If retrieval is not available/valid, TX EQTR runs and trained settings >>>> override static DT settings. >>>> >>>> So static DT settings are a fallback and are intended for cases where >>>> adaptive TX Equalization is not enabled/used. Adaptive TX Equalization >>>> remains the primary path when enabled. >>>> >>>> No behavior changes for platforms that do not provide these properties. >>>> >>>> Signed-off-by: Can Guo >>>> --- >>>> drivers/ufs/core/ufs-txeq.c | 4 +- >>>> drivers/ufs/host/ufshcd-pltfrm.c | 128 +++++++++++++++++++++++++++++++ >>>> include/ufs/ufshcd.h | 2 + >>>> 3 files changed, 133 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/ufs/core/ufs-txeq.c b/drivers/ufs/core/ufs-txeq.c >>>> index 4b264adfdf49..634ec039e129 100644 >>>> --- a/drivers/ufs/core/ufs-txeq.c >>>> +++ b/drivers/ufs/core/ufs-txeq.c >>>> @@ -1297,7 +1297,7 @@ int ufshcd_config_tx_eq_settings(struct ufs_hba *hba, >>>> } >>>> params = &hba->tx_eq_params[gear - 1]; >>>> - if (!params->is_valid || force_tx_eqtr) { >>>> + if (!params->is_valid || params->is_static || force_tx_eqtr) { >>>> int ret; >>>> ret = ufshcd_tx_eqtr(hba, params, pwr_mode); >>>> @@ -1310,6 +1310,7 @@ int ufshcd_config_tx_eq_settings(struct ufs_hba *hba, >>>> /* Mark TX Equalization settings as valid */ >>>> params->is_valid = true; >>>> params->is_trained = true; >>>> + params->is_static = false; >>>> params->is_applied = false; >>>> } >>>> @@ -1495,6 +1496,7 @@ static void ufshcd_extract_tx_eq_settings_attrs(struct ufs_hba *hba, u8 gear) >>>> } >>>> params->is_valid = true; >>>> + params->is_static = false; >>> Maybe it's me, but I'm not able to understand how you want to apply these static >>> EQ settings. In commit message you said, the static values should be used as a >>> fallback, but you just check for 'params->is_static' while triggering >>> ufshcd_tx_eqtr() which is supposed to perform adaptive TX EQ training. IMO, you >>> don't need any check at all for applying static setting. If '(!params->is_valid >>> || force_tx_eqtr)' condition is not satisfied, then the static setting should be >>> used. >> Thanks for the review. >> >> The distinction is between two different sources that can pre-populate >> txeq_params with >> is_valid set to true before ufshcd_config_tx_eq_settings() is called: >> >> 1. DT properties — parsed by ufshcd_pltfrm_parse_tx_eq_settings(), >>     sets is_valid = true, is_static = true. >> 2. UFS Attributes (qTxEQGnSettings/wTxEQGnSettingsExt) — retrieved by >>     ufshcd_retrieve_tx_eq_settings() (introduced in the 2nd series), >>     sets is_valid = true, is_static = false. >> >> Since both sources set is_valid = true, the is_valid flag alone cannot tell >> them apart. >> The is_static flag is the discriminator: >> >> - is_valid && is_static -> settings came from DT; they are a board-level >> baseline. >>   TX EQTR should still run to find optimal settings, which will then >> overwrite the static ones. >> - is_valid && !is_static -> settings came from UFS Attributes; they are >> previously trained > You use '&&' here, but '||' in the code. When you use '||', then I see no point > for 'is_static' check. The code is correct. My reply was explaining why the check is there, but not explaining the check itself. Original check in the code is (!params->is_valid || force_tx_eqtr). Static TX EQ settings are valid, so '!params->is_valid' is false, TX EQTR would be skipped. Update the check as (!params->is_valid || params->is_static || force_tx_eqtr) so TX EQTR must run when static settings are provided. Thanks, Can Guo. > > - Mani >