From: Thierry Reding <thierry.reding@gmail.com>
To: Svyatoslav Ryhel <clamor95@gmail.com>
Cc: Thierry Reding <treding@nvidia.com>, Peng Fan <peng.fan@nxp.com>,
Jaehoon Chung <jh80.chung@samsung.com>,
u-boot@lists.denx.de
Subject: Re: [PATCH v1 1/1] mmc: tegra: get default-tap and default-trim from device tree
Date: Thu, 24 Aug 2023 15:30:18 +0200 [thread overview]
Message-ID: <ZOdbaul2TQ4CwndZ@orome> (raw)
In-Reply-To: <E8D9B66C-E23C-4359-928F-D510C8D4AF22@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4797 bytes --]
On Wed, Aug 23, 2023 at 03:02:42PM +0300, Svyatoslav Ryhel wrote:
>
>
> 23 серпня 2023 р. 14:03:25 GMT+03:00, Thierry Reding <thierry.reding@gmail.com> написав(-ла):
> >On Sat, Aug 19, 2023 at 06:35:01PM +0300, Svyatoslav Ryhel wrote:
> >> Default-tap and default-trim values are used for eMMC setup
> >> mostly on T114+ devices. As for now, those values are hardcoded
> >> for T210 and ignored for all other Tegra generations. Fix this
> >> by passing tap and trim values from dts.
> >>
> >> Tested-by: Svyatoslav Ryhel <clamor95@gmail.com> # ASUS TF701T
> >> Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> >> ---
> >> arch/arm/include/asm/arch-tegra/tegra_mmc.h | 17 ++++----
> >> drivers/mmc/tegra_mmc.c | 46 ++++++++++-----------
> >> 2 files changed, 30 insertions(+), 33 deletions(-)
> >>
> >> diff --git a/arch/arm/include/asm/arch-tegra/tegra_mmc.h b/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> >> index d6a55764ba..750c7d809e 100644
> >> --- a/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> >> +++ b/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> >> @@ -128,21 +128,22 @@ struct tegra_mmc {
> >>
> >> /* SDMMC1/3 settings from SDMMCx Initialization Sequence of TRM */
> >> #define MEMCOMP_PADCTRL_VREF 7
> >> -#define AUTO_CAL_ENABLE (1 << 29)
> >> -#define AUTO_CAL_ACTIVE (1 << 31)
> >> -#define AUTO_CAL_START (1 << 31)
> >> +#define AUTO_CAL_ENABLE BIT(29)
> >> +#define AUTO_CAL_ACTIVE BIT(31)
> >> +#define AUTO_CAL_START BIT(31)
> >> +
> >> #if defined(CONFIG_TEGRA210)
> >> #define AUTO_CAL_PD_OFFSET (0x7D << 8)
> >> #define AUTO_CAL_PU_OFFSET (0 << 0)
> >> -#define IO_TRIM_BYPASS_MASK (1 << 2)
> >> -#define TRIM_VAL_SHIFT 24
> >> -#define TRIM_VAL_MASK (0x1F << TRIM_VAL_SHIFT)
> >> -#define TAP_VAL_SHIFT 16
> >> -#define TAP_VAL_MASK (0xFF << TAP_VAL_SHIFT)
> >> #else
> >> #define AUTO_CAL_PD_OFFSET (0x70 << 8)
> >> #define AUTO_CAL_PU_OFFSET (0x62 << 0)
> >> #endif
> >>
> >> +#define TRIM_VAL_SHIFT 24
> >> +#define TRIM_VAL_MASK (0x1F << TRIM_VAL_SHIFT)
> >> +#define TAP_VAL_SHIFT 16
> >> +#define TAP_VAL_MASK (0xFF << TAP_VAL_SHIFT)
> >> +
> >> #endif /* __ASSEMBLY__ */
> >> #endif /* __TEGRA_MMC_H_ */
> >> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c
> >> index f76fee3ea0..7627800261 100644
> >> --- a/drivers/mmc/tegra_mmc.c
> >> +++ b/drivers/mmc/tegra_mmc.c
> >> @@ -37,6 +37,9 @@ struct tegra_mmc_priv {
> >> unsigned int version; /* SDHCI spec. version */
> >> unsigned int clock; /* Current clock (MHz) */
> >> int mmc_id; /* peripheral id */
> >> +
> >> + u32 tap_value;
> >> + u32 trim_value;
> >> };
> >>
> >> static void tegra_mmc_set_power(struct tegra_mmc_priv *priv,
> >> @@ -526,31 +529,6 @@ static void tegra_mmc_pad_init(struct tegra_mmc_priv *priv)
> >> printf("%s: Warning: Autocal timed out!\n", __func__);
> >> /* TBD: Set CFG2TMC_SDMMC1_PAD_CAL_DRV* regs here */
> >> }
> >> -
> >> -#if defined(CONFIG_TEGRA210)
> >> - u32 tap_value, trim_value;
> >> -
> >> - /* Set tap/trim values for SDMMC1/3 @ <48MHz here */
> >> - val = readl(&priv->reg->venspictl); /* aka VENDOR_SYS_SW_CNTL */
> >> - val &= IO_TRIM_BYPASS_MASK;
> >> - if (id == PERIPH_ID_SDMMC1) {
> >> - tap_value = 4; /* default */
> >> - if (val)
> >> - tap_value = 3;
> >> - trim_value = 2;
> >> - } else { /* SDMMC3 */
> >> - tap_value = 3;
> >> - trim_value = 3;
> >> - }
> >> -
> >> - val = readl(&priv->reg->venclkctl);
> >> - val &= ~TRIM_VAL_MASK;
> >> - val |= (trim_value << TRIM_VAL_SHIFT);
> >> - val &= ~TAP_VAL_MASK;
> >> - val |= (tap_value << TAP_VAL_SHIFT);
> >> - writel(val, &priv->reg->venclkctl);
> >> - debug("%s: VENDOR_CLOCK_CNTRL = 0x%08X\n", __func__, val);
> >> -#endif /* T210 */
> >> #endif /* T30/T210 */
> >> }
> >>
> >> @@ -588,6 +566,21 @@ static void tegra_mmc_reset(struct tegra_mmc_priv *priv, struct mmc *mmc)
> >>
> >> /* Make sure SDIO pads are set up */
> >> tegra_mmc_pad_init(priv);
> >> +
> >> + if (priv->tap_value || priv->trim_value) {
> >
> >I think 0 is a valid value for both tap and trim, so you want to be able
> >to write that. I suggest getting rid of the conditional and always
> >writing these values and rely on defaults to make sure that a good value
> >is always programmed.
> >
> >Alternatively if you really only want to program these when they've been
> >specified, use an extra variable (or something like -1 as a default
> >value) to discriminate.
>
> I may propose a compromise. Do not set default value at all and when time comes just check if tap or trim is not error.
Yes, that's essentially a variant of the second option and it should
work.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2023-08-24 13:30 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-19 15:35 [PATCH v1 0/1] tegra_mmc: get tap and trim from dts Svyatoslav Ryhel
2023-08-19 15:35 ` [PATCH v1 1/1] mmc: tegra: get default-tap and default-trim from device tree Svyatoslav Ryhel
2023-08-23 11:03 ` Thierry Reding
2023-08-23 11:38 ` Svyatoslav Ryhel
2023-08-24 13:29 ` Thierry Reding
2023-08-24 13:33 ` Svyatoslav Ryhel
2023-08-23 12:02 ` Svyatoslav Ryhel
2023-08-24 13:30 ` Thierry Reding [this message]
2023-08-23 10:53 ` [PATCH v1 0/1] tegra_mmc: get tap and trim from dts Thierry Reding
2023-08-23 11:30 ` Svyatoslav Ryhel
2023-08-24 13:27 ` Thierry Reding
2023-08-24 13:31 ` Svyatoslav Ryhel
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=ZOdbaul2TQ4CwndZ@orome \
--to=thierry.reding@gmail.com \
--cc=clamor95@gmail.com \
--cc=jh80.chung@samsung.com \
--cc=peng.fan@nxp.com \
--cc=treding@nvidia.com \
--cc=u-boot@lists.denx.de \
/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.