#include <common.h>
#include <asm/arch/hardware.h>
#include <asm/arch/clkcore_c2000.h>
#include <asm/arch/ddr_c2000.h>
#include <asm/arch/gpio_c2000.h>

#define CONFIG_GEM_RGMII_2_5V
//#define CONFIG_GEM_RGMII_3_3V
#define CONFIG_HFE_OVERDRIVE

/* Initialize pad config according to C2K_ChipDef_spec_010.doc */
void comcerto_pad_config()
{
	u32 val;

	/* HFE configurations */

	/* Memories EMA Config 1 */
	val = *(volatile u32*)(COMCERTO_GPIO_MEM_EMA_CONFIG1);
	val &= ~((0x3 << 6)|(0x3 << 17));
	*(volatile u32*)(COMCERTO_GPIO_MEM_EMA_CONFIG1) = val;

#if defined(CONFIG_GEM_RGMII_3_3V)
	/*  Driving Strength of IO Pads */
	/*In case GEMX operates in RMII or RGMII @3.3V mode then need to adjust
	 *the driving strength of its IO pad (default value is for 2.5V) */
	val = *(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG3);
	val &= ~((0x3 << 6) | (0x3 << 12));
	val |= ((0x2 << 6) | (0x2 << 12));
	*(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG3) = val;

	val = *(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG4);
	val &= ~((0x3 << 6)| (0x3 << 12));
	val |= ((0x2 << 6) | (0x2 << 12));
	*(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG4) = val;

	val = *(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG5);
	val &= ~((0x3 << 6) | (0x3 << 12));
	val |= ((0x2 << 6) | (0x2 << 12));
	*(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG5) = val;

#elif defined(CONFIG_GEM_RGMII_2_5V)
	/* RGMII Pad Compensation Logic (Tx side only)*/
	val = *(volatile u32*)(COMCERTO_GPIO_PAD_CTRL);
	val &= ~((0x3 << 22) | (0x3 << 26) | (0x3 << 30));
	*(volatile u32*)(COMCERTO_GPIO_PAD_CTRL) = val;
#else
#error "Either CONFIG_GEM_RGMII_3_3V or CONFIG_GEM_RGMII_2_5V should be selected"
#endif
	/* Slew Rate Control of IO Pads */
	val = *(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG3);
	val |= ((0x1 << 11) | (0x1 << 17));
	*(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG3) = val;

	val = *(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG4);
	val |= ((0x1 << 11) | (0x1 << 17));
	*(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG4) = val;

	val = *(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG5);
	val |= ((0x1 << 11) | (0x1 << 17));
	*(volatile u32*)(COMCERTO_GPIO_PAD_CONFIG5) = val;

#if defined (CONFIG_HFE_OVERDRIVE)
	/* Memory Margin Bit setting */
	/* In case HFE block operates in overdrive (1.2V) mode then need to
	* modify few EMA fields related to HFE memories. The configuration
	* registers are in GPIO block */
	val = *(volatile u32*)(COMCERTO_GPIO_MEM_EMA_CONFIG0);
	val &= ~(0xFFF << 18);
	val |= (0x38E << 18);
	*(volatile u32*)(COMCERTO_GPIO_MEM_EMA_CONFIG0) = val;

	val = *(volatile u32*)(COMCERTO_GPIO_MEM_EMA_CONFIG1);
	val &= ~(0x3F << 19);
	val |= (0x8 << 18);
	*(volatile u32*)(COMCERTO_GPIO_MEM_EMA_CONFIG1) = val;
#endif

	/*TODO Add rest of the configurations here*/

}
