/*
 * (C) Copyright 2005 2N TELEKOMUNIKACE, Ladislav Michl
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#include <common.h>

int board_init(void)
{
	DECLARE_GLOBAL_DATA_PTR;

	*((volatile unsigned char *) VOICEBLUE_LED_REG) = 0xaa;

	/* arch number of VoiceBlue board */
	/* TODO: use define from asm/mach-types.h */
	gd->bd->bi_arch_number = 218;

	/* adress of boot parameters */
	gd->bd->bi_boot_params = 0x10000100;

	return 0;
}

int dram_init(void)
{
	DECLARE_GLOBAL_DATA_PTR;

	*((volatile unsigned short *) VOICEBLUE_LED_REG) = 0xff;

 	/* Take the Ethernet controller out of reset and wait
 	 * for the EEPROM load to complete. */
	*((volatile unsigned short *) GPIO_DATA_OUTPUT_REG) |= 0x80;
	udelay(10);	/* doesn't work before interrupt_init call */
	*((volatile unsigned short *) GPIO_DATA_OUTPUT_REG) &= ~0x80;
	udelay(500);

	gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
	gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;

	return 0;
}

int misc_init_r(void)
{
	*((volatile unsigned short *) VOICEBLUE_LED_REG) = 0x55;

	return 0;
}

int board_late_init(void)
{
	*((volatile unsigned char *) VOICEBLUE_LED_REG) = 0x00;

	return 0;
}
