Patchwork [U-Boot,v6] unify version_string

login
register
mail settings
Submitter Andreas Bießmann
Date July 18, 2011, 6:24 p.m.
Message ID <1311013444-74984-1-git-send-email-andreas.devel@googlemail.com>
Download mbox | patch
Permalink /patch/105342/
State Superseded
Headers show

Comments

Andreas Bießmann - July 18, 2011, 6:24 p.m.
This patch removes the architecture specific implementation of
version_string where possible. Some architectures use a special place
and therefore we provide U_BOOT_VERSION_STRING definition and a common
weak symbol version_string.

Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
CC: Mike Frysinger <vapier@gentoo.org>
CC: Peter Pan <pppeterpppan@gmail.com>
Acked-by: Mike Frysinger <vapier@gentoo.org>
---
changes since v1:
 - remove (some) places of 'extern ... version_string' definition in favour of
   include version.h
 - use format-patch && send-email since some complained about base64 formated
   mail content

changes since v2:
 - add linker script solution for mpc512x powerpc devices
   (never compiled)

changes since v3:
 - use a common variable to join the parameters and leave the arch dependent
   parts as is

changes since v4:
 - address comments from mike
   * do not use const char * const
   * use weak symbol version_string, remove from architecture files
   * remove trailing semicolon

changes since v5:
  - remove RFC annotation
  - add ACK-by Mike Freysinger

 arch/arm/lib/board.c              |    8 --------
 arch/avr32/lib/board.c            |    4 ----
 arch/blackfin/lib/board.c         |    3 ---
 arch/m68k/cpu/mcf5227x/start.S    |    5 +----
 arch/m68k/cpu/mcf523x/start.S     |    5 +----
 arch/m68k/cpu/mcf52x2/start.S     |    5 +----
 arch/m68k/cpu/mcf532x/start.S     |    5 +----
 arch/m68k/cpu/mcf5445x/start.S    |    5 +----
 arch/m68k/cpu/mcf547x_8x/start.S  |    5 +----
 arch/microblaze/lib/board.c       |    3 ---
 arch/mips/lib/board.c             |    4 ----
 arch/nios2/cpu/start.S            |    9 +--------
 arch/powerpc/cpu/74xx_7xx/start.S |    9 +--------
 arch/powerpc/cpu/mpc512x/start.S  |   12 ++++--------
 arch/powerpc/cpu/mpc5xx/start.S   |    9 +--------
 arch/powerpc/cpu/mpc5xxx/start.S  |    9 +--------
 arch/powerpc/cpu/mpc8220/start.S  |    9 +--------
 arch/powerpc/cpu/mpc824x/start.S  |    9 +--------
 arch/powerpc/cpu/mpc8260/start.S  |    9 +--------
 arch/powerpc/cpu/mpc83xx/start.S  |   12 ++++--------
 arch/powerpc/cpu/mpc85xx/start.S  |    9 +--------
 arch/powerpc/cpu/mpc86xx/start.S  |    9 +--------
 arch/powerpc/cpu/mpc8xx/start.S   |    9 +--------
 arch/powerpc/cpu/mpc8xx/video.c   |    1 -
 arch/powerpc/cpu/ppc4xx/start.S   |    9 +--------
 arch/sh/lib/board.c               |    3 ---
 arch/sparc/cpu/leon2/start.S      |    5 +----
 arch/sparc/cpu/leon3/start.S      |    5 +----
 arch/x86/lib/board.c              |    4 ----
 common/cmd_version.c              |    3 ++-
 common/main.c                     |    3 +--
 drivers/video/cfb_console.c       |    2 +-
 include/version.h                 |   11 +++++++++++
 lib/display_options.c             |    3 +--
 34 files changed, 43 insertions(+), 172 deletions(-)
Mike Frysinger - July 18, 2011, 6:27 p.m.
On Mon, Jul 18, 2011 at 14:24, Andreas Bießmann wrote:
> This patch removes the architecture specific implementation of
> version_string where possible. Some architectures use a special place
> and therefore we provide U_BOOT_VERSION_STRING definition and a common
> weak symbol version_string.

awesome
Acked-by: Mike Frysinger <vapier@gentoo.org>
-mike
Andreas Bießmann - July 28, 2011, 7:30 a.m.
Dear all,

Am 18.07.2011 20:24, schrieb Andreas Bießmann:
> This patch removes the architecture specific implementation of
> version_string where possible. Some architectures use a special place
> and therefore we provide U_BOOT_VERSION_STRING definition and a common
> weak symbol version_string.
> 
> Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
> CC: Mike Frysinger <vapier@gentoo.org>
> CC: Peter Pan <pppeterpppan@gmail.com>
> Acked-by: Mike Frysinger <vapier@gentoo.org>

any comments on this patch?

regards

Andreas Bießmann
Wolfgang Denk - July 28, 2011, 3:23 p.m.
Dear =?UTF-8?q?Andreas=20Bie=C3=9Fmann?=,

In message <1311013444-74984-1-git-send-email-andreas.devel@googlemail.com> you wrote:
> This patch removes the architecture specific implementation of
> version_string where possible. Some architectures use a special place
> and therefore we provide U_BOOT_VERSION_STRING definition and a common
> weak symbol version_string.
> 
> Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
> CC: Mike Frysinger <vapier@gentoo.org>
> CC: Peter Pan <pppeterpppan@gmail.com>
> Acked-by: Mike Frysinger <vapier@gentoo.org>
> ---
> changes since v1:
>  - remove (some) places of 'extern ... version_string' definition in favour of
>    include version.h
>  - use format-patch && send-email since some complained about base64 formated
>    mail content
> 
> changes since v2:
>  - add linker script solution for mpc512x powerpc devices
>    (never compiled)
> 
> changes since v3:
>  - use a common variable to join the parameters and leave the arch dependent
>    parts as is
> 
> changes since v4:
>  - address comments from mike
>    * do not use const char * const
>    * use weak symbol version_string, remove from architecture files
>    * remove trailing semicolon
> 
> changes since v5:
>   - remove RFC annotation
>   - add ACK-by Mike Freysinger
> 
>  arch/arm/lib/board.c              |    8 --------
>  arch/avr32/lib/board.c            |    4 ----
>  arch/blackfin/lib/board.c         |    3 ---
>  arch/m68k/cpu/mcf5227x/start.S    |    5 +----
>  arch/m68k/cpu/mcf523x/start.S     |    5 +----
>  arch/m68k/cpu/mcf52x2/start.S     |    5 +----
>  arch/m68k/cpu/mcf532x/start.S     |    5 +----
>  arch/m68k/cpu/mcf5445x/start.S    |    5 +----
>  arch/m68k/cpu/mcf547x_8x/start.S  |    5 +----
>  arch/microblaze/lib/board.c       |    3 ---
>  arch/mips/lib/board.c             |    4 ----
>  arch/nios2/cpu/start.S            |    9 +--------
>  arch/powerpc/cpu/74xx_7xx/start.S |    9 +--------
>  arch/powerpc/cpu/mpc512x/start.S  |   12 ++++--------
>  arch/powerpc/cpu/mpc5xx/start.S   |    9 +--------
>  arch/powerpc/cpu/mpc5xxx/start.S  |    9 +--------
>  arch/powerpc/cpu/mpc8220/start.S  |    9 +--------
>  arch/powerpc/cpu/mpc824x/start.S  |    9 +--------
>  arch/powerpc/cpu/mpc8260/start.S  |    9 +--------
>  arch/powerpc/cpu/mpc83xx/start.S  |   12 ++++--------
>  arch/powerpc/cpu/mpc85xx/start.S  |    9 +--------
>  arch/powerpc/cpu/mpc86xx/start.S  |    9 +--------
>  arch/powerpc/cpu/mpc8xx/start.S   |    9 +--------
>  arch/powerpc/cpu/mpc8xx/video.c   |    1 -
>  arch/powerpc/cpu/ppc4xx/start.S   |    9 +--------
>  arch/sh/lib/board.c               |    3 ---
>  arch/sparc/cpu/leon2/start.S      |    5 +----
>  arch/sparc/cpu/leon3/start.S      |    5 +----
>  arch/x86/lib/board.c              |    4 ----
>  common/cmd_version.c              |    3 ++-
>  common/main.c                     |    3 +--
>  drivers/video/cfb_console.c       |    2 +-
>  include/version.h                 |   11 +++++++++++
>  lib/display_options.c             |    3 +--
>  34 files changed, 43 insertions(+), 172 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk
Wolfgang Denk - July 28, 2011, 3:30 p.m.
Dear Andreas,

In message <20110728152327.2B10A15794D5@gemini.denx.de> I wrote:
>
> 
> In message <1311013444-74984-1-git-send-email-andreas.devel@googlemail.com>=
>  you wrote:
> > This patch removes the architecture specific implementation of
> > version_string where possible. Some architectures use a special place
> > and therefore we provide U_BOOT_VERSION_STRING definition and a common
> > weak symbol version_string.
> > >
> > Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
> > CC: Mike Frysinger <vapier@gentoo.org>
> > CC: Peter Pan <pppeterpppan@gmail.com>
> > Acked-by: Mike Frysinger <vapier@gentoo.org>
...
> Applied, thanks.

