From nobody Fri Oct 2 08:25:49 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 0115840F75E for ; Mon, 3 Aug 2026 13:48:39 +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=1785764922; cv=none; b=qt3SGm2mh6V5o0yExYLTuRfc3p3Ollt4EAIMVVStM2kj6895emcXmziCH5N20m183/XW1+EnrPth3F0ZULdNSDQRefoQ15yw89TSkksNjCUhmAqX5mvWZBIViK7H1m9eV+U41cRIkl8EzcsHoWGNqu6FTFDGjr31rYLZqDIroSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785764922; c=relaxed/simple; bh=7HsdpvugL+6rMC9Qu60vJ1TZoeYC4MFXvHaHtLdY6dA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mVKIelcGlxHh1NDb+jmHpo6Mb4oNbVDEUJ6hm82y2Ot3H3ZkfBiZpeli6xobix0sxHgrwz3YiI268mDVeVRT0P5w4O7vUzPXQGdVogzfsosQ/9qspkkNdqL8q1ZSWV9RnIWlQN01nlq6LIX2xBhH/pk+Zb3l2+HZEQz3iNOLmGs= 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=Y6wfiJn+; 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="Y6wfiJn+" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 8BC574E410BA; Mon, 3 Aug 2026 13:48:32 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 5F8386029B; Mon, 3 Aug 2026 13:48:32 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id DED8011C30CE9; Mon, 3 Aug 2026 15:48:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1785764911; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=d87jDoI5mf8YEsVB3GMXimCdOwrtahguDQZ53OXWn2w=; b=Y6wfiJn+bTmp0HSXLs/WlVKQ3RuXobtkF/uOFH5GsDgWZe9PWavSdKSTIESFyNkZdvD9Lr 0tss0QGWQqd0mASoEhjgII3F4704py8Hw2ITs0vn7/HWbgrL7VJM29gtZpmNHO52Eif54c Mzkkb608s6CfZI5GMQhGCyFAP8eWfcEwP05AyNkfZ0rmH10g/7msZ2NcXSivdb0V3diFVC tD21QcnySBN7/rGp6Y0ciYMQU8esUfT8cQ/BFRZroIcPeuCXlPbJKpL4rlLxpWi15zTEF6 8wJNVXILuXjHZ4KETCAKD88AVyHuC+JCxJSo9Zb2KqzNVqWmlikfqdNRqv8EOg== From: "Diogo Ivo (Schneider Electric)" Date: Mon, 03 Aug 2026 15:47:31 +0200 Subject: [PATCH v2 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: <20260803-am654-sdhci-v2-1-a5ee5be86133@bootlin.com> References: <20260803-am654-sdhci-v2-0-a5ee5be86133@bootlin.com> In-Reply-To: <20260803-am654-sdhci-v2-0-a5ee5be86133@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=1946; i=diogo.ivo@bootlin.com; h=from:subject:message-id; bh=7HsdpvugL+6rMC9Qu60vJ1TZoeYC4MFXvHaHtLdY6dA=; b=owEBbQKS/ZANAwAKAQa+fFtWXslFAcsmYgBqcJwrOzjkVzQScxBP1s/E1dQvv53GCiwWYVJS4 2nM+59UFJCJAjMEAAEKAB0WIQTma35o1i1081e8B2UGvnxbVl7JRQUCanCcKwAKCRAGvnxbVl7J RUm4D/9fJtcBWRnspSHr5An3hhOnyAERMwvDgJ/z9jfh5GW4tE2keRY8nh3xYbRwU2A9KCffkxI DvYPTz0/LGxw1NF6J2njBqOLBFI6H7PgxmtpYcISnEIETnWyYaWD3fTx/BF/nbwQD9+DyqA7Wtl zr9iLC7HQZo1Wr0gZxk/KIVsCSbe130kV3eqoROiec5ajUiJH143Jk5/2/2IMUnKCGIfqbe2JRz 9V90QOF7589vb6qnHVi5cwEQyO3831yrzi/h8OFhwZ306aD8FDAZuo5e92nbyD9/jWjOFyeo9TJ YApj7O9ceih3y+2/UsZnWWCgvK6Xg8wDD0na1GZsTKozWSgt068DD4SrusEf/QckAAx/dhN63V7 KxnPROvNg7qyN3LSohe+Iw1A79P3pOuxhMHTYTuFVgrjzkL/629+H7WxgUlYMnRz175K9Wb75yP 0XCfOu7fJFFekG+eSH3PJQ8r6eii/8od/xOyrQn7590yISjqGuARdE20nUyFEhdJzt17hAvE7W2 E8bXi4mMdZ0rFLYB426dlh4BYrjWMzjJSkq3QUSld1Pqnf3IYdaTIYJgv/ID2NAM+KlRcVQx7IL K51YgtznY0VFVO8Evl5JRjjneVULp1BhxXM5OfG0JTfH2ZvAwI+ecGRls8NuOaTx+M3Xg8aT72G vVwddR6RzVfJYsA== 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) Acked-by: Adrian Hunter Reviewed-by: Judith Mendez --- 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 Fri Oct 2 08:25:49 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 691564137A7; Mon, 3 Aug 2026 13:48:41 +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=1785764922; cv=none; b=mcXyt7jHzr5qcWpH3wKp7ZbdUmr9qEpmnUgkd0eFcVMVFgROrOnQostWB9DZRpi08L8aszcVfGYOn+Mch2yZeLv3zs42Mc7H0hDa6rgA1vgNzU4BlDN15cV47pXRL2nWqZVvXgwK68tdYH0rmj1FOIJVdV+i4J6VZ9njnTKr7lQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785764922; c=relaxed/simple; bh=rT3ptH86bpnU2R6as/GdHwEJ4HgXlvnNme2/S1QBSYI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fI23PBsGOLqeRAomz0LQyc4xkuVZXLoYosUGylE3TN2beQuLuZtJNl46JbYZ1HwDofNJurd0q9vFD/nXc1D/gtsAEPpvGiBFiyGr5BwOcubBGAuEO+0tIcJGKJppHYOjYUn0kxCV9S+Rr8EQORy8pzp/3PNxOet+i7iX2PjmvxY= 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=V5UwCJBy; 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="V5UwCJBy" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id DE0911A13D4; Mon, 3 Aug 2026 13:48:33 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id B31396029B; Mon, 3 Aug 2026 13:48:33 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 0E82311C30CED; Mon, 3 Aug 2026 15:48:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1785764912; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=o1LbfpViHVmYy3GskUHEMq4YaozXQDfyR2Qm33eTSZg=; b=V5UwCJByvZ900FvGzqtDlhv52eGHVAHQYWcC1OmoE1BBpwiQAuNJ3/atoKHP+HufabccOf OFZ4KLJexEb/knLiQOvxrk4ykMz5R7P3x7U3U7jJ+VhZsGUuE+0ukpa2Yxca/Q8Q8ZGa8g N70qWs/qbAAPLnIujbHjZEmoPmzi0bHjym1PPVFIDxZMcGeejOgpiTJ4epCYmlq0qNjuN0 1J/5R0Lag4HLD2We4OWIWrEBiPmdhe6pchmH6Xy7BnSGJwV2f0vEeWoMf1zsocuIl64pk6 g5JhYGtVgSIaFT+Nrwq7FW4DUvWCYrtrPzEH2ZlEVaXPShjRCO+cTCZcf2gwQA== From: "Diogo Ivo (Schneider Electric)" Date: Mon, 03 Aug 2026 15:47:32 +0200 Subject: [PATCH v2 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: <20260803-am654-sdhci-v2-2-a5ee5be86133@bootlin.com> References: <20260803-am654-sdhci-v2-0-a5ee5be86133@bootlin.com> In-Reply-To: <20260803-am654-sdhci-v2-0-a5ee5be86133@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=1284; i=diogo.ivo@bootlin.com; h=from:subject:message-id; bh=rT3ptH86bpnU2R6as/GdHwEJ4HgXlvnNme2/S1QBSYI=; b=owEBbQKS/ZANAwAKAQa+fFtWXslFAcsmYgBqcJwr+x7Rp2jL97wzdyOsd8yHl3JFQm3htYHIj 7ALqN+3O5mJAjMEAAEKAB0WIQTma35o1i1081e8B2UGvnxbVl7JRQUCanCcKwAKCRAGvnxbVl7J RXDID/4te5nj9A8f27J2h7fwZB1v1GHuq00DqSIeQUyzN/OnfaGCHnS6/TirT9YPNhNGMtqzVSY 5cDWBD7CAilN4/up29G2gUQeWes31hq9JYiuBV2uU/29fNiL2A+nWQlolo1jWLsujcOPQPp4JeU AcqJTVlZNHbiOBjpqKjj7Aqni2CzpdZLfoxbaRuaEaobOf3HV4LSnLMNy6Vmy3J9GALZLAtJ+YH Uu4VyBdwGMUvkXGP35DarTjB0z6yOEzGCxvOpzOqXsYfFioJfAxjUR/04HjjrSdgQ3bdLVi8h2E cQQbHt3rHDQIxnGar3IHNmMNQ4qtvOZweRIdmwXWxISwytjgaMUx/a3Ze73DGQ7IuY6P2DCupBQ /xWjqoK7LRhp2P90lIcjpkFGu1uhvEDqmnR7VY8OMrtzv/6ySecb9HYTrHaOn0y1KEWSufmPk8a vHHHYLtG35wAoUE8OIMpCI6f5gcZsBpAroddlIP7kf3VUZyglVzT9uYSGekbVipFs2K82qBwQ4J REuQF1rhWM33eLGLDMqi58bGXk3OK96tNOJ4/m9VUbr3gA9yd1qq31XhSRSxjMH9zSYyQjmTpTi dU3t/Br1HzaMMvQZKJLZNGigqpC0agnU4pypDFjvtd4KD1VUTxGCxHYoxIdoLr4PGMi6r8uVWcq CgsrjjMDzatMOGg== 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: Signed-off-by: Diogo Ivo (Schneider Electric) Acked-by: Adrian Hunter Reviewed-by: Judith Mendez --- 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 Fri Oct 2 08:25:49 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 6AE8F4137BC; Mon, 3 Aug 2026 13:48:42 +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=1785764924; cv=none; b=pkjvEiSCWLYP1dVxBTysR/Ob6qQmMMyDawwLLdeKZ87U5m4Cf3ApDso4MflrL2id1nLgbUl7i5pHPkkx28a/r6QFqq5HW0jI0AxYpyu9TbVjBSq/IoRa26PZcQRBzdQ6+YuNH4UMIB6BjdLNXrNofTm/5EoiF1//+S7aLbIaBCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785764924; c=relaxed/simple; bh=0u5xWPN4ZdyJWXeSBzxweANkC3ya7SX+Do0ONa+hznA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ioZTtWNgaGlFDDexhetjaYV+gMYh+FV9ba5DF0xhKXpAVY4ZNxUOJaTdS8ao1zja6gruGpWucV5OXCJT2cvLTXhDMLJ8IjdE2wlaqtX1dg8h3FYD8cPij/4/BzFufBMFp2W+1s7CUpDm8SHfEIk6aom03AEwz2iQfrB+mwsiG58= 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=MBnWuyRt; 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="MBnWuyRt" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 08E281A13D5; Mon, 3 Aug 2026 13:48:35 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id CB6BC6029B; Mon, 3 Aug 2026 13:48:34 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2C92511C30CEE; Mon, 3 Aug 2026 15:48:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1785764914; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=IpVD2kPko+0nHO0HXCDq6LiAOZ8sFT9utJYoi7KDyTE=; b=MBnWuyRtTM3qSG+OmvZ1BwItX4sHQGUm/bO2vtb6YMbd+Z0LuOz7MSFdCPNiXVN2zHPYvG fmLfA2JtFvQs7cHSGolLUCfxX54aIYWfAvAlCyPvTizr4jDyCyX8FkrULH7qDSpcu6Q15h GJxQzWeIc4+6AuZueIaD/oBkvTb1o/TNV+KlA4HK1iHldOPm1+FvOue+CTC98OUrgChVOw nIn0hAdOIhuVYaB2d32yLAPT3atN1kEs+9FaMM3OzA4x3Tw09TYkg8GWrOmcr+1wwAxnQp M+fvb9+h1GOucnjLb759CEMVcZpaHUjKYqhmOUc0sIF+P2WeUouigCy0THCVNA== From: "Diogo Ivo (Schneider Electric)" Date: Mon, 03 Aug 2026 15:47:33 +0200 Subject: [PATCH v2 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: <20260803-am654-sdhci-v2-3-a5ee5be86133@bootlin.com> References: <20260803-am654-sdhci-v2-0-a5ee5be86133@bootlin.com> In-Reply-To: <20260803-am654-sdhci-v2-0-a5ee5be86133@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=2607; i=diogo.ivo@bootlin.com; h=from:subject:message-id; bh=0u5xWPN4ZdyJWXeSBzxweANkC3ya7SX+Do0ONa+hznA=; b=owEBbQKS/ZANAwAKAQa+fFtWXslFAcsmYgBqcJwrUFIuDAJGfqhfZdm2aPT4VkvB8WoP6N6La dLaxIRhSyeJAjMEAAEKAB0WIQTma35o1i1081e8B2UGvnxbVl7JRQUCanCcKwAKCRAGvnxbVl7J RdSLEACHViKchOQOCgDqdScgyy3JnRYaVcyLu/GgdpCdohXigfH0zEMiNsor2oyMN7ySxNNYL8o 5vQwQhHLxme3GoJbPn84DsQ3LM2vriQ2Epm8aZtgT2c1AVE8UchlslOjS9tMGyHM5eQr+1lBTF+ Lf+71tIgnreWZsyQGnAuR25ZvWDUMp3owXoBS6YBTJxv1cm6Z8yFBDympyscgpyuGUmf6xYnr9M BedWmQvdYLNM66qfM3ulDCNSHFlCACETjrJKtjS8kY9ixjrKdMWyd/z1Gn2mzsVfOp8SkDHR2fy 6c75mUtK3BjExWeVslsOElc7fY1/5CNLvBey2KFoLM4VIYPq7Xxh+aOCXQixbgbsn8cH7RA5LE9 1UESJzRfNND2b3d8O4o5Km5avSU5QBwtPNjY8GxDkSJsCPJytuGERoQW+USq7g+0qfEu79BLLjL fAcqxt2N13oWMk0jBe+7RQabR16sJz0QchZJmRdKz1z98hEDdJ1HBnZR1snA1xOZYLP80sjsykJ hZokjWN/IGKytJ/Pv5Zo8yCZU+EAAZQDl5U43QeKG5vqeJUMv0SRMQzdlLMALauFvkSRJKoc7l4 lKRi8L/xE5lbfN3nP/MmIWN5mdWd5a/ne7LKuDQA8J8zrYqJPxGUJhVPTftGyT5Uo1Wp+hfLhk9 GUwmtZul3kKrzzw== 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: Signed-off-by: Diogo Ivo (Schneider Electric) Acked-by: Adrian Hunter Reviewed-by: Judith Mendez --- 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 Fri Oct 2 08:25:49 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 75C5342122C for ; Mon, 3 Aug 2026 13:48:43 +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=1785764925; cv=none; b=h3RNzKKkrItEMUlYNCvprQ/5vEomutsy/iGxKyJ2QZaNqEZKD0YSGxqSL2D2iLCt5PFtEnPIWXMECUe1syBdSU5tWnFFoZaI4OJNQB0XEr2YIBiGZXqZcsr9rRTWRnjb1oGqlm7psDK8p43suGhHAjndxrwLlPYQAJ00JVqSNWg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785764925; c=relaxed/simple; bh=lT+JEV0aFEKxlgkKQDL+bPnIS/8E0YX9GtsEONosqbE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Wed0/3rDNEXkuu8Y/8un3FKduG070NblJM69EK2hc3LUL3TfHpm6RnHVckPC7xtQPLEe2L6PeCFuyqZsbMj4Oc/Il6eBIWhHGTV8jRBjJ3N9u2frroxkom/hUpF5mVlzy2dHCfOuIYWIGHhxCdc/4gLMRaHontVhcdNqoL0Ng/I= 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=u87MwDiA; 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="u87MwDiA" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id A53561A13D6; Mon, 3 Aug 2026 13:48:36 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 7A6336029B; Mon, 3 Aug 2026 13:48:36 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 881E711C30CE9; Mon, 3 Aug 2026 15:48:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1785764915; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=/I3qV8RwQ6dz6kYeEH/ASz1b7/s47uUjXDhMGIZri18=; b=u87MwDiAu2esZx4A5OE0VkYuOMhP7oFrsMDlMavWx4WHHytAhEWgWCL/7RizoVhWqCp3tt 7mxg0SEbs6JiLpczqFY0rVZTOCwTqX3fJi7aftwaXo968LA5JSXEerY6Ty9MR0XXd/Vpvk BdEfYCBtc/LfqXS6NkjZrJ+kXHX6Yns5n3ZrvFfAVIPRkJJC9YsSGg+KqHUC0MBnd/2Lg7 5ZxBtWetDHo6oLYsTtmfEpIgGv2c1ljcJ7+av/ajXSQDJQC/lEjOUdtaY2vBOm78RQ8cIO zAWzM0HkPTzSbjUO2knBjugzJCgMG7lDnkCGzr8Z+JJ7ODUJp9q3SmXCXCemjA== From: "Diogo Ivo (Schneider Electric)" Date: Mon, 03 Aug 2026 15:47:34 +0200 Subject: [PATCH v2 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: <20260803-am654-sdhci-v2-4-a5ee5be86133@bootlin.com> References: <20260803-am654-sdhci-v2-0-a5ee5be86133@bootlin.com> In-Reply-To: <20260803-am654-sdhci-v2-0-a5ee5be86133@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=2965; i=diogo.ivo@bootlin.com; h=from:subject:message-id; bh=lT+JEV0aFEKxlgkKQDL+bPnIS/8E0YX9GtsEONosqbE=; b=owEBbQKS/ZANAwAKAQa+fFtWXslFAcsmYgBqcJwrjEEtYYtxm8RYVAFN64Io/5dCXwPevUzQ3 qnQJ/FmplyJAjMEAAEKAB0WIQTma35o1i1081e8B2UGvnxbVl7JRQUCanCcKwAKCRAGvnxbVl7J RWHzD/4jgRqpP6bdFGHzVxGun+a+5hLMIEtP9Exoq5oCt2rnJjuDKEynT1IgtzpejT01TijSMoN xrzyXUxZhOL+RiIth4j4+Zzg1z9JY2KuYrSCFGLfZGLkWWM2fkX6krcOKNNnUyHZyZpU0P7/mRY hgvi+QcIE415/7+1r+hGWAdeeXimnPmXXURfVMneDJw4FZevjqSP5A8froqFCXRQ78PM67TvTkn d6jUCitF3arduHzvfBzlz35H3HXa6pdo8TgnXGEfD9SA33FGo8KpblZXVI80p8oyBtqyK83wpsK wfWABpyk+jBi+ykJ5c5+RX48OKm8vox8bfz6Ma4bAVXm/zC1v+ptI9Vn8V+KI6yqk6WyrwCDsmD fbVQzoRGUCpEtbRa4yo9pIVCGTL3IVYekcAPX5BI6ATUX6cUIykTUysA286PH3nm7G5+3gAaEXN 0MgeQK0yvnbGgfIIPiX3Js4gHfc1kcN3S7BaNvqu6W9Zjs7x5/LjvJ6jCzpy9nTzAQ8M9UhmSqA 7U09OqpDjfc95cFaTURSk2SlxCr08CpuoxiZjgT5p/jreDlawbnEMYHaetrvd8vkA5xN0KhfeX6 /EY1KVXSvI8N2ebHUL5wJxdVaC8CyS3f3H0loTXqh/OKmCC8TS7hd09kPgbBnLFvPUn1GsvBaHL Z922Ngc1fNXYsjQ== 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 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 | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c index 8ce10422bba0..27ef79420eba 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,18 @@ 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) { + 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 +768,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