#include <common.h>
#include <asm/arch/hardware.h>
#include <asm/arch/gpio_c2000.h>
#include <asm/arch/exp-bus_c2000.h>
#include <asm/arch/clkcore_c2000.h>
#include <asm/arch/bsp.h>
DECLARE_GLOBAL_DATA_PTR;

#define EXP_CS0_SEG_SIZE_VAL  0x7FFF

#define A9_TIMER_LOAD           0x0
#define A9_TIMER_COUNTER 0x4
#define A9_TIMER_CNTRL          0x8
#define A9_TIMER_ENABLE         (1<<0)
#define A9_TIMER_RELOAD         (1<<1)

#define MAX_TIMER_COUNT 0xffffffff

void comcerto_pad_config();

void nor_hw_init(void)
{
	*(volatile u32*) EXP_CS0_SEG_REG = EXP_CS0_SEG_SIZE_VAL;
	*(volatile u32*) EXP_CS0_TMG1_REG = 0x03034007;
	*(volatile u32*) EXP_CS0_TMG2_REG = 0x04040502;
}

#if (CONFIG_COMMANDS & CFG_CMD_NAND)
void nand_hw_init(void)
{
        SoC_gpio_cfg(28, GPIO_TYPE_OUTPUT); /* NAND CE */
        SoC_gpio_cfg(29, GPIO_TYPE_INPUT);  /* NAND BR */
}
#endif


#if 0
void a9_timer_init(void)
{
	*(volatile u32*) (COMCERTO_A9_TIMER_BASE + A9_TIMER_LOAD) = MAX_TIMER_COUNT;
	*(volatile u32*) (COMCERTO_A9_TIMER_BASE + A9_TIMER_COUNTER) = MAX_TIMER_COUNT;
	*(volatile u32*) (COMCERTO_A9_TIMER_BASE + A9_TIMER_CNTRL) = A9_TIMER_ENABLE | A9_TIMER_RELOAD;
}
#endif

void bsp_init(void)
{
	int val;

	comcerto_pad_config();

	//DDRC ODT Source Select
	*(volatile u32*) COMCERTO_GPIO_MISC_PIN_SELECT_REG = ( (1 << 6) | (*(volatile u32*) COMCERTO_GPIO_MISC_PIN_SELECT_REG));

	nor_hw_init();
#if (CONFIG_COMMANDS & CFG_CMD_NAND)
	SoC_nand_init();
#endif
#if 0
	a9_timer_init();
#endif
}

void show_boot_progress(int progress)
{
	printf("Boot reached stage %d\n", progress);
}

int board_init(void)
{
        /* arch number of Mindspeed Comcerto */
        gd->bd->bi_arch_number = MACH_TYPE_COMCERTO;

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


        gd->bd->bi_dram[0].start = 0x0;
        gd->bd->bi_dram[0].size = 0x20000000; //512 MB

#if 0
	c2k_zds_init();
#endif

#if (CONFIG_COMMANDS & CFG_CMD_NAND)
	nand_hw_init();
#endif

        return 0;
}