Oops.  NAK...

The patched code does not compile:

-> ./MAKEALL  qong
Configuring for qong board...
/home/wd/git/u-boot/work/include/version.h: Assembler messages:
/home/wd/git/u-boot/work/include/version.h:40: Error: bad instruction `extern const char version_string[]'
make[1]: *** [start.o] Error 1


Please fix.

Best regards,

Wolfgang Denk

Patch

diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c
index fc52a26..bfa2cdd 100644
--- a/arch/arm/lib/board.c
+++ b/arch/arm/lib/board.c
@@ -42,7 +42,6 @@ 
 #include <command.h>
 #include <malloc.h>
 #include <stdio_dev.h>
-#include <timestamp.h>
 #include <version.h>
 #include <net.h>
 #include <serial.h>
@@ -70,13 +69,6 @@  extern int  AT91F_DataflashInit(void);
 extern void dataflash_print_info(void);
 #endif
 
-#ifndef CONFIG_IDENT_STRING
-#define CONFIG_IDENT_STRING ""
-#endif
-
-const char version_string[] =
-	U_BOOT_VERSION" (" U_BOOT_DATE " - " U_BOOT_TIME ")"CONFIG_IDENT_STRING;
-
 #ifdef CONFIG_DRIVER_RTL8019
 extern void rtl8019_get_enetaddr (uchar * addr);
 #endif
diff --git a/arch/avr32/lib/board.c b/arch/avr32/lib/board.c
index 5edef8f..e69f8d1 100644
--- a/arch/avr32/lib/board.c
+++ b/arch/avr32/lib/board.c
@@ -23,7 +23,6 @@ 
 #include <command.h>
 #include <malloc.h>
 #include <stdio_dev.h>
-#include <timestamp.h>
 #include <version.h>
 #include <net.h>
 
@@ -41,9 +40,6 @@ 
 
 DECLARE_GLOBAL_DATA_PTR;
 
-const char version_string[] =
-	U_BOOT_VERSION " ("U_BOOT_DATE" - "U_BOOT_TIME") " CONFIG_IDENT_STRING;
-
 unsigned long monitor_flash_len;
 
 /* Weak aliases for optional board functions */
diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
index 362b8c4..7c33893 100644
--- a/arch/blackfin/lib/board.c
+++ b/arch/blackfin/lib/board.c
@@ -16,7 +16,6 @@ 
 #include <malloc.h>
 #include <mmc.h>
 #include <net.h>
-#include <timestamp.h>
 #include <status_led.h>
 #include <version.h>
 
@@ -39,8 +38,6 @@  int post_flag;
 
 DECLARE_GLOBAL_DATA_PTR;
 
-const char version_string[] = U_BOOT_VERSION " ("U_BOOT_DATE" - "U_BOOT_TIME")";
-
 __attribute__((always_inline))
 static inline void serial_early_puts(const char *s)
 {
diff --git a/arch/m68k/cpu/mcf5227x/start.S b/arch/m68k/cpu/mcf5227x/start.S
index d09d492..c5096a8 100644
--- a/arch/m68k/cpu/mcf5227x/start.S
+++ b/arch/m68k/cpu/mcf5227x/start.S
@@ -23,7 +23,6 @@ 
 
 #include <asm-offsets.h>
 #include <config.h>
-#include <timestamp.h>
 #include "version.h"
 #include <asm/cache.h>
 
@@ -508,7 +507,5 @@  _int_handler:
 
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 	.align 4
diff --git a/arch/m68k/cpu/mcf523x/start.S b/arch/m68k/cpu/mcf523x/start.S
index a726b59..e6a69ab 100644
--- a/arch/m68k/cpu/mcf523x/start.S
+++ b/arch/m68k/cpu/mcf523x/start.S
@@ -23,7 +23,6 @@ 
 
 #include <asm-offsets.h>
 #include <config.h>
-#include <timestamp.h>
 #include "version.h"
 #include <asm/cache.h>
 
@@ -270,7 +269,5 @@  _int_handler:
 
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 	.align 4
diff --git a/arch/m68k/cpu/mcf52x2/start.S b/arch/m68k/cpu/mcf52x2/start.S
index f0cfa6f..ee17792 100644
--- a/arch/m68k/cpu/mcf52x2/start.S
+++ b/arch/m68k/cpu/mcf52x2/start.S
@@ -23,7 +23,6 @@ 
 
 #include <asm-offsets.h>
 #include <config.h>
-#include <timestamp.h>
 #include "version.h"
 #include <asm/cache.h>
 
@@ -330,7 +329,5 @@  _int_handler:
 
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 	.align 4
diff --git a/arch/m68k/cpu/mcf532x/start.S b/arch/m68k/cpu/mcf532x/start.S
index 53ac471..fe98d76 100644
--- a/arch/m68k/cpu/mcf532x/start.S
+++ b/arch/m68k/cpu/mcf532x/start.S
@@ -26,7 +26,6 @@ 
 
 #include <asm-offsets.h>
 #include <config.h>
-#include <timestamp.h>
 #include "version.h"
 #include <asm/cache.h>
 
@@ -283,7 +282,5 @@  _int_handler:
 /*------------------------------------------------------------------------------*/
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 	.align 4
diff --git a/arch/m68k/cpu/mcf5445x/start.S b/arch/m68k/cpu/mcf5445x/start.S
index 5255f37..9906014 100644
--- a/arch/m68k/cpu/mcf5445x/start.S
+++ b/arch/m68k/cpu/mcf5445x/start.S
@@ -23,7 +23,6 @@ 
 
 #include <asm-offsets.h>
 #include <config.h>
-#include <timestamp.h>
 #include "version.h"
 #include <asm/cache.h>
 
@@ -540,7 +539,5 @@  _int_handler:
 
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 	.align 4
diff --git a/arch/m68k/cpu/mcf547x_8x/start.S b/arch/m68k/cpu/mcf547x_8x/start.S
index e30923f..ec65cae 100644
--- a/arch/m68k/cpu/mcf547x_8x/start.S
+++ b/arch/m68k/cpu/mcf547x_8x/start.S
@@ -23,7 +23,6 @@ 
 
 #include <asm-offsets.h>
 #include <config.h>
-#include <timestamp.h>
 #include "version.h"
 #include <asm/cache.h>
 
@@ -277,7 +276,5 @@  _int_handler:
 
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 	.align 4
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index c5f7ac4..d97543b 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -27,7 +27,6 @@ 
 #include <common.h>
 #include <command.h>
 #include <malloc.h>
-#include <timestamp.h>
 #include <version.h>
 #include <watchdog.h>
 #include <stdio_dev.h>
@@ -35,8 +34,6 @@ 
 
 DECLARE_GLOBAL_DATA_PTR;
 
-const char version_string[] = U_BOOT_VERSION " ("U_BOOT_DATE" - "U_BOOT_TIME")";
-
 #ifdef CONFIG_SYS_GPIO_0
 extern int gpio_init (void);
 #endif
diff --git a/arch/mips/lib/board.c b/arch/mips/lib/board.c
index 623c4d7..4f85bbd 100644
--- a/arch/mips/lib/board.c
+++ b/arch/mips/lib/board.c
@@ -25,7 +25,6 @@ 
 #include <command.h>
 #include <malloc.h>
 #include <stdio_dev.h>
-#include <timestamp.h>
 #include <version.h>
 #include <net.h>
 #include <environment.h>
@@ -50,9 +49,6 @@  extern ulong uboot_end;
 
 ulong monitor_flash_len;
 
-const char version_string[] =
-	U_BOOT_VERSION" (" U_BOOT_DATE " - " U_BOOT_TIME ")";
-
 static char *failed = "*** failed ***\n";
 
 /*
diff --git a/arch/nios2/cpu/start.S b/arch/nios2/cpu/start.S
index bf5d672..0f4ab28 100644
--- a/arch/nios2/cpu/start.S
+++ b/arch/nios2/cpu/start.S
@@ -23,7 +23,6 @@ 
 
 #include <asm-offsets.h>
 #include <config.h>
-#include <timestamp.h>
 #include <version.h>
 
 /*************************************************************************
@@ -196,14 +195,8 @@  dly_clks:
 	bge	r4, r0, dly_clks
 	ret
 
-
-#if !defined(CONFIG_IDENT_STRING)
-#define CONFIG_IDENT_STRING ""
-#endif
 	.data
 	.globl	version_string
 
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
diff --git a/arch/powerpc/cpu/74xx_7xx/start.S b/arch/powerpc/cpu/74xx_7xx/start.S
index f6011fc..75fb773 100644
--- a/arch/powerpc/cpu/74xx_7xx/start.S
+++ b/arch/powerpc/cpu/74xx_7xx/start.S
@@ -35,7 +35,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <74xx_7xx.h>
-#include <timestamp.h>
 #include <version.h>
 
 #include <ppc_asm.tmpl>
@@ -52,10 +51,6 @@ 
 #include <galileo/gt64260R.h>
 #endif
 
-#ifndef  CONFIG_IDENT_STRING
-#define  CONFIG_IDENT_STRING ""
-#endif
-
 /* We don't want the  MMU yet.
 */
 #undef	MSR_KERNEL
@@ -89,9 +84,7 @@ 
 	.long	0x27051956		/* U-Boot Magic Number		*/
 	.globl	version_string
 version_string:
-	.ascii	U_BOOT_VERSION
-	.ascii	" (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii	CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	. = EXC_OFF_SYS_RESET
 	.globl	_start
diff --git a/arch/powerpc/cpu/mpc512x/start.S b/arch/powerpc/cpu/mpc512x/start.S
index 9c2e488..ed362d8 100644
--- a/arch/powerpc/cpu/mpc512x/start.S
+++ b/arch/powerpc/cpu/mpc512x/start.S
@@ -31,7 +31,9 @@ 
 
 #include <asm-offsets.h>
 #include <config.h>
-#include <timestamp.h>
+#ifndef  CONFIG_IDENT_STRING
+#define  CONFIG_IDENT_STRING "MPC512X"
+#endif
 #include <version.h>
 
 #define CONFIG_521X	1		/* needed for Linux kernel header files*/
@@ -46,10 +48,6 @@ 
 #include <asm/mmu.h>
 #include <asm/u-boot.h>
 
-#ifndef  CONFIG_IDENT_STRING
-#define  CONFIG_IDENT_STRING "MPC512X"
-#endif
-
 /*
  * Floating Point enable, Machine Check and Recoverable Interr.
  */
@@ -89,9 +87,7 @@ 
 	.long	0x27051956		/* U-Boot Magic Number */
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii " ", CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 /*
  * Vector Table
diff --git a/arch/powerpc/cpu/mpc5xx/start.S b/arch/powerpc/cpu/mpc5xx/start.S
index cc11c8f..cc4c33e 100644
--- a/arch/powerpc/cpu/mpc5xx/start.S
+++ b/arch/powerpc/cpu/mpc5xx/start.S
@@ -33,7 +33,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc5xx.h>
-#include <timestamp.h>
 #include <version.h>
 
 #define CONFIG_5xx 1		/* needed for Linux kernel header files */
@@ -46,10 +45,6 @@ 
 #include <asm/processor.h>
 #include <asm/u-boot.h>
 
-#ifndef  CONFIG_IDENT_STRING
-#define  CONFIG_IDENT_STRING ""
-#endif
-
 /* We don't have a MMU.
 */
 #undef	MSR_KERNEL
@@ -82,9 +77,7 @@ 
 	.long	0x27051956			/* U-Boot Magic Number */
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	. = EXC_OFF_SYS_RESET
 	.globl	_start
diff --git a/arch/powerpc/cpu/mpc5xxx/start.S b/arch/powerpc/cpu/mpc5xxx/start.S
index 192aa50..51cc4e2 100644
--- a/arch/powerpc/cpu/mpc5xxx/start.S
+++ b/arch/powerpc/cpu/mpc5xxx/start.S
@@ -28,7 +28,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc5xxx.h>
-#include <timestamp.h>
 #include <version.h>
 
 #define CONFIG_MPC5xxx 1	/* needed for Linux kernel header files */
@@ -41,10 +40,6 @@ 
 #include <asm/mmu.h>
 #include <asm/u-boot.h>
 
-#ifndef  CONFIG_IDENT_STRING
-#define  CONFIG_IDENT_STRING ""
-#endif
-
 /* We don't want the  MMU yet.
 */
 #undef	MSR_KERNEL
@@ -80,9 +75,7 @@ 
 	.data
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 /*
  * Exception vectors
diff --git a/arch/powerpc/cpu/mpc8220/start.S b/arch/powerpc/cpu/mpc8220/start.S
index 300b35c..a1a2dc5 100644
--- a/arch/powerpc/cpu/mpc8220/start.S
+++ b/arch/powerpc/cpu/mpc8220/start.S
@@ -28,7 +28,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc8220.h>
-#include <timestamp.h>
 #include <version.h>
 
 #define _LINUX_CONFIG_H 1   /* avoid reading Linux autoconf.h file  */
@@ -40,10 +39,6 @@ 
 #include <asm/mmu.h>
 #include <asm/u-boot.h>
 
-#ifndef	 CONFIG_IDENT_STRING
-#define	 CONFIG_IDENT_STRING ""
-#endif
-
 /* We don't want the  MMU yet.
 */
 #undef	MSR_KERNEL
@@ -79,9 +74,7 @@ 
 	.data
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 /*
  * Exception vectors
diff --git a/arch/powerpc/cpu/mpc824x/start.S b/arch/powerpc/cpu/mpc824x/start.S
index fc4e922..70db73e 100644
--- a/arch/powerpc/cpu/mpc824x/start.S
+++ b/arch/powerpc/cpu/mpc824x/start.S
@@ -40,7 +40,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc824x.h>
-#include <timestamp.h>
 #include <version.h>
 
 #define _LINUX_CONFIG_H 1	/* avoid reading Linux autoconf.h file	*/
@@ -52,10 +51,6 @@ 
 #include <asm/mmu.h>
 #include <asm/u-boot.h>
 
-#ifndef CONFIG_IDENT_STRING
-#define CONFIG_IDENT_STRING ""
-#endif
-
 /* We don't want the MMU yet.
 */
 #undef	MSR_KERNEL
@@ -92,9 +87,7 @@ 
 	.long	0x27051956		/* U-Boot Magic Number			*/
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	. = EXC_OFF_SYS_RESET
 	.globl	_start
diff --git a/arch/powerpc/cpu/mpc8260/start.S b/arch/powerpc/cpu/mpc8260/start.S
index 702546e..3299d72 100644
--- a/arch/powerpc/cpu/mpc8260/start.S
+++ b/arch/powerpc/cpu/mpc8260/start.S
@@ -28,7 +28,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc8260.h>
-#include <timestamp.h>
 #include <version.h>
 
 #define CONFIG_8260 1		/* needed for Linux kernel header files */
@@ -41,10 +40,6 @@ 
 #include <asm/mmu.h>
 #include <asm/u-boot.h>
 
-#ifndef  CONFIG_IDENT_STRING
-#define  CONFIG_IDENT_STRING ""
-#endif
-
 /* We don't want the  MMU yet.
 */
 #undef	MSR_KERNEL
@@ -87,9 +82,7 @@ 
 	.data
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 /*
  *  Hard Reset Configuration Word (HRCW) table
diff --git a/arch/powerpc/cpu/mpc83xx/start.S b/arch/powerpc/cpu/mpc83xx/start.S
index 7e60315..b70b4ca 100644
--- a/arch/powerpc/cpu/mpc83xx/start.S
+++ b/arch/powerpc/cpu/mpc83xx/start.S
@@ -30,7 +30,9 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc83xx.h>
-#include <timestamp.h>
+#ifndef  CONFIG_IDENT_STRING
+#define  CONFIG_IDENT_STRING "MPC83XX"
+#endif
 #include <version.h>
 
 #define CONFIG_83XX	1		/* needed for Linux kernel header files*/
@@ -43,10 +45,6 @@ 
 #include <asm/mmu.h>
 #include <asm/u-boot.h>
 
-#ifndef  CONFIG_IDENT_STRING
-#define  CONFIG_IDENT_STRING "MPC83XX"
-#endif
-
 /* We don't want the  MMU yet.
  */
 #undef	MSR_KERNEL
@@ -107,9 +105,7 @@ 
 
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii " ", CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	.align 2
 
diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S
index 5777493..626ccce 100644
--- a/arch/powerpc/cpu/mpc85xx/start.S
+++ b/arch/powerpc/cpu/mpc85xx/start.S
@@ -31,7 +31,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc85xx.h>
-#include <timestamp.h>
 #include <version.h>
 
 #define _LINUX_CONFIG_H 1	/* avoid reading Linux autoconf.h file	*/
@@ -42,10 +41,6 @@ 
 #include <asm/cache.h>
 #include <asm/mmu.h>
 
-#ifndef	 CONFIG_IDENT_STRING
-#define	 CONFIG_IDENT_STRING ""
-#endif
-
 #undef	MSR_KERNEL
 #define MSR_KERNEL ( MSR_ME )	/* Machine Check */
 
@@ -399,9 +394,7 @@  _start:
 	.long	0x27051956		/* U-BOOT Magic Number */
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	.align	4
 	.globl	_start_cont
diff --git a/arch/powerpc/cpu/mpc86xx/start.S b/arch/powerpc/cpu/mpc86xx/start.S
index 3e3c21e..32896d4 100644
--- a/arch/powerpc/cpu/mpc86xx/start.S
+++ b/arch/powerpc/cpu/mpc86xx/start.S
@@ -33,7 +33,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc86xx.h>
-#include <timestamp.h>
 #include <version.h>
 
 #include <ppc_asm.tmpl>
@@ -43,10 +42,6 @@ 
 #include <asm/mmu.h>
 #include <asm/u-boot.h>
 
-#ifndef	CONFIG_IDENT_STRING
-#define CONFIG_IDENT_STRING ""
-#endif
-
 /*
  * Need MSR_DR | MSR_IR enabled to access I/O (printf) in exceptions
  */
@@ -78,9 +73,7 @@ 
 	.long	0x27051956		/* U-Boot Magic Number */
 	.globl	version_string
 version_string:
-	.ascii	U_BOOT_VERSION
-	.ascii	" (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii	CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	. = EXC_OFF_SYS_RESET
 	.globl	_start
diff --git a/arch/powerpc/cpu/mpc8xx/start.S b/arch/powerpc/cpu/mpc8xx/start.S
index fe3daa2..ebca3ac 100644
--- a/arch/powerpc/cpu/mpc8xx/start.S
+++ b/arch/powerpc/cpu/mpc8xx/start.S
@@ -40,7 +40,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <mpc8xx.h>
-#include <timestamp.h>
 #include <version.h>
 
 #define CONFIG_8xx 1		/* needed for Linux kernel header files */
@@ -53,10 +52,6 @@ 
 #include <asm/mmu.h>
 #include <asm/u-boot.h>
 
-#ifndef  CONFIG_IDENT_STRING
-#define  CONFIG_IDENT_STRING ""
-#endif
-
 /* We don't want the  MMU yet.
 */
 #undef	MSR_KERNEL
@@ -89,9 +84,7 @@ 
 	.long	0x27051956		/* U-Boot Magic Number			*/
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	. = EXC_OFF_SYS_RESET
 	.globl	_start
diff --git a/arch/powerpc/cpu/mpc8xx/video.c b/arch/powerpc/cpu/mpc8xx/video.c
index c79c499..7725c67 100644
--- a/arch/powerpc/cpu/mpc8xx/video.c
+++ b/arch/powerpc/cpu/mpc8xx/video.c
@@ -33,7 +33,6 @@ 
 #include <common.h>
 #include <config.h>
 #include <version.h>
-#include <timestamp.h>
 #include <i2c.h>
 #include <linux/types.h>
 #include <stdio_dev.h>
diff --git a/arch/powerpc/cpu/ppc4xx/start.S b/arch/powerpc/cpu/ppc4xx/start.S
index b43e22c..3b0e364 100644
--- a/arch/powerpc/cpu/ppc4xx/start.S
+++ b/arch/powerpc/cpu/ppc4xx/start.S
@@ -68,7 +68,6 @@ 
 #include <asm-offsets.h>
 #include <config.h>
 #include <asm/ppc4xx.h>
-#include <timestamp.h>
 #include <version.h>
 
 #define _LINUX_CONFIG_H 1	/* avoid reading Linux autoconf.h file	*/
@@ -80,10 +79,6 @@ 
 #include <asm/mmu.h>
 #include <asm/ppc4xx-isram.h>
 
-#ifndef	 CONFIG_IDENT_STRING
-#define	 CONFIG_IDENT_STRING ""
-#endif
-
 #ifdef CONFIG_SYS_INIT_DCACHE_CS
 # if (CONFIG_SYS_INIT_DCACHE_CS == 0)
 #  define PBxAP PB1AP
@@ -549,9 +544,7 @@  tlbnx2:	addi	r4,r4,1		/* Next TLB */
 	.long	0x27051956		/* U-Boot Magic Number			*/
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	. = EXC_OFF_SYS_RESET
 	.globl	_start_of_vectors
diff --git a/arch/sh/lib/board.c b/arch/sh/lib/board.c
index ed91643..90fe796 100644
--- a/arch/sh/lib/board.c
+++ b/arch/sh/lib/board.c
@@ -22,7 +22,6 @@ 
 #include <command.h>
 #include <malloc.h>
 #include <stdio_dev.h>
-#include <timestamp.h>
 #include <version.h>
 #include <watchdog.h>
 #include <net.h>
@@ -39,8 +38,6 @@  extern int board_init(void);
 extern int dram_init(void);
 extern int timer_init(void);
 
-const char version_string[] = U_BOOT_VERSION" ("U_BOOT_DATE" - "U_BOOT_TIME")";
-
 unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN;
 
 #ifndef CONFIG_SYS_NO_FLASH
diff --git a/arch/sparc/cpu/leon2/start.S b/arch/sparc/cpu/leon2/start.S
index f22fb7e..9cd6c66 100644
--- a/arch/sparc/cpu/leon2/start.S
+++ b/arch/sparc/cpu/leon2/start.S
@@ -28,7 +28,6 @@ 
 #include <asm/psr.h>
 #include <asm/stack.h>
 #include <asm/leon.h>
-#include <timestamp.h>
 #include <version.h>
 
 /* Entry for traps which jump to a programmer-specified trap handler.  */
@@ -200,9 +199,7 @@  _trap_table:
 	.data
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	.section	".text"
 	.align 4
diff --git a/arch/sparc/cpu/leon3/start.S b/arch/sparc/cpu/leon3/start.S
index 56ae88d..1e393a5 100644
--- a/arch/sparc/cpu/leon3/start.S
+++ b/arch/sparc/cpu/leon3/start.S
@@ -28,7 +28,6 @@ 
 #include <asm/psr.h>
 #include <asm/stack.h>
 #include <asm/leon.h>
-#include <timestamp.h>
 #include <version.h>
 
 /* Entry for traps which jump to a programmer-specified trap handler.  */
@@ -201,9 +200,7 @@  _trap_table:
 	.extern leon3_snooping_avail
 	.globl	version_string
 version_string:
-	.ascii U_BOOT_VERSION
-	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
-	.ascii CONFIG_IDENT_STRING, "\0"
+	.ascii U_BOOT_VERSION_STRING, "\0"
 
 	.section	".text"
 	.align 4
diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c
index df54222..ebb6ced 100644
--- a/arch/x86/lib/board.c
+++ b/arch/x86/lib/board.c
@@ -35,7 +35,6 @@ 
 #include <watchdog.h>
 #include <command.h>
 #include <stdio_dev.h>
-#include <timestamp.h>
 #include <version.h>
 #include <malloc.h>
 #include <net.h>
@@ -66,9 +65,6 @@  extern ulong __rel_dyn_end;
 extern ulong __bss_start;
 extern ulong __bss_end;
 
-const char version_string[] =
-	U_BOOT_VERSION" (" U_BOOT_DATE " - " U_BOOT_TIME ")";
-
 /************************************************************************
  * Init Utilities							*
  ************************************************************************
diff --git a/common/cmd_version.c b/common/cmd_version.c
index 83cb11c..e4b2ac1 100644
--- a/common/cmd_version.c
+++ b/common/cmd_version.c
@@ -24,8 +24,9 @@ 
 #include <common.h>
 #include <command.h>
 #include <version.h>
+#include <linux/compiler.h>
 
-extern char version_string[];
+const char __weak version_string[] = U_BOOT_VERSION_STRING;
 
 int do_version(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
diff --git a/common/main.c b/common/main.c
index 2730c6f..574f7c1 100644
--- a/common/main.c
+++ b/common/main.c
@@ -30,6 +30,7 @@ 
 #include <common.h>
 #include <watchdog.h>
 #include <command.h>
+#include <version.h>
 #ifdef CONFIG_MODEM_SUPPORT
 #include <malloc.h>		/* for free() prototype */
 #endif
@@ -311,8 +312,6 @@  void main_loop (void)
 
 #ifdef CONFIG_VERSION_VARIABLE
 	{
-		extern char version_string[];
-
 		setenv ("ver", version_string);  /* set version variable */
 	}
 #endif /* CONFIG_VERSION_VARIABLE */
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
index b427c84..77e7285 100644
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -91,6 +91,7 @@  CONFIG_VIDEO_HW_CURSOR:	     - Uses the hardware cursor capability of the
 */
 
 #include <common.h>
+#include <version.h>
 
 #include <malloc.h>
 
@@ -1458,7 +1459,6 @@  void logo_plot (void *screen, int width, int x, int y)
 static void *video_logo (void)
 {
 	char info[128];
-	extern char version_string;
 	int space, len, y_off = 0;
 
 #ifdef CONFIG_SPLASH_SCREEN
diff --git a/include/version.h b/include/version.h
index a34291a..ec4e1f8 100644
--- a/include/version.h
+++ b/include/version.h
@@ -24,8 +24,19 @@ 
 #ifndef	__VERSION_H__
 #define	__VERSION_H__
 
+#include <timestamp.h>
+
 #ifndef DO_DEPS_ONLY
 #include "version_autogenerated.h"
 #endif
 
+#ifndef CONFIG_IDENT_STRING
+#define CONFIG_IDENT_STRING ""
+#endif
+
+#define U_BOOT_VERSION_STRING U_BOOT_VERSION " (" U_BOOT_DATE " - " \
+	U_BOOT_TIME ")" CONFIG_IDENT_STRING
+
+extern const char version_string[];
+
 #endif	/* __VERSION_H__ */
diff --git a/lib/display_options.c b/lib/display_options.c
index d0480f5..694d2f2 100644
--- a/lib/display_options.c
+++ b/lib/display_options.c
@@ -23,13 +23,12 @@ 
 
 #include <config.h>
 #include <common.h>
+#include <version.h>
 #include <linux/ctype.h>
 #include <asm/io.h>
 
 int display_options (void)
 {
-	extern char version_string[];
-
 #if defined(BUILD_TAG)
 	printf ("\n\n%s, Build: %s\n\n", version_string, BUILD_TAG);
 #else