[U-Boot] [PATCH] PPC: Record uboot's relocated address in RAM and show in bdinfo.

From a1d1f6fa9b579c4a766eea45c01224edd536880c Mon Sep 17 00:00:00 2001 From: Richard Retanubun RichardRetanubun@RuggedCom.com Date: Fri, 15 Jan 2010 10:06:06 -0500 Subject: [PATCH] PPC: Record uboot's relocated address in RAM and show in bdinfo.
This commit uses gd->relocaddr variable to store uboot's relocated address in RAM and shows it in bdinfo command.
Signed-off-by: Richard Retanubun RichardRetanubun@RuggedCom.com --- common/cmd_bdinfo.c | 1 + include/asm-ppc/global_data.h | 2 -- lib_ppc/board.c | 8 ++++++++ 3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c index 11c1547..f8400bc 100644 --- a/common/cmd_bdinfo.c +++ b/common/cmd_bdinfo.c @@ -115,6 +115,7 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) #endif printf ("IP addr = %pI4\n", &bd->bi_ip_addr); printf ("baudrate = %6ld bps\n", bd->bi_baudrate ); + print_num ("relocaddr", gd->relocaddr); return 0; }
diff --git a/include/asm-ppc/global_data.h b/include/asm-ppc/global_data.h index 3f11918..d3dd44e 100644 --- a/include/asm-ppc/global_data.h +++ b/include/asm-ppc/global_data.h @@ -152,9 +152,7 @@ typedef struct global_data { defined(CONFIG_SANDPOINT) void * console_addr; #endif -#ifdef CONFIG_AMIGAONEG3SE unsigned long relocaddr; /* Start address of U-Boot in RAM */ -#endif #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) unsigned long fb_base; /* Base address of framebuffer memory */ #endif diff --git a/lib_ppc/board.c b/lib_ppc/board.c index dd22f99..f4a357b 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -659,6 +659,14 @@ void board_init_r (gd_t *id, ulong dest_addr)
debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
+ /* + * Record uboot's address in RAM, useful for debugging; + * CONFIG_AMIGAONEG3SE gets the address during board_init_f. + */ +#ifndef CONFIG_AMIGAONEG3SE + gd->relocaddr = dest_addr; +#endif + WATCHDOG_RESET ();
/* -- 1.6.5

Hi Richard,
From a1d1f6fa9b579c4a766eea45c01224edd536880c Mon Sep 17 00:00:00 2001 From: Richard Retanubun RichardRetanubun@RuggedCom.com Date: Fri, 15 Jan 2010 10:06:06 -0500 Subject: [PATCH] PPC: Record uboot's relocated address in RAM and show in bdinfo.
This commit uses gd->relocaddr variable to store uboot's relocated address in RAM and shows it in bdinfo command.
Signed-off-by: Richard Retanubun RichardRetanubun@RuggedCom.com
common/cmd_bdinfo.c | 1 + include/asm-ppc/global_data.h | 2 -- lib_ppc/board.c | 8 ++++++++ 3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c index 11c1547..f8400bc 100644 --- a/common/cmd_bdinfo.c +++ b/common/cmd_bdinfo.c @@ -115,6 +115,7 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) #endif printf ("IP addr = %pI4\n", &bd->bi_ip_addr); printf ("baudrate = %6ld bps\n", bd->bi_baudrate );
- print_num ("relocaddr", gd->relocaddr); return 0;
}
diff --git a/include/asm-ppc/global_data.h b/include/asm-ppc/global_data.h index 3f11918..d3dd44e 100644 --- a/include/asm-ppc/global_data.h +++ b/include/asm-ppc/global_data.h @@ -152,9 +152,7 @@ typedef struct global_data { defined(CONFIG_SANDPOINT) void * console_addr; #endif -#ifdef CONFIG_AMIGAONEG3SE unsigned long relocaddr; /* Start address of U-Boot in RAM */ -#endif #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) unsigned long fb_base; /* Base address of framebuffer memory */ #endif diff --git a/lib_ppc/board.c b/lib_ppc/board.c index dd22f99..f4a357b 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -659,6 +659,14 @@ void board_init_r (gd_t *id, ulong dest_addr)
debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
- /*
* Record uboot's address in RAM, useful for debugging;
* CONFIG_AMIGAONEG3SE gets the address during board_init_f.
*/
+#ifndef CONFIG_AMIGAONEG3SE
- gd->relocaddr = dest_addr;
+#endif
- WATCHDOG_RESET ();
Please excuse my ignorance, but why not simply remove the #ifdef CONFIG_AMIGAONEG3SE in board_init_f? Actually I was hoping to remove the Amigaone special case.
Cheers Detlev

Detlev Zundel wrote: <snip>
Please excuse my ignorance, but why not simply remove the #ifdef CONFIG_AMIGAONEG3SE in board_init_f? Actually I was hoping to remove the Amigaone special case.
Cheers Detlev
I prefer getting the data from board_init_r because we really are running from RAM at that point; dest_addr is a passed in function param.
In board_init_f, the addr variable is just what the calculated address is. If we must do the copy there I'd like to move the gd->relocaddr = addr to just before the call to relocate_code, that way if the calculation code got reworked/refactored, we always copy the correct addr variable.
Plus the line: debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr); in board_init_r
Is the de-facto place where documentations that I've seen refer to for figuring out where u-boot is relocated, so making the assignment there makes it clearer.
All these leads to my preference of getting it from board_init_r.
I'll be happy to submit a V2 that takes out the CONFIG_AMIGAONEG3SE copy operation in board_init_f as well, but I can't confirm if that does not break the AMIGAONE board.
- Richard

Hi Richard,
Detlev Zundel wrote:
<snip> > > Please excuse my ignorance, but why not simply remove the #ifdef > CONFIG_AMIGAONEG3SE in board_init_f? Actually I was hoping to remove > the Amigaone special case. > > Cheers > Detlev > I prefer getting the data from board_init_r because we really are running from RAM at that point; dest_addr is a passed in function param.
I see, thanks for the explanation.
In board_init_f, the addr variable is just what the calculated address is. If we must do the copy there I'd like to move the gd->relocaddr = addr to just before the call to relocate_code, that way if the calculation code got reworked/refactored, we always copy the correct addr variable.
Yes, I also agree - if we want to have it in _f, we should move the assignment.
Plus the line: debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr); in board_init_r
Is the de-facto place where documentations that I've seen refer to for figuring out where u-boot is relocated, so making the assignment there makes it clearer.
All these leads to my preference of getting it from board_init_r.
Actually I do not have a strong preference myself. The only thing I could think of is that an earlier assignment discloses the information also when debugging problems in relocation. On the other hand if you _do_ debug the relocation it is unlikely that you need the variable, so this argument does not tip the scale in any direction.
I'll be happy to submit a V2 that takes out the CONFIG_AMIGAONEG3SE copy operation in board_init_f as well, but I can't confirm if that does not break the AMIGAONE board.
Yes, please send such a follow-on patch. Not being able to test a change is rather the norm in U-Boot, so it is acceptable to simply CC the relevant maintainer ("Thomas Frieden ThomasF@hyperion-entertainment.com") and if no NACK is seen include the changes anyway at some point.
Thanks Detlev

Hi Richard,
Detlev Zundel wrote:
<snip> > > Please excuse my ignorance, but why not simply remove the #ifdef > CONFIG_AMIGAONEG3SE in board_init_f? Actually I was hoping to remove > the Amigaone special case. > > Cheers > Detlev > I prefer getting the data from board_init_r because we really are running from RAM at that point; dest_addr is a passed in function param.
I see, thanks for the explanation.
In board_init_f, the addr variable is just what the calculated address is. If we must do the copy there I'd like to move the gd->relocaddr = addr to just before the call to relocate_code, that way if the calculation code got reworked/refactored, we always copy the correct addr variable.
Yes, I also agree - if we want to have it in _f, we should move the assignment.
Plus the line: debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
in board_init_r
This printout is so useful that it should have its own config option so one can have it always on without enabling debug.
Jocke

