* [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation
@ 2025-09-15 19:20 Lukas Schmid
2025-09-16 14:06 ` Andre Przywara
2025-09-17 21:48 ` Andre Przywara
0 siblings, 2 replies; 6+ messages in thread
From: Lukas Schmid @ 2025-09-15 19:20 UTC (permalink / raw)
To: Tom Rini; +Cc: linux-sunxi, Lukas Schmid, John Watts, Jernej Skrabec, u-boot
Extend the DRAM initialisation code to add support for the T113-S4 aka
T113M4020DC0 by checking the SoC's CHIPID.
The list of Chip-IDs came from
https://github.com/ua1arn/hftrx/blob/25d8cb9e4cfe1d7d0e4a2f641025c88a9ec5e758/inc/clocks.h#L250
And the chipid register address was something I heard through apritzel
altough it seems that, according to Jookia, the Tina Device Tree seems
to agree:
sid@3006000 {
compatible = "allwinner,sun20iw1p1-sid", "allwinner,sunxi-sid";
reg = <0x0 0x03006000 0 0x1000>;
#address-cells = <1>;
#size-cells = <1>;
chipid {
reg = <0x0 0>;
offset = <0x200>;
size = <0x10>;
};
...
};
Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
Tested-by: John Watts <contact@jookia.org>
Reviewed-by: John Watts <contact@jookia.org>
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
---
Changes in v2:
- Use uint32_t instead of u32 for sid_read_soc_chipid return type
- Add descriptive comment about source of Chip-ID list and register
drivers/ram/sunxi/dram_sun20i_d1.c | 13 ++++++++++++-
drivers/ram/sunxi/dram_sun20i_d1.h | 7 +++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/drivers/ram/sunxi/dram_sun20i_d1.c b/drivers/ram/sunxi/dram_sun20i_d1.c
index a1794032f3b..381eeb87e2e 100644
--- a/drivers/ram/sunxi/dram_sun20i_d1.c
+++ b/drivers/ram/sunxi/dram_sun20i_d1.c
@@ -54,6 +54,11 @@ static void sid_read_ldoB_cal(const dram_para_t *para)
clrsetbits_le32(0x3000150, 0xff00, reg << 8);
}
+static uint32_t sid_read_soc_chipid(void)
+{
+ return readl(SUNXI_SID_BASE + 0x00) & 0xffff;
+}
+
static void dram_voltage_set(const dram_para_t *para)
{
int vol;
@@ -663,6 +668,7 @@ static void mctl_phy_ac_remapping(const dram_para_t *para,
fuse = (readl(SUNXI_SID_BASE + 0x28) & 0xf00) >> 8;
debug("DDR efuse: 0x%x\n", fuse);
+ debug("SoC Chip ID: 0x%08x\n", sid_read_soc_chipid());
if (para->dram_type == SUNXI_DRAM_TYPE_DDR2) {
if (fuse == 15)
@@ -675,7 +681,12 @@ static void mctl_phy_ac_remapping(const dram_para_t *para,
switch (fuse) {
case 8: cfg = ac_remapping_tables[2]; break;
case 9: cfg = ac_remapping_tables[3]; break;
- case 10: cfg = ac_remapping_tables[5]; break;
+ case 10:
+ if (sid_read_soc_chipid() == SUNXI_CHIPID_T113M4020DC0)
+ cfg = ac_remapping_tables[0];
+ else
+ cfg = ac_remapping_tables[5];
+ break;
case 11: cfg = ac_remapping_tables[4]; break;
default:
case 12: cfg = ac_remapping_tables[1]; break;
diff --git a/drivers/ram/sunxi/dram_sun20i_d1.h b/drivers/ram/sunxi/dram_sun20i_d1.h
index 91383f6cf10..7bd8f67a77a 100644
--- a/drivers/ram/sunxi/dram_sun20i_d1.h
+++ b/drivers/ram/sunxi/dram_sun20i_d1.h
@@ -19,6 +19,13 @@ enum sunxi_dram_type {
SUNXI_DRAM_TYPE_LPDDR3 = 7,
};
+enum sunxi_soc_chipid {
+ SUNXI_CHIPID_F133A = 0x5C00,
+ SUNXI_CHIPID_D1S = 0x5E00,
+ SUNXI_CHIPID_T113S3 = 0x6000,
+ SUNXI_CHIPID_T113M4020DC0 = 0x7200,
+};
+
/*
* This structure contains a mixture of fixed configuration settings,
* variables that are used at runtime to communicate settings between
--
2.39.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation
2025-09-15 19:20 [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation Lukas Schmid
@ 2025-09-16 14:06 ` Andre Przywara
2025-09-17 21:48 ` Andre Przywara
1 sibling, 0 replies; 6+ messages in thread
From: Andre Przywara @ 2025-09-16 14:06 UTC (permalink / raw)
To: Lukas Schmid
Cc: Tom Rini, linux-sunxi, John Watts, Jernej Skrabec, u-boot,
András Szemző
On Tue, 16 Sep 2025 01:40:26 +0100
Andre Przywara <andre.przywara@arm.com> wrote:
Hi Lukas,
please remember to wait for a bit before sending out a v2, to give other
people time to respond, to the patch itself and also the comments to that.
Given the current U-Boot development state, this is October material, so
there is no real rush.
> On Mon, 15 Sep 2025 21:20:35 +0200
> Lukas Schmid <lukas.schmid@netcube.li> wrote:
>
> > Extend the DRAM initialisation code to add support for the T113-S4 aka
> > T113M4020DC0 by checking the SoC's CHIPID.
> >
> > The list of Chip-IDs came from
> > https://github.com/ua1arn/hftrx/blob/25d8cb9e4cfe1d7d0e4a2f641025c88a9ec5e758/inc/clocks.h#L250
I am not sure a random github repo is necessarily a good reference. What's
more important here is our observation that the -s4 chips we have seen use
that identifier, which is different from the -s3 ones.
I wonder if we should include the 0x6800 identifier, since it's apparently
used out there in the wild for some -s4 batches, too?
> > And the chipid register address was something I heard through apritzel
> > altough it seems that, according to Jookia, the Tina Device Tree seems
> > to agree:
> >
> > sid@3006000 {
> > compatible = "allwinner,sun20iw1p1-sid", "allwinner,sunxi-sid";
> > reg = <0x0 0x03006000 0 0x1000>;
> > #address-cells = <1>;
> > #size-cells = <1>;
> >
> > chipid {
> > reg = <0x0 0>;
> > offset = <0x200>;
> > size = <0x10>;
> > };
> > ...
> > };
>
I understand you did this after John's comment, but I am replying here since
it's the newest version of the patch: that's a lot of words for something
that has been widely known for almost a decade now: "The first word of the
SID carries some batch/package information." So I don't think that
deserves some lengthy paragraph, and I would like to avoid proliferating
unreviewed and undocumented BSP DT snippets.
So I think the wording should be more along the line of "certain batches
or packages, identifiable by the SID chip ID, require a different
remapping table".
Cheers,
Andre
>
> >
> > Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
> > Tested-by: John Watts <contact@jookia.org>
> > Reviewed-by: John Watts <contact@jookia.org>
> > Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
> > ---
> > Changes in v2:
> > - Use uint32_t instead of u32 for sid_read_soc_chipid return type
> > - Add descriptive comment about source of Chip-ID list and register
> >
> > drivers/ram/sunxi/dram_sun20i_d1.c | 13 ++++++++++++-
> > drivers/ram/sunxi/dram_sun20i_d1.h | 7 +++++++
> > 2 files changed, 19 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/ram/sunxi/dram_sun20i_d1.c b/drivers/ram/sunxi/dram_sun20i_d1.c
> > index a1794032f3b..381eeb87e2e 100644
> > --- a/drivers/ram/sunxi/dram_sun20i_d1.c
> > +++ b/drivers/ram/sunxi/dram_sun20i_d1.c
> > @@ -54,6 +54,11 @@ static void sid_read_ldoB_cal(const dram_para_t *para)
> > clrsetbits_le32(0x3000150, 0xff00, reg << 8);
> > }
> >
> > +static uint32_t sid_read_soc_chipid(void)
> > +{
> > + return readl(SUNXI_SID_BASE + 0x00) & 0xffff;
> > +}
> > +
> > static void dram_voltage_set(const dram_para_t *para)
> > {
> > int vol;
> > @@ -663,6 +668,7 @@ static void mctl_phy_ac_remapping(const dram_para_t *para,
> >
> > fuse = (readl(SUNXI_SID_BASE + 0x28) & 0xf00) >> 8;
> > debug("DDR efuse: 0x%x\n", fuse);
> > + debug("SoC Chip ID: 0x%08x\n", sid_read_soc_chipid());
> >
> > if (para->dram_type == SUNXI_DRAM_TYPE_DDR2) {
> > if (fuse == 15)
> > @@ -675,7 +681,12 @@ static void mctl_phy_ac_remapping(const dram_para_t *para,
> > switch (fuse) {
> > case 8: cfg = ac_remapping_tables[2]; break;
> > case 9: cfg = ac_remapping_tables[3]; break;
> > - case 10: cfg = ac_remapping_tables[5]; break;
> > + case 10:
> > + if (sid_read_soc_chipid() == SUNXI_CHIPID_T113M4020DC0)
> > + cfg = ac_remapping_tables[0];
> > + else
> > + cfg = ac_remapping_tables[5];
> > + break;
> > case 11: cfg = ac_remapping_tables[4]; break;
> > default:
> > case 12: cfg = ac_remapping_tables[1]; break;
> > diff --git a/drivers/ram/sunxi/dram_sun20i_d1.h b/drivers/ram/sunxi/dram_sun20i_d1.h
> > index 91383f6cf10..7bd8f67a77a 100644
> > --- a/drivers/ram/sunxi/dram_sun20i_d1.h
> > +++ b/drivers/ram/sunxi/dram_sun20i_d1.h
> > @@ -19,6 +19,13 @@ enum sunxi_dram_type {
> > SUNXI_DRAM_TYPE_LPDDR3 = 7,
> > };
> >
> > +enum sunxi_soc_chipid {
> > + SUNXI_CHIPID_F133A = 0x5C00,
> > + SUNXI_CHIPID_D1S = 0x5E00,
> > + SUNXI_CHIPID_T113S3 = 0x6000,
> > + SUNXI_CHIPID_T113M4020DC0 = 0x7200,
> > +};
> > +
> > /*
> > * This structure contains a mixture of fixed configuration settings,
> > * variables that are used at runtime to communicate settings between
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation
2025-09-15 19:20 [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation Lukas Schmid
2025-09-16 14:06 ` Andre Przywara
@ 2025-09-17 21:48 ` Andre Przywara
2025-10-16 15:30 ` Lukas Schmid
1 sibling, 1 reply; 6+ messages in thread
From: Andre Przywara @ 2025-09-17 21:48 UTC (permalink / raw)
To: Lukas Schmid; +Cc: Tom Rini, linux-sunxi, John Watts, Jernej Skrabec, u-boot
On Mon, 15 Sep 2025 21:20:35 +0200
Lukas Schmid <lukas.schmid@netcube.li> wrote:
Hi Lukas, John,
so looking at the code again, table 0 is special in that it's all 0's,
which apparently means no remapping, according to some comments.
We already bail out earlier of this function for configurations that do
not require remapping, so can you test whether this works here as well?
Just do the chip ID test early, after the DRAM type check, and before
the fuse is read. And if it's 0x7200, then just return;
I think that would look better than the odd fuse special case.
Thanks,
Andre
> Extend the DRAM initialisation code to add support for the T113-S4 aka
> T113M4020DC0 by checking the SoC's CHIPID.
>
> The list of Chip-IDs came from
> https://github.com/ua1arn/hftrx/blob/25d8cb9e4cfe1d7d0e4a2f641025c88a9ec5e758/inc/clocks.h#L250
>
> And the chipid register address was something I heard through apritzel
> altough it seems that, according to Jookia, the Tina Device Tree seems
> to agree:
>
> sid@3006000 {
> compatible = "allwinner,sun20iw1p1-sid", "allwinner,sunxi-sid";
> reg = <0x0 0x03006000 0 0x1000>;
> #address-cells = <1>;
> #size-cells = <1>;
>
> chipid {
> reg = <0x0 0>;
> offset = <0x200>;
> size = <0x10>;
> };
> ...
> };
>
> Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
> Tested-by: John Watts <contact@jookia.org>
> Reviewed-by: John Watts <contact@jookia.org>
> Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
> ---
> Changes in v2:
> - Use uint32_t instead of u32 for sid_read_soc_chipid return type
> - Add descriptive comment about source of Chip-ID list and register
>
> drivers/ram/sunxi/dram_sun20i_d1.c | 13 ++++++++++++-
> drivers/ram/sunxi/dram_sun20i_d1.h | 7 +++++++
> 2 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/ram/sunxi/dram_sun20i_d1.c b/drivers/ram/sunxi/dram_sun20i_d1.c
> index a1794032f3b..381eeb87e2e 100644
> --- a/drivers/ram/sunxi/dram_sun20i_d1.c
> +++ b/drivers/ram/sunxi/dram_sun20i_d1.c
> @@ -54,6 +54,11 @@ static void sid_read_ldoB_cal(const dram_para_t *para)
> clrsetbits_le32(0x3000150, 0xff00, reg << 8);
> }
>
> +static uint32_t sid_read_soc_chipid(void)
> +{
> + return readl(SUNXI_SID_BASE + 0x00) & 0xffff;
> +}
> +
> static void dram_voltage_set(const dram_para_t *para)
> {
> int vol;
> @@ -663,6 +668,7 @@ static void mctl_phy_ac_remapping(const dram_para_t *para,
>
> fuse = (readl(SUNXI_SID_BASE + 0x28) & 0xf00) >> 8;
> debug("DDR efuse: 0x%x\n", fuse);
> + debug("SoC Chip ID: 0x%08x\n", sid_read_soc_chipid());
>
> if (para->dram_type == SUNXI_DRAM_TYPE_DDR2) {
> if (fuse == 15)
> @@ -675,7 +681,12 @@ static void mctl_phy_ac_remapping(const dram_para_t *para,
> switch (fuse) {
> case 8: cfg = ac_remapping_tables[2]; break;
> case 9: cfg = ac_remapping_tables[3]; break;
> - case 10: cfg = ac_remapping_tables[5]; break;
> + case 10:
> + if (sid_read_soc_chipid() == SUNXI_CHIPID_T113M4020DC0)
> + cfg = ac_remapping_tables[0];
> + else
> + cfg = ac_remapping_tables[5];
> + break;
> case 11: cfg = ac_remapping_tables[4]; break;
> default:
> case 12: cfg = ac_remapping_tables[1]; break;
> diff --git a/drivers/ram/sunxi/dram_sun20i_d1.h b/drivers/ram/sunxi/dram_sun20i_d1.h
> index 91383f6cf10..7bd8f67a77a 100644
> --- a/drivers/ram/sunxi/dram_sun20i_d1.h
> +++ b/drivers/ram/sunxi/dram_sun20i_d1.h
> @@ -19,6 +19,13 @@ enum sunxi_dram_type {
> SUNXI_DRAM_TYPE_LPDDR3 = 7,
> };
>
> +enum sunxi_soc_chipid {
> + SUNXI_CHIPID_F133A = 0x5C00,
> + SUNXI_CHIPID_D1S = 0x5E00,
> + SUNXI_CHIPID_T113S3 = 0x6000,
> + SUNXI_CHIPID_T113M4020DC0 = 0x7200,
> +};
> +
> /*
> * This structure contains a mixture of fixed configuration settings,
> * variables that are used at runtime to communicate settings between
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation
2025-09-17 21:48 ` Andre Przywara
@ 2025-10-16 15:30 ` Lukas Schmid
2025-10-19 23:59 ` Andre Przywara
0 siblings, 1 reply; 6+ messages in thread
From: Lukas Schmid @ 2025-10-16 15:30 UTC (permalink / raw)
To: Andre Przywara; +Cc: Tom Rini, linux-sunxi, John Watts, Jernej Skrabec, u-boot
[-- Attachment #1: Type: text/plain, Size: 4988 bytes --]
On Mittwoch, 17. September 2025 23:48:26 Mitteleuropäische Sommerzeit Andre
Przywara wrote:
> On Mon, 15 Sep 2025 21:20:35 +0200
> Lukas Schmid <lukas.schmid@netcube.li> wrote:
>
> Hi Lukas, John,
>
> so looking at the code again, table 0 is special in that it's all 0's,
> which apparently means no remapping, according to some comments.
> We already bail out earlier of this function for configurations that do
> not require remapping, so can you test whether this works here as well?
> Just do the chip ID test early, after the DRAM type check, and before
> the fuse is read. And if it's 0x7200, then just return;
>
> I think that would look better than the odd fuse special case.
>
> Thanks,
> Andre
>
> > Extend the DRAM initialisation code to add support for the T113-S4 aka
> > T113M4020DC0 by checking the SoC's CHIPID.
> >
> > The list of Chip-IDs came from
> > https://github.com/ua1arn/hftrx/blob/25d8cb9e4cfe1d7d0e4a2f641025c88a9ec5e
> > 758/inc/clocks.h#L250
> >
> > And the chipid register address was something I heard through apritzel
> > altough it seems that, according to Jookia, the Tina Device Tree seems
> > to agree:
> >
> > sid@3006000 {
> >
> > compatible = "allwinner,sun20iw1p1-sid", "allwinner,sunxi-sid";
> > reg = <0x0 0x03006000 0 0x1000>;
> > #address-cells = <1>;
> > #size-cells = <1>;
> >
> > chipid {
> >
> > reg = <0x0 0>;
> > offset = <0x200>;
> > size = <0x10>;
> >
> > };
> > ...
> >
> > };
> >
> > Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
> > Tested-by: John Watts <contact@jookia.org>
> > Reviewed-by: John Watts <contact@jookia.org>
> > Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
> > ---
> >
> > Changes in v2:
> > - Use uint32_t instead of u32 for sid_read_soc_chipid return type
> > - Add descriptive comment about source of Chip-ID list and register
> >
> > drivers/ram/sunxi/dram_sun20i_d1.c | 13 ++++++++++++-
> > drivers/ram/sunxi/dram_sun20i_d1.h | 7 +++++++
> > 2 files changed, 19 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/ram/sunxi/dram_sun20i_d1.c
> > b/drivers/ram/sunxi/dram_sun20i_d1.c index a1794032f3b..381eeb87e2e
> > 100644
> > --- a/drivers/ram/sunxi/dram_sun20i_d1.c
> > +++ b/drivers/ram/sunxi/dram_sun20i_d1.c
> > @@ -54,6 +54,11 @@ static void sid_read_ldoB_cal(const dram_para_t *para)
> >
> > clrsetbits_le32(0x3000150, 0xff00, reg << 8);
> >
> > }
> >
> > +static uint32_t sid_read_soc_chipid(void)
> > +{
> > + return readl(SUNXI_SID_BASE + 0x00) & 0xffff;
> > +}
> > +
> >
> > static void dram_voltage_set(const dram_para_t *para)
> > {
> >
> > int vol;
> >
> > @@ -663,6 +668,7 @@ static void mctl_phy_ac_remapping(const dram_para_t
> > *para,>
> > fuse = (readl(SUNXI_SID_BASE + 0x28) & 0xf00) >> 8;
> > debug("DDR efuse: 0x%x\n", fuse);
> >
> > + debug("SoC Chip ID: 0x%08x\n", sid_read_soc_chipid());
> >
> > if (para->dram_type == SUNXI_DRAM_TYPE_DDR2) {
> >
> > if (fuse == 15)
> >
> > @@ -675,7 +681,12 @@ static void mctl_phy_ac_remapping(const dram_para_t
> > *para,>
> > switch (fuse) {
> > case 8: cfg = ac_remapping_tables[2]; break;
> > case 9: cfg = ac_remapping_tables[3]; break;
> >
> > - case 10: cfg = ac_remapping_tables[5];
break;
> > + case 10:
> > + if (sid_read_soc_chipid() ==
SUNXI_CHIPID_T113M4020DC0)
> > + cfg =
ac_remapping_tables[0];
> > + else
> > + cfg =
ac_remapping_tables[5];
> > + break;
> >
> > case 11: cfg = ac_remapping_tables[4];
break;
> > default:
> > case 12: cfg = ac_remapping_tables[1];
break;
> >
> > diff --git a/drivers/ram/sunxi/dram_sun20i_d1.h
> > b/drivers/ram/sunxi/dram_sun20i_d1.h index 91383f6cf10..7bd8f67a77a
> > 100644
> > --- a/drivers/ram/sunxi/dram_sun20i_d1.h
> > +++ b/drivers/ram/sunxi/dram_sun20i_d1.h
> > @@ -19,6 +19,13 @@ enum sunxi_dram_type {
> >
> > SUNXI_DRAM_TYPE_LPDDR3 = 7,
> >
> > };
> >
> > +enum sunxi_soc_chipid {
> > + SUNXI_CHIPID_F133A = 0x5C00,
> > + SUNXI_CHIPID_D1S = 0x5E00,
> > + SUNXI_CHIPID_T113S3 = 0x6000,
> > + SUNXI_CHIPID_T113M4020DC0 = 0x7200,
> > +};
> > +
> >
> > /*
> >
> > * This structure contains a mixture of fixed configuration settings,
> > * variables that are used at runtime to communicate settings between
Hi Andre,
I finally got some time to look into this patch again.
Dropping out of the DRAM type check earlier sounds like a good move here. I
can definitely do that and also test it on my board.
About the other changes. Is the patch itself in a good state right now (except
the commit message) or would you (or anyone else here for that matter) like to
see something changed?
I'll change/update the commit message to have a smaller footprint regarding
the SID chip ID, and also remove the reference to the "random" git repo.
Best regards,
Lukas
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation
2025-10-16 15:30 ` Lukas Schmid
@ 2025-10-19 23:59 ` Andre Przywara
2025-10-20 18:51 ` John Watts
0 siblings, 1 reply; 6+ messages in thread
From: Andre Przywara @ 2025-10-19 23:59 UTC (permalink / raw)
To: Lukas Schmid; +Cc: Tom Rini, linux-sunxi, John Watts, Jernej Skrabec, u-boot
On Thu, 16 Oct 2025 17:30:41 +0200
Lukas Schmid <lukas.schmid@netcube.li> wrote:
Hi Lukas,
> I finally got some time to look into this patch again.
>
> Dropping out of the DRAM type check earlier sounds like a good move here. I
> can definitely do that and also test it on my board.
Yes, please do, and send a v3 if that works for you.
> About the other changes. Is the patch itself in a good state right now (except
> the commit message) or would you (or anyone else here for that matter) like to
> see something changed?
>
> I'll change/update the commit message to have a smaller footprint regarding
> the SID chip ID, and also remove the reference to the "random" git repo.
What's more important than the sources is some background and some
description about what the patch does, like this:
==================
The T113-s4 SoC is using the same die as the T113-s3, but comes with
256MiB of co-packaged DRAM. Besides the doubled size, the DRAM chip
seems to be connected slightly differently, which requires to use a
different pin remapping.
Extend the DRAM initialisation code to add support for the T113-S4 aka
T113M4020DC0 by checking the SoC's CHIPID, which is stored in the first
word of the SID efuses.
==================
So no lengthy dumps or links. You might want to put the link to the
github repo as a comment before the enum in dram_sun20i_d1.h.
Thanks,
Andre
>
> Best regards,
> Lukas
> On Mittwoch, 17. September 2025 23:48:26 Mitteleuropäische Sommerzeit Andre
> Przywara wrote:
> > On Mon, 15 Sep 2025 21:20:35 +0200
> > Lukas Schmid <lukas.schmid@netcube.li> wrote:
> >
> > Hi Lukas, John,
> >
> > so looking at the code again, table 0 is special in that it's all 0's,
> > which apparently means no remapping, according to some comments.
> > We already bail out earlier of this function for configurations that do
> > not require remapping, so can you test whether this works here as well?
> > Just do the chip ID test early, after the DRAM type check, and before
> > the fuse is read. And if it's 0x7200, then just return;
> >
> > I think that would look better than the odd fuse special case.
> >
> > Thanks,
> > Andre
> >
> > > Extend the DRAM initialisation code to add support for the T113-S4 aka
> > > T113M4020DC0 by checking the SoC's CHIPID.
> > >
> > > The list of Chip-IDs came from
> > > https://github.com/ua1arn/hftrx/blob/25d8cb9e4cfe1d7d0e4a2f641025c88a9ec5e
> > > 758/inc/clocks.h#L250
> > >
> > > And the chipid register address was something I heard through apritzel
> > > altough it seems that, according to Jookia, the Tina Device Tree seems
> > > to agree:
> > >
> > > sid@3006000 {
> > >
> > > compatible = "allwinner,sun20iw1p1-sid", "allwinner,sunxi-sid";
> > > reg = <0x0 0x03006000 0 0x1000>;
> > > #address-cells = <1>;
> > > #size-cells = <1>;
> > >
> > > chipid {
> > >
> > > reg = <0x0 0>;
> > > offset = <0x200>;
> > > size = <0x10>;
> > >
> > > };
> > > ...
> > >
> > > };
> > >
> > > Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
> > > Tested-by: John Watts <contact@jookia.org>
> > > Reviewed-by: John Watts <contact@jookia.org>
> > > Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
> > > ---
> > >
> > > Changes in v2:
> > > - Use uint32_t instead of u32 for sid_read_soc_chipid return type
> > > - Add descriptive comment about source of Chip-ID list and register
> > >
> > > drivers/ram/sunxi/dram_sun20i_d1.c | 13 ++++++++++++-
> > > drivers/ram/sunxi/dram_sun20i_d1.h | 7 +++++++
> > > 2 files changed, 19 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/ram/sunxi/dram_sun20i_d1.c
> > > b/drivers/ram/sunxi/dram_sun20i_d1.c index a1794032f3b..381eeb87e2e
> > > 100644
> > > --- a/drivers/ram/sunxi/dram_sun20i_d1.c
> > > +++ b/drivers/ram/sunxi/dram_sun20i_d1.c
> > > @@ -54,6 +54,11 @@ static void sid_read_ldoB_cal(const dram_para_t *para)
> > >
> > > clrsetbits_le32(0x3000150, 0xff00, reg << 8);
> > >
> > > }
> > >
> > > +static uint32_t sid_read_soc_chipid(void)
> > > +{
> > > + return readl(SUNXI_SID_BASE + 0x00) & 0xffff;
> > > +}
> > > +
> > >
> > > static void dram_voltage_set(const dram_para_t *para)
> > > {
> > >
> > > int vol;
> > >
> > > @@ -663,6 +668,7 @@ static void mctl_phy_ac_remapping(const dram_para_t
> > > *para,>
> > > fuse = (readl(SUNXI_SID_BASE + 0x28) & 0xf00) >> 8;
> > > debug("DDR efuse: 0x%x\n", fuse);
> > >
> > > + debug("SoC Chip ID: 0x%08x\n", sid_read_soc_chipid());
> > >
> > > if (para->dram_type == SUNXI_DRAM_TYPE_DDR2) {
> > >
> > > if (fuse == 15)
> > >
> > > @@ -675,7 +681,12 @@ static void mctl_phy_ac_remapping(const dram_para_t
> > > *para,>
> > > switch (fuse) {
> > > case 8: cfg = ac_remapping_tables[2]; break;
> > > case 9: cfg = ac_remapping_tables[3]; break;
> > >
> > > - case 10: cfg = ac_remapping_tables[5];
> break;
> > > + case 10:
> > > + if (sid_read_soc_chipid() ==
> SUNXI_CHIPID_T113M4020DC0)
> > > + cfg =
> ac_remapping_tables[0];
> > > + else
> > > + cfg =
> ac_remapping_tables[5];
> > > + break;
> > >
> > > case 11: cfg = ac_remapping_tables[4];
> break;
> > > default:
> > > case 12: cfg = ac_remapping_tables[1];
> break;
> > >
> > > diff --git a/drivers/ram/sunxi/dram_sun20i_d1.h
> > > b/drivers/ram/sunxi/dram_sun20i_d1.h index 91383f6cf10..7bd8f67a77a
> > > 100644
> > > --- a/drivers/ram/sunxi/dram_sun20i_d1.h
> > > +++ b/drivers/ram/sunxi/dram_sun20i_d1.h
> > > @@ -19,6 +19,13 @@ enum sunxi_dram_type {
> > >
> > > SUNXI_DRAM_TYPE_LPDDR3 = 7,
> > >
> > > };
> > >
> > > +enum sunxi_soc_chipid {
> > > + SUNXI_CHIPID_F133A = 0x5C00,
> > > + SUNXI_CHIPID_D1S = 0x5E00,
> > > + SUNXI_CHIPID_T113S3 = 0x6000,
> > > + SUNXI_CHIPID_T113M4020DC0 = 0x7200,
> > > +};
> > > +
> > >
> > > /*
> > >
> > > * This structure contains a mixture of fixed configuration settings,
> > > * variables that are used at runtime to communicate settings between
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation
2025-10-19 23:59 ` Andre Przywara
@ 2025-10-20 18:51 ` John Watts
0 siblings, 0 replies; 6+ messages in thread
From: John Watts @ 2025-10-20 18:51 UTC (permalink / raw)
To: Andre Przywara
Cc: Lukas Schmid, Tom Rini, linux-sunxi, Jernej Skrabec, u-boot
Hi,
I can confirm this code works:
fuse = (readl(SUNXI_SID_BASE + 0x28) & 0xf00) >> 8;
debug("DDR efuse: 0x%x\n", fuse);
debug("SoC Chip ID: 0x%08x\n", sid_read_soc_chipid());
if (sid_read_soc_chipid() == SUNXI_CHIPID_T113M4020DC0)
return;
if (para->dram_type == SUNXI_DRAM_TYPE_DDR2) {
if (fuse == 15)
return;
cfg = ac_remapping_tables[6];
} else {
if (config->dram_tpr13 & 0xc0000) {
cfg = ac_remapping_tables[7];
} else {
switch (fuse) {
case 8: cfg = ac_remapping_tables[2]; break;
case 9: cfg = ac_remapping_tables[3]; break;
case 10: cfg = ac_remapping_tables[5]; break;
case 11: cfg = ac_remapping_tables[4]; break;
default:
case 12: cfg = ac_remapping_tables[1]; break;
case 13:
case 14: cfg = ac_remapping_tables[0]; break;
}
John.
On Mon, Oct 20, 2025 at 12:59:52AM +0100, Andre Przywara wrote:
> On Thu, 16 Oct 2025 17:30:41 +0200
> Lukas Schmid <lukas.schmid@netcube.li> wrote:
>
> Hi Lukas,
>
> > I finally got some time to look into this patch again.
> >
> > Dropping out of the DRAM type check earlier sounds like a good move here. I
> > can definitely do that and also test it on my board.
>
> Yes, please do, and send a v3 if that works for you.
>
> > About the other changes. Is the patch itself in a good state right now (except
> > the commit message) or would you (or anyone else here for that matter) like to
> > see something changed?
> >
> > I'll change/update the commit message to have a smaller footprint regarding
> > the SID chip ID, and also remove the reference to the "random" git repo.
>
> What's more important than the sources is some background and some
> description about what the patch does, like this:
>
> ==================
> The T113-s4 SoC is using the same die as the T113-s3, but comes with
> 256MiB of co-packaged DRAM. Besides the doubled size, the DRAM chip
> seems to be connected slightly differently, which requires to use a
> different pin remapping.
>
> Extend the DRAM initialisation code to add support for the T113-S4 aka
> T113M4020DC0 by checking the SoC's CHIPID, which is stored in the first
> word of the SID efuses.
> ==================
>
> So no lengthy dumps or links. You might want to put the link to the
> github repo as a comment before the enum in dram_sun20i_d1.h.
>
> Thanks,
> Andre
>
> >
> > Best regards,
> > Lukas
>
> > On Mittwoch, 17. September 2025 23:48:26 Mitteleuropäische Sommerzeit Andre
> > Przywara wrote:
> > > On Mon, 15 Sep 2025 21:20:35 +0200
> > > Lukas Schmid <lukas.schmid@netcube.li> wrote:
> > >
> > > Hi Lukas, John,
> > >
> > > so looking at the code again, table 0 is special in that it's all 0's,
> > > which apparently means no remapping, according to some comments.
> > > We already bail out earlier of this function for configurations that do
> > > not require remapping, so can you test whether this works here as well?
> > > Just do the chip ID test early, after the DRAM type check, and before
> > > the fuse is read. And if it's 0x7200, then just return;
> > >
> > > I think that would look better than the odd fuse special case.
> > >
> > > Thanks,
> > > Andre
> > >
> > > > Extend the DRAM initialisation code to add support for the T113-S4 aka
> > > > T113M4020DC0 by checking the SoC's CHIPID.
> > > >
> > > > The list of Chip-IDs came from
> > > > https://github.com/ua1arn/hftrx/blob/25d8cb9e4cfe1d7d0e4a2f641025c88a9ec5e
> > > > 758/inc/clocks.h#L250
> > > >
> > > > And the chipid register address was something I heard through apritzel
> > > > altough it seems that, according to Jookia, the Tina Device Tree seems
> > > > to agree:
> > > >
> > > > sid@3006000 {
> > > >
> > > > compatible = "allwinner,sun20iw1p1-sid", "allwinner,sunxi-sid";
> > > > reg = <0x0 0x03006000 0 0x1000>;
> > > > #address-cells = <1>;
> > > > #size-cells = <1>;
> > > >
> > > > chipid {
> > > >
> > > > reg = <0x0 0>;
> > > > offset = <0x200>;
> > > > size = <0x10>;
> > > >
> > > > };
> > > > ...
> > > >
> > > > };
> > > >
> > > > Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
> > > > Tested-by: John Watts <contact@jookia.org>
> > > > Reviewed-by: John Watts <contact@jookia.org>
> > > > Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
> > > > ---
> > > >
> > > > Changes in v2:
> > > > - Use uint32_t instead of u32 for sid_read_soc_chipid return type
> > > > - Add descriptive comment about source of Chip-ID list and register
> > > >
> > > > drivers/ram/sunxi/dram_sun20i_d1.c | 13 ++++++++++++-
> > > > drivers/ram/sunxi/dram_sun20i_d1.h | 7 +++++++
> > > > 2 files changed, 19 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/ram/sunxi/dram_sun20i_d1.c
> > > > b/drivers/ram/sunxi/dram_sun20i_d1.c index a1794032f3b..381eeb87e2e
> > > > 100644
> > > > --- a/drivers/ram/sunxi/dram_sun20i_d1.c
> > > > +++ b/drivers/ram/sunxi/dram_sun20i_d1.c
> > > > @@ -54,6 +54,11 @@ static void sid_read_ldoB_cal(const dram_para_t *para)
> > > >
> > > > clrsetbits_le32(0x3000150, 0xff00, reg << 8);
> > > >
> > > > }
> > > >
> > > > +static uint32_t sid_read_soc_chipid(void)
> > > > +{
> > > > + return readl(SUNXI_SID_BASE + 0x00) & 0xffff;
> > > > +}
> > > > +
> > > >
> > > > static void dram_voltage_set(const dram_para_t *para)
> > > > {
> > > >
> > > > int vol;
> > > >
> > > > @@ -663,6 +668,7 @@ static void mctl_phy_ac_remapping(const dram_para_t
> > > > *para,>
> > > > fuse = (readl(SUNXI_SID_BASE + 0x28) & 0xf00) >> 8;
> > > > debug("DDR efuse: 0x%x\n", fuse);
> > > >
> > > > + debug("SoC Chip ID: 0x%08x\n", sid_read_soc_chipid());
> > > >
> > > > if (para->dram_type == SUNXI_DRAM_TYPE_DDR2) {
> > > >
> > > > if (fuse == 15)
> > > >
> > > > @@ -675,7 +681,12 @@ static void mctl_phy_ac_remapping(const dram_para_t
> > > > *para,>
> > > > switch (fuse) {
> > > > case 8: cfg = ac_remapping_tables[2]; break;
> > > > case 9: cfg = ac_remapping_tables[3]; break;
> > > >
> > > > - case 10: cfg = ac_remapping_tables[5];
> > break;
> > > > + case 10:
> > > > + if (sid_read_soc_chipid() ==
> > SUNXI_CHIPID_T113M4020DC0)
> > > > + cfg =
> > ac_remapping_tables[0];
> > > > + else
> > > > + cfg =
> > ac_remapping_tables[5];
> > > > + break;
> > > >
> > > > case 11: cfg = ac_remapping_tables[4];
> > break;
> > > > default:
> > > > case 12: cfg = ac_remapping_tables[1];
> > break;
> > > >
> > > > diff --git a/drivers/ram/sunxi/dram_sun20i_d1.h
> > > > b/drivers/ram/sunxi/dram_sun20i_d1.h index 91383f6cf10..7bd8f67a77a
> > > > 100644
> > > > --- a/drivers/ram/sunxi/dram_sun20i_d1.h
> > > > +++ b/drivers/ram/sunxi/dram_sun20i_d1.h
> > > > @@ -19,6 +19,13 @@ enum sunxi_dram_type {
> > > >
> > > > SUNXI_DRAM_TYPE_LPDDR3 = 7,
> > > >
> > > > };
> > > >
> > > > +enum sunxi_soc_chipid {
> > > > + SUNXI_CHIPID_F133A = 0x5C00,
> > > > + SUNXI_CHIPID_D1S = 0x5E00,
> > > > + SUNXI_CHIPID_T113S3 = 0x6000,
> > > > + SUNXI_CHIPID_T113M4020DC0 = 0x7200,
> > > > +};
> > > > +
> > > >
> > > > /*
> > > >
> > > > * This structure contains a mixture of fixed configuration settings,
> > > > * variables that are used at runtime to communicate settings between
> >
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-10-20 18:51 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-15 19:20 [PATCH v2] sunxi: extend R528/T113-s3/D1(s) DRAM initialisation Lukas Schmid
2025-09-16 14:06 ` Andre Przywara
2025-09-17 21:48 ` Andre Przywara
2025-10-16 15:30 ` Lukas Schmid
2025-10-19 23:59 ` Andre Przywara
2025-10-20 18:51 ` John Watts
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox