From nobody Thu Apr 9 15:00:53 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 256914014B2 for ; Mon, 2 Mar 2026 15:14:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772464446; cv=none; b=r+lOXtNqhcVx/jXCW2nd19IHPDYrBCmHutzf2CWRW/xF5ZGOiuZn8fxnq1lGsKR/n+YyaHxp/GxbrkVAAGWegBCkZ3DMKOeipTZ8KnpaK7EhkVb7GPF8ZqRpqNB/9HQyOslBih7un9/EeZ8hy80cV2KgoHRpAJiN4YLZXHuB6q4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772464446; c=relaxed/simple; bh=GcZr61TwOvUtUfWMRCxXjJRa5feWxGnGJ1rS2AAyvgg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SCL0XfGEh3Wx3URvJuZDKtCQkR5p/YjsZrkHNZ8B6T+e0rFrBMbPlOkJuaki8iWaTozl02roCgagyLIZ3lvVndqkgRaQEvMchWHxS84VMctx31ezPjpQ3BSO9pNf5cBElwNGL3oXNRX9nVe+5ueRxozifDXjAjvr8gWGlJ14bcM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=INDXboOY; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="INDXboOY" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4837634de51so18968485e9.1 for ; Mon, 02 Mar 2026 07:14:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772464439; x=1773069239; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sI0ZXWmHjNvtD6IpJHMeOdxd2SjR4noe2NBQlRy+ENQ=; b=INDXboOYioJXolxrreFaV52fmM4iqoD0lk6Pwlx3bt+UeLg14GZOhxbQf3X9907AY4 MonQk9crJxNYC/3qlrNsxFmqOluYwgcZrLpOmCy51Jx5Dx7osYcM3t1+QM+uX/os3Sas eSizHUyVo9q93Cg6UIxis01g0NTn1TI3mFVvnqIkUB1EMu/1pR7a7VyyVGZquDysh2E5 o7u5WzCJiS1rQyD8d78w7dQAtn14aF36T7Ia61ayjYz707h/1fTHyBdgbF+AP/hk0Cvf 8uKAvFrq3h6htsX9FBUzYkRhHo1linFuYDaMWannWkN873vgLp250fd/90NQ3P+TNUHc Cc5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772464439; x=1773069239; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=sI0ZXWmHjNvtD6IpJHMeOdxd2SjR4noe2NBQlRy+ENQ=; b=dYKF7/EnqL2iodAX4ZxZjV/LbeIOSaGpXqDgpLazVsaXULOU39xoqqUzOcT+jC1Kxn xPwjJVLqfbiWfb0B9yBJWi9EivpL2pkdMmcOPBtNXW6mHp16UiZRGBTzutbX1JXDEUKr bJ0TIhAHhO8+QMJAXT7nEnXfvj0DQEYCgXrAGDLYiVDgiuzHu6n5WEIJ0whLGsfFTEb/ h64qFLfYvNe6/ZxU1ZJHkdIQyoddPJtsX4Oq2QmIroQgrN1vLaU9w0cYoPNSQRJwkUJF YaKDisUoQ9PeCxgYlaorI/DtdLAnuqEBUITSSMu+xbaz9ezY7S97YP9teiyhRXG94GJM O4fQ== X-Forwarded-Encrypted: i=1; AJvYcCWqI5cPZuoY3SbU0alZoAkR7gY91CSiolWPt9PYGeQZgj/4xLE3u5r3mRySIwdbQMjAxRy/mbdE1K3J9Hc=@vger.kernel.org X-Gm-Message-State: AOJu0YyWnrgUPJ0ek22dv4YEWsUSKojQzVGjebOr1TZxH2VYEVDSOzDn fSB1yO1sH3t5INf1AKTUY/u0dwewJd6Mgd+UQnfYXPs5z+A0fLBfynaY X-Gm-Gg: ATEYQzwx4xcZZFkcr9fEs5VACi499Ma1QwELi2/mLRfbTUMaW9Yvecy5cJXdZxQKV3J ANWvskJKqBfXMKm29Nx3PZVu6l6vQlno3SD4iD1DPFBmUbYtAQGpBGPvPJ4qSOS0rgVWGH5y92G lOL1vjbUcak4w/gKxbGOKGvrQsrp1JEItwziQHIF/fEeIb1OKbP8k0/WEM/km9PVMe9xfbHtgNS 2p+TZ6fGZ+k5W0e8JbMoBkULAP2m4upefu8mj8WkCSznBxvdBHTA8FtsCC/4O6Gz0by+F/SXc07 B5osaqckTl0PtsK+glr5Svmt3OTNUIIOyXr8x8QJ4v95biB2uf0/yM8bmOgiVquErCt2YTbZ3MK iJgUv0CsQ5BkHXuSTWcjGz/rNUMsquRXjaIFNEnkTpjA9aXgEeMN6+JcPlmlQcV/scLKqUWltZd +XfU+BzJLTX4PXWaO9yDuAyPLJOfNwsgtVLdpWAQynjQDEtY2qaNHkRalQ8PtWfVx9GA== X-Received: by 2002:a05:600c:5395:b0:483:709e:f22d with SMTP id 5b1f17b1804b1-483c9c24797mr190414855e9.27.1772464439170; Mon, 02 Mar 2026 07:13:59 -0800 (PST) Received: from ipedrosa-thinkpadx1carbongen12.rmtes.csb ([67.218.235.131]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483bd70e692sm437240265e9.7.2026.03.02.07.13.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 07:13:58 -0800 (PST) From: Iker Pedrosa Date: Mon, 02 Mar 2026 16:13:27 +0100 Subject: [PATCH 06/10] mmc: sdhci-of-k1: add SDR tuning infrastructure 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: <20260302-orangepi-sd-card-uhs-v1-6-89c219973c0c@gmail.com> References: <20260302-orangepi-sd-card-uhs-v1-0-89c219973c0c@gmail.com> In-Reply-To: <20260302-orangepi-sd-card-uhs-v1-0-89c219973c0c@gmail.com> To: Ulf Hansson , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Yixun Lan , Adrian Hunter , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti Cc: Michael Opdenacker , Javier Martinez Canillas , linux-mmc@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, linux-kernel@vger.kernel.org, Iker Pedrosa X-Mailer: b4 0.14.2 Add register definitions and delay line control functions to prepare for SDR50/SDR104 tuning support: - Add tuning register definitions (RX_CFG, DLINE_CTRL, DLINE_CFG) - Add delay line control helper functions - Add tuning preparation function This infrastructure prepares for implementing the SDR tuning algorithm while maintaining all existing functionality. Signed-off-by: Iker Pedrosa --- drivers/mmc/host/sdhci-of-k1.c | 62 ++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 62 insertions(+) diff --git a/drivers/mmc/host/sdhci-of-k1.c b/drivers/mmc/host/sdhci-of-k1.c index 9425bde6a72541bd628997e91f957072a6266c25..34a1b9c359193be7dd5f07d1f3d= 6565b5f40e7ff 100644 --- a/drivers/mmc/host/sdhci-of-k1.c +++ b/drivers/mmc/host/sdhci-of-k1.c @@ -72,6 +72,23 @@ #define AKEY_ASFAR 0xBABA #define AKEY_ASSAR 0xEB10 =20 +#define SPACEMIT_SDHC_RX_CFG_REG 0x118 +#define SDHC_RX_SDCLK_SEL0_MASK GENMASK(1, 0) +#define SDHC_RX_SDCLK_SEL1_MASK GENMASK(3, 2) +#define SDHC_RX_SDCLK_SEL1 FIELD_PREP(SDHC_RX_SDCLK_SEL1_MASK= , 1) + +#define SPACEMIT_SDHC_DLINE_CTRL_REG 0x130 +#define SDHC_DLINE_PU BIT(0) +#define SDHC_RX_DLINE_CODE_MASK GENMASK(23, 16) +#define SDHC_TX_DLINE_CODE_MASK GENMASK(31, 24) + +#define SPACEMIT_SDHC_DLINE_CFG_REG 0x134 +#define SDHC_RX_DLINE_REG_MASK GENMASK(7, 0) +#define SDHC_RX_DLINE_GAIN BIT(8) +#define SDHC_TX_DLINE_REG_MASK GENMASK(23, 16) + +#define SPACEMIT_RX_DLINE_REG 9 + struct spacemit_sdhci_host { struct clk *clk_core; struct clk *clk_io; @@ -102,6 +119,50 @@ static inline void spacemit_sdhci_clrsetbits(struct sd= hci_host *host, u32 clr, u sdhci_writel(host, val, reg); } =20 +static void spacemit_sdhci_set_rx_delay(struct sdhci_host *host, u8 delay) +{ + spacemit_sdhci_clrsetbits(host, SDHC_RX_DLINE_CODE_MASK, + FIELD_PREP(SDHC_RX_DLINE_CODE_MASK, delay), + SPACEMIT_SDHC_DLINE_CTRL_REG); +} + +static void spacemit_sdhci_set_tx_delay(struct sdhci_host *host, u8 delay) +{ + spacemit_sdhci_clrsetbits(host, SDHC_TX_DLINE_CODE_MASK, + FIELD_PREP(SDHC_TX_DLINE_CODE_MASK, delay), + SPACEMIT_SDHC_DLINE_CTRL_REG); +} + +static void spacemit_sdhci_set_tx_dline_reg(struct sdhci_host *host, u8 dl= ine_reg) +{ + spacemit_sdhci_clrsetbits(host, SDHC_TX_DLINE_REG_MASK, + FIELD_PREP(SDHC_TX_DLINE_REG_MASK, dline_reg), + SPACEMIT_SDHC_DLINE_CFG_REG); +} + +static void spacemit_sdhci_tx_tuning_prepare(struct sdhci_host *host) +{ + spacemit_sdhci_setbits(host, SDHC_TX_MUX_SEL, SPACEMIT_SDHC_TX_CFG_REG); + spacemit_sdhci_setbits(host, SDHC_DLINE_PU, SPACEMIT_SDHC_DLINE_CTRL_REG); + udelay(5); +} + +static void spacemit_sdhci_prepare_tuning(struct sdhci_host *host) +{ + spacemit_sdhci_clrsetbits(host, SDHC_RX_DLINE_REG_MASK, + FIELD_PREP(SDHC_RX_DLINE_REG_MASK, SPACEMIT_RX_DLINE_REG), + SPACEMIT_SDHC_DLINE_CFG_REG); + + spacemit_sdhci_setbits(host, SDHC_DLINE_PU, SPACEMIT_SDHC_DLINE_CTRL_REG); + udelay(5); + + spacemit_sdhci_clrsetbits(host, SDHC_RX_SDCLK_SEL1_MASK, SDHC_RX_SDCLK_SE= L1, + SPACEMIT_SDHC_RX_CFG_REG); + + if (host->mmc->ios.timing =3D=3D MMC_TIMING_MMC_HS200) + spacemit_sdhci_setbits(host, SDHC_HS200_USE_RFIFO, SPACEMIT_SDHC_PHY_FUN= C_REG); +} + static void spacemit_sdhci_reset(struct sdhci_host *host, u8 mask) { sdhci_reset(host, mask); @@ -335,6 +396,7 @@ static const struct sdhci_ops spacemit_sdhci_ops =3D { .set_bus_width =3D sdhci_set_bus_width, .set_clock =3D spacemit_sdhci_set_clock, .set_uhs_signaling =3D spacemit_sdhci_set_uhs_signaling, + .platform_execute_tuning =3D spacemit_sdhci_execute_tuning, }; =20 static const struct sdhci_pltfm_data spacemit_sdhci_k1_pdata =3D { --=20 2.53.0