From c9b845a6dac24e74ab450aa0bac071b441d16ae9 Mon Sep 17 00:00:00 2001 From: Richard Retanubun RichardRetanubun@RuggedCom.com Date: Fri, 15 Jan 2010 10:06:06 -0500 Subject: [PATCH] PPC: Record uboot's relocated address in RAM and show in bdinfo.
This patch uses gd->relocaddr variable to store uboot's relocated address in RAM and shows it in bdinfo command.
This patch removes CONFIG_AMIGAONEG3SE style copying of the address in board_init_f; it is moved to a common place in board_init_r.
Signed-off-by: Richard Retanubun RichardRetanubun@RuggedCom.com --- common/cmd_bdinfo.c | 1 + include/asm-ppc/global_data.h | 2 -- lib_ppc/board.c | 7 +++---- 3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c index 11c1547..f8400bc 100644 --- a/common/cmd_bdinfo.c +++ b/common/cmd_bdinfo.c @@ -115,6 +115,7 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) #endif printf ("IP addr = %pI4\n", &bd->bi_ip_addr); printf ("baudrate = %6ld bps\n", bd->bi_baudrate ); + print_num ("relocaddr", gd->relocaddr); return 0; }
diff --git a/include/asm-ppc/global_data.h b/include/asm-ppc/global_data.h index 3f11918..d3dd44e 100644 --- a/include/asm-ppc/global_data.h +++ b/include/asm-ppc/global_data.h @@ -152,9 +152,7 @@ typedef struct global_data { defined(CONFIG_SANDPOINT) void * console_addr; #endif -#ifdef CONFIG_AMIGAONEG3SE unsigned long relocaddr; /* Start address of U-Boot in RAM */ -#endif #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) unsigned long fb_base; /* Base address of framebuffer memory */ #endif diff --git a/lib_ppc/board.c b/lib_ppc/board.c index dd22f99..2e2872e 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -476,10 +476,6 @@ void board_init_f (ulong bootflag)
debug ("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr);
-#ifdef CONFIG_AMIGAONEG3SE - gd->relocaddr = addr; -#endif - /* * reserve memory for malloc() arena */ @@ -659,6 +655,9 @@ void board_init_r (gd_t *id, ulong dest_addr)
debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
+ /* Record uboot's address in RAM, useful for debugging. */ + gd->relocaddr = dest_addr; + WATCHDOG_RESET ();
/* -- 1.6.5

Hi Richard,
can you please resend the patch - it is strangely whitespace damaged:
From c9b845a6dac24e74ab450aa0bac071b441d16ae9 Mon Sep 17 00:00:00 2001 From: Richard Retanubun RichardRetanubun@RuggedCom.com Date: Fri, 15 Jan 2010 10:06:06 -0500 Subject: [PATCH] PPC: Record uboot's relocated address in RAM and show in bdinfo.
This patch uses gd->relocaddr variable to store uboot's relocated address in RAM and shows it in bdinfo command.
This patch removes CONFIG_AMIGAONEG3SE style copying of the address in board_init_f; it is moved to a common place in board_init_r.
Signed-off-by: Richard Retanubun RichardRetanubun@RuggedCom.com
common/cmd_bdinfo.c | 1 + include/asm-ppc/global_data.h | 2 -- lib_ppc/board.c | 7 +++---- 3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c index 11c1547..f8400bc 100644 --- a/common/cmd_bdinfo.c +++ b/common/cmd_bdinfo.c @@ -115,6 +115,7 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) #endif printf ("IP addr = %pI4\n", &bd->bi_ip_addr); printf ("baudrate = %6ld bps\n", bd->bi_baudrate );
- print_num ("relocaddr", gd->relocaddr); return 0; }
I did not check why the other hunks fail, but in this one there is a space too much at the beginning of the lines...
Cheers Detlev
participants (3)
-
Detlev Zundel
-
Joakim Tjernlund
-
Richard Retanubun