return 0;
 }
 
-void board_init_memories(void)
+long int initdram(int board_type)
 {
-       gd->sdram_size = sdram_init(&sdram);
+       return sdram_init(&sdram);
 }
 
 void board_init_info(void)
 
        bd_t            *bd;
        unsigned long   flags;
        unsigned long   baudrate;
-       unsigned long   sdram_size;
        unsigned long   stack_end;      /* highest stack address */
        unsigned long   have_console;   /* serial_init() was called */
        unsigned long   reloc_off;      /* Relocation Offset */
 
 
 extern int cpu_init(void);
 extern int timer_init(void);
-extern void board_init_memories(void);
-extern void board_init_pio(void);
 extern void board_init_info(void);
 
 #endif /* __ASM_AVR32_INITCALLS_H__ */
 
        printf("at address 0x%08lx\n", gd->bd->bi_flashstart);
 }
 
-void board_init_f(ulong unused)
+void board_init_f(ulong board_type)
 {
        gd_t gd_data;
        gd_t *new_gd;
        unsigned long monitor_len;
        unsigned long monitor_addr;
        unsigned long addr;
+       long sdram_size;
 
        /* Initialize the global data pointer */
        memset(&gd_data, 0, sizeof(gd_data));
        serial_init();
        console_init_f();
        display_banner();
-       board_init_memories();
+       sdram_size = initdram(board_type);
 
        /* If we have no SDRAM, we can't go on */
-       if (!gd->sdram_size)
+       if (sdram_size <= 0)
                panic("No working SDRAM available\n");
 
        /*
         *  - global data struct
         *  - stack
         */
-       addr = CFG_SDRAM_BASE + gd->sdram_size;
+       addr = CFG_SDRAM_BASE + sdram_size;
        monitor_len = _end - _text;
 
        /*
         * information we have.
         */
        bd->bi_dram[0].start = CFG_SDRAM_BASE;
-       bd->bi_dram[0].size = gd->sdram_size;
+       bd->bi_dram[0].size = sdram_size;
        bd->bi_baudrate = gd->baudrate;
 
        memcpy(new_gd, gd, sizeof(gd_t));