HI Patrick On 5/6/22 16:06, Patrick Delaunay wrote: > Add support for new compatible "st,stm32mp13-ddr" to manage the > DDR sub system (Controller and PHY) in STM32MP13x SOC: > - only one AXI port > - support of 16 port output (MEMC_DRAM_DATA_WIDTH = 2) > > The STM32MP15x SOC have 2 AXI ports and 32 bits support. > > Signed-off-by: Patrick Delaunay <patrick.delau...@foss.st.com> > --- > > .../memory-controllers/st,stm32mp1-ddr.txt | 49 +++++++++++++++---- > drivers/ram/stm32mp1/stm32mp1_ram.c | 28 +++++++---- > 2 files changed, 57 insertions(+), 20 deletions(-) > > diff --git a/doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt > b/doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt > index 926e3e83b3..e6ea8d0ef5 100644 > --- a/doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt > +++ b/doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt > @@ -3,7 +3,8 @@ ST,stm32mp1 DDR3/LPDDR2/LPDDR3 Controller (DDRCTRL and > DDRPHYC) > -------------------- > Required properties: > -------------------- > -- compatible : Should be "st,stm32mp1-ddr" > +- compatible : Should be "st,stm32mp1-ddr" for STM32MP15x > + Should be "st,stm32mp13-ddr" for STM32MP13x > - reg : controleur (DDRCTRL) and phy (DDRPHYC) base address > - clocks : controller clocks handle > - clock-names : associated controller clock names > @@ -13,6 +14,8 @@ Required properties: > the next attributes are DDR parameters, they are generated by DDR tools > included in STM32 Cube tool > > +They are required only in SPL, when TFABOOT is not activated. > + > info attributes: > ---------------- > - st,mem-name : name for DDR configuration, simple string for > information > @@ -24,7 +27,7 @@ controlleur attributes: > ----------------------- > - st,ctl-reg : controleur values depending of the DDR type > (DDR3/LPDDR2/LPDDR3) > - for STM32MP15x: 25 values are requested in this order > + for STM32MP15x and STM32MP13x: 25 values are requested in this order > MSTR > MRCTRL0 > MRCTRL1 > @@ -53,7 +56,7 @@ controlleur attributes: > > - st,ctl-timing : controleur values depending of frequency and timing > parameter > of DDR > - for STM32MP15x: 12 values are requested in this order > + for STM32MP15x and STM32MP13x: 12 values are requested in this order > RFSHTMG > DRAMTMG0 > DRAMTMG1 > @@ -68,7 +71,7 @@ controlleur attributes: > ODTCFG > > - st,ctl-map : controleur values depending of address mapping > - for STM32MP15x: 9 values are requested in this order > + for STM32MP15x and STM32MP13x: 9 values are requested in this order > ADDRMAP1 > ADDRMAP2 > ADDRMAP3 > @@ -99,6 +102,19 @@ controlleur attributes: > PCFGWQOS0_1 > PCFGWQOS1_1 > > + for STM32MP13x: 11 values are requested in this order > + SCHED > + SCHED1 > + PERFHPR1 > + PERFLPR1 > + PERFWR1 > + PCFGR_0 > + PCFGW_0 > + PCFGQOS0_0 > + PCFGQOS1_0 > + PCFGWQOS0_0 > + PCFGWQOS1_0 > + > phyc attributes: > ---------------- > - st,phy-reg : phy values depending of the DDR type (DDR3/LPDDR2/LPDDR3) > @@ -115,8 +131,19 @@ phyc attributes: > DX2GCR > DX3GCR > > + for STM32MP13x: 9 values are requested in this order > + PGCR > + ACIOCR > + DXCCR > + DSGCR > + DCR > + ODTCR > + ZQ0CR1 > + DX0GCR > + DX1GCR > + > - st,phy-timing : phy values depending of frequency and timing > parameter of DDR > - for STM32MP15x: 10 values are requested in this order > + for STM32MP15x and STM32MP13x: 10 values are requested in this order > PTR0 > PTR1 > PTR2 > @@ -128,16 +155,18 @@ phyc attributes: > MR2 > MR3 > > + for STM32MP13x: 6 values are requested in this order > + DX0DLLCR > + DX0DQTR > + DX0DQSTR > + DX1DLLCR > + DX1DQTR > + DX1DQSTR > Example: > > / { > soc { > - u-boot,dm-spl; > - > ddr: ddr@0x5A003000{ > - u-boot,dm-spl; > - u-boot,dm-pre-reloc; > - > compatible = "st,stm32mp1-ddr"; > > reg = <0x5A003000 0x550 > diff --git a/drivers/ram/stm32mp1/stm32mp1_ram.c > b/drivers/ram/stm32mp1/stm32mp1_ram.c > index 49b1262461..a6c19af972 100644 > --- a/drivers/ram/stm32mp1/stm32mp1_ram.c > +++ b/drivers/ram/stm32mp1/stm32mp1_ram.c > @@ -230,29 +230,29 @@ static u8 get_nb_col(struct stm32mp1_ddrctl *ctl, u8 > data_bus_width) > > reg = readl(&ctl->addrmap3); > /* addrmap3.addrmap_col_b6 */ > - val = (reg & GENMASK(3, 0)) >> 0; > + val = (reg & GENMASK(4, 0)) >> 0; > if (val <= 7) > bits++; > /* addrmap3.addrmap_col_b7 */ > - val = (reg & GENMASK(11, 8)) >> 8; > + val = (reg & GENMASK(12, 8)) >> 8; > if (val <= 7) > bits++; > /* addrmap3.addrmap_col_b8 */ > - val = (reg & GENMASK(19, 16)) >> 16; > + val = (reg & GENMASK(20, 16)) >> 16; > if (val <= 7) > bits++; > /* addrmap3.addrmap_col_b9 */ > - val = (reg & GENMASK(27, 24)) >> 24; > + val = (reg & GENMASK(28, 24)) >> 24; > if (val <= 7) > bits++; > > reg = readl(&ctl->addrmap4); > /* addrmap4.addrmap_col_b10 */ > - val = (reg & GENMASK(3, 0)) >> 0; > + val = (reg & GENMASK(4, 0)) >> 0; > if (val <= 7) > bits++; > /* addrmap4.addrmap_col_b11 */ > - val = (reg & GENMASK(11, 8)) >> 8; > + val = (reg & GENMASK(12, 8)) >> 8; > if (val <= 7) > bits++; > > @@ -296,21 +296,24 @@ static u8 get_nb_row(struct stm32mp1_ddrctl *ctl) > reg = readl(&ctl->addrmap6); > /* addrmap6.addrmap_row_b12 */ > val = (reg & GENMASK(3, 0)) >> 0; > - if (val <= 7) > + if (val <= 11) > bits++; > /* addrmap6.addrmap_row_b13 */ > val = (reg & GENMASK(11, 8)) >> 8; > - if (val <= 7) > + if (val <= 11) > bits++; > /* addrmap6.addrmap_row_b14 */ > val = (reg & GENMASK(19, 16)) >> 16; > - if (val <= 7) > + if (val <= 11) > bits++; > /* addrmap6.addrmap_row_b15 */ > val = (reg & GENMASK(27, 24)) >> 24; > - if (val <= 7) > + if (val <= 11) > bits++; > > + if (reg & BIT(31)) > + printf("warning: LPDDR3_6GB_12GB is not supported\n"); > + > return bits; > } > > @@ -392,12 +395,17 @@ static struct ram_ops stm32mp1_ddr_ops = { > .get_info = stm32mp1_ddr_get_info, > }; > > +static const struct stm32mp1_ddr_cfg stm32mp13x_ddr_cfg = { > + .nb_bytes = 2, > +}; > + > static const struct stm32mp1_ddr_cfg stm32mp15x_ddr_cfg = { > .nb_bytes = 4, > }; > > static const struct udevice_id stm32mp1_ddr_ids[] = { > { .compatible = "st,stm32mp1-ddr", .data = (ulong)&stm32mp15x_ddr_cfg}, > + { .compatible = "st,stm32mp13-ddr", .data = (ulong)&stm32mp13x_ddr_cfg}, > { } > }; > Reviewed-by: Patrice Chotard <patrice.chot...@foss.st.com>
Thanks Patrice