diff options
49 files changed, 2037 insertions, 397 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index d031c3a9d..09430ba4a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -833,6 +833,10 @@ Stelian Pop <stelian@popies.net>  	at91sam9263ek	ARM926EJS (AT91SAM9263 SoC)  	at91sam9rlek	ARM926EJS (AT91SAM9RL SoC) +Matt Porter <mporter@ti.com> + +	ti814x_evm	ARM ARMV7 (TI814x Soc) +  Dave Purdy <david.c.purdy@gmail.com>  	pogo_e02	ARM926EJS (Kirkwood SoC) @@ -331,7 +331,7 @@ LIBS-y += api/libapi.o  LIBS-y += post/libpost.o  LIBS-y += test/libtest.o -ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) +ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(CONFIG_TI814X),)  LIBS-y += $(CPUDIR)/omap-common/libomap-common.o  endif @@ -3879,6 +3879,10 @@ Low Level (hardware related) configuration options:  		If defined, the x86 reset vector code is included. This is not  		needed when U-Boot is running from Coreboot. +- CONFIG_SYS_MPUCLK +		Defines the MPU clock speed (in MHz). + +		NOTE : currently only supported on AM335x platforms.  Freescale QE/FMAN Firmware Support:  ----------------------------------- diff --git a/arch/arm/config.mk b/arch/arm/config.mk index a0c89b797..e7839bece 100644 --- a/arch/arm/config.mk +++ b/arch/arm/config.mk @@ -24,7 +24,7 @@  CROSS_COMPILE ?= arm-linux-  ifndef CONFIG_STANDALONE_LOAD_ADDR -ifeq ($(SOC),omap3) +ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(CONFIG_TI814X),)  CONFIG_STANDALONE_LOAD_ADDR = 0x80300000  else  CONFIG_STANDALONE_LOAD_ADDR = 0xc100000 diff --git a/arch/arm/cpu/armv7/Makefile b/arch/arm/cpu/armv7/Makefile index 4668b3cf2..7a8c2d0e5 100644 --- a/arch/arm/cpu/armv7/Makefile +++ b/arch/arm/cpu/armv7/Makefile @@ -32,7 +32,7 @@ COBJS	+= cache_v7.o  COBJS	+= cpu.o  COBJS	+= syslib.o -ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(CONFIG_TEGRA)$(CONFIG_MX6),) +ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(CONFIG_TEGRA)$(CONFIG_MX6)$(CONFIG_TI814X),)  SOBJS	+= lowlevel_init.o  endif diff --git a/arch/arm/cpu/armv7/am33xx/Makefile b/arch/arm/cpu/armv7/am33xx/Makefile index 70c443edb..c97e30d44 100644 --- a/arch/arm/cpu/armv7/am33xx/Makefile +++ b/arch/arm/cpu/armv7/am33xx/Makefile @@ -16,7 +16,8 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(SOC).o -COBJS	+= clock.o +COBJS-$(CONFIG_AM33XX)	+= clock_am33xx.o +COBJS-$(CONFIG_TI814X)	+= clock_ti814x.o  COBJS	+= sys_info.o  COBJS	+= mem.o  COBJS	+= ddr.o diff --git a/arch/arm/cpu/armv7/am33xx/board.c b/arch/arm/cpu/armv7/am33xx/board.c index e35a3e3a7..885fb2d20 100644 --- a/arch/arm/cpu/armv7/am33xx/board.c +++ b/arch/arm/cpu/armv7/am33xx/board.c @@ -141,11 +141,11 @@ int arch_misc_init(void)  {  #ifdef CONFIG_AM335X_USB0  	musb_register(&otg0_plat, &otg0_board_data, -		(void *)AM335X_USB0_OTG_BASE); +		(void *)USB0_OTG_BASE);  #endif  #ifdef CONFIG_AM335X_USB1  	musb_register(&otg1_plat, &otg1_board_data, -		(void *)AM335X_USB1_OTG_BASE); +		(void *)USB1_OTG_BASE);  #endif  	return 0;  } diff --git a/arch/arm/cpu/armv7/am33xx/clock.c b/arch/arm/cpu/armv7/am33xx/clock_am33xx.c index d7d98d111..afc0d9205 100644 --- a/arch/arm/cpu/armv7/am33xx/clock.c +++ b/arch/arm/cpu/armv7/am33xx/clock_am33xx.c @@ -1,9 +1,9 @@  /* - * clock.c + * clock_am33xx.c   *   * clocks for AM33XX based boards   * - * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ + * Copyright (C) 2013, Texas Instruments, Incorporated - http://www.ti.com/   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License as @@ -42,6 +42,35 @@  #define CPGMAC0_IDLE		0x30000  #define DPLL_CLKDCOLDO_GATE_CTRL        0x300 +#define OSC	(V_OSCK/1000000) + +#define MPUPLL_M	CONFIG_SYS_MPUCLK +#define MPUPLL_N	(OSC-1) +#define MPUPLL_M2	1 + +/* Core PLL Fdll = 1 GHZ, */ +#define COREPLL_M	1000 +#define COREPLL_N	(OSC-1) + +#define COREPLL_M4	10	/* CORE_CLKOUTM4 = 200 MHZ */ +#define COREPLL_M5	8	/* CORE_CLKOUTM5 = 250 MHZ */ +#define COREPLL_M6	4	/* CORE_CLKOUTM6 = 500 MHZ */ + +/* + * USB PHY clock is 960 MHZ. Since, this comes directly from Fdll, Fdll + * frequency needs to be set to 960 MHZ. Hence, + * For clkout = 192 MHZ, Fdll = 960 MHZ, divider values are given below + */ +#define PERPLL_M	960 +#define PERPLL_N	(OSC-1) +#define PERPLL_M2	5 + +/* DDR Freq is 266 MHZ for now */ +/* Set Fdll = 400 MHZ , Fdll = M * 2 * CLKINP/ N + 1; clkout = Fdll /(2 * M2) */ +#define DDRPLL_M	266 +#define DDRPLL_N	(OSC-1) +#define DDRPLL_M2	1 +  const struct cm_perpll *cmper = (struct cm_perpll *)CM_PER;  const struct cm_wkuppll *cmwkup = (struct cm_wkuppll *)CM_WKUP;  const struct cm_dpll *cmdpll = (struct cm_dpll *)CM_DPLL; diff --git a/arch/arm/cpu/armv7/am33xx/clock_ti814x.c b/arch/arm/cpu/armv7/am33xx/clock_ti814x.c new file mode 100644 index 000000000..cb4210f6e --- /dev/null +++ b/arch/arm/cpu/armv7/am33xx/clock_ti814x.c @@ -0,0 +1,406 @@ +/* + * clock_ti814x.c + * + * Clocks for TI814X based boards + * + * Copyright (C) 2013, Texas Instruments, Incorporated + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * 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. + */ + +#include <common.h> +#include <asm/arch/cpu.h> +#include <asm/arch/clock.h> +#include <asm/arch/hardware.h> +#include <asm/io.h> + +/* PRCM */ +#define PRCM_MOD_EN		0x2 + +/* CLK_SRC */ +#define OSC_SRC0		0 +#define OSC_SRC1		1 + +#define L3_OSC_SRC		OSC_SRC0 + +#define OSC_0_FREQ		20 + +#define DCO_HS2_MIN		500 +#define DCO_HS2_MAX		1000 +#define DCO_HS1_MIN		1000 +#define DCO_HS1_MAX		2000 + +#define SELFREQDCO_HS2		0x00000801 +#define SELFREQDCO_HS1		0x00001001 + +#define MPU_N			0x1 +#define MPU_M			0x3C +#define MPU_M2			1 +#define MPU_CLKCTRL		0x1 + +#define L3_N			19 +#define L3_M			880 +#define L3_M2			4 +#define L3_CLKCTRL		0x801 + +#define DDR_N			19 +#define DDR_M			666 +#define DDR_M2			2 +#define DDR_CLKCTRL		0x801 + +/* ADPLLJ register values */ +#define ADPLLJ_CLKCTRL_HS2	0x00000801 /* HS2 mode, TINT2 = 1 */ +#define ADPLLJ_CLKCTRL_HS1	0x00001001 /* HS1 mode, TINT2 = 1 */ +#define ADPLLJ_CLKCTRL_CLKDCOLDOEN	(1 << 29) +#define ADPLLJ_CLKCTRL_IDLE		(1 << 23) +#define ADPLLJ_CLKCTRL_CLKOUTEN		(1 << 20) +#define ADPLLJ_CLKCTRL_CLKOUTLDOEN	(1 << 19) +#define ADPLLJ_CLKCTRL_CLKDCOLDOPWDNZ	(1 << 17) +#define ADPLLJ_CLKCTRL_LPMODE		(1 << 12) +#define ADPLLJ_CLKCTRL_DRIFTGUARDIAN	(1 << 11) +#define ADPLLJ_CLKCTRL_REGM4XEN		(1 << 10) +#define ADPLLJ_CLKCTRL_TINITZ		(1 << 0) +#define ADPLLJ_CLKCTRL_CLKDCO		(ADPLLJ_CLKCTRL_CLKDCOLDOEN | \ +					 ADPLLJ_CLKCTRL_CLKOUTEN | \ +					 ADPLLJ_CLKCTRL_CLKOUTLDOEN | \ +					 ADPLLJ_CLKCTRL_CLKDCOLDOPWDNZ) + +#define ADPLLJ_STATUS_PHASELOCK		(1 << 10) +#define ADPLLJ_STATUS_FREQLOCK		(1 << 9) +#define ADPLLJ_STATUS_PHSFRQLOCK	(ADPLLJ_STATUS_PHASELOCK | \ +					 ADPLLJ_STATUS_FREQLOCK) +#define ADPLLJ_STATUS_BYPASSACK		(1 << 8) +#define ADPLLJ_STATUS_BYPASS		(1 << 0) +#define ADPLLJ_STATUS_BYPASSANDACK	(ADPLLJ_STATUS_BYPASSACK | \ +					 ADPLLJ_STATUS_BYPASS) + +#define ADPLLJ_TENABLE_ENB		(1 << 0) +#define ADPLLJ_TENABLEDIV_ENB		(1 << 0) + +#define ADPLLJ_M2NDIV_M2SHIFT		16 + +#define MPU_PLL_BASE			(PLL_SUBSYS_BASE + 0x048) +#define L3_PLL_BASE			(PLL_SUBSYS_BASE + 0x110) +#define DDR_PLL_BASE			(PLL_SUBSYS_BASE + 0x290) + +struct ad_pll { +	unsigned int pwrctrl; +	unsigned int clkctrl; +	unsigned int tenable; +	unsigned int tenablediv; +	unsigned int m2ndiv; +	unsigned int mn2div; +	unsigned int fracdiv; +	unsigned int bwctrl; +	unsigned int fracctrl; +	unsigned int status; +	unsigned int m3div; +	unsigned int rampctrl; +}; + +#define OSC_SRC_CTRL			(PLL_SUBSYS_BASE + 0x2C0) + +/* PRCM */ +#define CM_DEFAULT_BASE			(PRCM_BASE + 0x0500) + +struct cm_def { +	unsigned int resv0[2]; +	unsigned int l3fastclkstctrl; +	unsigned int resv1[1]; +	unsigned int pciclkstctrl; +	unsigned int resv2[1]; +	unsigned int ducaticlkstctrl; +	unsigned int resv3[1]; +	unsigned int emif0clkctrl; +	unsigned int emif1clkctrl; +	unsigned int dmmclkctrl; +	unsigned int fwclkctrl; +	unsigned int resv4[10]; +	unsigned int usbclkctrl; +	unsigned int resv5[1]; +	unsigned int sataclkctrl; +	unsigned int resv6[4]; +	unsigned int ducaticlkctrl; +	unsigned int pciclkctrl; +}; + +#define CM_ALWON_BASE			(PRCM_BASE + 0x1400) + +struct cm_alwon { +	unsigned int l3slowclkstctrl; +	unsigned int ethclkstctrl; +	unsigned int l3medclkstctrl; +	unsigned int mmu_clkstctrl; +	unsigned int mmucfg_clkstctrl; +	unsigned int ocmc0clkstctrl; +	unsigned int vcpclkstctrl; +	unsigned int mpuclkstctrl; +	unsigned int sysclk4clkstctrl; +	unsigned int sysclk5clkstctrl; +	unsigned int sysclk6clkstctrl; +	unsigned int rtcclkstctrl; +	unsigned int l3fastclkstctrl; +	unsigned int resv0[67]; +	unsigned int mcasp0clkctrl; +	unsigned int mcasp1clkctrl; +	unsigned int mcasp2clkctrl; +	unsigned int mcbspclkctrl; +	unsigned int uart0clkctrl; +	unsigned int uart1clkctrl; +	unsigned int uart2clkctrl; +	unsigned int gpio0clkctrl; +	unsigned int gpio1clkctrl; +	unsigned int i2c0clkctrl; +	unsigned int i2c1clkctrl; +	unsigned int mcasp345clkctrl; +	unsigned int atlclkctrl; +	unsigned int mlbclkctrl; +	unsigned int pataclkctrl; +	unsigned int resv1[1]; +	unsigned int uart3clkctrl; +	unsigned int uart4clkctrl; +	unsigned int uart5clkctrl; +	unsigned int wdtimerclkctrl; +	unsigned int spiclkctrl; +	unsigned int mailboxclkctrl; +	unsigned int spinboxclkctrl; +	unsigned int mmudataclkctrl; +	unsigned int resv2[2]; +	unsigned int mmucfgclkctrl; +	unsigned int resv3[2]; +	unsigned int ocmc0clkctrl; +	unsigned int vcpclkctrl; +	unsigned int resv4[2]; +	unsigned int controlclkctrl; +	unsigned int resv5[2]; +	unsigned int gpmcclkctrl; +	unsigned int ethernet0clkctrl; +	unsigned int resv6[1]; +	unsigned int mpuclkctrl; +	unsigned int debugssclkctrl; +	unsigned int l3clkctrl; +	unsigned int l4hsclkctrl; +	unsigned int l4lsclkctrl; +	unsigned int rtcclkctrl; +	unsigned int tpccclkctrl; +	unsigned int tptc0clkctrl; +	unsigned int tptc1clkctrl; +	unsigned int tptc2clkctrl; +	unsigned int tptc3clkctrl; +	unsigned int resv7[4]; +	unsigned int dcan01clkctrl; +	unsigned int mmchs0clkctrl; +	unsigned int mmchs1clkctrl; +	unsigned int mmchs2clkctrl; +	unsigned int custefuseclkctrl; +}; + + +const struct cm_alwon *cmalwon = (struct cm_alwon *)CM_ALWON_BASE; +const struct cm_def *cmdef = (struct cm_def *)CM_DEFAULT_BASE; + +/* + * Enable the peripheral clock for required peripherals + */ +static void enable_per_clocks(void) +{ +	/* UART0 */ +	writel(PRCM_MOD_EN, &cmalwon->uart0clkctrl); +	while (readl(&cmalwon->uart0clkctrl) != PRCM_MOD_EN) +		; + +	/* HSMMC1 */ +	writel(PRCM_MOD_EN, &cmalwon->mmchs1clkctrl); +	while (readl(&cmalwon->mmchs1clkctrl) != PRCM_MOD_EN) +		; +} + +/* + * select the HS1 or HS2 for DCO Freq + * return : CLKCTRL + */ +static u32 pll_dco_freq_sel(u32 clkout_dco) +{ +	if (clkout_dco >= DCO_HS2_MIN && clkout_dco < DCO_HS2_MAX) +		return SELFREQDCO_HS2; +	else if (clkout_dco >= DCO_HS1_MIN && clkout_dco < DCO_HS1_MAX) +		return SELFREQDCO_HS1; +	else +		return -1; +} + +/* + * select the sigma delta config + * return: sigma delta val + */ +static u32 pll_sigma_delta_val(u32 clkout_dco) +{ +	u32 sig_val = 0; +	float frac_div; + +	frac_div = (float) clkout_dco / 250; +	frac_div = frac_div + 0.90; +	sig_val = (int)frac_div; +	sig_val = sig_val << 24; + +	return sig_val; +} + +/* + * configure individual ADPLLJ + */ +static void pll_config(u32 base, u32 n, u32 m, u32 m2, +		       u32 clkctrl_val, int adpllj) +{ +	const struct ad_pll *adpll = (struct ad_pll *)base; +	u32 m2nval, mn2val, read_clkctrl = 0, clkout_dco = 0; +	u32 sig_val = 0, hs_mod = 0; + +	m2nval = (m2 << ADPLLJ_M2NDIV_M2SHIFT) | n; +	mn2val = m; + +	/* calculate clkout_dco */ +	clkout_dco = ((OSC_0_FREQ / (n+1)) * m); + +	/* sigma delta & Hs mode selection skip for ADPLLS*/ +	if (adpllj) { +		sig_val = pll_sigma_delta_val(clkout_dco); +		hs_mod = pll_dco_freq_sel(clkout_dco); +	} + +	/* by-pass pll */ +	read_clkctrl = readl(&adpll->clkctrl); +	writel((read_clkctrl | ADPLLJ_CLKCTRL_IDLE), &adpll->clkctrl); +	while ((readl(&adpll->status) & ADPLLJ_STATUS_BYPASSANDACK) +		!= ADPLLJ_STATUS_BYPASSANDACK) +		; + +	/* clear TINITZ */ +	read_clkctrl = readl(&adpll->clkctrl); +	writel((read_clkctrl & ~ADPLLJ_CLKCTRL_TINITZ), &adpll->clkctrl); + +	/* +	 * ref_clk = 20/(n + 1); +	 * clkout_dco = ref_clk * m; +	 * clk_out = clkout_dco/m2; +	*/ +	read_clkctrl = readl(&adpll->clkctrl) & +			     ~(ADPLLJ_CLKCTRL_LPMODE | +			     ADPLLJ_CLKCTRL_DRIFTGUARDIAN | +			     ADPLLJ_CLKCTRL_REGM4XEN); +	writel(m2nval, &adpll->m2ndiv); +	writel(mn2val, &adpll->mn2div); + +	/* Skip for modena(ADPLLS) */ +	if (adpllj) { +		writel(sig_val, &adpll->fracdiv); +		writel((read_clkctrl | hs_mod), &adpll->clkctrl); +	} + +	/* Load M2, N2 dividers of ADPLL */ +	writel(ADPLLJ_TENABLEDIV_ENB, &adpll->tenablediv); +	writel(~ADPLLJ_TENABLEDIV_ENB, &adpll->tenablediv); + +	/* Load M, N dividers of ADPLL */ +	writel(ADPLLJ_TENABLE_ENB, &adpll->tenable); +	writel(~ADPLLJ_TENABLE_ENB, &adpll->tenable); + +	/* Configure CLKDCOLDOEN,CLKOUTLDOEN,CLKOUT Enable BITS */ +	read_clkctrl = readl(&adpll->clkctrl) & ~ADPLLJ_CLKCTRL_CLKDCO; +	if (adpllj) +		writel((read_clkctrl | ADPLLJ_CLKCTRL_CLKDCO), +						&adpll->clkctrl); + +	/* Enable TINTZ and disable IDLE(PLL in Active & Locked Mode */ +	read_clkctrl = readl(&adpll->clkctrl) & ~ADPLLJ_CLKCTRL_IDLE; +	writel((read_clkctrl | ADPLLJ_CLKCTRL_TINITZ), &adpll->clkctrl); + +	/* Wait for phase and freq lock */ +	while ((readl(&adpll->status) & ADPLLJ_STATUS_PHSFRQLOCK) != +	       ADPLLJ_STATUS_PHSFRQLOCK) +		; +} + +static void unlock_pll_control_mmr(void) +{ +	/* TRM 2.10.1.4 and 3.2.7-3.2.11 */ +	writel(0x1EDA4C3D, 0x481C5040); +	writel(0x2FF1AC2B, 0x48140060); +	writel(0xF757FDC0, 0x48140064); +	writel(0xE2BC3A6D, 0x48140068); +	writel(0x1EBF131D, 0x4814006c); +	writel(0x6F361E05, 0x48140070); +} + +static void mpu_pll_config(void) +{ +	pll_config(MPU_PLL_BASE, MPU_N, MPU_M, MPU_M2, MPU_CLKCTRL, 0); +} + +static void l3_pll_config(void) +{ +	u32 l3_osc_src, rd_osc_src = 0; + +	l3_osc_src = L3_OSC_SRC; +	rd_osc_src = readl(OSC_SRC_CTRL); + +	if (OSC_SRC0 == l3_osc_src) +		writel((rd_osc_src & 0xfffffffe)|0x0, OSC_SRC_CTRL); +	else +		writel((rd_osc_src & 0xfffffffe)|0x1, OSC_SRC_CTRL); + +	pll_config(L3_PLL_BASE, L3_N, L3_M, L3_M2, L3_CLKCTRL, 1); +} + +void ddr_pll_config(unsigned int ddrpll_m) +{ +	pll_config(DDR_PLL_BASE, DDR_N, DDR_M, DDR_M2, DDR_CLKCTRL, 1); +} + +void enable_emif_clocks(void) {}; + +void enable_dmm_clocks(void) +{ +	writel(PRCM_MOD_EN, &cmdef->fwclkctrl); +	writel(PRCM_MOD_EN, &cmdef->l3fastclkstctrl); +	writel(PRCM_MOD_EN, &cmdef->emif0clkctrl); +	while ((readl(&cmdef->emif0clkctrl)) != PRCM_MOD_EN) +		; +	writel(PRCM_MOD_EN, &cmdef->emif1clkctrl); +	while ((readl(&cmdef->emif1clkctrl)) != PRCM_MOD_EN) +		; +	while ((readl(&cmdef->l3fastclkstctrl) & 0x300) != 0x300) +		; +	writel(PRCM_MOD_EN, &cmdef->dmmclkctrl); +	while ((readl(&cmdef->dmmclkctrl)) != PRCM_MOD_EN) +		; +	writel(PRCM_MOD_EN, &cmalwon->l3slowclkstctrl); +	while ((readl(&cmalwon->l3slowclkstctrl) & 0x2100) != 0x2100) +		; +} + +/* + * Configure the PLL/PRCM for necessary peripherals + */ +void pll_init() +{ +	unlock_pll_control_mmr(); + +	/* Enable the control module */ +	writel(PRCM_MOD_EN, &cmalwon->controlclkctrl); + +	mpu_pll_config(); + +	l3_pll_config(); + +	/* Enable the required peripherals */ +	enable_per_clocks(); +} diff --git a/arch/arm/cpu/armv7/am33xx/ddr.c b/arch/arm/cpu/armv7/am33xx/ddr.c index 448cc4015..d1e2fd3f2 100644 --- a/arch/arm/cpu/armv7/am33xx/ddr.c +++ b/arch/arm/cpu/armv7/am33xx/ddr.c @@ -24,15 +24,20 @@ http://www.ti.com/  /**   * Base address for EMIF instances   */ -static struct emif_reg_struct *emif_reg = { -				(struct emif_reg_struct *)EMIF4_0_CFG_BASE}; +static struct emif_reg_struct *emif_reg[2] = { +				(struct emif_reg_struct *)EMIF4_0_CFG_BASE, +				(struct emif_reg_struct *)EMIF4_1_CFG_BASE};  /** - * Base address for DDR instance + * Base addresses for DDR PHY cmd/data regs   */ -static struct ddr_regs *ddr_reg[2] = { -				(struct ddr_regs *)DDR_PHY_BASE_ADDR, -				(struct ddr_regs *)DDR_PHY_BASE_ADDR2}; +static struct ddr_cmd_regs *ddr_cmd_reg[2] = { +				(struct ddr_cmd_regs *)DDR_PHY_CMD_ADDR, +				(struct ddr_cmd_regs *)DDR_PHY_CMD_ADDR2}; + +static struct ddr_data_regs *ddr_data_reg[2] = { +				(struct ddr_data_regs *)DDR_PHY_DATA_ADDR, +				(struct ddr_data_regs *)DDR_PHY_DATA_ADDR2};  /**   * Base address for ddr io control instances @@ -43,7 +48,7 @@ static struct ddr_cmdtctrl *ioctrl_reg = {  /**   * Configure SDRAM   */ -void config_sdram(const struct emif_regs *regs) +void config_sdram(const struct emif_regs *regs, int nr)  {  	if (regs->zq_config) {  		/* @@ -51,68 +56,85 @@ void config_sdram(const struct emif_regs *regs)  		 * about 570us for a delay, which will be long enough  		 * to configure things.  		 */ -		writel(0x2800, &emif_reg->emif_sdram_ref_ctrl); -		writel(regs->zq_config, &emif_reg->emif_zq_config); +		writel(0x2800, &emif_reg[nr]->emif_sdram_ref_ctrl); +		writel(regs->zq_config, &emif_reg[nr]->emif_zq_config);  		writel(regs->sdram_config, &cstat->secure_emif_sdram_config); +		writel(regs->sdram_config, &emif_reg[nr]->emif_sdram_config); +		writel(regs->ref_ctrl, &emif_reg[nr]->emif_sdram_ref_ctrl); +		writel(regs->ref_ctrl, &emif_reg[nr]->emif_sdram_ref_ctrl_shdw);  	} -	writel(regs->sdram_config, &emif_reg->emif_sdram_config); -	writel(regs->ref_ctrl, &emif_reg->emif_sdram_ref_ctrl); -	writel(regs->ref_ctrl, &emif_reg->emif_sdram_ref_ctrl_shdw); +	writel(regs->ref_ctrl, &emif_reg[nr]->emif_sdram_ref_ctrl); +	writel(regs->ref_ctrl, &emif_reg[nr]->emif_sdram_ref_ctrl_shdw); +	writel(regs->sdram_config, &emif_reg[nr]->emif_sdram_config);  }  /**   * Set SDRAM timings   */ -void set_sdram_timings(const struct emif_regs *regs) +void set_sdram_timings(const struct emif_regs *regs, int nr)  { -	writel(regs->sdram_tim1, &emif_reg->emif_sdram_tim_1); -	writel(regs->sdram_tim1, &emif_reg->emif_sdram_tim_1_shdw); -	writel(regs->sdram_tim2, &emif_reg->emif_sdram_tim_2); -	writel(regs->sdram_tim2, &emif_reg->emif_sdram_tim_2_shdw); -	writel(regs->sdram_tim3, &emif_reg->emif_sdram_tim_3); -	writel(regs->sdram_tim3, &emif_reg->emif_sdram_tim_3_shdw); +	writel(regs->sdram_tim1, &emif_reg[nr]->emif_sdram_tim_1); +	writel(regs->sdram_tim1, &emif_reg[nr]->emif_sdram_tim_1_shdw); +	writel(regs->sdram_tim2, &emif_reg[nr]->emif_sdram_tim_2); +	writel(regs->sdram_tim2, &emif_reg[nr]->emif_sdram_tim_2_shdw); +	writel(regs->sdram_tim3, &emif_reg[nr]->emif_sdram_tim_3); +	writel(regs->sdram_tim3, &emif_reg[nr]->emif_sdram_tim_3_shdw);  }  /**   * Configure DDR PHY   */ -void config_ddr_phy(const struct emif_regs *regs) +void config_ddr_phy(const struct emif_regs *regs, int nr)  { -	writel(regs->emif_ddr_phy_ctlr_1, &emif_reg->emif_ddr_phy_ctrl_1); -	writel(regs->emif_ddr_phy_ctlr_1, &emif_reg->emif_ddr_phy_ctrl_1_shdw); +	writel(regs->emif_ddr_phy_ctlr_1, +		&emif_reg[nr]->emif_ddr_phy_ctrl_1); +	writel(regs->emif_ddr_phy_ctlr_1, +		&emif_reg[nr]->emif_ddr_phy_ctrl_1_shdw);  }  /**   * Configure DDR CMD control registers   */ -void config_cmd_ctrl(const struct cmd_control *cmd) +void config_cmd_ctrl(const struct cmd_control *cmd, int nr)  { -	writel(cmd->cmd0csratio, &ddr_reg[0]->cm0csratio); -	writel(cmd->cmd0dldiff, &ddr_reg[0]->cm0dldiff); -	writel(cmd->cmd0iclkout, &ddr_reg[0]->cm0iclkout); +	writel(cmd->cmd0csratio, &ddr_cmd_reg[nr]->cm0csratio); +	writel(cmd->cmd0dldiff, &ddr_cmd_reg[nr]->cm0dldiff); +	writel(cmd->cmd0iclkout, &ddr_cmd_reg[nr]->cm0iclkout); -	writel(cmd->cmd1csratio, &ddr_reg[0]->cm1csratio); -	writel(cmd->cmd1dldiff, &ddr_reg[0]->cm1dldiff); -	writel(cmd->cmd1iclkout, &ddr_reg[0]->cm1iclkout); +	writel(cmd->cmd1csratio, &ddr_cmd_reg[nr]->cm1csratio); +	writel(cmd->cmd1dldiff, &ddr_cmd_reg[nr]->cm1dldiff); +	writel(cmd->cmd1iclkout, &ddr_cmd_reg[nr]->cm1iclkout); -	writel(cmd->cmd2csratio, &ddr_reg[0]->cm2csratio); -	writel(cmd->cmd2dldiff, &ddr_reg[0]->cm2dldiff); -	writel(cmd->cmd2iclkout, &ddr_reg[0]->cm2iclkout); +	writel(cmd->cmd2csratio, &ddr_cmd_reg[nr]->cm2csratio); +	writel(cmd->cmd2dldiff, &ddr_cmd_reg[nr]->cm2dldiff); +	writel(cmd->cmd2iclkout, &ddr_cmd_reg[nr]->cm2iclkout);  }  /**   * Configure DDR DATA registers   */ -void config_ddr_data(int macrono, const struct ddr_data *data) +void config_ddr_data(const struct ddr_data *data, int nr)  { -	writel(data->datardsratio0, &ddr_reg[macrono]->dt0rdsratio0); -	writel(data->datawdsratio0, &ddr_reg[macrono]->dt0wdsratio0); -	writel(data->datawiratio0, &ddr_reg[macrono]->dt0wiratio0); -	writel(data->datagiratio0, &ddr_reg[macrono]->dt0giratio0); -	writel(data->datafwsratio0, &ddr_reg[macrono]->dt0fwsratio0); -	writel(data->datawrsratio0, &ddr_reg[macrono]->dt0wrsratio0); -	writel(data->datauserank0delay, &ddr_reg[macrono]->dt0rdelays0); -	writel(data->datadldiff0, &ddr_reg[macrono]->dt0dldiff0); +	int i; + +	for (i = 0; i < DDR_DATA_REGS_NR; i++) { +		writel(data->datardsratio0, +			&(ddr_data_reg[nr]+i)->dt0rdsratio0); +		writel(data->datawdsratio0, +			&(ddr_data_reg[nr]+i)->dt0wdsratio0); +		writel(data->datawiratio0, +			&(ddr_data_reg[nr]+i)->dt0wiratio0); +		writel(data->datagiratio0, +			&(ddr_data_reg[nr]+i)->dt0giratio0); +		writel(data->datafwsratio0, +			&(ddr_data_reg[nr]+i)->dt0fwsratio0); +		writel(data->datawrsratio0, +			&(ddr_data_reg[nr]+i)->dt0wrsratio0); +		writel(data->datauserank0delay, +			&(ddr_data_reg[nr]+i)->dt0rdelays0); +		writel(data->datadldiff0, +			&(ddr_data_reg[nr]+i)->dt0dldiff0); +	}  }  void config_io_ctrl(unsigned long val) diff --git a/arch/arm/cpu/armv7/am33xx/emif4.c b/arch/arm/cpu/armv7/am33xx/emif4.c index 01e3a5204..aa84e9617 100644 --- a/arch/arm/cpu/armv7/am33xx/emif4.c +++ b/arch/arm/cpu/armv7/am33xx/emif4.c @@ -44,44 +44,65 @@ void dram_init_banksize(void)  #ifdef CONFIG_SPL_BUILD -static struct vtp_reg *vtpreg = (struct vtp_reg *)VTP0_CTRL_ADDR; +static struct dmm_lisa_map_regs *hw_lisa_map_regs = +				(struct dmm_lisa_map_regs *)DMM_BASE; +static struct vtp_reg *vtpreg[2] = { +				(struct vtp_reg *)VTP0_CTRL_ADDR, +				(struct vtp_reg *)VTP1_CTRL_ADDR}; +#ifdef CONFIG_AM33XX  static struct ddr_ctrl *ddrctrl = (struct ddr_ctrl *)DDR_CTRL_ADDR; +#endif + +void config_dmm(const struct dmm_lisa_map_regs *regs) +{ +	enable_dmm_clocks(); + +	writel(0, &hw_lisa_map_regs->dmm_lisa_map_3); +	writel(0, &hw_lisa_map_regs->dmm_lisa_map_2); +	writel(0, &hw_lisa_map_regs->dmm_lisa_map_1); +	writel(0, &hw_lisa_map_regs->dmm_lisa_map_0); -static void config_vtp(void) +	writel(regs->dmm_lisa_map_3, &hw_lisa_map_regs->dmm_lisa_map_3); +	writel(regs->dmm_lisa_map_2, &hw_lisa_map_regs->dmm_lisa_map_2); +	writel(regs->dmm_lisa_map_1, &hw_lisa_map_regs->dmm_lisa_map_1); +	writel(regs->dmm_lisa_map_0, &hw_lisa_map_regs->dmm_lisa_map_0); +} + +static void config_vtp(int nr)  { -	writel(readl(&vtpreg->vtp0ctrlreg) | VTP_CTRL_ENABLE, -			&vtpreg->vtp0ctrlreg); -	writel(readl(&vtpreg->vtp0ctrlreg) & (~VTP_CTRL_START_EN), -			&vtpreg->vtp0ctrlreg); -	writel(readl(&vtpreg->vtp0ctrlreg) | VTP_CTRL_START_EN, -			&vtpreg->vtp0ctrlreg); +	writel(readl(&vtpreg[nr]->vtp0ctrlreg) | VTP_CTRL_ENABLE, +			&vtpreg[nr]->vtp0ctrlreg); +	writel(readl(&vtpreg[nr]->vtp0ctrlreg) & (~VTP_CTRL_START_EN), +			&vtpreg[nr]->vtp0ctrlreg); +	writel(readl(&vtpreg[nr]->vtp0ctrlreg) | VTP_CTRL_START_EN, +			&vtpreg[nr]->vtp0ctrlreg);  	/* Poll for READY */ -	while ((readl(&vtpreg->vtp0ctrlreg) & VTP_CTRL_READY) != +	while ((readl(&vtpreg[nr]->vtp0ctrlreg) & VTP_CTRL_READY) !=  			VTP_CTRL_READY)  		;  }  void config_ddr(unsigned int pll, unsigned int ioctrl,  		const struct ddr_data *data, const struct cmd_control *ctrl, -		const struct emif_regs *regs) +		const struct emif_regs *regs, int nr)  {  	enable_emif_clocks();  	ddr_pll_config(pll); -	config_vtp(); -	config_cmd_ctrl(ctrl); - -	config_ddr_data(0, data); -	config_ddr_data(1, data); +	config_vtp(nr); +	config_cmd_ctrl(ctrl, nr); +	config_ddr_data(data, nr); +#ifdef CONFIG_AM33XX  	config_io_ctrl(ioctrl);  	/* Set CKE to be controlled by EMIF/DDR PHY */  	writel(DDR_CKE_CTRL_NORMAL, &ddrctrl->ddrckectrl); +#endif  	/* Program EMIF instance */ -	config_ddr_phy(regs); -	set_sdram_timings(regs); -	config_sdram(regs); +	config_ddr_phy(regs, nr); +	set_sdram_timings(regs, nr); +	config_sdram(regs, nr);  }  #endif diff --git a/arch/arm/cpu/armv7/am33xx/mem.c b/arch/arm/cpu/armv7/am33xx/mem.c index b8f54abae..b86b0ded3 100644 --- a/arch/arm/cpu/armv7/am33xx/mem.c +++ b/arch/arm/cpu/armv7/am33xx/mem.c @@ -83,7 +83,7 @@ void gpmc_init(void)  	/* global settings */  	writel(0x00000008, &gpmc_cfg->sysconfig);  	writel(0x00000100, &gpmc_cfg->irqstatus); -	writel(0x00000200, &gpmc_cfg->irqenable); +	writel(0x00000100, &gpmc_cfg->irqenable);  	writel(0x00000012, &gpmc_cfg->config);  	/*  	 * Disable the GPMC0 config set by ROM code diff --git a/arch/arm/cpu/armv7/am33xx/sys_info.c b/arch/arm/cpu/armv7/am33xx/sys_info.c index 507b6180e..5fd8b47b2 100644 --- a/arch/arm/cpu/armv7/am33xx/sys_info.c +++ b/arch/arm/cpu/armv7/am33xx/sys_info.c @@ -98,6 +98,9 @@ int print_cpuinfo(void)  	case AM335X:  		cpu_s = "AM335X";  		break; +	case TI81XX: +		cpu_s = "TI81XX"; +		break;  	default:  		cpu_s = "Unknown cpu type";  		break; @@ -120,7 +123,7 @@ int print_cpuinfo(void)  		sec_s = "?";  	} -	printf("AM%s-%s rev %d\n", +	printf("%s-%s rev %d\n",  			cpu_s, sec_s, get_cpu_rev());  	/* TODO: Print ARM and DDR frequencies  */ diff --git a/arch/arm/cpu/armv7/omap-common/Makefile b/arch/arm/cpu/armv7/omap-common/Makefile index 0efc80dde..55e82ba36 100644 --- a/arch/arm/cpu/armv7/omap-common/Makefile +++ b/arch/arm/cpu/armv7/omap-common/Makefile @@ -36,7 +36,7 @@ COBJS	+= emif-common.o  COBJS	+= vc.o  endif -ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) +ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(CONFIG_TI814X),)  COBJS	+= boot-common.o  SOBJS	+= lowlevel_init.o  endif diff --git a/arch/arm/cpu/armv7/omap-common/lowlevel_init.S b/arch/arm/cpu/armv7/omap-common/lowlevel_init.S index 358107776..b933fe843 100644 --- a/arch/arm/cpu/armv7/omap-common/lowlevel_init.S +++ b/arch/arm/cpu/armv7/omap-common/lowlevel_init.S @@ -26,6 +26,7 @@   * MA 02111-1307 USA   */ +#include <config.h>  #include <asm/arch/omap.h>  #include <asm/arch/spl.h>  #include <linux/linkage.h> diff --git a/arch/arm/cpu/armv7/omap-common/timer.c b/arch/arm/cpu/armv7/omap-common/timer.c index 36bea5f94..507f6873e 100644 --- a/arch/arm/cpu/armv7/omap-common/timer.c +++ b/arch/arm/cpu/armv7/omap-common/timer.c @@ -34,6 +34,7 @@  #include <common.h>  #include <asm/io.h> +#include <asm/arch/cpu.h>  DECLARE_GLOBAL_DATA_PTR; diff --git a/arch/arm/include/asm/arch-am33xx/clock.h b/arch/arm/include/asm/arch-am33xx/clock.h index 872ff820a..ecb590185 100644 --- a/arch/arm/include/asm/arch-am33xx/clock.h +++ b/arch/arm/include/asm/arch-am33xx/clock.h @@ -3,7 +3,7 @@   *   * clock header   * - * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ + * Copyright (C) 2011, Texas Instruments Incorporated - http://www.ti.com/   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License as diff --git a/arch/arm/include/asm/arch-am33xx/clocks_am33xx.h b/arch/arm/include/asm/arch-am33xx/clocks_am33xx.h index d748dd278..89b63d9a8 100644 --- a/arch/arm/include/asm/arch-am33xx/clocks_am33xx.h +++ b/arch/arm/include/asm/arch-am33xx/clocks_am33xx.h @@ -3,7 +3,7 @@   *   * AM33xx clock define   * - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License as @@ -19,37 +19,13 @@  #ifndef _CLOCKS_AM33XX_H_  #define _CLOCKS_AM33XX_H_ -#define OSC	(V_OSCK/1000000) - -/* MAIN PLL Fdll = 550 MHZ, */ -#define MPUPLL_M	550 -#define MPUPLL_N	(OSC-1) -#define MPUPLL_M2	1 - -/* Core PLL Fdll = 1 GHZ, */ -#define COREPLL_M	1000 -#define COREPLL_N	(OSC-1) - -#define COREPLL_M4	10	/* CORE_CLKOUTM4 = 200 MHZ */ -#define COREPLL_M5	8	/* CORE_CLKOUTM5 = 250 MHZ */ -#define COREPLL_M6	4	/* CORE_CLKOUTM6 = 500 MHZ */ - -/* - * USB PHY clock is 960 MHZ. Since, this comes directly from Fdll, Fdll - * frequency needs to be set to 960 MHZ. Hence, - * For clkout = 192 MHZ, Fdll = 960 MHZ, divider values are given below - */ -#define PERPLL_M	960 -#define PERPLL_N	(OSC-1) -#define PERPLL_M2	5 - -/* DDR Freq is 266 MHZ for now */ -/* Set Fdll = 400 MHZ , Fdll = M * 2 * CLKINP/ N + 1; clkout = Fdll /(2 * M2) */ -#define DDRPLL_M	266 -#define DDRPLL_N	(OSC-1) -#define DDRPLL_M2	1 +/* MAIN PLL Fdll = 550 MHz, by default */ +#ifndef CONFIG_SYS_MPUCLK +#define CONFIG_SYS_MPUCLK	550 +#endif  extern void pll_init(void);  extern void enable_emif_clocks(void); +extern void enable_dmm_clocks(void);  #endif	/* endif _CLOCKS_AM33XX_H_ */ diff --git a/arch/arm/include/asm/arch-am33xx/cpu.h b/arch/arm/include/asm/arch-am33xx/cpu.h index 16e8a8070..3d3a7c8ac 100644 --- a/arch/arm/include/asm/arch-am33xx/cpu.h +++ b/arch/arm/include/asm/arch-am33xx/cpu.h @@ -42,9 +42,10 @@  #define HS_DEVICE			0x2  #define GP_DEVICE			0x3 -/* cpu-id for AM33XX family */ +/* cpu-id for AM33XX and TI81XX family */  #define AM335X				0xB944 -#define DEVICE_ID			0x44E10600 +#define TI81XX				0xB81E +#define DEVICE_ID			(CTRL_BASE + 0x0600)  /* This gives the status of the boot mode pins on the evm */  #define SYSBOOT_MASK			(BIT(0) | BIT(1) | BIT(2)\ @@ -52,9 +53,11 @@  /* Reset control */  #ifdef CONFIG_AM33XX -#define PRM_RSTCTRL			0x44E00F00 -#define PRM_RSTST			0x44E00F08 +#define PRM_RSTCTRL			(PRCM_BASE + 0x0F00) +#elif defined(CONFIG_TI814X) +#define PRM_RSTCTRL			(PRCM_BASE + 0x00A0)  #endif +#define PRM_RSTST			(PRM_RSTCTRL + 8)  #define PRM_RSTCTRL_RESET		0x01  #define PRM_RSTST_WARM_RESET_MASK	0x232 diff --git a/arch/arm/include/asm/arch-am33xx/ddr_defs.h b/arch/arm/include/asm/arch-am33xx/ddr_defs.h index ae43ef877..260cc3484 100644 --- a/arch/arm/include/asm/arch-am33xx/ddr_defs.h +++ b/arch/arm/include/asm/arch-am33xx/ddr_defs.h @@ -28,6 +28,7 @@  #define VTP_CTRL_START_EN	(0x1)  #define PHY_DLL_LOCK_DIFF	0x0  #define DDR_CKE_CTRL_NORMAL	0x1 +#define PHY_EN_DYN_PWRDN	(0x1 << 20)  /* Micron MT47H128M16RT-25E */  #define MT47H128M16RT25E_EMIF_READ_LATENCY	0x100005 @@ -82,6 +83,23 @@  #define MT41J256M8HX15E_PHY_FIFO_WE		0x100  #define MT41J256M8HX15E_IOCTRL_VALUE		0x18B +/* Micron MT41K256M16HA-125E */ +#define MT41K256M16HA125E_EMIF_READ_LATENCY	0x100006 +#define MT41K256M16HA125E_EMIF_TIM1		0x0888A39B +#define MT41K256M16HA125E_EMIF_TIM2		0x26517FDA +#define MT41K256M16HA125E_EMIF_TIM3		0x501F84EF +#define MT41K256M16HA125E_EMIF_SDCFG		0x61C04BB2 +#define MT41K256M16HA125E_EMIF_SDREF		0x0000093B +#define MT41K256M16HA125E_ZQ_CFG		0x50074BE4 +#define MT41K256M16HA125E_DLL_LOCK_DIFF		0x1 +#define MT41K256M16HA125E_RATIO			0x40 +#define MT41K256M16HA125E_INVERT_CLKOUT		0x0 +#define MT41K256M16HA125E_RD_DQS		0x3C +#define MT41K256M16HA125E_WR_DQS		0x45 +#define MT41K256M16HA125E_PHY_WR_DATA		0x7F +#define MT41K256M16HA125E_PHY_FIFO_WE		0x9B +#define MT41K256M16HA125E_IOCTRL_VALUE		0x18B +  /* Micron MT41J512M8RH-125 on EVM v1.5 */  #define MT41J512M8RH125_EMIF_READ_LATENCY	0x06  #define MT41J512M8RH125_EMIF_TIM1		0x0888A39B @@ -100,19 +118,64 @@  #define MT41J512M8RH125_IOCTRL_VALUE		0x18B  /** + * Configure DMM + */ +void config_dmm(const struct dmm_lisa_map_regs *regs); + +/**   * Configure SDRAM   */ -void config_sdram(const struct emif_regs *regs); +void config_sdram(const struct emif_regs *regs, int nr);  /**   * Set SDRAM timings   */ -void set_sdram_timings(const struct emif_regs *regs); +void set_sdram_timings(const struct emif_regs *regs, int nr);  /**   * Configure DDR PHY   */ -void config_ddr_phy(const struct emif_regs *regs); +void config_ddr_phy(const struct emif_regs *regs, int nr); + +struct ddr_cmd_regs { +	unsigned int resv0[7]; +	unsigned int cm0csratio;	/* offset 0x01C */ +	unsigned int resv1[2]; +	unsigned int cm0dldiff;		/* offset 0x028 */ +	unsigned int cm0iclkout;	/* offset 0x02C */ +	unsigned int resv2[8]; +	unsigned int cm1csratio;	/* offset 0x050 */ +	unsigned int resv3[2]; +	unsigned int cm1dldiff;		/* offset 0x05C */ +	unsigned int cm1iclkout;	/* offset 0x060 */ +	unsigned int resv4[8]; +	unsigned int cm2csratio;	/* offset 0x084 */ +	unsigned int resv5[2]; +	unsigned int cm2dldiff;		/* offset 0x090 */ +	unsigned int cm2iclkout;	/* offset 0x094 */ +	unsigned int resv6[3]; +}; + +struct ddr_data_regs { +	unsigned int dt0rdsratio0;	/* offset 0x0C8 */ +	unsigned int resv1[4]; +	unsigned int dt0wdsratio0;	/* offset 0x0DC */ +	unsigned int resv2[4]; +	unsigned int dt0wiratio0;	/* offset 0x0F0 */ +	unsigned int resv3; +	unsigned int dt0wimode0;	/* offset 0x0F8 */ +	unsigned int dt0giratio0;	/* offset 0x0FC */ +	unsigned int resv4; +	unsigned int dt0gimode0;	/* offset 0x104 */ +	unsigned int dt0fwsratio0;	/* offset 0x108 */ +	unsigned int resv5[4]; +	unsigned int dt0dqoffset;	/* offset 0x11C */ +	unsigned int dt0wrsratio0;	/* offset 0x120 */ +	unsigned int resv6[4]; +	unsigned int dt0rdelays0;	/* offset 0x134 */ +	unsigned int dt0dldiff0;	/* offset 0x138 */ +	unsigned int resv7[12]; +};  /**   * This structure represents the DDR registers on AM33XX devices. @@ -193,12 +256,12 @@ struct ddr_data {  /**   * Configure DDR CMD control registers   */ -void config_cmd_ctrl(const struct cmd_control *cmd); +void config_cmd_ctrl(const struct cmd_control *cmd, int nr);  /**   * Configure DDR DATA registers   */ -void config_ddr_data(int data_macrono, const struct ddr_data *data); +void config_ddr_data(const struct ddr_data *data, int nr);  /**   * This structure represents the DDR io control on AM33XX devices. @@ -226,6 +289,6 @@ struct ddr_ctrl {  void config_ddr(unsigned int pll, unsigned int ioctrl,  		const struct ddr_data *data, const struct cmd_control *ctrl, -		const struct emif_regs *regs); +		const struct emif_regs *regs, int nr);  #endif  /* _DDR_DEFS_H */ diff --git a/arch/arm/include/asm/arch-am33xx/hardware.h b/arch/arm/include/asm/arch-am33xx/hardware.h index 6dd329690..5a27f9cf5 100644 --- a/arch/arm/include/asm/arch-am33xx/hardware.h +++ b/arch/arm/include/asm/arch-am33xx/hardware.h @@ -3,7 +3,7 @@   *   * hardware specific header   * - * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ + * Copyright (C) 2013, Texas Instruments, Incorporated - http://www.ti.com/   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License as @@ -19,10 +19,17 @@  #ifndef __AM33XX_HARDWARE_H  #define __AM33XX_HARDWARE_H +#include <config.h>  #include <asm/arch/omap.h> +#ifdef CONFIG_AM33XX +#include <asm/arch/hardware_am33xx.h> +#elif defined(CONFIG_TI814X) +#include <asm/arch/hardware_ti814x.h> +#endif -/* Module base addresses */ -#define UART0_BASE			0x44E09000 +/* + * Common hardware definitions + */  /* DM Timer base addresses */  #define DM_TIMER0_BASE			0x4802C000 @@ -37,21 +44,10 @@  /* GPIO Base address */  #define GPIO0_BASE			0x48032000  #define GPIO1_BASE			0x4804C000 -#define GPIO2_BASE			0x481AC000  /* BCH Error Location Module */  #define ELM_BASE			0x48080000 -/* Watchdog Timer */ -#define WDT_BASE			0x44E35000 - -/* Control Module Base Address */ -#define CTRL_BASE			0x44E10000 -#define CTRL_DEVICE_BASE		0x44E10600 - -/* PRCM Base Address */ -#define PRCM_BASE			0x44E00000 -  /* EMIF Base address */  #define EMIF4_0_CFG_BASE		0x4C000000  #define EMIF4_1_CFG_BASE		0x4D000000 @@ -66,13 +62,13 @@  #define PRM_DEVICE			0x44E00F00  /* VTP Base address */ -#define VTP0_CTRL_ADDR			0x44E10E0C +#define VTP1_CTRL_ADDR			0x48140E10  /* DDR Base address */  #define DDR_CTRL_ADDR			0x44E10E04  #define DDR_CONTROL_BASE_ADDR		0x44E11404 -#define DDR_PHY_BASE_ADDR		0x44E12000 -#define DDR_PHY_BASE_ADDR2		0x44E120A4 +#define DDR_PHY_CMD_ADDR2		0x47C0C800 +#define DDR_PHY_DATA_ADDR2		0x47C0C8C8  /* UART */  #define DEFAULT_UART_BASE		UART0_BASE @@ -84,14 +80,10 @@  #define GPMC_BASE			0x50000000  /* CPSW Config space */ -#define AM335X_CPSW_BASE		0x4A100000 -#define AM335X_CPSW_MDIO_BASE		0x4A101000 - -/* RTC base address */ -#define AM335X_RTC_BASE			0x44E3E000 +#define CPSW_BASE			0x4A100000  /* OTG */ -#define AM335X_USB0_OTG_BASE		0x47401000 -#define AM335X_USB1_OTG_BASE		0x47401800 +#define USB0_OTG_BASE			0x47401000 +#define USB1_OTG_BASE			0x47401800  #endif /* __AM33XX_HARDWARE_H */ diff --git a/arch/arm/include/asm/arch-am33xx/hardware_am33xx.h b/arch/arm/include/asm/arch-am33xx/hardware_am33xx.h new file mode 100644 index 000000000..fa02f195f --- /dev/null +++ b/arch/arm/include/asm/arch-am33xx/hardware_am33xx.h @@ -0,0 +1,54 @@ +/* + * hardware_am33xx.h + * + * AM33xx hardware specific header + * + * Copyright (C) 2013, Texas Instruments, Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * 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. + */ + +#ifndef __AM33XX_HARDWARE_AM33XX_H +#define __AM33XX_HARDWARE_AM33XX_H + +/* Module base addresses */ + +/* UART Base Address */ +#define UART0_BASE			0x44E09000 + +/* GPIO Base address */ +#define GPIO2_BASE			0x481AC000 + +/* Watchdog Timer */ +#define WDT_BASE			0x44E35000 + +/* Control Module Base Address */ +#define CTRL_BASE			0x44E10000 +#define CTRL_DEVICE_BASE		0x44E10600 + +/* PRCM Base Address */ +#define PRCM_BASE			0x44E00000 + +/* VTP Base address */ +#define VTP0_CTRL_ADDR			0x44E10E0C + +/* DDR Base address */ +#define DDR_PHY_CMD_ADDR		0x44E12000 +#define DDR_PHY_DATA_ADDR		0x44E120C8 +#define DDR_DATA_REGS_NR		2 + +/* CPSW Config space */ +#define CPSW_MDIO_BASE			0x4A101000 + +/* RTC base address */ +#define RTC_BASE			0x44E3E000 + +#endif /* __AM33XX_HARDWARE_AM33XX_H */ diff --git a/arch/arm/include/asm/arch-am33xx/hardware_ti814x.h b/arch/arm/include/asm/arch-am33xx/hardware_ti814x.h new file mode 100644 index 000000000..a950ac3c1 --- /dev/null +++ b/arch/arm/include/asm/arch-am33xx/hardware_ti814x.h @@ -0,0 +1,53 @@ +/* + * hardware_ti814x.h + * + * TI814x hardware specific header + * + * Copyright (C) 2013, Texas Instruments, Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * 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. + */ + +#ifndef __AM33XX_HARDWARE_TI814X_H +#define __AM33XX_HARDWARE_TI814X_H + +/* Module base addresses */ + +/* UART Base Address */ +#define UART0_BASE			0x48020000 + +/* Watchdog Timer */ +#define WDT_BASE			0x481C7000 + +/* Control Module Base Address */ +#define CTRL_BASE			0x48140000 + +/* PRCM Base Address */ +#define PRCM_BASE			0x48180000 + +/* PLL Subsystem Base Address */ +#define PLL_SUBSYS_BASE			0x481C5000 + +/* VTP Base address */ +#define VTP0_CTRL_ADDR			0x48140E0C + +/* DDR Base address */ +#define DDR_PHY_CMD_ADDR		0x47C0C400 +#define DDR_PHY_DATA_ADDR		0x47C0C4C8 +#define DDR_DATA_REGS_NR		4 + +/* CPSW Config space */ +#define CPSW_MDIO_BASE			0x4A100800 + +/* RTC base address */ +#define RTC_BASE			0x480C0000 + +#endif /* __AM33XX_HARDWARE_TI814X_H */ diff --git a/arch/arm/include/asm/arch-am33xx/mmc_host_def.h b/arch/arm/include/asm/arch-am33xx/mmc_host_def.h index 33c9c8389..51ba79190 100644 --- a/arch/arm/include/asm/arch-am33xx/mmc_host_def.h +++ b/arch/arm/include/asm/arch-am33xx/mmc_host_def.h @@ -24,4 +24,9 @@  #define OMAP_HSMMC1_BASE		0x48060100  #define OMAP_HSMMC2_BASE		0x481D8100 +#if defined(CONFIG_TI814X) +#undef MMC_CLOCK_REFERENCE +#define MMC_CLOCK_REFERENCE	192 /* MHz */ +#endif +  #endif /* MMC_HOST_DEF_H */ diff --git a/arch/arm/include/asm/arch-am33xx/mux.h b/arch/arm/include/asm/arch-am33xx/mux.h index 460ac1c02..1c6b65f4a 100644 --- a/arch/arm/include/asm/arch-am33xx/mux.h +++ b/arch/arm/include/asm/arch-am33xx/mux.h @@ -1,7 +1,7 @@  /*   * mux.h   * - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License as @@ -19,234 +19,15 @@  #include <common.h>  #include <asm/io.h> -#define MUX_CFG(value, offset)	\ -	__raw_writel(value, (CTRL_BASE + offset)); - -/* PAD Control Fields */ -#define SLEWCTRL	(0x1 << 6) -#define RXACTIVE	(0x1 << 5) -#define PULLDOWN_EN	(0x0 << 4) /* Pull Down Selection */ -#define PULLUP_EN	(0x1 << 4) /* Pull Up Selection */ -#define PULLUDEN	(0x0 << 3) /* Pull up enabled */ -#define PULLUDDIS	(0x1 << 3) /* Pull up disabled */ -#define MODE(val)	val	/* used for Readability */ - -/* - * PAD CONTROL OFFSETS - * Field names corresponds to the pad signal name - */ -struct pad_signals { -	int gpmc_ad0; -	int gpmc_ad1; -	int gpmc_ad2; -	int gpmc_ad3; -	int gpmc_ad4; -	int gpmc_ad5; -	int gpmc_ad6; -	int gpmc_ad7; -	int gpmc_ad8; -	int gpmc_ad9; -	int gpmc_ad10; -	int gpmc_ad11; -	int gpmc_ad12; -	int gpmc_ad13; -	int gpmc_ad14; -	int gpmc_ad15; -	int gpmc_a0; -	int gpmc_a1; -	int gpmc_a2; -	int gpmc_a3; -	int gpmc_a4; -	int gpmc_a5; -	int gpmc_a6; -	int gpmc_a7; -	int gpmc_a8; -	int gpmc_a9; -	int gpmc_a10; -	int gpmc_a11; -	int gpmc_wait0; -	int gpmc_wpn; -	int gpmc_be1n; -	int gpmc_csn0; -	int gpmc_csn1; -	int gpmc_csn2; -	int gpmc_csn3; -	int gpmc_clk; -	int gpmc_advn_ale; -	int gpmc_oen_ren; -	int gpmc_wen; -	int gpmc_be0n_cle; -	int lcd_data0; -	int lcd_data1; -	int lcd_data2; -	int lcd_data3; -	int lcd_data4; -	int lcd_data5; -	int lcd_data6; -	int lcd_data7; -	int lcd_data8; -	int lcd_data9; -	int lcd_data10; -	int lcd_data11; -	int lcd_data12; -	int lcd_data13; -	int lcd_data14; -	int lcd_data15; -	int lcd_vsync; -	int lcd_hsync; -	int lcd_pclk; -	int lcd_ac_bias_en; -	int mmc0_dat3; -	int mmc0_dat2; -	int mmc0_dat1; -	int mmc0_dat0; -	int mmc0_clk; -	int mmc0_cmd; -	int mii1_col; -	int mii1_crs; -	int mii1_rxerr; -	int mii1_txen; -	int mii1_rxdv; -	int mii1_txd3; -	int mii1_txd2; -	int mii1_txd1; -	int mii1_txd0; -	int mii1_txclk; -	int mii1_rxclk; -	int mii1_rxd3; -	int mii1_rxd2; -	int mii1_rxd1; -	int mii1_rxd0; -	int rmii1_refclk; -	int mdio_data; -	int mdio_clk; -	int spi0_sclk; -	int spi0_d0; -	int spi0_d1; -	int spi0_cs0; -	int spi0_cs1; -	int ecap0_in_pwm0_out; -	int uart0_ctsn; -	int uart0_rtsn; -	int uart0_rxd; -	int uart0_txd; -	int uart1_ctsn; -	int uart1_rtsn; -	int uart1_rxd; -	int uart1_txd; -	int i2c0_sda; -	int i2c0_scl; -	int mcasp0_aclkx; -	int mcasp0_fsx; -	int mcasp0_axr0; -	int mcasp0_ahclkr; -	int mcasp0_aclkr; -	int mcasp0_fsr; -	int mcasp0_axr1; -	int mcasp0_ahclkx; -	int xdma_event_intr0; -	int xdma_event_intr1; -	int nresetin_out; -	int porz; -	int nnmi; -	int osc0_in; -	int osc0_out; -	int rsvd1; -	int tms; -	int tdi; -	int tdo; -	int tck; -	int ntrst; -	int emu0; -	int emu1; -	int osc1_in; -	int osc1_out; -	int pmic_power_en; -	int rtc_porz; -	int rsvd2; -	int ext_wakeup; -	int enz_kaldo_1p8v; -	int usb0_dm; -	int usb0_dp; -	int usb0_ce; -	int usb0_id; -	int usb0_vbus; -	int usb0_drvvbus; -	int usb1_dm; -	int usb1_dp; -	int usb1_ce; -	int usb1_id; -	int usb1_vbus; -	int usb1_drvvbus; -	int ddr_resetn; -	int ddr_csn0; -	int ddr_cke; -	int ddr_ck; -	int ddr_nck; -	int ddr_casn; -	int ddr_rasn; -	int ddr_wen; -	int ddr_ba0; -	int ddr_ba1; -	int ddr_ba2; -	int ddr_a0; -	int ddr_a1; -	int ddr_a2; -	int ddr_a3; -	int ddr_a4; -	int ddr_a5; -	int ddr_a6; -	int ddr_a7; -	int ddr_a8; -	int ddr_a9; -	int ddr_a10; -	int ddr_a11; -	int ddr_a12; -	int ddr_a13; -	int ddr_a14; -	int ddr_a15; -	int ddr_odt; -	int ddr_d0; -	int ddr_d1; -	int ddr_d2; -	int ddr_d3; -	int ddr_d4; -	int ddr_d5; -	int ddr_d6; -	int ddr_d7; -	int ddr_d8; -	int ddr_d9; -	int ddr_d10; -	int ddr_d11; -	int ddr_d12; -	int ddr_d13; -	int ddr_d14; -	int ddr_d15; -	int ddr_dqm0; -	int ddr_dqm1; -	int ddr_dqs0; -	int ddr_dqsn0; -	int ddr_dqs1; -	int ddr_dqsn1; -	int ddr_vref; -	int ddr_vtp; -	int ddr_strben0; -	int ddr_strben1; -	int ain7; -	int ain6; -	int ain5; -	int ain4; -	int ain3; -	int ain2; -	int ain1; -	int ain0; -	int vrefp; -	int vrefn; -}; +#ifdef CONFIG_AM33XX +#include <asm/arch/mux_am33xx.h> +#elif defined(CONFIG_TI814X) +#include <asm/arch/mux_ti814x.h> +#endif  struct module_pin_mux {  	short reg_offset; -	unsigned char val; +	unsigned int val;  };  /* Pad control register offset */ @@ -259,4 +40,4 @@ struct module_pin_mux {   */  void configure_module_pin_mux(struct module_pin_mux *mod_pin_mux); -#endif +#endif /* endif _MUX_H */ diff --git a/arch/arm/include/asm/arch-am33xx/mux_am33xx.h b/arch/arm/include/asm/arch-am33xx/mux_am33xx.h new file mode 100644 index 000000000..d5cab3e08 --- /dev/null +++ b/arch/arm/include/asm/arch-am33xx/mux_am33xx.h @@ -0,0 +1,247 @@ +/* + * mux_am33xx.h + * + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _MUX_AM33XX_H_ +#define _MUX_AM33XX_H_ + +#include <common.h> +#include <asm/io.h> + +#define MUX_CFG(value, offset)	\ +	__raw_writel(value, (CTRL_BASE + offset)); + +/* PAD Control Fields */ +#define SLEWCTRL	(0x1 << 6) +#define RXACTIVE	(0x1 << 5) +#define PULLDOWN_EN	(0x0 << 4) /* Pull Down Selection */ +#define PULLUP_EN	(0x1 << 4) /* Pull Up Selection */ +#define PULLUDEN	(0x0 << 3) /* Pull up enabled */ +#define PULLUDDIS	(0x1 << 3) /* Pull up disabled */ +#define MODE(val)	val	/* used for Readability */ + +/* + * PAD CONTROL OFFSETS + * Field names corresponds to the pad signal name + */ +struct pad_signals { +	int gpmc_ad0; +	int gpmc_ad1; +	int gpmc_ad2; +	int gpmc_ad3; +	int gpmc_ad4; +	int gpmc_ad5; +	int gpmc_ad6; +	int gpmc_ad7; +	int gpmc_ad8; +	int gpmc_ad9; +	int gpmc_ad10; +	int gpmc_ad11; +	int gpmc_ad12; +	int gpmc_ad13; +	int gpmc_ad14; +	int gpmc_ad15; +	int gpmc_a0; +	int gpmc_a1; +	int gpmc_a2; +	int gpmc_a3; +	int gpmc_a4; +	int gpmc_a5; +	int gpmc_a6; +	int gpmc_a7; +	int gpmc_a8; +	int gpmc_a9; +	int gpmc_a10; +	int gpmc_a11; +	int gpmc_wait0; +	int gpmc_wpn; +	int gpmc_be1n; +	int gpmc_csn0; +	int gpmc_csn1; +	int gpmc_csn2; +	int gpmc_csn3; +	int gpmc_clk; +	int gpmc_advn_ale; +	int gpmc_oen_ren; +	int gpmc_wen; +	int gpmc_be0n_cle; +	int lcd_data0; +	int lcd_data1; +	int lcd_data2; +	int lcd_data3; +	int lcd_data4; +	int lcd_data5; +	int lcd_data6; +	int lcd_data7; +	int lcd_data8; +	int lcd_data9; +	int lcd_data10; +	int lcd_data11; +	int lcd_data12; +	int lcd_data13; +	int lcd_data14; +	int lcd_data15; +	int lcd_vsync; +	int lcd_hsync; +	int lcd_pclk; +	int lcd_ac_bias_en; +	int mmc0_dat3; +	int mmc0_dat2; +	int mmc0_dat1; +	int mmc0_dat0; +	int mmc0_clk; +	int mmc0_cmd; +	int mii1_col; +	int mii1_crs; +	int mii1_rxerr; +	int mii1_txen; +	int mii1_rxdv; +	int mii1_txd3; +	int mii1_txd2; +	int mii1_txd1; +	int mii1_txd0; +	int mii1_txclk; +	int mii1_rxclk; +	int mii1_rxd3; +	int mii1_rxd2; +	int mii1_rxd1; +	int mii1_rxd0; +	int rmii1_refclk; +	int mdio_data; +	int mdio_clk; +	int spi0_sclk; +	int spi0_d0; +	int spi0_d1; +	int spi0_cs0; +	int spi0_cs1; +	int ecap0_in_pwm0_out; +	int uart0_ctsn; +	int uart0_rtsn; +	int uart0_rxd; +	int uart0_txd; +	int uart1_ctsn; +	int uart1_rtsn; +	int uart1_rxd; +	int uart1_txd; +	int i2c0_sda; +	int i2c0_scl; +	int mcasp0_aclkx; +	int mcasp0_fsx; +	int mcasp0_axr0; +	int mcasp0_ahclkr; +	int mcasp0_aclkr; +	int mcasp0_fsr; +	int mcasp0_axr1; +	int mcasp0_ahclkx; +	int xdma_event_intr0; +	int xdma_event_intr1; +	int nresetin_out; +	int porz; +	int nnmi; +	int osc0_in; +	int osc0_out; +	int rsvd1; +	int tms; +	int tdi; +	int tdo; +	int tck; +	int ntrst; +	int emu0; +	int emu1; +	int osc1_in; +	int osc1_out; +	int pmic_power_en; +	int rtc_porz; +	int rsvd2; +	int ext_wakeup; +	int enz_kaldo_1p8v; +	int usb0_dm; +	int usb0_dp; +	int usb0_ce; +	int usb0_id; +	int usb0_vbus; +	int usb0_drvvbus; +	int usb1_dm; +	int usb1_dp; +	int usb1_ce; +	int usb1_id; +	int usb1_vbus; +	int usb1_drvvbus; +	int ddr_resetn; +	int ddr_csn0; +	int ddr_cke; +	int ddr_ck; +	int ddr_nck; +	int ddr_casn; +	int ddr_rasn; +	int ddr_wen; +	int ddr_ba0; +	int ddr_ba1; +	int ddr_ba2; +	int ddr_a0; +	int ddr_a1; +	int ddr_a2; +	int ddr_a3; +	int ddr_a4; +	int ddr_a5; +	int ddr_a6; +	int ddr_a7; +	int ddr_a8; +	int ddr_a9; +	int ddr_a10; +	int ddr_a11; +	int ddr_a12; +	int ddr_a13; +	int ddr_a14; +	int ddr_a15; +	int ddr_odt; +	int ddr_d0; +	int ddr_d1; +	int ddr_d2; +	int ddr_d3; +	int ddr_d4; +	int ddr_d5; +	int ddr_d6; +	int ddr_d7; +	int ddr_d8; +	int ddr_d9; +	int ddr_d10; +	int ddr_d11; +	int ddr_d12; +	int ddr_d13; +	int ddr_d14; +	int ddr_d15; +	int ddr_dqm0; +	int ddr_dqm1; +	int ddr_dqs0; +	int ddr_dqsn0; +	int ddr_dqs1; +	int ddr_dqsn1; +	int ddr_vref; +	int ddr_vtp; +	int ddr_strben0; +	int ddr_strben1; +	int ain7; +	int ain6; +	int ain5; +	int ain4; +	int ain3; +	int ain2; +	int ain1; +	int ain0; +	int vrefp; +	int vrefn; +}; + +#endif /* endif _MUX_AM33XX_H_ */ diff --git a/arch/arm/include/asm/arch-am33xx/mux_ti814x.h b/arch/arm/include/asm/arch-am33xx/mux_ti814x.h new file mode 100644 index 000000000..a26e5038f --- /dev/null +++ b/arch/arm/include/asm/arch-am33xx/mux_ti814x.h @@ -0,0 +1,311 @@ +/* + * mux_ti814x.h + * + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _MUX_TI814X_H_ +#define _MUX_TI814X_H_ + +/* PAD Control Fields */ +#define PINCNTL_RSV_MSK	(0x3 << 18) /* Reserved bitmask */ +#define PULLUP_EN	(0x1 << 17) /* Pull UP Selection */ +#define PULLUDEN	(0x0 << 16) /* Pull up enabled */ +#define PULLUDDIS	(0x1 << 16) /* Pull up disabled */ +#define MODE(val)	val	/* used for Readability */ + +#define MUX_CFG(value, offset)				\ +{							\ +	int tmp;					\ +	tmp = __raw_readl(CTRL_BASE + offset);		\ +	tmp &= PINCNTL_RSV_MSK;				\ +	__raw_writel(tmp | value, (CTRL_BASE + offset));\ +} + +/* + * PAD CONTROL OFFSETS + * Field names corresponds to the pad signal name + */ +struct pad_signals { +	int pincntl1; +	int pincntl2; +	int pincntl3; +	int pincntl4; +	int pincntl5; +	int pincntl6; +	int pincntl7; +	int pincntl8; +	int pincntl9; +	int pincntl10; +	int pincntl11; +	int pincntl12; +	int pincntl13; +	int pincntl14; +	int pincntl15; +	int pincntl16; +	int pincntl17; +	int pincntl18; +	int pincntl19; +	int pincntl20; +	int pincntl21; +	int pincntl22; +	int pincntl23; +	int pincntl24; +	int pincntl25; +	int pincntl26; +	int pincntl27; +	int pincntl28; +	int pincntl29; +	int pincntl30; +	int pincntl31; +	int pincntl32; +	int pincntl33; +	int pincntl34; +	int pincntl35; +	int pincntl36; +	int pincntl37; +	int pincntl38; +	int pincntl39; +	int pincntl40; +	int pincntl41; +	int pincntl42; +	int pincntl43; +	int pincntl44; +	int pincntl45; +	int pincntl46; +	int pincntl47; +	int pincntl48; +	int pincntl49; +	int pincntl50; +	int pincntl51; +	int pincntl52; +	int pincntl53; +	int pincntl54; +	int pincntl55; +	int pincntl56; +	int pincntl57; +	int pincntl58; +	int pincntl59; +	int pincntl60; +	int pincntl61; +	int pincntl62; +	int pincntl63; +	int pincntl64; +	int pincntl65; +	int pincntl66; +	int pincntl67; +	int pincntl68; +	int pincntl69; +	int pincntl70; +	int pincntl71; +	int pincntl72; +	int pincntl73; +	int pincntl74; +	int pincntl75; +	int pincntl76; +	int pincntl77; +	int pincntl78; +	int pincntl79; +	int pincntl80; +	int pincntl81; +	int pincntl82; +	int pincntl83; +	int pincntl84; +	int pincntl85; +	int pincntl86; +	int pincntl87; +	int pincntl88; +	int pincntl89; +	int pincntl90; +	int pincntl91; +	int pincntl92; +	int pincntl93; +	int pincntl94; +	int pincntl95; +	int pincntl96; +	int pincntl97; +	int pincntl98; +	int pincntl99; +	int pincntl100; +	int pincntl101; +	int pincntl102; +	int pincntl103; +	int pincntl104; +	int pincntl105; +	int pincntl106; +	int pincntl107; +	int pincntl108; +	int pincntl109; +	int pincntl110; +	int pincntl111; +	int pincntl112; +	int pincntl113; +	int pincntl114; +	int pincntl115; +	int pincntl116; +	int pincntl117; +	int pincntl118; +	int pincntl119; +	int pincntl120; +	int pincntl121; +	int pincntl122; +	int pincntl123; +	int pincntl124; +	int pincntl125; +	int pincntl126; +	int pincntl127; +	int pincntl128; +	int pincntl129; +	int pincntl130; +	int pincntl131; +	int pincntl132; +	int pincntl133; +	int pincntl134; +	int pincntl135; +	int pincntl136; +	int pincntl137; +	int pincntl138; +	int pincntl139; +	int pincntl140; +	int pincntl141; +	int pincntl142; +	int pincntl143; +	int pincntl144; +	int pincntl145; +	int pincntl146; +	int pincntl147; +	int pincntl148; +	int pincntl149; +	int pincntl150; +	int pincntl151; +	int pincntl152; +	int pincntl153; +	int pincntl154; +	int pincntl155; +	int pincntl156; +	int pincntl157; +	int pincntl158; +	int pincntl159; +	int pincntl160; +	int pincntl161; +	int pincntl162; +	int pincntl163; +	int pincntl164; +	int pincntl165; +	int pincntl166; +	int pincntl167; +	int pincntl168; +	int pincntl169; +	int pincntl170; +	int pincntl171; +	int pincntl172; +	int pincntl173; +	int pincntl174; +	int pincntl175; +	int pincntl176; +	int pincntl177; +	int pincntl178; +	int pincntl179; +	int pincntl180; +	int pincntl181; +	int pincntl182; +	int pincntl183; +	int pincntl184; +	int pincntl185; +	int pincntl186; +	int pincntl187; +	int pincntl188; +	int pincntl189; +	int pincntl190; +	int pincntl191; +	int pincntl192; +	int pincntl193; +	int pincntl194; +	int pincntl195; +	int pincntl196; +	int pincntl197; +	int pincntl198; +	int pincntl199; +	int pincntl200; +	int pincntl201; +	int pincntl202; +	int pincntl203; +	int pincntl204; +	int pincntl205; +	int pincntl206; +	int pincntl207; +	int pincntl208; +	int pincntl209; +	int pincntl210; +	int pincntl211; +	int pincntl212; +	int pincntl213; +	int pincntl214; +	int pincntl215; +	int pincntl216; +	int pincntl217; +	int pincntl218; +	int pincntl219; +	int pincntl220; +	int pincntl221; +	int pincntl222; +	int pincntl223; +	int pincntl224; +	int pincntl225; +	int pincntl226; +	int pincntl227; +	int pincntl228; +	int pincntl229; +	int pincntl230; +	int pincntl231; +	int pincntl232; +	int pincntl233; +	int pincntl234; +	int pincntl235; +	int pincntl236; +	int pincntl237; +	int pincntl238; +	int pincntl239; +	int pincntl240; +	int pincntl241; +	int pincntl242; +	int pincntl243; +	int pincntl244; +	int pincntl245; +	int pincntl246; +	int pincntl247; +	int pincntl248; +	int pincntl249; +	int pincntl250; +	int pincntl251; +	int pincntl252; +	int pincntl253; +	int pincntl254; +	int pincntl255; +	int pincntl256; +	int pincntl257; +	int pincntl258; +	int pincntl259; +	int pincntl260; +	int pincntl261; +	int pincntl262; +	int pincntl263; +	int pincntl264; +	int pincntl265; +	int pincntl266; +	int pincntl267; +	int pincntl268; +	int pincntl269; +	int pincntl270; +}; + +#endif /* endif _MUX_TI814X_H_ */ diff --git a/arch/arm/include/asm/arch-am33xx/omap.h b/arch/arm/include/asm/arch-am33xx/omap.h index 850f8a551..d28f9a83f 100644 --- a/arch/arm/include/asm/arch-am33xx/omap.h +++ b/arch/arm/include/asm/arch-am33xx/omap.h @@ -28,8 +28,13 @@   * Non-secure RAM starts at 0x40300000 for GP devices. But we keep SRAM_BASE   * at 0x40304000(EMU base) so that our code works for both EMU and GP   */ +#ifdef CONFIG_AM33XX  #define NON_SECURE_SRAM_START	0x40304000  #define NON_SECURE_SRAM_END	0x4030E000 +#elif defined(CONFIG_TI814X) +#define NON_SECURE_SRAM_START	0x40300000 +#define NON_SECURE_SRAM_END	0x40320000 +#endif  /* ROM code defines */  /* Boot device */ diff --git a/arch/arm/include/asm/arch-am33xx/spl.h b/arch/arm/include/asm/arch-am33xx/spl.h index e961ce057..f60b08636 100644 --- a/arch/arm/include/asm/arch-am33xx/spl.h +++ b/arch/arm/include/asm/arch-am33xx/spl.h @@ -25,8 +25,13 @@  #define BOOT_DEVICE_XIP       	2  #define BOOT_DEVICE_NAND	5 +#ifdef CONFIG_AM33XX  #define BOOT_DEVICE_MMC1	8  #define BOOT_DEVICE_MMC2	9	/* eMMC or daughter card */ +#elif defined(CONFIG_TI814X) +#define BOOT_DEVICE_MMC1	9 +#define BOOT_DEVICE_MMC2	8	/* ROM only supports 2nd instance */ +#endif  #define BOOT_DEVICE_SPI		11  #define BOOT_DEVICE_UART	65  #define BOOT_DEVICE_USBETH	68 diff --git a/arch/arm/include/asm/arch-am33xx/sys_proto.h b/arch/arm/include/asm/arch-am33xx/sys_proto.h index 97ab60d1b..0910a9451 100644 --- a/arch/arm/include/asm/arch-am33xx/sys_proto.h +++ b/arch/arm/include/asm/arch-am33xx/sys_proto.h @@ -34,6 +34,8 @@ void setup_clocks_for_console(void);  void ddr_pll_config(unsigned int ddrpll_M);  void sdelay(unsigned long); + +struct gpmc_cs;  void gpmc_init(void);  void enable_gpmc_cs_config(const u32 *gpmc_config, struct gpmc_cs *cs, u32 base,  			u32 size); diff --git a/board/cm_t35/cm_t35.c b/board/cm_t35/cm_t35.c index e0e8235d7..629ce4a50 100644 --- a/board/cm_t35/cm_t35.c +++ b/board/cm_t35/cm_t35.c @@ -34,7 +34,9 @@  #include <i2c.h>  #include <usb.h>  #include <mmc.h> +#include <nand.h>  #include <twl4030.h> +#include <bmp_layout.h>  #include <linux/compiler.h>  #include <asm/io.h> @@ -76,6 +78,65 @@ static u32 gpmc_nand_config[GPMC_MAX_REG] = {  	0,  }; +#ifdef CONFIG_LCD +#ifdef CONFIG_CMD_NAND +static int splash_load_from_nand(u32 bmp_load_addr) +{ +	struct bmp_header *bmp_hdr; +	int res, splash_screen_nand_offset = 0x100000; +	size_t bmp_size, bmp_header_size = sizeof(struct bmp_header); + +	if (bmp_load_addr + bmp_header_size >= gd->start_addr_sp) +		goto splash_address_too_high; + +	res = nand_read_skip_bad(&nand_info[nand_curr_device], +			splash_screen_nand_offset, &bmp_header_size, +			(u_char *)bmp_load_addr); +	if (res < 0) +		return res; + +	bmp_hdr = (struct bmp_header *)bmp_load_addr; +	bmp_size = le32_to_cpu(bmp_hdr->file_size); + +	if (bmp_load_addr + bmp_size >= gd->start_addr_sp) +		goto splash_address_too_high; + +	return nand_read_skip_bad(&nand_info[nand_curr_device], +			splash_screen_nand_offset, &bmp_size, +			(u_char *)bmp_load_addr); + +splash_address_too_high: +	printf("Error: splashimage address too high. Data overwrites U-Boot " +		"and/or placed beyond DRAM boundaries.\n"); + +	return -1; +} +#else +static inline int splash_load_from_nand(void) +{ +	return -1; +} +#endif /* CONFIG_CMD_NAND */ + +int board_splash_screen_prepare(void) +{ +	char *env_splashimage_value; +	u32 bmp_load_addr; + +	env_splashimage_value = getenv("splashimage"); +	if (env_splashimage_value == NULL) +		return -1; + +	bmp_load_addr = simple_strtoul(env_splashimage_value, 0, 16); +	if (bmp_load_addr == 0) { +		printf("Error: bad splashimage address specified\n"); +		return -1; +	} + +	return splash_load_from_nand(bmp_load_addr); +} +#endif /* CONFIG_LCD */ +  /*   * Routine: board_init   * Description: hardware init. diff --git a/board/phytec/pcm051/board.c b/board/phytec/pcm051/board.c index 55bc01871..1708ac2ac 100644 --- a/board/phytec/pcm051/board.c +++ b/board/phytec/pcm051/board.c @@ -61,7 +61,7 @@ static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;  static void rtc32k_enable(void)  { -	struct rtc_regs *rtc = (struct rtc_regs *)AM335X_RTC_BASE; +	struct rtc_regs *rtc = (struct rtc_regs *)RTC_BASE;  	/*  	 * Unlock the RTC's registers.  For more details please see the @@ -159,7 +159,7 @@ void s_init(void)  	enable_board_pin_mux();  	config_ddr(DDR_CLK_MHZ, MT41J256M8HX15E_IOCTRL_VALUE, &ddr3_data, -			&ddr3_cmd_ctrl_data, &ddr3_emif_reg_data); +			&ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0);  #endif  } @@ -199,8 +199,8 @@ static struct cpsw_slave_data cpsw_slaves[] = {  };  static struct cpsw_platform_data cpsw_data = { -	.mdio_base		= AM335X_CPSW_MDIO_BASE, -	.cpsw_base		= AM335X_CPSW_BASE, +	.mdio_base		= CPSW_MDIO_BASE, +	.cpsw_base		= CPSW_BASE,  	.mdio_div		= 0xff,  	.channels		= 8,  	.cpdma_reg_ofs		= 0x800, diff --git a/board/ti/am335x/board.c b/board/ti/am335x/board.c index f4b972b3e..12620bb69 100644 --- a/board/ti/am335x/board.c +++ b/board/ti/am335x/board.c @@ -134,7 +134,7 @@ static int read_eeprom(void)  static void rtc32k_enable(void)  { -	struct rtc_regs *rtc = (struct rtc_regs *)AM335X_RTC_BASE; +	struct rtc_regs *rtc = (struct rtc_regs *)RTC_BASE;  	/*  	 * Unlock the RTC's registers.  For more details please see the @@ -208,6 +208,14 @@ static const struct ddr_data ddr3_data = {  	.datadldiff0 = PHY_DLL_LOCK_DIFF,  }; +static const struct ddr_data ddr3_beagleblack_data = { +	.datardsratio0 = MT41K256M16HA125E_RD_DQS, +	.datawdsratio0 = MT41K256M16HA125E_WR_DQS, +	.datafwsratio0 = MT41K256M16HA125E_PHY_FIFO_WE, +	.datawrsratio0 = MT41K256M16HA125E_PHY_WR_DATA, +	.datadldiff0 = PHY_DLL_LOCK_DIFF, +}; +  static const struct ddr_data ddr3_evm_data = {  	.datardsratio0 = MT41J512M8RH125_RD_DQS,  	.datawdsratio0 = MT41J512M8RH125_WR_DQS, @@ -230,6 +238,20 @@ static const struct cmd_control ddr3_cmd_ctrl_data = {  	.cmd2iclkout = MT41J128MJT125_INVERT_CLKOUT,  }; +static const struct cmd_control ddr3_beagleblack_cmd_ctrl_data = { +	.cmd0csratio = MT41K256M16HA125E_RATIO, +	.cmd0dldiff = MT41K256M16HA125E_DLL_LOCK_DIFF, +	.cmd0iclkout = MT41K256M16HA125E_INVERT_CLKOUT, + +	.cmd1csratio = MT41K256M16HA125E_RATIO, +	.cmd1dldiff = MT41K256M16HA125E_DLL_LOCK_DIFF, +	.cmd1iclkout = MT41K256M16HA125E_INVERT_CLKOUT, + +	.cmd2csratio = MT41K256M16HA125E_RATIO, +	.cmd2dldiff = MT41K256M16HA125E_DLL_LOCK_DIFF, +	.cmd2iclkout = MT41K256M16HA125E_INVERT_CLKOUT, +}; +  static const struct cmd_control ddr3_evm_cmd_ctrl_data = {  	.cmd0csratio = MT41J512M8RH125_RATIO,  	.cmd0dldiff = MT41J512M8RH125_DLL_LOCK_DIFF, @@ -251,7 +273,18 @@ static struct emif_regs ddr3_emif_reg_data = {  	.sdram_tim2 = MT41J128MJT125_EMIF_TIM2,  	.sdram_tim3 = MT41J128MJT125_EMIF_TIM3,  	.zq_config = MT41J128MJT125_ZQ_CFG, -	.emif_ddr_phy_ctlr_1 = MT41J128MJT125_EMIF_READ_LATENCY, +	.emif_ddr_phy_ctlr_1 = MT41J128MJT125_EMIF_READ_LATENCY | +				PHY_EN_DYN_PWRDN, +}; + +static struct emif_regs ddr3_beagleblack_emif_reg_data = { +	.sdram_config = MT41K256M16HA125E_EMIF_SDCFG, +	.ref_ctrl = MT41K256M16HA125E_EMIF_SDREF, +	.sdram_tim1 = MT41K256M16HA125E_EMIF_TIM1, +	.sdram_tim2 = MT41K256M16HA125E_EMIF_TIM2, +	.sdram_tim3 = MT41K256M16HA125E_EMIF_TIM3, +	.zq_config = MT41K256M16HA125E_ZQ_CFG, +	.emif_ddr_phy_ctlr_1 = MT41K256M16HA125E_EMIF_READ_LATENCY,  };  static struct emif_regs ddr3_evm_emif_reg_data = { @@ -261,7 +294,8 @@ static struct emif_regs ddr3_evm_emif_reg_data = {  	.sdram_tim2 = MT41J512M8RH125_EMIF_TIM2,  	.sdram_tim3 = MT41J512M8RH125_EMIF_TIM3,  	.zq_config = MT41J512M8RH125_ZQ_CFG, -	.emif_ddr_phy_ctlr_1 = MT41J512M8RH125_EMIF_READ_LATENCY, +	.emif_ddr_phy_ctlr_1 = MT41J512M8RH125_EMIF_READ_LATENCY | +				PHY_EN_DYN_PWRDN,  };  #endif @@ -341,15 +375,20 @@ void s_init(void)  		gpio_direction_output(GPIO_DDR_VTT_EN, 1);  	} -	if (board_is_evm_sk() || board_is_bone_lt()) +	if (board_is_evm_sk())  		config_ddr(303, MT41J128MJT125_IOCTRL_VALUE, &ddr3_data, -			   &ddr3_cmd_ctrl_data, &ddr3_emif_reg_data); +			   &ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0); +	else if (board_is_bone_lt()) +		config_ddr(303, MT41K256M16HA125E_IOCTRL_VALUE, +			   &ddr3_beagleblack_data, +			   &ddr3_beagleblack_cmd_ctrl_data, +			   &ddr3_beagleblack_emif_reg_data, 0);  	else if (board_is_evm_15_or_later())  		config_ddr(303, MT41J512M8RH125_IOCTRL_VALUE, &ddr3_evm_data, -			   &ddr3_evm_cmd_ctrl_data, &ddr3_evm_emif_reg_data); +			   &ddr3_evm_cmd_ctrl_data, &ddr3_evm_emif_reg_data, 0);  	else  		config_ddr(266, MT47H128M16RT25E_IOCTRL_VALUE, &ddr2_data, -			   &ddr2_cmd_ctrl_data, &ddr2_emif_reg_data); +			   &ddr2_cmd_ctrl_data, &ddr2_emif_reg_data, 0);  #endif  } @@ -412,8 +451,8 @@ static struct cpsw_slave_data cpsw_slaves[] = {  };  static struct cpsw_platform_data cpsw_data = { -	.mdio_base		= AM335X_CPSW_MDIO_BASE, -	.cpsw_base		= AM335X_CPSW_BASE, +	.mdio_base		= CPSW_MDIO_BASE, +	.cpsw_base		= CPSW_BASE,  	.mdio_div		= 0xff,  	.channels		= 8,  	.cpdma_reg_ofs		= 0x800, diff --git a/board/ti/ti814x/Makefile b/board/ti/ti814x/Makefile new file mode 100644 index 000000000..09d24222f --- /dev/null +++ b/board/ti/ti814x/Makefile @@ -0,0 +1,46 @@ +# +# Makefile +# +# Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed "as is" WITHOUT ANY WARRANTY of any +# kind, whether express or implied; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +ifdef CONFIG_SPL_BUILD +COBJS	:= mux.o +endif + +COBJS	+= evm.o +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(call cmd_link_o_target, $(OBJS) $(SOBJS)) + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/ti/ti814x/evm.c b/board/ti/ti814x/evm.c new file mode 100644 index 000000000..446e36b84 --- /dev/null +++ b/board/ti/ti814x/evm.c @@ -0,0 +1,198 @@ +/* + * evm.c + * + * Board functions for TI814x EVM + * + * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * 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. + */ + +#include <common.h> +#include <errno.h> +#include <spl.h> +#include <asm/arch/cpu.h> +#include <asm/arch/hardware.h> +#include <asm/arch/omap.h> +#include <asm/arch/ddr_defs.h> +#include <asm/arch/clock.h> +#include <asm/arch/gpio.h> +#include <asm/arch/mmc_host_def.h> +#include <asm/arch/sys_proto.h> +#include <asm/io.h> +#include <asm/emif.h> +#include <asm/gpio.h> +#include "evm.h" + +DECLARE_GLOBAL_DATA_PTR; + +#ifdef CONFIG_SPL_BUILD +static struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE; +static struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE; +#endif + +/* UART Defines */ +#ifdef CONFIG_SPL_BUILD +#define UART_RESET		(0x1 << 1) +#define UART_CLK_RUNNING_MASK	0x1 +#define UART_SMART_IDLE_EN	(0x1 << 0x3) + +static void rtc32k_enable(void) +{ +	struct rtc_regs *rtc = (struct rtc_regs *)RTC_BASE; + +	/* +	 * Unlock the RTC's registers.  For more details please see the +	 * RTC_SS section of the TRM.  In order to unlock we need to +	 * write these specific values (keys) in this order. +	 */ +	writel(0x83e70b13, &rtc->kick0r); +	writel(0x95a4f1e0, &rtc->kick1r); + +	/* Enable the RTC 32K OSC by setting bits 3 and 6. */ +	writel((1 << 3) | (1 << 6), &rtc->osc); +} + +static void uart_enable(void) +{ +	u32 regVal; + +	/* UART softreset */ +	regVal = readl(&uart_base->uartsyscfg); +	regVal |= UART_RESET; +	writel(regVal, &uart_base->uartsyscfg); +	while ((readl(&uart_base->uartsyssts) & +		UART_CLK_RUNNING_MASK) != UART_CLK_RUNNING_MASK) +		; + +	/* Disable smart idle */ +	regVal = readl(&uart_base->uartsyscfg); +	regVal |= UART_SMART_IDLE_EN; +	writel(regVal, &uart_base->uartsyscfg); +} + +static void wdt_disable(void) +{ +	writel(0xAAAA, &wdtimer->wdtwspr); +	while (readl(&wdtimer->wdtwwps) != 0x0) +		; +	writel(0x5555, &wdtimer->wdtwspr); +	while (readl(&wdtimer->wdtwwps) != 0x0) +		; +} + +static const struct cmd_control evm_ddr2_cctrl_data = { +	.cmd0csratio	= 0x80, +	.cmd0dldiff	= 0x04, +	.cmd0iclkout	= 0x00, + +	.cmd1csratio	= 0x80, +	.cmd1dldiff	= 0x04, +	.cmd1iclkout	= 0x00, + +	.cmd2csratio	= 0x80, +	.cmd2dldiff	= 0x04, +	.cmd2iclkout	= 0x00, +}; + +static const struct emif_regs evm_ddr2_emif0_regs = { +	.sdram_config			= 0x40801ab2, +	.ref_ctrl			= 0x10000c30, +	.sdram_tim1			= 0x0aaaf552, +	.sdram_tim2			= 0x043631d2, +	.sdram_tim3			= 0x00000327, +	.emif_ddr_phy_ctlr_1		= 0x00000007 +}; + +static const struct emif_regs evm_ddr2_emif1_regs = { +	.sdram_config			= 0x40801ab2, +	.ref_ctrl			= 0x10000c30, +	.sdram_tim1			= 0x0aaaf552, +	.sdram_tim2			= 0x043631d2, +	.sdram_tim3			= 0x00000327, +	.emif_ddr_phy_ctlr_1		= 0x00000007 +}; + +const struct dmm_lisa_map_regs evm_lisa_map_regs = { +	.dmm_lisa_map_0			= 0x00000000, +	.dmm_lisa_map_1			= 0x00000000, +	.dmm_lisa_map_2			= 0x806c0300, +	.dmm_lisa_map_3			= 0x806c0300, +}; + +static const struct ddr_data evm_ddr2_data = { +	.datardsratio0		= ((0x35<<10) | (0x35<<0)), +	.datawdsratio0		= ((0x20<<10) | (0x20<<0)), +	.datawiratio0		= ((0<<10) | (0<<0)), +	.datagiratio0		= ((0<<10) | (0<<0)), +	.datafwsratio0		= ((0x90<<10) | (0x90<<0)), +	.datawrsratio0		= ((0x50<<10) | (0x50<<0)), +	.datauserank0delay	= 1, +	.datadldiff0		= 0x4, +}; +#endif + +/* + * early system init of muxing and clocks. + */ +void s_init(void) +{ +#ifdef CONFIG_SPL_BUILD +	/* WDT1 is already running when the bootloader gets control +	 * Disable it to avoid "random" resets +	 */ +	wdt_disable(); + +	/* Setup the PLLs and the clocks for the peripherals */ +	pll_init(); + +	/* Enable RTC32K clock */ +	rtc32k_enable(); + +	/* Set UART pins */ +	enable_uart0_pin_mux(); + +	/* Set MMC pins */ +	enable_mmc1_pin_mux(); + +	/* Enable UART */ +	uart_enable(); + +	gd = &gdata; + +	preloader_console_init(); + +	config_dmm(&evm_lisa_map_regs); + +	config_ddr(0, 0, &evm_ddr2_data, &evm_ddr2_cctrl_data, +		   &evm_ddr2_emif0_regs, 0); +	config_ddr(0, 0, &evm_ddr2_data, &evm_ddr2_cctrl_data, +		   &evm_ddr2_emif1_regs, 1); +#endif +} + +/* + * Basic board specific setup.  Pinmux has been handled already. + */ +int board_init(void) +{ +	gd->bd->bi_boot_params = PHYS_DRAM_1 + 0x100; +	return 0; +} + +#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC) +int board_mmc_init(bd_t *bis) +{ +	omap_mmc_init(1, 0, 0, -1, -1); + +	return 0; +} +#endif diff --git a/board/ti/ti814x/evm.h b/board/ti/ti814x/evm.h new file mode 100644 index 000000000..40f8710c8 --- /dev/null +++ b/board/ti/ti814x/evm.h @@ -0,0 +1,7 @@ +#ifndef _EVM_H +#define _EVM_H + +void enable_uart0_pin_mux(void); +void enable_mmc1_pin_mux(void); + +#endif /* _EVM_H */ diff --git a/board/ti/ti814x/mux.c b/board/ti/ti814x/mux.c new file mode 100644 index 000000000..137acb452 --- /dev/null +++ b/board/ti/ti814x/mux.c @@ -0,0 +1,51 @@ +/* + * mux.c + * + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <common.h> +#include <asm/arch/sys_proto.h> +#include <asm/arch/hardware.h> +#include <asm/arch/mux.h> +#include <asm/io.h> +#include <i2c.h> +#include "evm.h" + +static struct module_pin_mux uart0_pin_mux[] = { +	{OFFSET(pincntl70), PULLUP_EN | MODE(0x01)},	/* UART0_RXD */ +	{OFFSET(pincntl71), PULLUP_EN | MODE(0x01)},	/* UART0_TXD */ +	{-1}, +}; + +static struct module_pin_mux mmc1_pin_mux[] = { +	{OFFSET(pincntl1), PULLUP_EN | MODE(0x01)},	/* SD1_CLK */ +	{OFFSET(pincntl2), PULLUP_EN | MODE(0x01)},	/* SD1_CMD */ +	{OFFSET(pincntl3), PULLUP_EN | MODE(0x01)},	/* SD1_DAT[0] */ +	{OFFSET(pincntl4), PULLUP_EN | MODE(0x01)},	/* SD1_DAT[1] */ +	{OFFSET(pincntl5), PULLUP_EN | MODE(0x01)},	/* SD1_DAT[2] */ +	{OFFSET(pincntl6), PULLUP_EN | MODE(0x01)},	/* SD1_DAT[3] */ +	{OFFSET(pincntl74), PULLUP_EN | MODE(0x40)},	/* SD1_POW */ +	{OFFSET(pincntl75), MODE(0x40)},		/* SD1_SDWP */ +	{OFFSET(pincntl80), PULLUP_EN | MODE(0x02)},	/* SD1_SDCD */ +	{-1}, +}; + +void enable_uart0_pin_mux(void) +{ +	configure_module_pin_mux(uart0_pin_mux); +} + +void enable_mmc1_pin_mux(void) +{ +	configure_module_pin_mux(mmc1_pin_mux); +} diff --git a/boards.cfg b/boards.cfg index ee68fdda8..718a5d6f4 100644 --- a/boards.cfg +++ b/boards.cfg @@ -241,6 +241,7 @@ am335x_evm_uart3             arm         armv7       am335x              ti  am335x_evm_uart4             arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL5,CONS_INDEX=5  am335x_evm_uart5             arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL6,CONS_INDEX=6  am335x_evm_usbspl            arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL1,CONS_INDEX=1,SPL_USBETH_SUPPORT +ti814x_evm                   arm         armv7       ti814x              ti             am33xx  pcm051                       arm         armv7       pcm051              phytec         am33xx      pcm051  highbank                     arm         armv7       highbank            -              highbank  mx51_efikamx                 arm         armv7       mx51_efikamx        genesi         mx5		mx51_efikamx:MACH_TYPE=MACH_TYPE_MX51_EFIKAMX,IMX_CONFIG=board/genesi/mx51_efikamx/imximage_mx.cfg diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 7b5fdd9f6..d732581eb 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -51,8 +51,12 @@ int mmc_getwp(struct mmc *mmc)  	wp = board_mmc_getwp(mmc); -	if ((wp < 0) && mmc->getwp) -		wp = mmc->getwp(mmc); +	if (wp < 0) { +		if (mmc->getwp) +			wp = mmc->getwp(mmc); +		else +			wp = 0; +	}  	return wp;  } @@ -692,8 +696,12 @@ int mmc_getcd(struct mmc *mmc)  	cd = board_mmc_getcd(mmc); -	if ((cd < 0) && mmc->getcd) -		cd = mmc->getcd(mmc); +	if (cd < 0) { +		if (mmc->getcd) +			cd = mmc->getcd(mmc); +		else +			cd = 1; +	}  	return cd;  } diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c index 67cfcc24d..166744c32 100644 --- a/drivers/mmc/omap_hsmmc.c +++ b/drivers/mmc/omap_hsmmc.c @@ -593,8 +593,6 @@ int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio,  	mmc->send_cmd = mmc_send_cmd;  	mmc->set_ios = mmc_set_ios;  	mmc->init = mmc_init_setup; -	mmc->getcd = omap_mmc_getcd; -	mmc->getwp = omap_mmc_getwp;  	mmc->priv = priv_data;  	switch (dev_index) { @@ -616,7 +614,13 @@ int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio,  		return 1;  	}  	priv_data->cd_gpio = omap_mmc_setup_gpio_in(cd_gpio, "mmc_cd"); +	if (priv_data->cd_gpio != -1) +		mmc->getcd = omap_mmc_getcd; +  	priv_data->wp_gpio = omap_mmc_setup_gpio_in(wp_gpio, "mmc_wp"); +	if (priv_data->wp_gpio != -1) +		mmc->getwp = omap_mmc_getwp; +  	mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;  	mmc->host_caps = (MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS |  				MMC_MODE_HC) & ~host_caps_mask; diff --git a/drivers/mtd/nand/omap_gpmc.c b/drivers/mtd/nand/omap_gpmc.c index cee394ece..bbf5443ec 100644 --- a/drivers/mtd/nand/omap_gpmc.c +++ b/drivers/mtd/nand/omap_gpmc.c @@ -25,6 +25,7 @@  #include <asm/io.h>  #include <asm/errno.h>  #include <asm/arch/mem.h> +#include <asm/arch/cpu.h>  #include <asm/arch/omap_gpmc.h>  #include <linux/mtd/nand_ecc.h>  #include <linux/compiler.h> diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c index 93f8417a4..7a3685019 100644 --- a/drivers/net/cpsw.c +++ b/drivers/net/cpsw.c @@ -24,6 +24,7 @@  #include <asm/errno.h>  #include <asm/io.h>  #include <phy.h> +#include <asm/arch/cpu.h>  #define BITMASK(bits)		(BIT(bits) - 1)  #define PHY_REG_MASK		0x1f diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index b2da8b318..ed4e6b3a1 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -43,7 +43,7 @@ void NS16550_init(NS16550_t com_port, int baud_divisor)  	serial_out(CONFIG_SYS_NS16550_IER, &com_port->ier);  #if (defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)) || \ -					defined(CONFIG_AM33XX) +			defined(CONFIG_AM33XX) || defined(CONFIG_TI814X)  	serial_out(0x7, &com_port->mdr1);	/* mode select reset TL16C750*/  #endif  	serial_out(UART_LCR_BKSE | UART_LCRVAL, &com_port->lcr); @@ -57,7 +57,8 @@ void NS16550_init(NS16550_t com_port, int baud_divisor)  	serial_out((baud_divisor >> 8) & 0xff, &com_port->dlm);  	serial_out(UART_LCRVAL, &com_port->lcr);  #if (defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)) || \ -	defined(CONFIG_AM33XX) || defined(CONFIG_SOC_DA8XX) +	defined(CONFIG_AM33XX) || defined(CONFIG_SOC_DA8XX) || \ +	defined(CONFIG_TI814X)  #if defined(CONFIG_APTIX)  	/* /13 mode so Aptix 6MHz can hit 115200 */ diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index 9eada95c0..b7c443c57 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -18,8 +18,7 @@  #define CONFIG_AM33XX -#include <asm/arch/cpu.h> -#include <asm/arch/hardware.h> +#include <asm/arch/omap.h>  #define CONFIG_DMA_COHERENT  #define CONFIG_DMA_COHERENT_SIZE	(1 << 20) @@ -56,13 +55,15 @@  	"fdtaddr=0x80F80000\0" \  	"fdt_high=0xffffffff\0" \  	"rdaddr=0x81000000\0" \ -	"bootfile=/boot/uImage\0" \ +	"bootdir=/boot\0" \ +	"bootfile=uImage\0" \  	"fdtfile=\0" \  	"console=ttyO0,115200n8\0" \  	"optargs=\0" \  	"mmcdev=0\0" \  	"mmcroot=/dev/mmcblk0p2 ro\0" \  	"mmcrootfstype=ext4 rootwait\0" \ +	"bootpart=0:2\0" \  	"nandroot=ubi0:rootfs rw ubi.mtd=7,2048\0" \  	"nandrootfstype=ubifs rootwait=1\0" \  	"nandsrcaddr=0x280000\0" \ @@ -96,19 +97,19 @@  		"nfsroot=${serverip}:${rootpath},${nfsopts} rw " \  		"ip=dhcp\0" \  	"bootenv=uEnv.txt\0" \ -	"loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \ +	"loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \  	"importbootenv=echo Importing environment from mmc ...; " \  		"env import -t $loadaddr $filesize\0" \  	"ramargs=setenv bootargs console=${console} " \  		"${optargs} " \  		"root=${ramroot} " \  		"rootfstype=${ramrootfstype}\0" \ -	"loadramdisk=fatload mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \ -	"loaduimagefat=fatload mmc ${mmcdev} ${loadaddr} ${bootfile}\0" \ -	"loaduimage=ext2load mmc ${mmcdev}:2 ${loadaddr} ${bootfile}\0" \ +	"loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \ +	"loaduimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \ +	"loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}\0" \  	"mmcboot=echo Booting from mmc ...; " \  		"run mmcargs; " \ -		"bootm ${loadaddr}\0" \ +		"bootm ${loadaddr} - ${fdtaddr}\0" \  	"nandboot=echo Booting from nand ...; " \  		"run nandargs; " \  		"nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; " \ @@ -122,14 +123,17 @@  		"setenv autoload no; " \  		"dhcp; " \  		"tftp ${loadaddr} ${bootfile}; " \ +		"tftp ${fdtaddr} ${fdtfile}; " \  		"run netargs; " \ -		"bootm ${loadaddr}\0" \ +		"bootm ${loadaddr} - ${fdtaddr}\0" \  	"ramboot=echo Booting from ramdisk ...; " \  		"run ramargs; " \ -		"bootm ${loadaddr}\0" \ +		"bootm ${loadaddr} ${rdaddr} ${fdtaddr}\0" \  	"findfdt="\  		"if test $board_name = A335BONE; then " \  			"setenv fdtfile am335x-bone.dtb; fi; " \ +		"if test $board_name = A335BNLT; then " \ +			"setenv fdtfile am335x-boneblack.dtb; fi; " \  		"if test $board_name = A33515BB; then " \  			"setenv fdtfile am335x-evm.dtb; fi; " \  		"if test $board_name = A335X_SK; then " \ @@ -138,6 +142,7 @@  #endif  #define CONFIG_BOOTCOMMAND \ +	"run findfdt; " \  	"mmc dev ${mmcdev}; if mmc rescan; then " \  		"echo SD/MMC found on device ${mmcdev};" \  		"if run loadbootenv; then " \ @@ -149,6 +154,7 @@  			"run uenvcmd;" \  		"fi;" \  		"if run loaduimage; then " \ +			"run loadfdt;" \  			"run mmcboot;" \  		"fi;" \  	"else " \ @@ -192,6 +198,8 @@  #define CONFIG_DOS_PARTITION  #define CONFIG_CMD_FAT  #define CONFIG_CMD_EXT2 +#define CONFIG_CMD_EXT4 +#define CONFIG_CMD_FS_GENERIC  #define CONFIG_SPI  #define CONFIG_OMAP3_SPI diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h index 8d79ffd48..726714dd2 100644 --- a/include/configs/cm_t35.h +++ b/include/configs/cm_t35.h @@ -344,5 +344,9 @@  #define LCD_BPP		LCD_COLOR16  #define CONFIG_LCD +#define CONFIG_SPLASH_SCREEN +#define CONFIG_CMD_BMP +#define CONFIG_BMP_16BPP +#define CONFIG_SPLASH_SCREEN_PREPARE  #endif /* __CONFIG_H */ diff --git a/include/configs/igep00x0.h b/include/configs/igep00x0.h index 559e3759d..849fb1624 100644 --- a/include/configs/igep00x0.h +++ b/include/configs/igep00x0.h @@ -55,7 +55,8 @@  #define CONFIG_INITRD_TAG		1  #define CONFIG_REVISION_TAG		1 -#define CONFIG_OF_LIBFDT		1 +#define CONFIG_OF_LIBFDT +#define CONFIG_CMD_BOOTZ  /*   * NS16550 Configuration diff --git a/include/configs/pcm051.h b/include/configs/pcm051.h index 63ab12329..d0ea74e0b 100644 --- a/include/configs/pcm051.h +++ b/include/configs/pcm051.h @@ -21,8 +21,7 @@  #define CONFIG_AM33XX -#include <asm/arch/cpu.h> -#include <asm/arch/hardware.h> +#include <asm/arch/omap.h>  #define CONFIG_DMA_COHERENT  #define CONFIG_DMA_COHERENT_SIZE	(1 << 20) diff --git a/include/configs/ti814x_evm.h b/include/configs/ti814x_evm.h new file mode 100644 index 000000000..16547e331 --- /dev/null +++ b/include/configs/ti814x_evm.h @@ -0,0 +1,221 @@ +/* + * ti814x_evm.h + * + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#ifndef __CONFIG_TI814X_EVM_H +#define __CONFIG_TI814X_EVM_H + +#define CONFIG_TI81XX +#define CONFIG_TI814X +#define CONFIG_SYS_NO_FLASH + +#include <asm/arch/omap.h> + +#define CONFIG_DMA_COHERENT +#define CONFIG_DMA_COHERENT_SIZE	(1 << 20) + +#define CONFIG_ENV_SIZE			(128 << 10)	/* 128 KiB */ +#define CONFIG_SYS_MALLOC_LEN		(1024 << 10) +#define CONFIG_SYS_LONGHELP		/* undef to save memory */ +#define CONFIG_SYS_HUSH_PARSER		/* Use HUSH for command parsing */ +#define CONFIG_SYS_PROMPT		"U-Boot# " +#define CONFIG_SYS_NO_FLASH +#define CONFIG_MACH_TYPE		MACH_TYPE_TI8148EVM + +#define CONFIG_OF_LIBFDT +#define CONFIG_CMDLINE_TAG		/* enable passing of ATAGs  */ +#define CONFIG_SETUP_MEMORY_TAGS +#define CONFIG_INITRD_TAG		/* for ramdisk support */ + +/* commands to include */ +# include <config_cmd_default.h> + +#define CONFIG_CMD_ASKENV +#define CONFIG_VERSION_VARIABLE + +#define CONFIG_BOOTDELAY		1	/* negative for no autoboot */ +#define CONFIG_ENV_VARS_UBOOT_CONFIG +#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG +#define CONFIG_EXTRA_ENV_SETTINGS \ +	"loadaddr=0x80200000\0" \ +	"fdtaddr=0x80F80000\0" \ +	"rdaddr=0x81000000\0" \ +	"bootfile=/boot/uImage\0" \ +	"fdtfile=\0" \ +	"console=ttyO0,115200n8\0" \ +	"optargs=\0" \ +	"mmcdev=0\0" \ +	"mmcroot=/dev/mmcblk0p2 ro\0" \ +	"mmcrootfstype=ext4 rootwait\0" \ +	"ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M\0" \ +	"ramrootfstype=ext2\0" \ +	"mmcargs=setenv bootargs console=${console} " \ +		"${optargs} " \ +		"root=${mmcroot} " \ +		"rootfstype=${mmcrootfstype}\0" \ +	"bootenv=uEnv.txt\0" \ +	"loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \ +	"importbootenv=echo Importing environment from mmc ...; " \ +		"env import -t $loadaddr $filesize\0" \ +	"ramargs=setenv bootargs console=${console} " \ +		"${optargs} " \ +		"root=${ramroot} " \ +		"rootfstype=${ramrootfstype}\0" \ +	"loadramdisk=fatload mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \ +	"loaduimagefat=fatload mmc ${mmcdev} ${loadaddr} ${bootfile}\0" \ +	"loaduimage=ext2load mmc ${mmcdev}:2 ${loadaddr} ${bootfile}\0" \ +	"mmcboot=echo Booting from mmc ...; " \ +		"run mmcargs; " \ +		"bootm ${loadaddr}\0" \ +	"ramboot=echo Booting from ramdisk ...; " \ +		"run ramargs; " \ +		"bootm ${loadaddr}\0" \ +	"fdtfile=ti814x-evm.dtb\0" \ + +#define CONFIG_BOOTCOMMAND \ +	"mmc dev ${mmcdev}; if mmc rescan; then " \ +		"echo SD/MMC found on device ${mmcdev};" \ +		"if run loadbootenv; then " \ +			"echo Loaded environment from ${bootenv};" \ +			"run importbootenv;" \ +		"fi;" \ +		"if test -n $uenvcmd; then " \ +			"echo Running uenvcmd ...;" \ +			"run uenvcmd;" \ +		"fi;" \ +		"if run loaduimage; then " \ +			"run mmcboot;" \ +		"fi;" \ +	"fi;" \ + +/* Clock Defines */ +#define V_OSCK			24000000	/* Clock output from T2 */ +#define V_SCLK			(V_OSCK >> 1) + +#define CONFIG_CMD_ECHO + +/* max number of command args */ +#define CONFIG_SYS_MAXARGS		16 + +/* Console I/O Buffer Size */ +#define CONFIG_SYS_CBSIZE		512 + +/* Print Buffer Size */ +#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE \ +					+ sizeof(CONFIG_SYS_PROMPT) + 16) + +/* Boot Argument Buffer Size */ +#define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE + +#define CONFIG_SYS_MEMTEST_START	PHYS_DRAM_1 +#define CONFIG_SYS_MEMTEST_END		(CONFIG_SYS_MEMTEST_START \ +					+ PHYS_DRAM_1_SIZE - (8 << 12)) + +#define CONFIG_SYS_LOAD_ADDR		0x81000000	/* Default */ +#define CONFIG_SYS_HZ			1000		/* 1ms clock */ + +#define CONFIG_OMAP_GPIO +#define CONFIG_MMC +#define CONFIG_GENERIC_MMC +#define CONFIG_OMAP_HSMMC +#define CONFIG_CMD_MMC +#define CONFIG_DOS_PARTITION +#define CONFIG_CMD_FAT +#define CONFIG_CMD_EXT2 + +/** + * Physical Memory Map + */ +#define CONFIG_NR_DRAM_BANKS		1		/* 1 banks of DRAM */ +#define PHYS_DRAM_1			0x80000000	/* DRAM Bank #1 */ +#define PHYS_DRAM_1_SIZE		0x20000000	/* 512MB */ +#define CONFIG_MAX_RAM_BANK_SIZE	(1024 << 20)	/* 1024MB */ + +#define CONFIG_SYS_SDRAM_BASE		PHYS_DRAM_1 +#define CONFIG_SYS_INIT_SP_ADDR		(NON_SECURE_SRAM_END - \ +					 GENERATED_GBL_DATA_SIZE) + +/** + * Platform/Board specific defs + */ +#define CONFIG_SYS_TIMERBASE		0x4802E000 +#define CONFIG_SYS_PTV			2	/* Divisor: 2^(PTV+1) => 8 */ +#define CONFIG_SYS_HZ			1000 + +/* NS16550 Configuration */ +#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE	(-4) +#define CONFIG_SYS_NS16550_CLK		(48000000) +#define CONFIG_SYS_NS16550_COM1		0x48020000	/* Base EVM has UART0 */ + +#define CONFIG_BAUDRATE			115200 + +#define CONFIG_ENV_OVERWRITE +#define CONFIG_CONS_INDEX		1 +#define CONFIG_SYS_CONSOLE_INFO_QUIET + +#define CONFIG_ENV_IS_NOWHERE + +/* Defines for SPL */ +#define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK +#define CONFIG_SPL_TEXT_BASE		0x40300000 +#define CONFIG_SPL_MAX_SIZE		((128 - 18) * 1024) +#define CONFIG_SPL_STACK		CONFIG_SYS_INIT_SP_ADDR + +#define CONFIG_SPL_BSS_START_ADDR	0x80000000 +#define CONFIG_SPL_BSS_MAX_SIZE		0x80000		/* 512 KB */ + +#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x300 /* address 0x60000 */ +#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS      0x200 /* 256 KB */ +#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION    1 +#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME        "u-boot.img" +#define CONFIG_SPL_MMC_SUPPORT +#define CONFIG_SPL_FAT_SUPPORT + +#define CONFIG_SPL_LIBCOMMON_SUPPORT +#define CONFIG_SPL_LIBDISK_SUPPORT +#define CONFIG_SPL_LIBGENERIC_SUPPORT +#define CONFIG_SPL_SERIAL_SUPPORT +#define CONFIG_SPL_GPIO_SUPPORT +#define CONFIG_SPL_YMODEM_SUPPORT +#define CONFIG_SYS_SPI_U_BOOT_OFFS	0x20000 +#define CONFIG_SYS_SPI_U_BOOT_SIZE	0x40000 +#define CONFIG_SPL_LDSCRIPT		"$(CPUDIR)/omap-common/u-boot-spl.lds" + +#define CONFIG_SPL_BOARD_INIT + +/* + * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM + * 64 bytes before this address should be set aside for u-boot.img's + * header. That is 0x800FFFC0--0x80800000 should not be used for any + * other needs. + */ +#define CONFIG_SYS_TEXT_BASE		0x80800000 +#define CONFIG_SYS_SPL_MALLOC_START	0x80208000 +#define CONFIG_SYS_SPL_MALLOC_SIZE	0x100000 + +/* + * Since SPL did pll and ddr initialization for us, + * we don't need to do it twice. + */ +#ifndef CONFIG_SPL_BUILD +#define CONFIG_SKIP_LOWLEVEL_INIT +#endif + +/* Unsupported features */ +#undef CONFIG_USE_IRQ + +#endif	/* ! __CONFIG_TI814X_EVM_H */ diff --git a/spl/Makefile b/spl/Makefile index 14095c8df..b5a8de783 100644 --- a/spl/Makefile +++ b/spl/Makefile @@ -84,7 +84,7 @@ LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/libphy.o  LIBS-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += drivers/usb/musb-new/libusb_musb-new.o  LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/libusb_gadget.o -ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) +ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(CONFIG_TI814X),)  LIBS-y += $(CPUDIR)/omap-common/libomap-common.o  endif |