summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAndreas Bießmann <biessmann@corscience.de>2011-04-12 23:25:41 +0000
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>2011-05-18 07:56:54 +0200
commit24890f11980eb70d835ca7e0b00d32284d8f546c (patch)
treecac4db47fedfc656a6236f7a978a4e70ae436ab9 /arch
parenta950c81851dbe128176859bfebbc2cf51955daed (diff)
downloadu-boot-24890f11980eb70d835ca7e0b00d32284d8f546c.tar.gz
u-boot-24890f11980eb70d835ca7e0b00d32284d8f546c.tar.xz
u-boot-24890f11980eb70d835ca7e0b00d32284d8f546c.zip
avr32: add ATAG_BOARDINFO
This patch adds a new ATAG_BORADINFO to U-Boot. This tag is intended to hand over the bd->bi_board_number to the linux kernel for early stage board information like a board revision or other kind of board specific decisions necessary before the linux peripherial drivers are up. Signed-off-by: Andreas Bießmann <biessmann@corscience.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/avr32/include/asm/setup.h8
-rw-r--r--arch/avr32/lib/bootm.c11
2 files changed, 19 insertions, 0 deletions
diff --git a/arch/avr32/include/asm/setup.h b/arch/avr32/include/asm/setup.h
index e6ef8d6b50..7f5d883442 100644
--- a/arch/avr32/include/asm/setup.h
+++ b/arch/avr32/include/asm/setup.h
@@ -107,6 +107,13 @@ struct tag_ethernet {
#define AETH_INVALID_PHY 0xff
+/* board information information */
+#define ATAG_BOARDINFO 0x54410008
+
+struct tag_boardinfo {
+ u32 board_number;
+};
+
struct tag {
struct tag_header hdr;
union {
@@ -115,6 +122,7 @@ struct tag {
struct tag_cmdline cmdline;
struct tag_clock clock;
struct tag_ethernet ethernet;
+ struct tag_boardinfo boardinfo;
} u;
};
diff --git a/arch/avr32/lib/bootm.c b/arch/avr32/lib/bootm.c
index 8a47cfeb4a..c9a55ffb2c 100644
--- a/arch/avr32/lib/bootm.c
+++ b/arch/avr32/lib/bootm.c
@@ -165,6 +165,16 @@ static struct tag *setup_ethernet_tags(struct tag *params)
return params;
}
+static struct tag *setup_boardinfo_tag(struct tag *params)
+{
+ params->hdr.tag = ATAG_BOARDINFO;
+ params->hdr.size = tag_size(tag_boardinfo);
+
+ params->u.boardinfo.board_number = gd->bd->bi_board_number;
+
+ return tag_next(params);
+}
+
static void setup_end_tag(struct tag *params)
{
params->hdr.tag = ATAG_NONE;
@@ -195,6 +205,7 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *ima
params = setup_commandline_tag(params, commandline);
params = setup_clock_tags(params);
params = setup_ethernet_tags(params);
+ params = setup_boardinfo_tag(params);
setup_end_tag(params);
printf("\nStarting kernel at %p (params at %p)...\n\n",