From patchwork Wed Apr 9 07:55:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luke Wang X-Patchwork-Id: 879613 Received: from EUR03-VI1-obe.outbound.protection.outlook.com (mail-vi1eur03on2058.outbound.protection.outlook.com [40.107.103.58]) (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 A7E4B25A627; Wed, 9 Apr 2025 07:55:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.103.58 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744185306; cv=fail; b=ZNTou1O+Ch4QgcoCl3gWnilwc9i8AgrtY40sK7utQhyJCYOFXeORSIoOMnLi7o6biRP+64DhiZVESlYc0xYLdgAzTkaOKTuOVKEInCWHz8eND+RHBKwG8Brnnz7Tt2pc+oxoS9JDE89puQG6xk3HS1ip6BWZFK0k2LPTtEqRUYw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744185306; c=relaxed/simple; bh=/SMEICLu2VT05IR8wlHZC+nXxZEHTIUufQhi6GNqGYo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=uo8HSajCOerzV3a/rfS411a4hJvpl0VOl+ns4tdcZRy6PEMRjzvXIOoCLGbG8jWz8tBIbNrXzjyIVOmontsNiuiwqcerO3WHTSp9QMtvpMQo+WYWvXAHk92My5JQMvrHtFpYz2V5r4qKo/kTwQCfEXMiQe71F+0NB0xWVZvJp64= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=U8c6Na/8; arc=fail smtp.client-ip=40.107.103.58 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="U8c6Na/8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kBoGFqi4VTkltgQAgFnBmJeM5jkHbWPF4QOqbZnxaBt0i3Q7Znw0+K8vtjnWLJyJIR4s/QjC18TT2S75uIjjo+SkMrgk6nirxs9HN8tCmVSccvhsfdrv6Pm+FuPOYh3q7dPj+BWXRHKi3DI2O5nJOADzuRbhijfXdLb699MzNMVulEknufnXuD5D1XnquuatGzKHTF93RUrTvI09hxET4OKK+s8AyUgtNuA8GYFmgE5vJi5Pz1pfHJsMM4o7Fhyobq4E/hz6nsTfO2EVkKKqC3UhfEF6a+Pp+qnvY+26mLaVhN5h3sxwp8Qw6VRlnSlUL9M18JOrun+VEyH4wS3rzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hC2Jf6/Ko9DZJiS3g24lc9ZEWl7IV9VGyorYPoiH4fc=; b=p4OabQdKD2C+gdLMYhhzP9eGk7qtgLq2V3jLaI+NFxFNtdO/bwpuojJKVymVO3LECbYQFKXRjAhSjLglK3f+SeTPE5TQQzo9O8t7q5YPK/TuCS9t578KW8lav2L2RNXb9/PSVbxR3f8/+BU+i0S7f8wMD796jk+maimTmCwmOAIzz83AnmojVZ15IJA/OSW5dnqswFtsUzmUbjrRtB5jjMZvoSlqflApRIvjEuGJ2EugT9gHKLzWHITwwEA3sEOqdEaiMXFPyM2GZSlRZ9IR2a101s67jGUbEZO6JXJA0yExSj4bhf9bdETD60GgzUfHB1x0/tB4J1vgml5Ahial4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hC2Jf6/Ko9DZJiS3g24lc9ZEWl7IV9VGyorYPoiH4fc=; b=U8c6Na/8y7jqwBlN9qlm70OLju0slwGFv1soEBcG9Ua0h42ktLKTALFWf7YJ9QrwIUoawlh6yUHxDH/QvJ6QIkIYEy7qLC8AiLhlvzGObLms5tyrUvQCbmz4WGNsQOc6GtMqZePKsLOYZz33MrBXtqkHgB0GiSX8WmgdQpiWrceZXVg7z4NIljvsg1GJ/ZJW2bSn/+RibvwB+QjxNMOX+748+vQqQaI5s6uysAFACPfyHsiVrfYRE8TIHUiV+3hvOEFuEnWS9v1WCz0Aha04fu1sAsBD+byHdHSeLM4XkfbJG7EELWjEYonWMcvwyzNh3EdSDg4QvSOiLjPxrJofSA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DU2PR04MB8567.eurprd04.prod.outlook.com (2603:10a6:10:2d6::21) by AM9PR04MB8196.eurprd04.prod.outlook.com (2603:10a6:20b:3e9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.31; Wed, 9 Apr 2025 07:55:01 +0000 Received: from DU2PR04MB8567.eurprd04.prod.outlook.com ([fe80::4db:3dc0:c292:493a]) by DU2PR04MB8567.eurprd04.prod.outlook.com ([fe80::4db:3dc0:c292:493a%5]) with mapi id 15.20.8606.033; Wed, 9 Apr 2025 07:55:01 +0000 From: ziniu.wang_1@nxp.com To: adrian.hunter@intel.com, ulf.hansson@linaro.org, haibo.chen@nxp.com Cc: shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, imx@lists.linux.dev, linux-mmc@vger.kernel.org, s32@nxp.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/6] mmc: sdhci-esdhc-imx: widen auto-tuning window for manual tuning Date: Wed, 9 Apr 2025 15:55:48 +0800 Message-Id: <20250409075550.3413032-5-ziniu.wang_1@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250409075550.3413032-1-ziniu.wang_1@nxp.com> References: <20250409075550.3413032-1-ziniu.wang_1@nxp.com> X-ClientProxiedBy: SI1PR02CA0026.apcprd02.prod.outlook.com (2603:1096:4:1f4::11) To DU2PR04MB8567.eurprd04.prod.outlook.com (2603:10a6:10:2d6::21) Precedence: bulk X-Mailing-List: linux-mmc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8567:EE_|AM9PR04MB8196:EE_ X-MS-Office365-Filtering-Correlation-Id: 928410b3-eacc-431e-43f4-08dd773bd4eb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: P3Z66H3ce2FmzAjF3QDroH89vj+P1nGB9kWtJchARjPJHTZQCtHUCikm8fyo0g609diS/Eel30eQ03ZUVBqNatUS0EDAdD3kp4dKeIhMxn2IbiqlmbSW5sXpcWGKPvzkQuHN0c2s695TKJ1YmJAf/wWd7llAF1LtgAhjsL4ygWcFmJgf6BZpnMeClSXDPnAIZTt1HKfCawG0bjl0EFrFS+KPKtP/psBeTIq3Y3A/ihHB4sMffigf95nSqnlXinaE7DWzAaIPEzr5Km5NUC5hybF7RWrcgTltxWtz1Zhk1mfgusG4pe7iGOMLtZEaG3d+q/6udZcHBJzW4KFiSoLO+Zpmpu899v6pIi1TcfersQWv9N2RNxGBzz5WcOrIP32gf7lDwRz933xl7pBEB8MxY2IOPWoFn8lOGPpQR8kuAi91kxTncqikRsxAtA7c0bMLRw4LrxFGo9wPLc1/X9/RU0h0Xz8YTfTlohY/yh/TG2RPRBB+OVZtSiUtKdLZxzubqtTJ4Dg8hxw9AmTYCaS2JLP7vcaVcj4AiiT2KID5uFuAxUOTzJWlz7LcKk0ksvydI/YWc80TCnHGqKmkxvtBqqw5eCOdoz44I61ZYvXRPBbzLIpAvFxncjeV2nVMgvzPch71NHz52E98QGwTRvPdjcCtXY6Tb1X4RRh+MIJ9DWYgrEOjQYLteLixwtyFb/P0QNrsXF3VMygMg10mUbxG6HxMM8lRstPJlXgKPNsMIOrjI6H9msH/NISoAJUReg2wIlr40hFXu6sBrMWqWk9aMB2i3CzglfWe1Q8aJ4XYXHmC3EmNWWkShwpkghKiGH/J7PKWf5om8hRQv6CjbmIunbmYuA2OUStCwbxi+6CZ6hDq2I33w/5r4H4Anf0zRbpT/lSeQiPG5d2A7sKJsCw8aYV93s9NpgUkWUdWAPPIxlnGq+enEC9GzDHUF3Y7keKTBkz04O9Z/RGG2ap6veryoZ09x7GOOXTRhQVtjgK2bsmyahn4U2x39r35Alb3sqBt/rzFIMxUhaoFYTOU+2/H9oXZizy7UVprKMw/9wm5us3cRDo5GS63sIHI8xPXce68TxxO8N/a5puuHwOebo98B1UemmMfiQuPH7BgchR1DWzy0iUCr1eDSTI8TMsvaWi5fDHsstUoETpI9g5YMGhNRFHC5OpLr69n35taD8a5yfNVdfwK4C4fUb1Ird/Srd5H2T2OsoIAGgnhapG4TOsDB1Utgb4KGhybDQz71fELrkecoBf2BuBItvzP7QEDMzHdLYrm5+NFCSSN2vTaxL+Z9jFLkPq/Bmw5SCm9knxPW+3uzFAFqaU8+FAGu3pEIs7SZlcr/nYkwv6r6lSNEnBsvtT/mkW2TnoaAcFWwzzV+0CyhxWl0MF9iHHHGqotf4IbcxPh8UrgSXSU2N3blgp1UOWtR46+y2r7L9UCHbcoMAhZIOsulk54pLamGiuispBEu/r2uZltrQy6NCESan9VsQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8567.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(52116014)(7416014)(376014)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 5oPndS0BCRlP7xbzFDqXW4t4iSYfg8QxU5O1buCbCQn5WoGbQZFos4I8Wq/KWIGPiyO8AwopO0fCN40A46ZQINduxoqTGp6bIcYhkaOAGuvIZDac6ZC7TW3SJv0JoDPwCTkW/JI2iYMlloQCZ4BZQx6UPua3veoAUiIakU64iYnOSb7yvvTsr7iFA6yq0OEURkK61bfAewAutqnSH1mEAnoznOHfwBs0tV5OnOgZTmNm/0vwpd0XHxA14nb6zamSLjzQ2VToQTRVl8sYEpmveZL8LKDVx2e3oCATl+hRyIenuzDunbBQ/zzCSf2r+9mpCpvHf7Un1qTvjhpH1gTKmqt7iZnOpQ6UdWmCEpz8NP0qnNgsznBwkss5fuhMT6K2zyc7aPtDa8mgakiNQSwXk5iD6bzzveM457beZCfZalk0AnnC6vvLPgBU8LzuRAt0OLK0I9Ag+RRokp4BX8T5W9E9mYOMJBXZ/DI2k4gZxWbDm73PkVUXRTV8GA9F+Chk4tjgAQDFsf2qShByHmvcA0zTpJbWlDo5iRAOoxy9RvHtWsILRCkYnkW/UBYbXNoSHLKOwJoIvY9S7NzkGjwpnwz4waQgm/meIjwOJqoOU871pUFEkhGzkuB1QbX78qCU1br+peoKCOJrsw2KKHOpOWHW7LYJlgWHlb+1UAZkopPfkT+b57hiOWabRJmO1dHXN9oA7aHLobBiRmZ/mXAnLz5WpdhA9+TNMqP4C2k6uT30fg4dfr/hxgMWsc36Rq1DbhhkOTImGBf23NbgmjcV51IHo4a9mUq2uO2WWRoSw2XdCYD4oOjiHr9idqXd+8FV/9dQxKzGz6d1Ls8O8sBZsGELhoXJkm2/9vj8JinuP1u11ycpK5kPWXwfrOn7Vl7PYKfJtgjOjnxVVmexvAv3TZOimTTkqjgiiDBgqlAaDolcP5vbyTbrXa9EU8jAmqY+Mvk5cGTIgc1Hm7In6+VxBw7Moj4lbtMEainsiBQTbKguamDRlKEvXMm21WDiBdnklBG2jLSFFteKuA8FV1UhBIHJ4c+Ey1E8kP7Hmt9/4j6FJhHMud5zxjDlyXPfvYxzrsaBN+WJoMPef/dav/a/DNHyanAh3aayHMnMYKu+MLfjRaBvqLcx8ZmmZrDN1Y2G5+Q3L68NvWaT/ae9zcZr+T1ZWnbKK94sM2UYfp41RbQU8EXZj4yzWnZ56q7NZw8CNOjtNq5+W2nms/qGrkg73o44ODq1OQaWUMgnavEFsYn7+iSEm76qU+mfuyAxDSLOOm+lfmyY6wtsFAD6QplIN9/IEN3ceiTX38T2v82F4i7Q761I2af6GrMvC+DjDFuZoRHcWs8/Z89i30U8JEvJUBO+zsgK22iPLo4bUW7QwSoHh1HgzHMMaW+3wtrvZX13OZsnQriLjj5bNjcyWQ9UpmG0VVkOX00KPIduvZ403RzTz9xRQYBdE56D21i/cIGBnWCdHwGP3RdesqZtAiWdL9br77IAJCBTfv1grO6DHYnMdH3oamMrBq7xh1lAKRutVDyT3U6lZ9ijwy77zW1S5v+LCKnkWovKsB22VmeMOCYSvQ0N2mndPnsJoM6A19T2 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 928410b3-eacc-431e-43f4-08dd773bd4eb X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8567.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2025 07:55:01.7647 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WUVUuXIeMupgyZxs1llU32arbwNoJAi0jFYgP51zoPqN1UeXVeNdRpv4YSD2TiQQoc6o4uMeDvzOJWXu7tL+gQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8196 From: Haibo Chen Expand the auto-tuning window width from 0 to 3 for manual tuning to account for sampling point shifts caused by temperature change. This change is based on hardware recommendation, providing enough margin for the auto-tuning logic to locate valid sampling points. When config the manual tuning final sample delay, need deduct the auto tuning window width according to the IP logic. Signed-off-by: Haibo Chen Signed-off-by: Luke Wang --- drivers/mmc/host/sdhci-esdhc-imx.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c index d91b65439544..46da155fe582 100644 --- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c @@ -85,7 +85,8 @@ #define ESDHC_TUNE_CTRL_MAX ((1 << 7) - 1) #define ESDHC_TUNE_CTRL_STATUS_TAP_SEL_PRE_MASK GENMASK(30, 24) #define ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_PRE_MASK GENMASK(14, 8) - +#define ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_OUT_MASK GENMASK(7, 4) +#define ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_POST_MASK GENMASK(3, 0) /* strobe dll register */ #define ESDHC_STROBE_DLL_CTRL 0x70 #define ESDHC_STROBE_DLL_CTRL_ENABLE (1 << 0) @@ -243,6 +244,7 @@ struct esdhc_platform_data { unsigned int tuning_start_tap; /* The start delay cell point in tuning procedure */ unsigned int strobe_dll_delay_target; /* The delay cell for strobe pad (read clock) */ unsigned int saved_tuning_delay_cell; /* save the value of tuning delay cell */ + unsigned int saved_auto_tuning_window; /* save the auto tuning window width */ }; struct esdhc_soc_data { @@ -1206,6 +1208,7 @@ static int esdhc_executing_tuning(struct sdhci_host *host, u32 opcode) { int min, max, avg, ret; int win_length, target_min, target_max, target_win_length; + u32 clk_tune_ctrl_status; min = ESDHC_TUNE_CTRL_MIN; max = ESDHC_TUNE_CTRL_MIN; @@ -1245,6 +1248,23 @@ static int esdhc_executing_tuning(struct sdhci_host *host, u32 opcode) /* use average delay to get the best timing */ avg = (target_min + target_max) / 2; esdhc_prepare_tuning(host, avg); + + /* + * adjust the delay according to tuning window, make preparation + * for the auto-tuning logic. According to hardware suggest, need + * to config the auto tuning window width to 3, to make the auto + * tuning logic have enough space to handle the sample point shift + * caused by temperature change. + */ + clk_tune_ctrl_status = FIELD_PREP(ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_PRE_MASK, + avg - ESDHC_AUTO_TUNING_WINDOW) | + FIELD_PREP(ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_OUT_MASK, + ESDHC_AUTO_TUNING_WINDOW) | + FIELD_PREP(ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_POST_MASK, + ESDHC_AUTO_TUNING_WINDOW); + + writel(clk_tune_ctrl_status, host->ioaddr + ESDHC_TUNE_CTRL_STATUS); + ret = mmc_send_tuning(host->mmc, opcode, NULL); esdhc_post_tuning(host); @@ -1659,7 +1679,11 @@ static void sdhc_esdhc_tuning_restore(struct sdhci_host *host) writel(reg, host->ioaddr + ESDHC_MIX_CTRL); writel(FIELD_PREP(ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_PRE_MASK, - imx_data->boarddata.saved_tuning_delay_cell), + imx_data->boarddata.saved_tuning_delay_cell) | + FIELD_PREP(ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_OUT_MASK, + ESDHC_AUTO_TUNING_WINDOW) | + FIELD_PREP(ESDHC_TUNE_CTRL_STATUS_DLY_CELL_SET_POST_MASK, + ESDHC_AUTO_TUNING_WINDOW), host->ioaddr + ESDHC_TUNE_CTRL_STATUS); } }