From: Chris Morgan <macroalpha82@gmail.com>
To: Mikhail Kalashnikov <iuncuim@gmail.com>
Cc: u-boot@lists.denx.de, sjg@chromium.org, jernej.skrabec@gmail.com,
neil.armstrong@linaro.org, hdegoede@redhat.com,
andre.przywara@arm.com, jagan@amarulasolutions.com,
trini@konsulko.com, ryan@testtoast.com,
Chris Morgan <macromorgan@hotmail.com>
Subject: Re: [PATCH 3/9] sunxi: H616: dram: LPDDR4: adjust settings
Date: Wed, 14 Aug 2024 16:06:23 -0500 [thread overview]
Message-ID: <66bd1c50.4a0a0220.192aee.024e@mx.google.com> (raw)
In-Reply-To: <9b7db179-1e08-4690-97f8-b040f1c19f37@gmail.com>
On Sat, Aug 03, 2024 at 03:29:17PM +0300, Mikhail Kalashnikov wrote:
>
> On 02.08.2024 01:55, Chris Morgan wrote:
> > From: Jernej Skrabec <jernej.skrabec@gmail.com>
> >
> > Adjust H616 LPDDR4 DRAM settings to be in line with vendor driver.
> >
> > Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
> > Tested-by: Chris Morgan <macromorgan@hotmail.com>
> > ---
> > arch/arm/mach-sunxi/dram_sun50i_h616.c | 35 +++++++++++++------
> > .../dram_timings/h616_lpddr4_2133.c | 2 +-
> > 2 files changed, 26 insertions(+), 11 deletions(-)
> >
> > diff --git a/arch/arm/mach-sunxi/dram_sun50i_h616.c b/arch/arm/mach-sunxi/dram_sun50i_h616.c
> > index a20264d8b4..b6638c519e 100644
> > --- a/arch/arm/mach-sunxi/dram_sun50i_h616.c
> > +++ b/arch/arm/mach-sunxi/dram_sun50i_h616.c
> > @@ -293,14 +293,22 @@ static void mctl_phy_configure_odt(const struct dram_para *para)
> > dmb();
> > }
> > -static bool mctl_phy_write_leveling(const struct dram_config *config)
> > +static bool mctl_phy_write_leveling(const struct dram_para *para,
> > + const struct dram_config *config)
> > {
> > bool result = true;
> > u32 val;
> > clrsetbits_le32(SUNXI_DRAM_PHY0_BASE + 8, 0xc0, 0x80);
> > - writel(4, SUNXI_DRAM_PHY0_BASE + 0xc);
> > - writel(0x40, SUNXI_DRAM_PHY0_BASE + 0x10);
> > +
> > + if (para->type == SUNXI_DRAM_TYPE_LPDDR4) {
> > + /* MR2 value */
> > + writel(0x1b, SUNXI_DRAM_PHY0_BASE + 0xc);
> > + writel(0, SUNXI_DRAM_PHY0_BASE + 0x10);
> > + } else {
> > + writel(4, SUNXI_DRAM_PHY0_BASE + 0xc);
> > + writel(0x40, SUNXI_DRAM_PHY0_BASE + 0x10);
> > + }
> > setbits_le32(SUNXI_DRAM_PHY0_BASE + 8, 4);
> > @@ -859,9 +867,9 @@ static void mctl_phy_ca_bit_delay_compensation(const struct dram_para *para,
> > }
> > break;
> > case SUNXI_DRAM_TYPE_LPDDR4:
> > - if (para->tpr2 & 1) {
> > - writel(val, SUNXI_DRAM_PHY0_BASE + 0x788);
> > - } else {
> > + writel(val, SUNXI_DRAM_PHY0_BASE + 0x788);
> > + if (config->ranks == 2) {
> > + val = (para->tpr10 >> 11) & 0x1e;
> > writel(val, SUNXI_DRAM_PHY0_BASE + 0x794);
> > };
> > break;
> > @@ -949,6 +957,8 @@ static bool mctl_phy_init(const struct dram_para *para,
> > break;
> > case SUNXI_DRAM_TYPE_LPDDR4:
> > val = para->tpr6 >> 24 & 0xff;
> > + if (!val)
> > + val = 0x33;
>
> We don't need this as the default value from
> arch/arm/mach-sunxi/Kconfigcovers
> this case:
>
> config DRAM_SUN50I_H616_TPR6
> hex "H616 DRAM TPR6 parameter"
> default 0x3300c080
>
> > break;
> > case SUNXI_DRAM_TYPE_DDR4:
> > default:
> > @@ -1080,19 +1090,27 @@ static bool mctl_phy_init(const struct dram_para *para,
> > mctl_await_completion(&mctl_ctl->mrctrl0, BIT(31), 0);
> > writel(0xb04, &mctl_ctl->mrctrl1);
> > + udelay(10);
> > writel(0x80000030, &mctl_ctl->mrctrl0);
> > + udelay(10);
> > mctl_await_completion(&mctl_ctl->mrctrl0, BIT(31), 0);
> > writel(0xc72, &mctl_ctl->mrctrl1);
> > + udelay(10);
> > writel(0x80000030, &mctl_ctl->mrctrl0);
> > + udelay(10);
> > mctl_await_completion(&mctl_ctl->mrctrl0, BIT(31), 0);
> > writel(0xe09, &mctl_ctl->mrctrl1);
> > + udelay(10);
> > writel(0x80000030, &mctl_ctl->mrctrl0);
> > + udelay(10);
> > mctl_await_completion(&mctl_ctl->mrctrl0, BIT(31), 0);
> > writel(0x1624, &mctl_ctl->mrctrl1);
> > + udelay(10);
> > writel(0x80000030, &mctl_ctl->mrctrl0);
> > + udelay(10);
> Looks like something experimental.
Should I remove it? Sorry but I'm not super familiar with this specific
code.
> > mctl_await_completion(&mctl_ctl->mrctrl0, BIT(31), 0);
> > break;
> > case SUNXI_DRAM_TYPE_DDR4:
> > @@ -1108,7 +1126,7 @@ static bool mctl_phy_init(const struct dram_para *para,
> > if (para->tpr10 & TPR10_WRITE_LEVELING) {
> > for (i = 0; i < 5; i++)
> > - if (mctl_phy_write_leveling(config))
> > + if (mctl_phy_write_leveling(para, config))
> > break;
> > if (i == 5) {
> > debug("write leveling failed!\n");
> > @@ -1234,9 +1252,6 @@ static bool mctl_ctrl_init(const struct dram_para *para,
> > setbits_le32(&mctl_ctl->unk_0x3180, BIT(31) | BIT(30));
> > setbits_le32(&mctl_ctl->unk_0x4180, BIT(31) | BIT(30));
> > - if (para->type == SUNXI_DRAM_TYPE_LPDDR4)
> > - setbits_le32(&mctl_ctl->dbictl, 0x1);
> > -
>
> I have this piece of code in the opizero3 mtd dump. This condition depends
> on tpr13. Judging by the dram_para parameters, it should be performed for
> lpddr4 (and maybe ddr4) memory. According to the opizero3 dump it should
> clear all values and set BIT(2). Don't know, why I only set BIT(0) here.
> This
> may be a bug or another spl from t507 and the first version of the driver.
What would be correct here then?
>
> > setbits_le32(&mctl_ctl->rfshctl3, BIT(0));
> > clrbits_le32(&mctl_ctl->dfimisc, BIT(0));
> > diff --git a/arch/arm/mach-sunxi/dram_timings/h616_lpddr4_2133.c b/arch/arm/mach-sunxi/dram_timings/h616_lpddr4_2133.c
> > index e6446b9180..6f5c4acbd6 100644
> > --- a/arch/arm/mach-sunxi/dram_timings/h616_lpddr4_2133.c
> > +++ b/arch/arm/mach-sunxi/dram_timings/h616_lpddr4_2133.c
> > @@ -23,7 +23,7 @@ void mctl_set_timing_params(const struct dram_para *para)
> > u8 trcd = max(ns_to_t(18), 2);
> > u8 trc = ns_to_t(65);
> > u8 txp = max(ns_to_t(8), 2);
> > - u8 trtp = max(ns_to_t(8), 4);
> > + u8 trtp = 4;
> > u8 trp = ns_to_t(21);
> > u8 tras = ns_to_t(42);
> > u16 trefi = ns_to_t(3904) / 32;
Thank you,
Chris
next prev parent reply other threads:[~2024-08-14 21:06 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-01 22:55 [PATCH 0/9] Add Anbernic RG35XX-2024 Chris Morgan
2024-08-01 22:55 ` [PATCH 1/9] sunxi: H616: dram: DDR3: adjust settings Chris Morgan
2024-09-04 23:38 ` Andre Przywara
2024-08-01 22:55 ` [PATCH 2/9] sunxi: H616: dram: LPDDR3: " Chris Morgan
2024-08-03 13:17 ` Mikhail Kalashnikov
2024-09-04 23:07 ` Andre Przywara
2024-08-01 22:55 ` [PATCH 3/9] sunxi: H616: dram: LPDDR4: " Chris Morgan
2024-08-03 12:29 ` Mikhail Kalashnikov
2024-08-14 21:06 ` Chris Morgan [this message]
2024-08-15 22:03 ` Chris Morgan
2024-08-16 16:39 ` Mikhail Kalashnikov
2024-08-01 22:55 ` [PATCH 4/9] sunxi: H616: DRAM: Add alternative pin mapping Chris Morgan
2024-08-01 22:55 ` [PATCH 5/9] sunxi: H616: DRAM: Adjust configuration procedure Chris Morgan
2024-08-01 22:55 ` [PATCH 6/9] sunxi: H616: DRAM: Adjust size scan procedure Chris Morgan
2024-08-01 22:55 ` [PATCH 7/9] sunxi: H616: dram: Update mbus priorities Chris Morgan
2024-08-01 22:55 ` [PATCH 8/9] sunxi: dts: arm/arm64: update sun50i-h616.dtsi from Linux-v6.11-rc1 Chris Morgan
2024-08-01 22:55 ` [PATCH 9/9] sunxi: Add support for Anbernic RG35XX-2024 Chris Morgan
2024-08-02 6:54 ` Sumit Garg
2024-08-02 9:57 ` Andre Przywara
2024-08-02 10:38 ` Sumit Garg
2024-08-02 15:04 ` Chris Morgan
2024-08-03 13:28 ` Mikhail Kalashnikov
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=66bd1c50.4a0a0220.192aee.024e@mx.google.com \
--to=macroalpha82@gmail.com \
--cc=andre.przywara@arm.com \
--cc=hdegoede@redhat.com \
--cc=iuncuim@gmail.com \
--cc=jagan@amarulasolutions.com \
--cc=jernej.skrabec@gmail.com \
--cc=macromorgan@hotmail.com \
--cc=neil.armstrong@linaro.org \
--cc=ryan@testtoast.com \
--cc=sjg@chromium.org \
--cc=trini@konsulko.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.