From nobody Tue Sep 29 13:19:51 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (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 1E0FF37C92A for ; Fri, 7 Aug 2026 11:08:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786100893; cv=none; b=jKVdOUAuflWuDVztzaNH0B9PTNCaJCM1bWSxsvuFgKM36u9t2K8VBfdg6p/L//dwgy+Xi2k7+k/Vfd9uMDXNMOtK4DMhdtuG1F5TG+NppOJVBlcA4v96v1x6udAbfF94NViHKhXr4fcL4afC/bAVMKOA82/UL3Y6jIQtzI2dUb8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786100893; c=relaxed/simple; bh=ab4w8kAlsLeeZoPBf4+pwel3RUxwrQTDv2eg2AaFm3A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sGqjeVkjBLGmoVyVsSo/dGgy+B8K/WXXXIoI6a0+lZ4LkvGVmFbdsl0Y6Y/07SwIJRrzgCR88hW8IUoXezwyg1TkDMZ81n3bK3ZsI4EJXC3AUN3op/0oM1v6tiDX0H0GT+1W3u1LDua/K+Y8v2a85c8NKDSJC2HKr5dWQ7SN0pw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=hSVOCwcf; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="hSVOCwcf" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 6F0141A149D for ; Fri, 7 Aug 2026 11:08:07 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 45926603F0; Fri, 7 Aug 2026 11:08:07 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 4ACE911C37640; Fri, 7 Aug 2026 13:08:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1786100882; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Cl+MrkhTI98XR5CEBmWrLiHyfW5jBWSrkGOaLvL5f9Y=; b=hSVOCwcflpoE9WFuPxQtrI38oGIxWAO9geBNbdw9hNKKRS+20MG10sxS80WNtYfpDg9JWo kkIjddxRZtqn6S9p3MCwI2pgi3uvdBQ31rcuJZiyKk/UeiJwBsLvIsTKh4xhkNsiQ9S2j/ 0DnjeznS6Lh/g5+2ipqdy/F/cxPZ+IRG7P4kf7/3exEpNqJFd8GWTAA0uXlwuDGXdG3LYy ilvMHDCaRNiJJdk8ryX1EWTfYCRF608/y719qQyIuMo6BNW6NfzMqOyoeI5QQEj0gZ7wDY vidyHZm9eAnkJrT4iJJy+Tb02vcjXcmQ5zCn1wBDY0bz/lA0oLo4M/0UV25HOw== From: "Diogo Ivo (Schneider Electric)" Date: Fri, 07 Aug 2026 13:06:57 +0200 Subject: [PATCH v3 1/4] mmc: sdhci_am654: Move tuning_loop to local variable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260807-am654-sdhci-v3-1-acc91d7d7e50@bootlin.com> References: <20260807-am654-sdhci-v3-0-acc91d7d7e50@bootlin.com> In-Reply-To: <20260807-am654-sdhci-v3-0-acc91d7d7e50@bootlin.com> To: Adrian Hunter , Ulf Hansson , Faiz Abbas , Judith Mendez Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Pascal EBERHARD , Thomas Petazzoni , Miquel Raynal , "Diogo Ivo (Schneider Electric)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2101; i=diogo.ivo@bootlin.com; h=from:subject:message-id; bh=ab4w8kAlsLeeZoPBf4+pwel3RUxwrQTDv2eg2AaFm3A=; b=owEBbQKS/ZANAwAKAQa+fFtWXslFAcsmYgBqdbyGasACcCgr3CUnpIQscMjNQACAA+9iU2CEf 0p3Ow/piCeJAjMEAAEKAB0WIQTma35o1i1081e8B2UGvnxbVl7JRQUCanW8hgAKCRAGvnxbVl7J RZ8AD/wJlPwpve+fPu3KdmOzraDgc66RaJLC6huvcFxH1yP0oh5Pgce0whTqnowQQbAxzzOeM94 l5JxOXVLYV+f09VseY83zRYhM7BYXbbSp1ZL7kvcW6Z6Wq2tFd946so8Pl8dKmi/m9AVQRS6UBM QP9b/wz4olViNabwYNniwq0i5LP0wVqhUxa7epJZWVVHXHwAd84JHs5nYdeaJwT6EWzdqQrrQDi uKNr1OKKGByva/bn3msutoCtfcWucjVqcMz6alB/7tMNjhWJ2Ljo+aDA7f5J6USvwgECT5dSgr5 BJVHDlOXvBv7SAcgQe20KS/lu5H2lFETmX4ZUKVrpjWBwyzd30XXBlz4FNuEiq0A2vAuUPXr/Ly rXXzB4F5Atmekr9tkeYWk73WfRK4Wp16hjFAoyVF4DNaANyaQFMPF4weDsH284NwdOG8ME+thwu iOpPTkSjQnskYKupPfkp0/v9JpzvjJUZjWXUOWJJkcs3yyBdfv0NTncXxK6k0S9I97h8P004Qfw UzTnj3VKtV3Y+NCYv1ziTqEFhhpFA0yiPomQm4cZHcpLKzRHEOkh/byVzaAFLpej0Wb0D79zDqy x+WfYuauOikcr3XRGd5DEfEMJ+FRsGol8LuooGqw/abMUKlNheC2zRvMi+Nzgsd2/sLYi3qT5Ib PX6lQRkbVqpzBpg== X-Developer-Key: i=diogo.ivo@bootlin.com; a=openpgp; fpr=E66B7E68D62D74F357BC076506BE7C5B565EC945 X-Last-TLS-Session-Version: TLSv1.3 The tuning_loop field in struct sdhci_am654_data is only used within sdhci_am654_platform_execute_tuning() as a loop counter that is initialized to 0 in sdhci_am654_init(). Since it shouldn't persist across function calls, otherwise every failure expends its "budget", move it to a local variable and remove the struct field along with the now-unnecessary initialization. Signed-off-by: Diogo Ivo (Schneider Electric) Reviewed-by: Judith Mendez Acked-by: Adrian Hunter --- Changes in v3: - Collect R-b from Judith and A-b from Adrian Changes in v2: - New patch suggested by Sashiko --- drivers/mmc/host/sdhci_am654.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c index d235b0aecfdb..35c3efd92112 100644 --- a/drivers/mmc/host/sdhci_am654.c +++ b/drivers/mmc/host/sdhci_am654.c @@ -151,7 +151,6 @@ struct sdhci_am654_data { u32 flags; u32 quirks; bool dll_enable; - u32 tuning_loop; =20 #define SDHCI_AM654_QUIRK_FORCE_CDTEST BIT(0) #define SDHCI_AM654_QUIRK_SUPPRESS_V1P8_ENA BIT(1) @@ -576,13 +575,14 @@ static int sdhci_am654_platform_execute_tuning(struct= sdhci_host *host, struct sdhci_am654_data *sdhci_am654 =3D sdhci_pltfm_priv(pltfm_host); unsigned char timing =3D host->mmc->ios.timing; struct device *dev =3D mmc_dev(host->mmc); + unsigned int tuning_loop =3D 0; int itapdly; =20 do { itapdly =3D sdhci_am654_do_tuning(host, opcode); if (itapdly >=3D 0) break; - } while (++sdhci_am654->tuning_loop < RETRY_TUNING_MAX); + } while (++tuning_loop < RETRY_TUNING_MAX); =20 if (itapdly < 0) { dev_err(dev, "Failed to find itapdly, fail tuning\n"); @@ -806,9 +806,6 @@ static int sdhci_am654_init(struct sdhci_host *host) regmap_update_bits(sdhci_am654->base, CTL_CFG_3, TUNINGFORSDR50_MASK, TUNINGFORSDR50_MASK); =20 - /* Use to re-execute tuning */ - sdhci_am654->tuning_loop =3D 0; - ret =3D sdhci_setup_host(host); if (ret) return ret; --=20 2.55.0 From nobody Tue Sep 29 13:19:51 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (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 41D9F43231B; Fri, 7 Aug 2026 11:08:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786100897; cv=none; b=PciZyi7kDWamtGRz6v4l41OzjoZmbmYLVbYMmay6xjJpagHq3coUngo2KEouAUgrGOJlKfoHigrAZNbal7erqgjwYL87N26MoiVnOWnz+V3Xw0SNtjxJ/uPLUP2wbyEvU+fSlM9EmLw5UROgIsAy2cn8HfXHp0TbtCuy4if/Bjc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786100897; c=relaxed/simple; bh=2nAeTl62TZ3E3MzXNkINWnyKUZQFPBcDDBjFIvldhOc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TNUiY7a2lgBrk4qegL+b3mNWpWLpJmGwKqnLWm8t1oCFpz6h+v4yUl8/7jvE+sBcQ49ifCo6hA3F/BsKa6BKZbikv3GuUdae9pDBcvj8Lkom7JO8UhxI23GaiIeS8lgBL3kOfH7GsxdqXMGKroDiEx2jaQ2S3sTaI7Iq27DQkbs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=2YVvBvX0; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="2YVvBvX0" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 27B734E41138; Fri, 7 Aug 2026 11:08:13 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id B1170603F0; Fri, 7 Aug 2026 11:08:12 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id DB69D11C3763D; Fri, 7 Aug 2026 13:08:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1786100887; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=mqTdp4VNGoRNfNcN6pXkPIhNk4PjJ8EowcOKUjQat60=; b=2YVvBvX0c3oioWWXGGeaakh67VAm3Hp4nVICyPsUUy/AyI70A3zz7AaAKJY+hA19nrhiSE 4CI1HGrR3j46aT+6/qeD8fwShgNqbIJODQvtKECGJxLUuz/c+efK+oiNrb+dDbBRr35r16 I4iDLaZSgh1ldjLo8hTaSy+qqKRCxdx5NWeaUqNES0pHCLPcsvYbyvLLXeVkhFAO43VLyq Kd56svtpiPm4xT6kVajwk2wqMaMoYR7sKK/zjb306WiZxOQpk5aVxKc8WsimtKjGmCMpQO 7BkGr4g+gbvZHPVI4LbsquC5fGxqKt+H2wv5rxpxpF3DPefobZwxHiiJDX/J2Q== From: "Diogo Ivo (Schneider Electric)" Date: Fri, 07 Aug 2026 13:06:58 +0200 Subject: [PATCH v3 2/4] mmc: sdhci_am654: Reset command and data lines on failed tuning Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260807-am654-sdhci-v3-2-acc91d7d7e50@bootlin.com> References: <20260807-am654-sdhci-v3-0-acc91d7d7e50@bootlin.com> In-Reply-To: <20260807-am654-sdhci-v3-0-acc91d7d7e50@bootlin.com> To: Adrian Hunter , Ulf Hansson , Faiz Abbas , Judith Mendez Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Pascal EBERHARD , Thomas Petazzoni , Miquel Raynal , "Diogo Ivo (Schneider Electric)" , stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1437; i=diogo.ivo@bootlin.com; h=from:subject:message-id; bh=2nAeTl62TZ3E3MzXNkINWnyKUZQFPBcDDBjFIvldhOc=; b=owEBbQKS/ZANAwAKAQa+fFtWXslFAcsmYgBqdbyGMzxaMkvcOzuUmVmUNk2G2sIcOKGEMOFN9 DiRW0o+T7qJAjMEAAEKAB0WIQTma35o1i1081e8B2UGvnxbVl7JRQUCanW8hgAKCRAGvnxbVl7J RRjZD/4tvjsMomCd7Ut/P5EETzl2mVz6INYcBym/HhhD4syP1oGJpTkrGOQvAIbtOJgfbCBGA0l vLuZh3+pTSzfjlspDP7M+dyNaWYGeyaZfTHR7szHALRlj6zukXtVeOIrSeWpeTrR6gVFoEapGN1 5ffaTMcSstGucuDWqcuFYtQhyLfXLF97IqTPGYE8HNFAKJ0dECf2LLS0LjNh5oLZcOHYwcTzFcW SQtk2PsLGXT9amPR+MFKnIB/lxsz0FMjgTIx4U2TSI2UMSP3rRsQ/Xneh9ws+u56MuY7SnfnBNm WQLy0NbAAid5sTihZ0WPCGiuhsPXByltfzQF3hDrg+C79yx+Zg0jw/6aPfq0onhOwATOkueXeBX 80ZeQue3OBeKBcBJkwdfjSemLhVnvapZDPZ1pWccCdQNfa7IxByuSuuA/diK8ttNij1NTHVNK/0 5k99fqBfBdyFoXxD+LlzZGEP6TMNyOMaVJAIj9sIjIOYyUCS6MF6FVH6sXBwl1ddQ2+DzZqwIWl Cgs5XwlzZNiCxHOiwBCNmO84Se2qROpjkIdLhpvw01V27XW6XvMEdHYG8ewzlPWV2hRGQ6MAQ0D qMwekTkSACKO8GBWns+n/C1Z0FiJkuspVdpkrEVjVqWh1Lm2+PI60v91DmDRe3uaNOQsTEdMhEv OMt1GJ7V9m1QSJQ== X-Developer-Key: i=diogo.ivo@bootlin.com; a=openpgp; fpr=E66B7E68D62D74F357BC076506BE7C5B565EC945 X-Last-TLS-Session-Version: TLSv1.3 The CMD/DATA reset after tuning should be performed regardless of whether tuning succeeded or failed, since tuning data may remain in the buffer in either case. Move the error return after the reset so that the controller is always cleaned up. Fixes: de31f6ab68a3 ("mmc: sdhci_am654: Reset Command and Data line after t= uning") Cc: stable@vger.kernel.org Signed-off-by: Diogo Ivo (Schneider Electric) Reviewed-by: Judith Mendez Acked-by: Adrian Hunter --- Changes in v3: - Collect R-b from Judith and A-b from Adrian Changes in v2: - No changes --- drivers/mmc/host/sdhci_am654.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c index 35c3efd92112..0db587e702ac 100644 --- a/drivers/mmc/host/sdhci_am654.c +++ b/drivers/mmc/host/sdhci_am654.c @@ -442,15 +442,13 @@ static int sdhci_am654_execute_tuning(struct mmc_host= *mmc, u32 opcode) struct sdhci_host *host =3D mmc_priv(mmc); int err =3D sdhci_execute_tuning(mmc, opcode); =20 - if (err) - return err; /* * Tuning data remains in the buffer after tuning. * Do a command and data reset to get rid of it */ sdhci_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA); =20 - return 0; + return err; } =20 static u32 sdhci_am654_cqhci_irq(struct sdhci_host *host, u32 intmask) --=20 2.55.0 From nobody Tue Sep 29 13:19:51 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (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 C15CE4322E5; Fri, 7 Aug 2026 11:08:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786100902; cv=none; b=dvmNrvD9upsGuTdDNlkOw1hhz+KoFU2YvOpDlhR1KByb4hCNyA1uqubiul1gtCU8snj2YtrxOstoOLS4FqjpNpXV4WtogUmoXkQdNuf742r4CSeNrHlRwQ6f+xD6hqk7BKx/qoMZYhYOCnEH6M4YOaEDldVvE6De9eGDtZkEcDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786100902; c=relaxed/simple; bh=30w+kpGh9AnDjqMH4hZYwCCOGX/oL0j1bvmiA3bbbX8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d7N7C9Os//aSUUu1eClC2LSXR675V6/OPd2ujAfWi5/3OOQ3xnbwC8YCILu0Sci1Pd8LzFalqVFn07iEii/RJfUVQU/r5bJevIJoPbvQxi9Rpy51y3MRU7zHvCJVAPGvnGuOm+1xLALoR2OOk8gtDMiPKivxWco/RNNncnwn4To= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=CK2D6kEy; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="CK2D6kEy" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 4C42C4E41138; Fri, 7 Aug 2026 11:08:18 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id E0EC8603F0; Fri, 7 Aug 2026 11:08:17 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 3C93C11C37643; Fri, 7 Aug 2026 13:08:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1786100893; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=lPfb7vESp6jqo92rJ1VcUPSee+8qeHzCzuXzKQdueN4=; b=CK2D6kEyN5j+jTUWkUU4PdW6XlIhEFuj3Ot0RLqj59GUSF3d9ZJ6O7QokoCyKeZp9o2N2+ I5216Ju7hGrLjOFgmGzATnk9lKK0vm4aFH8zdbLi11y2wr5LNm4VdkTq8WWjZCPgB7aIO2 ZLCgNMzrzq7b47mQ/NAuMUhi2Zahi9YtBH0PqOpvh689BCnmtqhsbL2WYy5kQMktCVVxVF YPR63vdtTCB3VRCCJ2WoTBOV99IDKLe3j/ezhMORUO9wISjQKZkcPs6fOPT9dFxLrF/kyv uAQv0UaJGfOovo2bm28K8XT0LsikfvCxuY2iaq/LzQc0nPJLoFXHrdnw2q1sww== From: "Diogo Ivo (Schneider Electric)" Date: Fri, 07 Aug 2026 13:06:59 +0200 Subject: [PATCH v3 3/4] mmc: sdhci_am654: Clear ITAPDLY on tuning failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260807-am654-sdhci-v3-3-acc91d7d7e50@bootlin.com> References: <20260807-am654-sdhci-v3-0-acc91d7d7e50@bootlin.com> In-Reply-To: <20260807-am654-sdhci-v3-0-acc91d7d7e50@bootlin.com> To: Adrian Hunter , Ulf Hansson , Faiz Abbas , Judith Mendez Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Pascal EBERHARD , Thomas Petazzoni , Miquel Raynal , "Diogo Ivo (Schneider Electric)" , stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2760; i=diogo.ivo@bootlin.com; h=from:subject:message-id; bh=30w+kpGh9AnDjqMH4hZYwCCOGX/oL0j1bvmiA3bbbX8=; b=owEBbQKS/ZANAwAKAQa+fFtWXslFAcsmYgBqdbyGDmYPlvTreHeSXJu3CBMcJO5quUb0RQBKZ ZhKJxnRDs6JAjMEAAEKAB0WIQTma35o1i1081e8B2UGvnxbVl7JRQUCanW8hgAKCRAGvnxbVl7J RbBED/9vqFR5CYwi8IGJY4JMj6gNzGU10N4iCWYR+zRTAptVSQvB5wUlbelBfDYsPxhe2qqVMRV E2EKuXwJ4sArXlCsthjCKS6iRqDOYpDoXrhQLVNoAvIi58MygwCsXTSmuAqWT2iEJCZnOadPM74 aqchFOMVduym5uaCG0QYty5Lfuo61LJu/KOgnKNUYkgblPpAaTUyiyhqanXqO+fHH8Ja2Q8SxLC zkFdRWmzSbKXx/++22BDvhCA3oQmfpkKZpau/M/a2DhQ4JEEVmLZQETsnSiWo5bYQoUvjT3RyA2 /b+NxoksldMKJ1J3nifjazvHxSKbWNYRm30B2ALuTPN9szVUV7QEdnRI6sI5CjM3SKYk3UzP9FP 1dNha7oJWZY+otuMBla9xJzezP+hMVwcELDdWl1Q6oXgeebrUHWzIVf4NK7f/W+6lu70F+GNNqO 0ax6b4hpr4J1ksdO78go0mgVZ+vD0frvp0PrFeD2R+9we7bykIgZNU4BRdOC4xOxUCDPrQ+A95f QwQ13jgV9u7Fbnfa8pMjFfB5BlZ5oDDq+oB48GghSMOcErULqs7pU1MwRzxfKNGVkFIXTFanKxl ApQeXBIG2epYXcpi61oGEdNgrwNoy4yfSV0xtuxq+N8IkPh15D8ZYIaFKzRknold/gnbnXMt49A gTEdd/vjw2+AQkQ== X-Developer-Key: i=diogo.ivo@bootlin.com; a=openpgp; fpr=E66B7E68D62D74F357BC076506BE7C5B565EC945 X-Last-TLS-Session-Version: TLSv1.3 When tuning fails, stale ITAPDLY values can persist and interfere with subsequent I/O accesses, for example in DDR50 mode in cards with no tuning support. Move the ITAPDLY enable setting out of the tuning loop to after successful tuning, and explicitly clear ITAPDLY (delay and enable) when tuning fails so that we are sure only working values are actually left in hardware. Fixes: 901d16e46296 ("mmc: sdhci_am654: Add retry tuning") Cc: stable@vger.kernel.org Signed-off-by: Diogo Ivo (Schneider Electric) Reviewed-by: Judith Mendez Acked-by: Adrian Hunter --- Changes in v3: - Collect R-b from Judith and A-b from Adrian Changes in v2: - As suggested by Sashiko clear the values in itap_del_sel[] and itap_del_= ena[] so that they agree with what is written in HW and subsequent runtime_sus= pend() and runtime_resume() can never write stale values. - Remove now unused timing variable --- drivers/mmc/host/sdhci_am654.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c index 0db587e702ac..8ce10422bba0 100644 --- a/drivers/mmc/host/sdhci_am654.c +++ b/drivers/mmc/host/sdhci_am654.c @@ -527,7 +527,6 @@ static int sdhci_am654_do_tuning(struct sdhci_host *hos= t, { struct sdhci_pltfm_host *pltfm_host =3D sdhci_priv(host); struct sdhci_am654_data *sdhci_am654 =3D sdhci_pltfm_priv(pltfm_host); - unsigned char timing =3D host->mmc->ios.timing; struct window fail_window[ITAPDLY_LENGTH]; struct device *dev =3D mmc_dev(host->mmc); u8 curr_pass, itap; @@ -536,11 +535,8 @@ static int sdhci_am654_do_tuning(struct sdhci_host *ho= st, =20 memset(fail_window, 0, sizeof(fail_window)); =20 - /* Enable ITAPDLY */ - sdhci_am654->itap_del_ena[timing] =3D 0x1; - for (itap =3D 0; itap < ITAPDLY_LENGTH; itap++) { - sdhci_am654_write_itapdly(sdhci_am654, itap, sdhci_am654->itap_del_ena[t= iming]); + sdhci_am654_write_itapdly(sdhci_am654, itap, 0x1); =20 curr_pass =3D !mmc_send_tuning(host->mmc, opcode, NULL); =20 @@ -584,10 +580,16 @@ static int sdhci_am654_platform_execute_tuning(struct= sdhci_host *host, =20 if (itapdly < 0) { dev_err(dev, "Failed to find itapdly, fail tuning\n"); + sdhci_am654_write_itapdly(sdhci_am654, 0, 0); + sdhci_am654->itap_del_ena[timing] =3D 0; + sdhci_am654->itap_del_sel[timing] =3D 0; return -1; } =20 dev_dbg(dev, "Passed tuning, final itapdly=3D%d\n", itapdly); + + /* Enable ITAPDLY */ + sdhci_am654->itap_del_ena[timing] =3D 0x1; sdhci_am654_write_itapdly(sdhci_am654, itapdly, sdhci_am654->itap_del_ena= [timing]); /* Save ITAPDLY */ sdhci_am654->itap_del_sel[timing] =3D itapdly; --=20 2.55.0 From nobody Tue Sep 29 13:19:51 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (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 29896431A50; Fri, 7 Aug 2026 11:08:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786100906; cv=none; b=raN3GCSKpAt4Vn2iH0CUvRcxELCl4ty62sJd3C82Dgqnx1NWclqy4PQ6qpHlskO3PbQOAQIO8OgrL2o16gU7Ehpkw/SBIFaoX++2NOlzC6fHp18fM7WG7tjBcHgFYvmLtk1/Yp/Cf5JbrTRB3iuHDXqj90Yzb76Gx3L+XdxR52g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786100906; c=relaxed/simple; bh=MvKTpSoJLS1Tsv+qqpUwBPeZzzuUxhGSfRJPoMvJk0Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R2Y4Ci1TLlQFpnj1Kk4Lq0lGpkzLNkJsmkIfK4tXN/CsiHz8gUgNJ//0e6a3cxidrAqhsrAN82Jsa9fonXOS+wdboSIm9inSDppnLQc31UP/AwKlJbQARrqYgVoY5LctGMq7OuFTIfQRn8IYhKGZtZcuSN89IX0zm+QCAEly36o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=zGvm/e/W; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="zGvm/e/W" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id A4F4C1A1499; Fri, 7 Aug 2026 11:08:23 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 3C114603F0; Fri, 7 Aug 2026 11:08:23 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 70A8B11C3763E; Fri, 7 Aug 2026 13:08:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1786100898; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=VEzqHnAEn0wyInSm191WpGS97AIDyDdPo22NJJAP/hQ=; b=zGvm/e/W71cR2mJh6o7Age4WAOCZE6WvXJNuF1Yq8KRepHRkZC8ALTCaMmVr64cOSf5HoC wz194KcZjbmggWB11OoMymWlZ5f4Zr4f9MSgwsVKB2JzWjK3NsObVBMot3rzQj8J/ptNd4 XBToab/8BAS/1K8RQiFj4ouv0OaBZRPILP4MUj3quC2t5ud0UlyZKgsjm85m01TWP973ur QT+w63tslBF1PH1eT14Ll3ay8Ne1p8dDidlB2LVwTI0EMLjd3WIOOO8vBdRA64NctkPkp7 U/4xsftwgQ29ibaxMTEH2YsYpttGD7dYevAQk/IFPh1nuNWCfa+o47jhzyeOBQ== From: "Diogo Ivo (Schneider Electric)" Date: Fri, 07 Aug 2026 13:07:00 +0200 Subject: [PATCH v3 4/4] mmc: sdhci_am654: Fallback to DT-provided itap delay on DDR50 tuning failure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260807-am654-sdhci-v3-4-acc91d7d7e50@bootlin.com> References: <20260807-am654-sdhci-v3-0-acc91d7d7e50@bootlin.com> In-Reply-To: <20260807-am654-sdhci-v3-0-acc91d7d7e50@bootlin.com> To: Adrian Hunter , Ulf Hansson , Faiz Abbas , Judith Mendez Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Pascal EBERHARD , Thomas Petazzoni , Miquel Raynal , "Diogo Ivo (Schneider Electric)" , stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3181; i=diogo.ivo@bootlin.com; h=from:subject:message-id; bh=MvKTpSoJLS1Tsv+qqpUwBPeZzzuUxhGSfRJPoMvJk0Q=; b=owEBbQKS/ZANAwAKAQa+fFtWXslFAcsmYgBqdbyGc3ZTfUhOBFOtcf85baIPzhGb4E/jZRrW3 aqoi0bATwSJAjMEAAEKAB0WIQTma35o1i1081e8B2UGvnxbVl7JRQUCanW8hgAKCRAGvnxbVl7J RbXaD/0bsagFKXUd69puBmGUAdHR+4exOXztDZ9SVQbWFrA5Z1REaDFuOK/mUGyu89Ayz/Q6NSJ NZ7hffgGyyqM7WQlgVS3AiGzRS6bZaqonLg+vigkTGhTk5abCqK54RZC7SF5/GEYTNs1q/FHjLW 1lewZ2RCIv+MMCrmFJ4wCjFpqHE2198nDBP3ED+iduIO5XTIV6iQgyXbkeSCJemKabrMhR3Uszr Z58FmTzgQLG2hG3NPkkleBBHxWIk4j3eFmuJwztxddOouEio5IDOW3irCRdmMblt7if7o5X1VDq rm/8j02R3iRzzBZh+G30ybMGhRjTioQ3KGVQ7pBMH0M7WhgGbvCHv/3IKtAZhn8L2U5kGYDin0I n67T7Cbbommr2U2LbNvH6+/Ft3lsnmCzrpNj77VD9V0p/b8CzxwpuROi4FVijcA5yDKbU+HneVV 29zl4zX9zK6OHIjOuH4CLJSB0m8jov4Q5mNNLEn4v1FDhVXFOc5V8oCemRYAHUSqs3VHZRJq/uZ QG3LtX2R3gWxJt5AYeuZFG/n8jsh8Fw/W69OOHLTn7VPvEbkKR//SIsJt712qOs+OFqrK3XFhOH kjVMzZeSS3cf9iiMpGs4vKS5+8VEleAWp7zAl9Y2lTuOVhcJl/bN3013wcwHi2dV2qIQ0bB+P75 Lds9ltLZUFywRrQ== X-Developer-Key: i=diogo.ivo@bootlin.com; a=openpgp; fpr=E66B7E68D62D74F357BC076506BE7C5B565EC945 X-Last-TLS-Session-Version: TLSv1.3 DDR50 mode is not required to support the tuning command CMD19, meaning that calibration may fail on cards that do not implement it, in which case a known-good itap delay value should be programmed into the host controller. Do this by reading the (already defined) itap delay DT property for DDR50 and, if tuning fails for this mode, fall back to the DT-provided itap delay value. If the DT does not provide a value for DDR50 fallback then this simply disables using itapdly. Fixes: 901d16e46296 ("mmc: sdhci_am654: Add retry tuning") Cc: Signed-off-by: Diogo Ivo (Schneider Electric) Acked-by: Adrian Hunter --- Changes in v3: - Collect A-b from Adrian - Add debug print when applying DT fallback values Changes in v2: - As suggested by Sashiko save values read from DT for DDR50 in separate variables in order to keep them across multiple tuning cycles without overwriting them. --- drivers/mmc/host/sdhci_am654.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c index 8ce10422bba0..8edfab5012ed 100644 --- a/drivers/mmc/host/sdhci_am654.c +++ b/drivers/mmc/host/sdhci_am654.c @@ -126,7 +126,7 @@ static const struct timing_data td[] =3D { NULL, MMC_CAP_UHS_SDR104}, [MMC_TIMING_UHS_DDR50] =3D {"ti,otap-del-sel-ddr50", - NULL, + "ti,itap-del-sel-ddr50", MMC_CAP_UHS_DDR50}, [MMC_TIMING_MMC_DDR52] =3D {"ti,otap-del-sel-ddr52", "ti,itap-del-sel-ddr52", @@ -144,6 +144,8 @@ struct sdhci_am654_data { u32 otap_del_sel[ARRAY_SIZE(td)]; u32 itap_del_sel[ARRAY_SIZE(td)]; u32 itap_del_ena[ARRAY_SIZE(td)]; + u32 itap_del_sel_dt_ddr50; + u32 itap_del_ena_dt_ddr50; int clkbuf_sel; int trm_icp; int drv_strength; @@ -579,10 +581,19 @@ static int sdhci_am654_platform_execute_tuning(struct= sdhci_host *host, } while (++tuning_loop < RETRY_TUNING_MAX); =20 if (itapdly < 0) { - dev_err(dev, "Failed to find itapdly, fail tuning\n"); - sdhci_am654_write_itapdly(sdhci_am654, 0, 0); - sdhci_am654->itap_del_ena[timing] =3D 0; - sdhci_am654->itap_del_sel[timing] =3D 0; + if (timing =3D=3D MMC_TIMING_UHS_DDR50) { + dev_dbg(dev, "Failed DDR50 tuning, fallback to DT ITAP\n"); + sdhci_am654->itap_del_sel[timing] =3D sdhci_am654->itap_del_sel_dt_ddr5= 0; + sdhci_am654->itap_del_ena[timing] =3D sdhci_am654->itap_del_ena_dt_ddr5= 0; + } else { + dev_err(dev, "Failed to find itapdly, fail tuning\n"); + sdhci_am654->itap_del_ena[timing] =3D 0; + sdhci_am654->itap_del_sel[timing] =3D 0; + } + + sdhci_am654_write_itapdly(sdhci_am654, + sdhci_am654->itap_del_sel[timing], + sdhci_am654->itap_del_ena[timing]); return -1; } =20 @@ -758,6 +769,11 @@ static int sdhci_am654_get_otap_delay(struct sdhci_hos= t *host, } } =20 + sdhci_am654->itap_del_sel_dt_ddr50 =3D + sdhci_am654->itap_del_sel[MMC_TIMING_UHS_DDR50]; + sdhci_am654->itap_del_ena_dt_ddr50 =3D + sdhci_am654->itap_del_ena[MMC_TIMING_UHS_DDR50]; + return 0; } =20 --=20 2.55.0