diff mbox series

[v1,11/17] ddr: socfpga: Enable memory test on memory size less than 1GB

Message ID 20210331143908.48211-12-elly.siew.chin.lim@intel.com
State Superseded
Delegated to: Simon Goldschmidt
Headers show
Series Add Intel N5X SoC support | expand

Commit Message

Siew Chin Lim March 31, 2021, 2:39 p.m. UTC
From: Tien Fong Chee <tien.fong.chee@intel.com>

Minimum 1GB memory size is required in current memory test, so this patch
improves the memory test for processing memory size less than 1GB, and
the size in power of two.

Signed-off-by: Tien Fong Chee <tien.fong.chee@intel.com>
---
 drivers/ddr/altera/sdram_soc64.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

Comments

Ley Foon Tan April 9, 2021, 5:53 a.m. UTC | #1
> -----Original Message-----
> From: Lim, Elly Siew Chin <elly.siew.chin.lim@intel.com>
> Sent: Wednesday, March 31, 2021 10:39 PM
> To: u-boot@lists.denx.de
> Cc: Marek Vasut <marex@denx.de>; Tan, Ley Foon
> <ley.foon.tan@intel.com>; See, Chin Liang <chin.liang.see@intel.com>;
> Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>; Chee, Tien Fong
> <tien.fong.chee@intel.com>; Westergreen, Dalon
> <dalon.westergreen@intel.com>; Simon Glass <sjg@chromium.org>; Gan,
> Yau Wai <yau.wai.gan@intel.com>
> Subject: [v1 11/17] ddr: socfpga: Enable memory test on memory size less
> than 1GB
> 
> From: Tien Fong Chee <tien.fong.chee@intel.com>
> 
> Minimum 1GB memory size is required in current memory test, so this patch
> improves the memory test for processing memory size less than 1GB, and
> the size in power of two.
> 
> Signed-off-by: Tien Fong Chee <tien.fong.chee@intel.com>
> ---
>  drivers/ddr/altera/sdram_soc64.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/ddr/altera/sdram_soc64.c
> b/drivers/ddr/altera/sdram_soc64.c
> index a08f0953e5..171cde0e6b 100644
> --- a/drivers/ddr/altera/sdram_soc64.c
> +++ b/drivers/ddr/altera/sdram_soc64.c
> @@ -182,6 +182,7 @@ void sdram_size_check(struct bd_info *bd)
>  	phys_size_t total_ram_check = 0;
>  	phys_size_t ram_check = 0;
>  	phys_addr_t start = 0;
> +	phys_size_t size, total_size;

Use "remaining_size" is more suitable.

>  	int bank;
> 
>  	/* Sanity check ensure correct SDRAM size specified */ @@ -189,10
> +190,23 @@ void sdram_size_check(struct bd_info *bd)
> 
>  	for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
>  		start = bd->bi_dram[bank].start;
> +		total_size = bd->bi_dram[bank].size;
>  		while (ram_check < bd->bi_dram[bank].size) {
> -			ram_check += get_ram_size((void *)(start +
> ram_check),
> -						 (phys_size_t)SZ_1G);
> +			size = min((phys_addr_t)SZ_1G,
> (phys_addr_t)total_size);
> +
> +			/*
> +			 * Ensure the size is power of two, this is requirement
> to run
> +			 * get_ram_size() / memory test
> +			 */
> +			if (size != 0 && ((size & (size - 1)) == 0)) {
> +				ram_check += get_ram_size((void *)(start +
> ram_check), size);
> +				total_size = bd->bi_dram[bank].size -
> ram_check;
> +			} else {
> +				puts("DDR: Memory test requires SDRAM
> size in power of two!\n");
> +				hang();
> +			}
>  		}
> +
>  		total_ram_check += ram_check;
>  		ram_check = 0;
>  	}
> --
> 2.13.0
Chee, Tien Fong April 16, 2021, 6:35 a.m. UTC | #2
Hi Ley Foon,

> -----Original Message-----
> From: Tan, Ley Foon <ley.foon.tan@intel.com>
> Sent: Friday, 9 April, 2021 1:54 PM
> To: Lim, Elly Siew Chin <elly.siew.chin.lim@intel.com>; u-boot@lists.denx.de
> Cc: Marek Vasut <marex@denx.de>; See, Chin Liang
> <chin.liang.see@intel.com>; Simon Goldschmidt
> <simon.k.r.goldschmidt@gmail.com>; Chee, Tien Fong
> <tien.fong.chee@intel.com>; Westergreen, Dalon
> <dalon.westergreen@intel.com>; Simon Glass <sjg@chromium.org>; Gan,
> Yau Wai <yau.wai.gan@intel.com>
> Subject: RE: [v1 11/17] ddr: socfpga: Enable memory test on memory size less
> than 1GB
> 
> 
> 
> > -----Original Message-----
> > From: Lim, Elly Siew Chin <elly.siew.chin.lim@intel.com>
> > Sent: Wednesday, March 31, 2021 10:39 PM
> > To: u-boot@lists.denx.de
> > Cc: Marek Vasut <marex@denx.de>; Tan, Ley Foon
> > <ley.foon.tan@intel.com>; See, Chin Liang <chin.liang.see@intel.com>;
> > Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>; Chee, Tien Fong
> > <tien.fong.chee@intel.com>; Westergreen, Dalon
> > <dalon.westergreen@intel.com>; Simon Glass <sjg@chromium.org>; Gan,
> > Yau Wai <yau.wai.gan@intel.com>
> > Subject: [v1 11/17] ddr: socfpga: Enable memory test on memory size
> > less than 1GB
> >
> > From: Tien Fong Chee <tien.fong.chee@intel.com>
> >
> > Minimum 1GB memory size is required in current memory test, so this
> > patch improves the memory test for processing memory size less than
> > 1GB, and the size in power of two.
> >
> > Signed-off-by: Tien Fong Chee <tien.fong.chee@intel.com>
> > ---
> >  drivers/ddr/altera/sdram_soc64.c | 18 ++++++++++++++++--
> >  1 file changed, 16 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/ddr/altera/sdram_soc64.c
> > b/drivers/ddr/altera/sdram_soc64.c
> > index a08f0953e5..171cde0e6b 100644
> > --- a/drivers/ddr/altera/sdram_soc64.c
> > +++ b/drivers/ddr/altera/sdram_soc64.c
> > @@ -182,6 +182,7 @@ void sdram_size_check(struct bd_info *bd)
> >  	phys_size_t total_ram_check = 0;
> >  	phys_size_t ram_check = 0;
> >  	phys_addr_t start = 0;
> > +	phys_size_t size, total_size;
> 
> Use "remaining_size" is more suitable.

Okay

> 
> >  	int bank;
> >
> >  	/* Sanity check ensure correct SDRAM size specified */ @@ -189,10
> > +190,23 @@ void sdram_size_check(struct bd_info *bd)
> >
> >  	for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
> >  		start = bd->bi_dram[bank].start;
> > +		total_size = bd->bi_dram[bank].size;
> >  		while (ram_check < bd->bi_dram[bank].size) {
> > -			ram_check += get_ram_size((void *)(start +
> > ram_check),
> > -						 (phys_size_t)SZ_1G);
> > +			size = min((phys_addr_t)SZ_1G,
> > (phys_addr_t)total_size);
> > +
> > +			/*
> > +			 * Ensure the size is power of two, this is requirement
> > to run
> > +			 * get_ram_size() / memory test
> > +			 */
> > +			if (size != 0 && ((size & (size - 1)) == 0)) {
> > +				ram_check += get_ram_size((void *)(start +
> > ram_check), size);
> > +				total_size = bd->bi_dram[bank].size -
> > ram_check;
> > +			} else {
> > +				puts("DDR: Memory test requires SDRAM
> > size in power of two!\n");
> > +				hang();
> > +			}
> >  		}
> > +
> >  		total_ram_check += ram_check;
> >  		ram_check = 0;
> >  	}
> > --
> > 2.13.0
diff mbox series

Patch

diff --git a/drivers/ddr/altera/sdram_soc64.c b/drivers/ddr/altera/sdram_soc64.c
index a08f0953e5..171cde0e6b 100644
--- a/drivers/ddr/altera/sdram_soc64.c
+++ b/drivers/ddr/altera/sdram_soc64.c
@@ -182,6 +182,7 @@  void sdram_size_check(struct bd_info *bd)
 	phys_size_t total_ram_check = 0;
 	phys_size_t ram_check = 0;
 	phys_addr_t start = 0;
+	phys_size_t size, total_size;
 	int bank;
 
 	/* Sanity check ensure correct SDRAM size specified */
@@ -189,10 +190,23 @@  void sdram_size_check(struct bd_info *bd)
 
 	for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
 		start = bd->bi_dram[bank].start;
+		total_size = bd->bi_dram[bank].size;
 		while (ram_check < bd->bi_dram[bank].size) {
-			ram_check += get_ram_size((void *)(start + ram_check),
-						 (phys_size_t)SZ_1G);
+			size = min((phys_addr_t)SZ_1G, (phys_addr_t)total_size);
+
+			/*
+			 * Ensure the size is power of two, this is requirement to run
+			 * get_ram_size() / memory test
+			 */
+			if (size != 0 && ((size & (size - 1)) == 0)) {
+				ram_check += get_ram_size((void *)(start + ram_check), size);
+				total_size = bd->bi_dram[bank].size - ram_check;
+			} else {
+				puts("DDR: Memory test requires SDRAM size in power of two!\n");
+				hang();
+			}
 		}
+
 		total_ram_check += ram_check;
 		ram_check = 0;
 	}