avr32: add ATAG_BOARDINFO
authorAndreas Bießmann <biessmann@corscience.de>
Tue, 12 Apr 2011 23:25:41 +0000 (23:25 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Wed, 18 May 2011 05:56:54 +0000 (07:56 +0200)
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>
arch/avr32/include/asm/setup.h
arch/avr32/lib/bootm.c

index e6ef8d6b50ce58c00eeb183bf47904468b4fb31d..7f5d8834427346c4c13e4d424457530b4b421c29 100644 (file)
@@ -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;
 };
 
index 8a47cfeb4ad3cc529f46c5b0e81ecff39e442cf4..c9a55ffb2cff9bcda16e73d451a316ba1bcbd1df 100644 (file)
@@ -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",