From: Xavier Drudis Ferran <xdrudis@tinet.cat>
To: Lee Jones <lee.jones@linaro.org>
Cc: sjg@chromium.org, philipp.tomsich@vrull.eu,
kever.yang@rock-chips.com, cym@rock-chips.com,
u-boot@lists.denx.de
Subject: Re: [PATCH 3/3] ram: rk3399: Conduct memory training at 400MHz
Date: Mon, 4 Jul 2022 12:01:12 +0200 [thread overview]
Message-ID: <20220704100111.GD1912@begut> (raw)
In-Reply-To: <20220621100729.979275-3-lee.jones@linaro.org>
El Tue, Jun 21, 2022 at 10:07:29AM +0000, Lee Jones deia:
> Currently the default initialisation frequency is 50MHz. Although
> this does appear to be suitable for some LPDDR4 RAM chips, training at
> this low frequency has been seen to cause Column errors, leading to
> Capacity check errors on others.
>
> Here we force RAM initialisation to happen at 400MHz before ramping up
> to the final value running value of 800MHz after everything has been
> successfully configured.
>
> Link: https://lore.kernel.org/u-boot/Yo4v3jUeHXTovjOH@google.com/
> Suggested-by: YouMin Chen <cym@rock-chips.com>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>
My board doesn't suffer with the issue resolved by this series,
however I did apply it and nothing regressed.
Tested-by: Xavier Drudis Ferran <xdrudis@tinet.cat>
> ---
> drivers/ram/rockchip/sdram_rk3399.c | 36 +++++++++++++++++------------
> 1 file changed, 21 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c
> index 34d6c93f95..b05c5925d5 100644
> --- a/drivers/ram/rockchip/sdram_rk3399.c
> +++ b/drivers/ram/rockchip/sdram_rk3399.c
> @@ -85,7 +85,7 @@ struct sdram_rk3399_ops {
> int (*data_training_first)(struct dram_info *dram, u32 channel, u8 rank,
> struct rk3399_sdram_params *sdram);
> int (*set_rate_index)(struct dram_info *dram,
> - struct rk3399_sdram_params *params);
> + struct rk3399_sdram_params *params, u32 ctl_fn);
> void (*modify_param)(const struct chan_info *chan,
> struct rk3399_sdram_params *params);
> struct rk3399_sdram_params *
> @@ -1644,7 +1644,8 @@ static int data_training_first(struct dram_info *dram, u32 channel, u8 rank,
> }
>
> static int switch_to_phy_index1(struct dram_info *dram,
> - struct rk3399_sdram_params *params)
> + struct rk3399_sdram_params *params,
> + u32 unused)
> {
> u32 channel;
> u32 *denali_phy;
> @@ -2539,26 +2540,25 @@ static int lpddr4_set_ctl(struct dram_info *dram,
> }
>
> static int lpddr4_set_rate(struct dram_info *dram,
> - struct rk3399_sdram_params *params)
> + struct rk3399_sdram_params *params,
> + u32 ctl_fn)
> {
> - u32 ctl_fn;
> u32 phy_fn;
>
> - for (ctl_fn = 0; ctl_fn < 2; ctl_fn++) {
> - phy_fn = lpddr4_get_phy_fn(params, ctl_fn);
> + phy_fn = lpddr4_get_phy_fn(params, ctl_fn);
>
> - lpddr4_set_phy(dram, params, phy_fn, &dfs_cfgs_lpddr4[ctl_fn]);
> - lpddr4_set_ctl(dram, params, ctl_fn,
> - dfs_cfgs_lpddr4[ctl_fn].base.ddr_freq);
> + lpddr4_set_phy(dram, params, phy_fn, &dfs_cfgs_lpddr4[ctl_fn]);
> + lpddr4_set_ctl(dram, params, ctl_fn,
> + dfs_cfgs_lpddr4[ctl_fn].base.ddr_freq);
>
> - if (IS_ENABLED(CONFIG_RAM_ROCKCHIP_DEBUG))
> - printf("%s: change freq to %dMHz %d, %d\n", __func__,
> - dfs_cfgs_lpddr4[ctl_fn].base.ddr_freq / MHz,
> - ctl_fn, phy_fn);
> - }
> + if (IS_ENABLED(CONFIG_RAM_ROCKCHIP_DEBUG))
> + printf("%s: change freq to %dMHz %d, %d\n", __func__,
> + dfs_cfgs_lpddr4[ctl_fn].base.ddr_freq / MHz,
> + ctl_fn, phy_fn);
>
> return 0;
> }
> +
> #endif /* CONFIG_RAM_RK3399_LPDDR4 */
>
> /* CS0,n=1
> @@ -2955,6 +2955,12 @@ static int sdram_init(struct dram_info *dram,
> params->ch[ch].cap_info.rank = rank;
> }
>
> +#if defined(CONFIG_RAM_RK3399_LPDDR4)
> + /* LPDDR4 needs to be trained at 400MHz */
> + lpddr4_set_rate(dram, params, 0);
> + params->base.ddr_freq = dfs_cfgs_lpddr4[0].base.ddr_freq / MHz;
> +#endif
> +
> params->base.num_channels = 0;
> for (channel = 0; channel < 2; channel++) {
> const struct chan_info *chan = &dram->chan[channel];
> @@ -3005,7 +3011,7 @@ static int sdram_init(struct dram_info *dram,
> params->base.stride = calculate_stride(params);
> dram_all_config(dram, params);
>
> - ret = dram->ops->set_rate_index(dram, params);
> + ret = dram->ops->set_rate_index(dram, params, 1);
> if (ret)
> return ret;
>
> --
> 2.37.0.rc0.104.g0611611a94-goog
>
next prev parent reply other threads:[~2022-07-04 10:01 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-21 10:07 [PATCH 1/3] ram: rk3399: Fix .set_rate_index() error handling Lee Jones
2022-06-21 10:07 ` [PATCH 2/3] ram: rk3399: Fix faulty frequency change reports Lee Jones
2022-07-01 12:04 ` Kever Yang
2022-07-04 10:00 ` Xavier Drudis Ferran
2022-06-21 10:07 ` [PATCH 3/3] ram: rk3399: Conduct memory training at 400MHz Lee Jones
2022-07-01 12:05 ` Kever Yang
2022-07-04 10:01 ` Xavier Drudis Ferran [this message]
2022-06-27 8:39 ` [PATCH 1/3] ram: rk3399: Fix .set_rate_index() error handling Lee Jones
2022-07-01 12:05 ` Kever Yang
2022-07-04 9:23 ` Lee Jones
2022-07-04 10:49 ` Kever Yang
2022-07-04 10:58 ` Lee Jones
2022-07-01 12:04 ` Kever Yang
2022-07-04 9:57 ` [SPAM] " Xavier Drudis Ferran
-- strict thread matches above, loose matches on Subject: below --
2022-08-11 7:58 [PATCH 0/3] rockchip: Fix RAM training on RK3399 based platforms (Rock Pi 4) Lee Jones
2022-08-11 7:58 ` [PATCH 3/3] ram: rk3399: Conduct memory training at 400MHz Lee Jones
2022-08-11 14:38 ` Michal Suchánek
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=20220704100111.GD1912@begut \
--to=xdrudis@tinet.cat \
--cc=cym@rock-chips.com \
--cc=kever.yang@rock-chips.com \
--cc=lee.jones@linaro.org \
--cc=philipp.tomsich@vrull.eu \
--cc=sjg@chromium.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox