[U-Boot] [PATCH] image: fix getenv_bootm_size() function

Currently, this function returns wrong size if "bootm_low" is defined, but "bootm_size" is not.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
common/image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/image.c b/common/image.c index d63d9e0..f4a1dc8 100644 --- a/common/image.c +++ b/common/image.c @@ -472,9 +472,9 @@ phys_size_t getenv_bootm_size(void)
#if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS) - return gd->bd->bi_dram[0].size - tmp; + return gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start); #else - return gd->bd->bi_memsize - tmp; + return gd->bd->bi_memsize - (tmp - gd->bd->bi_memstart); #endif }

Hi Masahiro,
On 17 December 2015 at 22:17, Masahiro Yamada yamada.masahiro@socionext.com wrote:
Currently, this function returns wrong size if "bootm_low" is defined, but "bootm_size" is not.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
common/image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/image.c b/common/image.c index d63d9e0..f4a1dc8 100644 --- a/common/image.c +++ b/common/image.c @@ -472,9 +472,9 @@ phys_size_t getenv_bootm_size(void)
#if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS)
return gd->bd->bi_dram[0].size - tmp;
return gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start);
#else
return gd->bd->bi_memsize - tmp;
return gd->bd->bi_memsize - (tmp - gd->bd->bi_memstart);
#endif }
-- 1.9.1
Reviewed-by: Simon Glass sjg@chromium.org
But can you please add a comment to the image.h header file as to what this function is supposed to do?
Regards, Simon

Hi Simon,
2016-01-08 12:33 GMT+09:00 Simon Glass sjg@chromium.org:
Hi Masahiro,
On 17 December 2015 at 22:17, Masahiro Yamada yamada.masahiro@socionext.com wrote:
Currently, this function returns wrong size if "bootm_low" is defined, but "bootm_size" is not.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
common/image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/image.c b/common/image.c index d63d9e0..f4a1dc8 100644 --- a/common/image.c +++ b/common/image.c @@ -472,9 +472,9 @@ phys_size_t getenv_bootm_size(void)
#if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS)
return gd->bd->bi_dram[0].size - tmp;
return gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start);
#else
return gd->bd->bi_memsize - tmp;
return gd->bd->bi_memsize - (tmp - gd->bd->bi_memstart);
#endif }
-- 1.9.1
Reviewed-by: Simon Glass sjg@chromium.org
But can you please add a comment to the image.h header file as to what this function is supposed to do?
This patch is a bug-fix and self-contained.
I assume you suggested the additional comment be a separate work.

Hi Masahiro,
On 13 January 2016 at 22:50, Masahiro Yamada yamada.masahiro@socionext.com wrote:
Hi Simon,
2016-01-08 12:33 GMT+09:00 Simon Glass sjg@chromium.org:
Hi Masahiro,
On 17 December 2015 at 22:17, Masahiro Yamada yamada.masahiro@socionext.com wrote:
Currently, this function returns wrong size if "bootm_low" is defined, but "bootm_size" is not.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
common/image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/image.c b/common/image.c index d63d9e0..f4a1dc8 100644 --- a/common/image.c +++ b/common/image.c @@ -472,9 +472,9 @@ phys_size_t getenv_bootm_size(void)
#if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS)
return gd->bd->bi_dram[0].size - tmp;
return gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start);
#else
return gd->bd->bi_memsize - tmp;
return gd->bd->bi_memsize - (tmp - gd->bd->bi_memstart);
#endif }
-- 1.9.1
Reviewed-by: Simon Glass sjg@chromium.org
But can you please add a comment to the image.h header file as to what this function is supposed to do?
This patch is a bug-fix and self-contained.
I assume you suggested the additional comment be a separate work.
That's OK with me. It takes ages to understand what the function does so a comment would really help.
Regards, Simon

Tom,
This patch is a bug-fix and still keeping me from using bootm_low on my boards.
Please apply!

On Fri, Dec 18, 2015 at 02:17:10PM +0900, Masahiro Yamada wrote:
Currently, this function returns wrong size if "bootm_low" is defined, but "bootm_size" is not.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!

On 18.12.2015 06:17, Masahiro Yamada wrote:
Currently, this function returns wrong size if "bootm_low" is defined, but "bootm_size" is not.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
common/image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/image.c b/common/image.c index d63d9e0..f4a1dc8 100644 --- a/common/image.c +++ b/common/image.c @@ -472,9 +472,9 @@ phys_size_t getenv_bootm_size(void)
#if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS)
- return gd->bd->bi_dram[0].size - tmp;
- return gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start); #else
- return gd->bd->bi_memsize - tmp;
- return gd->bd->bi_memsize - (tmp - gd->bd->bi_memstart); #endif }
Hi Masahiro,
your commit has been merged on 19.1. this year. Today i ran a test on my tseries board with most current u-boot/master.
I ran into trouble booting my linux kernel:
--- Kernel image @ 0x80200000 [ 0x000000 - 0x222720 ] ## Loading init Ramdisk from Legacy Image at 80a00000 ... Image Name: Image Type: ARM Linux RAMDisk Image (uncompressed) Data Size: 12452646 Bytes = 11.9 MiB Load Address: 00000000 Entry Point: 00000000 ## Flattened Device Tree blob at 80100000 Booting using the fdt blob at 0x80100000 ERROR: Failed to allocate 0xbe0326 bytes below 0x10000000. ramdisk - allocation error FDT creation failed! hanging...### ERROR ### Please RESET the board ### ---
I debugged bit am came to the conclusio, that the line
+ return gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start);
brings me into trouble.
On my board DRAM is configured as follows: U-Boot (BuR V2.0)# bdinfo arch_number = 0xFFFFFFFF boot_params = 0x80000100 DRAM bank = 0x00000000 *-> start = 0x80000000** **-> size = 0x10000000** * so size minus start would give a negative number. I tried local revert of this commit and everything works as before.
more correct would be
+ return gd->bd->bi_dram[0].start - (tmp - gd->bd->bi_dram[0].size);
whats your thinking about?
best regards, Hannes

Hi Hannes
I had the same problem. http://patchwork.ozlabs.org/patch/579391/ fixed it.
Regards, Matthias
2016-02-08 15:01 GMT+01:00 Hannes Schmelzer hannes@schmelzer.or.at:
On 18.12.2015 06:17, Masahiro Yamada wrote:
Currently, this function returns wrong size if "bootm_low" is defined, but "bootm_size" is not.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
common/image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/image.c b/common/image.c index d63d9e0..f4a1dc8 100644 --- a/common/image.c +++ b/common/image.c @@ -472,9 +472,9 @@ phys_size_t getenv_bootm_size(void) #if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS)
return gd->bd->bi_dram[0].size - tmp;
#elsereturn gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start);
return gd->bd->bi_memsize - tmp;
#endif }return gd->bd->bi_memsize - (tmp - gd->bd->bi_memstart);
Hi Masahiro,
your commit has been merged on 19.1. this year. Today i ran a test on my tseries board with most current u-boot/master.
I ran into trouble booting my linux kernel:
Kernel image @ 0x80200000 [ 0x000000 - 0x222720 ] ## Loading init Ramdisk from Legacy Image at 80a00000 ... Image Name: Image Type: ARM Linux RAMDisk Image (uncompressed) Data Size: 12452646 Bytes = 11.9 MiB Load Address: 00000000 Entry Point: 00000000 ## Flattened Device Tree blob at 80100000 Booting using the fdt blob at 0x80100000 ERROR: Failed to allocate 0xbe0326 bytes below 0x10000000. ramdisk - allocation error FDT creation failed! hanging...### ERROR ### Please RESET the board ###
I debugged bit am came to the conclusio, that the line
return gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start);
brings me into trouble.
On my board DRAM is configured as follows: U-Boot (BuR V2.0)# bdinfo arch_number = 0xFFFFFFFF boot_params = 0x80000100 DRAM bank = 0x00000000 *-> start = 0x80000000** **-> size = 0x10000000**
so size minus start would give a negative number. I tried local revert of this commit and everything works as before.
more correct would be
return gd->bd->bi_dram[0].start - (tmp - gd->bd->bi_dram[0].size);
whats your thinking about?
best regards, Hannes
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

On 08.02.2016 15:11, Matthias Weißer wrote:
Hi Hannes
I had the same problem. http://patchwork.ozlabs.org/patch/579391/ fixed it.
Regards, Matthias
2016-02-08 15:01 GMT+01:00 Hannes Schmelzer hannes@schmelzer.or.at:
On 18.12.2015 06:17, Masahiro Yamada wrote:
Currently, this function returns wrong size if "bootm_low" is defined, but "bootm_size" is not.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
common/image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/image.c b/common/image.c index d63d9e0..f4a1dc8 100644 --- a/common/image.c +++ b/common/image.c @@ -472,9 +472,9 @@ phys_size_t getenv_bootm_size(void) #if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS)
return gd->bd->bi_dram[0].size - tmp;
#elsereturn gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start);
return gd->bd->bi_memsize - tmp;
#endif }return gd->bd->bi_memsize - (tmp - gd->bd->bi_memstart);
Hi Masahiro,
your commit has been merged on 19.1. this year. Today i ran a test on my tseries board with most current u-boot/master.
I ran into trouble booting my linux kernel:
Kernel image @ 0x80200000 [ 0x000000 - 0x222720 ] ## Loading init Ramdisk from Legacy Image at 80a00000 ... Image Name: Image Type: ARM Linux RAMDisk Image (uncompressed) Data Size: 12452646 Bytes = 11.9 MiB Load Address: 00000000 Entry Point: 00000000 ## Flattened Device Tree blob at 80100000 Booting using the fdt blob at 0x80100000 ERROR: Failed to allocate 0xbe0326 bytes below 0x10000000. ramdisk - allocation error FDT creation failed! hanging...### ERROR ### Please RESET the board ###
I debugged bit am came to the conclusio, that the line
return gd->bd->bi_dram[0].size - (tmp - gd->bd->bi_dram[0].start);
brings me into trouble.
On my board DRAM is configured as follows: U-Boot (BuR V2.0)# bdinfo arch_number = 0xFFFFFFFF boot_params = 0x80000100 DRAM bank = 0x00000000 *-> start = 0x80000000** **-> size = 0x10000000**
so size minus start would give a negative number. I tried local revert of this commit and everything works as before.
more correct would be
return gd->bd->bi_dram[0].start - (tmp - gd->bd->bi_dram[0].size);
whats your thinking about?
best regards, Hannes
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Hi Matthias,
this also fixes my problem.
many thanks!
best regards, Hannes
participants (5)
-
Hannes Schmelzer
-
Masahiro Yamada
-
Matthias Weißer
-
Simon Glass
-
Tom Rini