From: Andrei Lalaev <andrey.lalaev@gmail.com>
To: Hiago De Franco <hfranco@baylibre.com>
Cc: Leo Yu-Chi Liang <ycliang@andestech.com>,
Kongyang Liu <seashell11234455@gmail.com>,
u-boot@lists.u-boot-project.org, Peng Fan <peng.fan@nxp.com>,
Jaehoon Chung <jh80.chung@samsung.com>,
Tom Rini <trini@konsulko.com>, Yao Zi <me@ziyao.cc>
Subject: Re: [PATCH v2] mmc: cv1800b_sdhci: configure SDHCI PHY
Date: Thu, 10 Sep 2026 17:06:28 +0200 [thread overview]
Message-ID: <18136f4d-ed86-4990-8f9c-8d508652f26a@gmail.com> (raw)
In-Reply-To: <aqG8pz6wExm1Yjma@hiagonb>
Hi Hiago,
On 09.09.26 22:18, Hiago De Franco wrote:
> Hi Andrei,
>
> On Wed, Sep 09, 2026 at 05:21:12PM +0200, Andrei Lalaev wrote:
>> Some samples of the Milk-V Duo and Duo 256M have issues with SD card
>> communication. As a result, the SD card is not detected, or the correct
>> mode is not selected.
>>
>> Configure SDHCI PHY in the same way as in downstream, to ensure
>> that the PHY is initialized properly.
>
> Thanks for the v2 patch.
>
> I tested this locally with my Milk-V Duo 256MB, same tests as before, and
> it works without issues. So:
>
> Tested-by: Hiago De Franco <hfranco@baylibre.com> # Milk-V Duo 256M
Thank you for the tag :)
> My only minor comment would be related to the 'CV18XX_*' defines, the
> others do not see to have this prefix, so I would drop them and keep it
> like 'SDHCI_MSHC_CTRL'.
To be honest, I would rename the other defines as they are not generic SDHCI,
but CV1800B-specific, so I think it makes sense to prepend CV18XX.
No strong opinion, though.
> However, as usual, I also asked and AI agent (Claude Sonnet 5 - high, in
> this case) to review this patch and looks like it found something
> useful:
>
> ```
> This always sets PHY_TX_BPS and writes TX_SRC_INVERT | RX_SRC_INVERT,
> and it only runs once, from probe(). Sophgo's own driver treats this
> as mode-dependent, not a fixed value - cvi_general_reset() in their
> tree branches on the live SDHCI_HOST_CONTROL2 UHS bits:
>
> if SDR104:
> PHY_CONFIG &= ~BIT(0) /* TX_BPS off */
> PHY_TX_RX_DLY = 0x00000100 /* TX_SRC_INVERT only, tap=0 */
> else:
> PHY_CONFIG |= BIT(0) /* TX_BPS on */
> PHY_TX_RX_DLY = 0x01000100 /* TX_SRC_INVERT | RX_SRC_INVERT */
>
> and it does this on every reset, not once. With this patch, a board
> that actually negotiates SDR104 (LicheeRV Nano, or any cv1800b board
> without no-1-8-v in the DT) would go into the tuning sweep with
> TX_BPS stuck on - cv1800b_execute_tuning() never touches offset 0x24c.
>
> I don't think this affects Duo or Duo 256M today - both set no-1-8-v,
> so they stay in HS and only ever want the else-branch values, which is
> exactly what's tested above. But since cv1800b_sdhci.c is shared with
> LicheeRV Nano, it seemed worth flagging rather than silently baking in
> a value that's only correct for one mode."
> ```
>
> I can't test this since I do not have other boards apart from Milk-V duo
> with me, maybe you can take a look at this review to check if it is
> valid or not?
I don't have a LicheeRC Nano either, but both DTSes have 'no-1-8-v' property:
- arch/riscv/dts/sg2002-licheerv-nano-b.dts +38
- dts/upstream/src/riscv/sophgo/sg2002-licheerv-nano-b.dts +85
So it shouldn't break the board.
That said, since I'd prefer not to introduce changes I can't test
myself (like SDR104 mode), we can do something like this instead:
```
diff --git a/drivers/mmc/cv1800b_sdhci.c b/drivers/mmc/cv1800b_sdhci.c
index b756649f90f3..2512352383b2 100644
--- a/drivers/mmc/cv1800b_sdhci.c
+++ b/drivers/mmc/cv1800b_sdhci.c
@@ -8,11 +8,17 @@
#include <sdhci.h>
#include <linux/delay.h>
+#define SDHCI_MSHC_CTRL 0x200
+#define SDHCI_PHY_CONFIG 0x24c
#define SDHCI_PHY_TX_RX_DLY 0x240
#define MMC_MAX_CLOCK 375000000
#define TUNE_MAX_PHCODE 128
#define PHY_TX_SRC_INVERT BIT(8)
+#define PHY_RX_SRC_INVERT BIT(24)
+
+#define PHY_LATANCY_1T BIT(1)
+#define PHY_TX_BPS BIT(0)
struct cv1800b_sdhci_plat {
struct mmc_config cfg;
@@ -64,10 +70,34 @@ static int cv1800b_execute_tuning(struct mmc *mmc, u8 opcode)
}
#endif
+static int cv1800b_set_ios_post(struct sdhci_host *host)
+{
+ struct mmc *mmc = host->mmc;
+ u32 val;
+
+ if (mmc->selected_mode != MMC_LEGACY && mmc->selected_mode != MMC_HS &&
+ mmc->selected_mode != SD_HS)
+ return 0;
+
+ val = sdhci_readl(host, SDHCI_MSHC_CTRL);
+ val |= PHY_LATANCY_1T;
+ sdhci_writel(host, val, SDHCI_MSHC_CTRL);
+
+ val = sdhci_readl(host, SDHCI_PHY_CONFIG);
+ val |= PHY_TX_BPS;
+ sdhci_writel(host, val, SDHCI_PHY_CONFIG);
+
+ val = PHY_TX_SRC_INVERT | PHY_RX_SRC_INVERT;
+ sdhci_writel(host, val, SDHCI_PHY_TX_RX_DLY);
+
+ return 0;
+}
+
const struct sdhci_ops cv1800b_sdhci_sd_ops = {
#if CONFIG_IS_ENABLED(MMC_SUPPORTS_TUNING)
.platform_execute_tuning = cv1800b_execute_tuning,
#endif
+ .set_ios_post = cv1800b_set_ios_post,
};
static int cv1800b_sdhci_bind(struct udevice *dev)
```
> According to the agent, a possible fix would be:
> ...
>
> Regards,
--
Best regards,
Andrei Lalaev
prev parent reply other threads:[~2026-09-10 17:03 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-09 15:21 [PATCH v2] mmc: cv1800b_sdhci: configure SDHCI PHY Andrei Lalaev
2026-09-09 20:18 ` Hiago De Franco
2026-09-10 15:06 ` Andrei Lalaev [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=18136f4d-ed86-4990-8f9c-8d508652f26a@gmail.com \
--to=andrey.lalaev@gmail.com \
--cc=hfranco@baylibre.com \
--cc=jh80.chung@samsung.com \
--cc=me@ziyao.cc \
--cc=peng.fan@nxp.com \
--cc=seashell11234455@gmail.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.u-boot-project.org \
--cc=ycliang@andestech.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.