diff options
35 files changed, 1358 insertions, 18 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index c43057484..e34d9f3ec 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -580,6 +580,7 @@ Stefano Babic <sbabic@denx.de>  	trizepsiv	xscale/pxa  	twister		omap3   	vision2		i.MX51 +	woodburn	i.MX35  Lukasz Dalek <luk0104@gmail.com> @@ -841,6 +841,7 @@ clobber:	tidy  	@rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.map}  	@rm -f $(obj)spl/{u-boot-spl.lds,u-boot.lst}  	@rm -f $(obj)MLO +	@rm -f $(obj)SPL  	@rm -f $(obj)tools/xway-swap-bytes  	@rm -f $(obj)arch/powerpc/cpu/mpc824x/bedbug_603e.c  	@rm -f $(obj)arch/powerpc/cpu/mpc83xx/ddr-gen?.c diff --git a/arch/arm/cpu/arm1136/config.mk b/arch/arm/cpu/arm1136/config.mk index efee0d1dc..9092d914f 100644 --- a/arch/arm/cpu/arm1136/config.mk +++ b/arch/arm/cpu/arm1136/config.mk @@ -31,3 +31,6 @@ PLATFORM_CPPFLAGS += -march=armv5  # =========================================================================  PF_RELFLAGS_SLB_AT := $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))  PLATFORM_RELFLAGS += $(PF_RELFLAGS_SLB_AT) +ifdef CONFIG_SPL_BUILD +ALL-y	+= $(OBJTREE)/SPL +endif diff --git a/arch/arm/cpu/arm1136/mx35/Makefile b/arch/arm/cpu/arm1136/mx35/Makefile index 469397ca4..f4ababbe5 100644 --- a/arch/arm/cpu/arm1136/mx35/Makefile +++ b/arch/arm/cpu/arm1136/mx35/Makefile @@ -30,6 +30,7 @@ LIB	= $(obj)lib$(SOC).o  COBJS	+= generic.o  COBJS	+= timer.o  COBJS	+= iomux.o +COBJS	+= mx35_sdram.o  SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) diff --git a/arch/arm/cpu/arm1136/mx35/generic.c b/arch/arm/cpu/arm1136/mx35/generic.c index 41e9639d9..98aa4d15b 100644 --- a/arch/arm/cpu/arm1136/mx35/generic.c +++ b/arch/arm/cpu/arm1136/mx35/generic.c @@ -35,6 +35,7 @@  #include <fsl_esdhc.h>  #endif  #include <netdev.h> +#include <spl.h>  #define CLK_CODE(arm, ahb, sel) (((arm) << 16) + ((ahb) << 8) + (sel))  #define CLK_CODE_ARM(c)		(((c) >> 16) & 0xFF) @@ -492,3 +493,77 @@ void reset_cpu(ulong addr)  	struct wdog_regs *wdog = (struct wdog_regs *)WDOG_BASE_ADDR;  	writew(4, &wdog->wcr);  } + +#define RCSR_MEM_CTL_WEIM	0 +#define RCSR_MEM_CTL_NAND	1 +#define RCSR_MEM_CTL_ATA	2 +#define RCSR_MEM_CTL_EXPANSION	3 +#define RCSR_MEM_TYPE_NOR	0 +#define RCSR_MEM_TYPE_ONENAND	2 +#define RCSR_MEM_TYPE_SD	0 +#define RCSR_MEM_TYPE_I2C	2 +#define RCSR_MEM_TYPE_SPI	3 + +u32 spl_boot_device(void) +{ +	struct ccm_regs *ccm = +		(struct ccm_regs *)IMX_CCM_BASE; + +	u32 rcsr = readl(&ccm->rcsr); +	u32 mem_type, mem_ctl; + +	/* In external mode, no boot device is returned */ +	if ((rcsr >> 10) & 0x03) +		return BOOT_DEVICE_NONE; + +	mem_ctl = (rcsr >> 25) & 0x03; +	mem_type = (rcsr >> 23) & 0x03; + +	switch (mem_ctl) { +	case RCSR_MEM_CTL_WEIM: +		switch (mem_type) { +		case RCSR_MEM_TYPE_NOR: +			return BOOT_DEVICE_NOR; +		case RCSR_MEM_TYPE_ONENAND: +			return BOOT_DEVICE_ONE_NAND; +		default: +			return BOOT_DEVICE_NONE; +		} +	case RCSR_MEM_CTL_NAND: +		return BOOT_DEVICE_NAND; +	case RCSR_MEM_CTL_EXPANSION: +		switch (mem_type) { +		case RCSR_MEM_TYPE_SD: +			return BOOT_DEVICE_MMC1; +		case RCSR_MEM_TYPE_I2C: +			return BOOT_DEVICE_I2C; +		case RCSR_MEM_TYPE_SPI: +			return BOOT_DEVICE_SPI; +		default: +			return BOOT_DEVICE_NONE; +		} +	} + +	return BOOT_DEVICE_NONE; +} + +#ifdef CONFIG_SPL_BUILD +u32 spl_boot_mode(void) +{ +	switch (spl_boot_device()) { +	case BOOT_DEVICE_MMC1: +#ifdef CONFIG_SPL_FAT_SUPPORT +		return MMCSD_MODE_FAT; +#else +		return MMCSD_MODE_RAW; +#endif +		break; +	case BOOT_DEVICE_NAND: +		return 0; +		break; +	default: +		puts("spl: ERROR:  unsupported device\n"); +		hang(); +	} +} +#endif diff --git a/arch/arm/cpu/arm1136/mx35/mx35_sdram.c b/arch/arm/cpu/arm1136/mx35/mx35_sdram.c new file mode 100644 index 000000000..f7e682c8c --- /dev/null +++ b/arch/arm/cpu/arm1136/mx35/mx35_sdram.c @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2012, Stefano Babic <sbabic@denx.de> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <asm/io.h> +#include <asm/errno.h> +#include <asm/arch/imx-regs.h> +#include <linux/types.h> +#include <asm/arch/sys_proto.h> + +#define ESDCTL_DDR2_EMR2	0x04000000 +#define ESDCTL_DDR2_EMR3	0x06000000 +#define ESDCTL_PRECHARGE	0x00000400 +#define ESDCTL_DDR2_EN_DLL	0x02000400 +#define ESDCTL_DDR2_RESET_DLL	0x00000333 +#define ESDCTL_DDR2_MR		0x00000233 +#define ESDCTL_DDR2_OCD_DEFAULT 0x02000780 + +enum { +	SMODE_NORMAL =	0, +	SMODE_PRECHARGE, +	SMODE_AUTO_REFRESH, +	SMODE_LOAD_REG, +	SMODE_MANUAL_REFRESH +}; + +#define set_mode(x, en, m)	(x | (en << 31) | (m << 28)) + +static inline void dram_wait(unsigned int count) +{ +	volatile unsigned int wait = count; + +	while (wait--) +		; + +} + +void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config, +	u32 row, u32 col, u32 dsize, u32 refresh) +{ +	struct esdc_regs *esdc = (struct esdc_regs *)ESDCTL_BASE_ADDR; +	u32 *cfg_reg, *ctl_reg; +	u32 val; +	u32 ctlval; + +	switch (start_address) { +	case CSD0_BASE_ADDR: +		cfg_reg = &esdc->esdcfg0; +		ctl_reg = &esdc->esdctl0; +		break; +	case CSD1_BASE_ADDR: +		cfg_reg = &esdc->esdcfg1; +		ctl_reg = &esdc->esdctl1; +		break; +	default: +		return; +	} + +	/* The MX35 supports 11 up to 14 rows */ +	if (row < 11 || row > 14 || col < 8 || col > 10) +		return; +	ctlval = (row - 11) << 24 | (col - 8) << 20 | (dsize << 16); + +	/* Initialize MISC register for DDR2 */ +	val = ESDC_MISC_RST | ESDC_MISC_MDDR_EN | ESDC_MISC_MDDR_DL_RST | +		ESDC_MISC_DDR_EN | ESDC_MISC_DDR2_EN; +	writel(val, &esdc->esdmisc); +	val &= ~(ESDC_MISC_RST | ESDC_MISC_MDDR_DL_RST); +	writel(val, &esdc->esdmisc); + +	/* +	 * according to DDR2 specs, wait a while before +	 * the PRECHARGE_ALL command +	 */ +	dram_wait(0x20000); + +	/* Load DDR2 config and timing */ +	writel(ddr2_config, cfg_reg); + +	/* Precharge ALL */ +	writel(set_mode(ctlval, 1, SMODE_PRECHARGE), +		ctl_reg); +	writel(0xda, start_address + ESDCTL_PRECHARGE); + +	/* Load mode */ +	writel(set_mode(ctlval, 1, SMODE_LOAD_REG), +		ctl_reg); +	writeb(0xda, start_address + ESDCTL_DDR2_EMR2); /* EMRS2 */ +	writeb(0xda, start_address + ESDCTL_DDR2_EMR3); /* EMRS3 */ +	writeb(0xda, start_address + ESDCTL_DDR2_EN_DLL); /* Enable DLL */ +	writeb(0xda, start_address + ESDCTL_DDR2_RESET_DLL); /* Reset DLL */ + +	/* Precharge ALL */ +	writel(set_mode(ctlval, 1, SMODE_PRECHARGE), +		ctl_reg); +	writel(0xda, start_address + ESDCTL_PRECHARGE); + +	/* Set mode auto refresh : at least two refresh are required */ +	writel(set_mode(ctlval, 1, SMODE_AUTO_REFRESH), +		ctl_reg); +	writel(0xda, start_address); +	writel(0xda, start_address); + +	writel(set_mode(ctlval, 1, SMODE_LOAD_REG), +		ctl_reg); +	writeb(0xda, start_address + ESDCTL_DDR2_MR); +	writeb(0xda, start_address + ESDCTL_DDR2_OCD_DEFAULT); + +	/* OCD mode exit */ +	writeb(0xda, start_address + ESDCTL_DDR2_EN_DLL); /* Enable DLL */ + +	/* Set normal mode */ +	writel(set_mode(ctlval, 1, SMODE_NORMAL) | refresh, +		ctl_reg); + +	dram_wait(0x20000); + +	/* Do not set delay lines, only for MDDR */ +} diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S index 3752af9dd..5d3b4c229 100644 --- a/arch/arm/cpu/arm1136/start.S +++ b/arch/arm/cpu/arm1136/start.S @@ -100,6 +100,10 @@ _TEXT_BASE:  _bss_start_ofs:  	.word __bss_start - _start +.global	_image_copy_end_ofs +_image_copy_end_ofs: +	.word 	__image_copy_end - _start +  .globl _bss_end_ofs  _bss_end_ofs:  	.word __bss_end__ - _start @@ -193,7 +197,7 @@ stack_setup:  	moveq	r9, #0		/* no relocation. relocation offset(r9) = 0 */  	beq	clear_bss		/* skip relocation */  	mov	r1, r6			/* r1 <- scratch for copy_loop */ -	ldr	r3, _bss_start_ofs +	ldr	r3, _image_copy_end_ofs  	add	r2, r0, r3		/* r2 <- source end address	    */  copy_loop: @@ -241,15 +245,28 @@ fixnext:  	add	r2, r2, #8		/* each rel.dyn entry is 8 bytes */  	cmp	r2, r3  	blo	fixloop +	b	clear_bss + +_rel_dyn_start_ofs: +	.word __rel_dyn_start - _start +_rel_dyn_end_ofs: +	.word __rel_dyn_end - _start +_dynsym_start_ofs: +	.word __dynsym_start - _start  #endif  clear_bss: -#ifndef CONFIG_SPL_BUILD +#ifdef CONFIG_SPL_BUILD +	/* No relocation for SPL */ +	ldr	r0, =__bss_start +	ldr	r1, =__bss_end__ +#else  	ldr	r0, _bss_start_ofs  	ldr	r1, _bss_end_ofs  	mov	r4, r6			/* reloc addr */  	add	r0, r0, r4  	add	r1, r1, r4 +#endif  	mov	r2, #0x00000000		/* clear			    */  clbss_l:cmp	r0, r1			/* clear loop... */ @@ -258,7 +275,6 @@ clbss_l:cmp	r0, r1			/* clear loop... */  	add	r0, r0, #4  	b	clbss_l  clbss_e: -#endif	/* #ifndef CONFIG_SPL_BUILD */  /*   * We are done. Do not return, instead branch to second part of board @@ -273,7 +289,7 @@ _nand_boot_ofs:  #else  jump_2_ram:  	ldr	r0, _board_init_r_ofs -	ldr     r1, _TEXT_BASE +	adr	r1, _start  	add	lr, r0, r1  	add	lr, lr, r9  	/* setup parameters for board_init_r */ @@ -286,13 +302,6 @@ _board_init_r_ofs:  	.word board_init_r - _start  #endif -_rel_dyn_start_ofs: -	.word __rel_dyn_start - _start -_rel_dyn_end_ofs: -	.word __rel_dyn_end - _start -_dynsym_start_ofs: -	.word __dynsym_start - _start -  /*   *************************************************************************   * diff --git a/arch/arm/cpu/arm1136/u-boot-spl.lds b/arch/arm/cpu/arm1136/u-boot-spl.lds new file mode 100644 index 000000000..a0462ab97 --- /dev/null +++ b/arch/arm/cpu/arm1136/u-boot-spl.lds @@ -0,0 +1,62 @@ +/* + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> + * + * (C) Copyright 2010 + * Texas Instruments, <www.ti.com> + *	Aneesh V <aneesh@ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\ +		LENGTH = CONFIG_SPL_MAX_SIZE } +MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \ +		LENGTH = CONFIG_SPL_BSS_MAX_SIZE } + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ +	.text      : +	{ +	__start = .; +	  arch/arm/cpu/arm1136/start.o	(.text) +	  *(.text*) +	} >.sram + +	. = ALIGN(4); +	.rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.sram + +	. = ALIGN(4); +	.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram +	. = ALIGN(4); +	__image_copy_end = .; +	_end = .; + +	.bss : +	{ +		. = ALIGN(4); +		__bss_start = .; +		*(.bss*) +		. = ALIGN(4); +		__bss_end__ = .; +	} >.sdram +} diff --git a/arch/arm/include/asm/arch-mx25/imx-regs.h b/arch/arm/include/asm/arch-mx25/imx-regs.h index 53aafe307..738d4115e 100644 --- a/arch/arm/include/asm/arch-mx25/imx-regs.h +++ b/arch/arm/include/asm/arch-mx25/imx-regs.h @@ -36,10 +36,6 @@  #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))  #include <asm/types.h> -#ifdef CONFIG_FEC_MXC -extern void mx25_fec_init_pins(void); -#endif -  /* Clock Control Module (CCM) registers */  struct ccm_regs {  	u32 mpctl;	/* Core PLL Control */ diff --git a/arch/arm/include/asm/arch-mx25/sys_proto.h b/arch/arm/include/asm/arch-mx25/sys_proto.h index 6a01a7b04..46db341e8 100644 --- a/arch/arm/include/asm/arch-mx25/sys_proto.h +++ b/arch/arm/include/asm/arch-mx25/sys_proto.h @@ -25,5 +25,8 @@  #define _SYS_PROTO_H_  void mx25_uart1_init_pins(void); +#if defined CONFIG_FEC_MXC +extern void mx25_fec_init_pins(void); +#endif  #endif diff --git a/arch/arm/include/asm/arch-mx35/imx-regs.h b/arch/arm/include/asm/arch-mx35/imx-regs.h index 7b098094f..7b6475a5e 100644 --- a/arch/arm/include/asm/arch-mx35/imx-regs.h +++ b/arch/arm/include/asm/arch-mx35/imx-regs.h @@ -33,6 +33,8 @@  #define IRAM_BASE_ADDR		0x10000000	/* internal ram */  #define IRAM_SIZE		0x00020000	/* 128 KB */ +#define LOW_LEVEL_SRAM_STACK	0x1001E000 +  /*   * AIPS 1   */ diff --git a/arch/arm/include/asm/arch-mx35/mmc_host_def.h b/arch/arm/include/asm/arch-mx35/mmc_host_def.h new file mode 100644 index 000000000..775b9552c --- /dev/null +++ b/arch/arm/include/asm/arch-mx35/mmc_host_def.h @@ -0,0 +1,31 @@ +/* + * (C) Copyright 2008 + * Texas Instruments, <www.ti.com> + * Syed Mohammed Khasim <khasim@ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation's version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef MMC_HOST_DEF_H +#define MMC_HOST_DEF_H + +/* Driver definitions */ +#define MMCSD_SECTOR_SIZE		512 + +#endif /* MMC_HOST_DEF_H */ diff --git a/arch/arm/include/asm/arch-mx35/spl.h b/arch/arm/include/asm/arch-mx35/spl.h new file mode 100644 index 000000000..91d11ae84 --- /dev/null +++ b/arch/arm/include/asm/arch-mx35/spl.h @@ -0,0 +1,38 @@ +/* + * (C) Copyright 2012 + * Texas Instruments, <www.ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ +#ifndef	_ASM_ARCH_SPL_H_ +#define	_ASM_SPL_H_ + +#define BOOT_DEVICE_NONE	0 +#define BOOT_DEVICE_XIP		1 +#define BOOT_DEVICE_XIPWAIT	2 +#define BOOT_DEVICE_NAND	3 +#define BOOT_DEVICE_ONE_NAND	4 +#define BOOT_DEVICE_MMC1	5 +#define BOOT_DEVICE_MMC2	6 +#define BOOT_DEVICE_MMC2_2	7 +#define BOOT_DEVICE_NOR		8 +#define BOOT_DEVICE_I2C		9 +#define BOOT_DEVICE_SPI		10 + +#endif diff --git a/arch/arm/include/asm/arch-mx35/sys_proto.h b/arch/arm/include/asm/arch-mx35/sys_proto.h index 9c0d51321..aa3549cb0 100644 --- a/arch/arm/include/asm/arch-mx35/sys_proto.h +++ b/arch/arm/include/asm/arch-mx35/sys_proto.h @@ -25,6 +25,8 @@  #define _SYS_PROTO_H_  u32 get_cpu_rev(void); +void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config, +	u32 row, u32 col, u32 dsize, u32 refresh);  #define is_soc_rev(rev)	((get_cpu_rev() & 0xFF) - rev)  #endif diff --git a/board/freescale/mx25pdk/mx25pdk.c b/board/freescale/mx25pdk/mx25pdk.c index 4a8352fb3..72fa6bc82 100644 --- a/board/freescale/mx25pdk/mx25pdk.c +++ b/board/freescale/mx25pdk/mx25pdk.c @@ -19,12 +19,71 @@  #include <common.h>  #include <asm/io.h> +#include <asm/gpio.h>  #include <asm/arch/imx-regs.h>  #include <asm/arch/imx25-pinmux.h>  #include <asm/arch/sys_proto.h> +#include <asm/arch/clock.h> +#include <mmc.h> +#include <fsl_esdhc.h> +#include <i2c.h> +#include <pmic.h> +#include <fsl_pmic.h> +#include <mc34704.h> + +#define FEC_RESET_B		IMX_GPIO_NR(2, 3) +#define FEC_ENABLE_B		IMX_GPIO_NR(4, 8) +#define CARD_DETECT		IMX_GPIO_NR(2, 1)  DECLARE_GLOBAL_DATA_PTR; +#ifdef CONFIG_FSL_ESDHC +struct fsl_esdhc_cfg esdhc_cfg[1] = { +	{IMX_MMC_SDHC1_BASE}, +}; +#endif + +static void mx25pdk_fec_init(void) +{ +	struct iomuxc_mux_ctl *muxctl; +	struct iomuxc_pad_ctl *padctl; +	u32 gpio_mux_mode = MX25_PIN_MUX_MODE(5); +	u32 gpio_mux_mode0_sion = MX25_PIN_MUX_MODE(0) | MX25_PIN_MUX_SION; + +	/* FEC pin init is generic */ +	mx25_fec_init_pins(); + +	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; +	padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE; +	/* +	 * Set up FEC_RESET_B and FEC_ENABLE_B +	 * +	 * FEC_RESET_B: gpio2_3 is ALT 5 mode of pin D12 +	 * FEC_ENABLE_B: gpio4_8 is ALT 5 mode of pin A17 +	 */ +	writel(gpio_mux_mode, &muxctl->pad_d12); +	writel(gpio_mux_mode, &muxctl->pad_a17); + +	writel(0x0, &padctl->pad_d12); +	writel(0x0, &padctl->pad_a17); + +	/* Assert RESET and ENABLE low */ +	gpio_direction_output(FEC_RESET_B, 0); +	gpio_direction_output(FEC_ENABLE_B, 0); + +	udelay(10); + +	/* Deassert RESET and ENABLE */ +	gpio_set_value(FEC_RESET_B, 1); +	gpio_set_value(FEC_ENABLE_B, 1); + +	/* Setup I2C pins so that PMIC can turn on PHY supply */ +	writel(gpio_mux_mode0_sion, &muxctl->pad_i2c1_clk); +	writel(gpio_mux_mode0_sion, &muxctl->pad_i2c1_dat); +	writel(0x1E8, &padctl->pad_i2c1_clk); +	writel(0x1E8, &padctl->pad_i2c1_dat); +} +  int dram_init(void)  {  	/* dram_init must store complete ramsize in gd->ram_size */ @@ -48,6 +107,61 @@ int board_init(void)  	return 0;  } +int board_late_init(void) +{ +	struct pmic *p; + +	mx25pdk_fec_init(); + +	pmic_init(); +	p = get_pmic(); +	/* Turn on Ethernet PHY supply */ +	pmic_reg_write(p, MC34704_GENERAL2_REG, ONOFFE); + +	return 0; +} + +#ifdef CONFIG_FSL_ESDHC +int board_mmc_getcd(struct mmc *mmc) +{ +	struct iomuxc_mux_ctl *muxctl; +	struct iomuxc_pad_ctl *padctl; +	u32 gpio_mux_mode = MX25_PIN_MUX_MODE(5); + +	/* +	 * Set up the Card Detect pin. +	 * +	 * SD1_GPIO_CD: gpio2_1 is ALT 5 mode of pin A15 +	 * +	 */ +	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; +	padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE; + +	writel(gpio_mux_mode, &muxctl->pad_a15); +	writel(0x0, &padctl->pad_a15); + +	gpio_direction_input(CARD_DETECT); +	return !gpio_get_value(CARD_DETECT); +} + +int board_mmc_init(bd_t *bis) +{ +	struct iomuxc_mux_ctl *muxctl; +	u32 sdhc1_mux_mode = MX25_PIN_MUX_MODE(0) | MX25_PIN_MUX_SION; + +	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE; +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_cmd); +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_clk); +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data0); +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data1); +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data2); +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data3); + +	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK); +	return fsl_esdhc_initialize(bis, &esdhc_cfg[0]); +} +#endif +  int checkboard(void)  {  	puts("Board: MX25PDK\n"); diff --git a/board/freescale/mx31ads/u-boot.lds b/board/freescale/mx31ads/u-boot.lds index 29ad0e6e7..52677299e 100644 --- a/board/freescale/mx31ads/u-boot.lds +++ b/board/freescale/mx31ads/u-boot.lds @@ -65,6 +65,8 @@ SECTIONS  	. = ALIGN(4); +	__image_copy_end = .; +  	.rel.dyn : {  		__rel_dyn_start = .;  		*(.rel*) diff --git a/board/syteco/zmx25/zmx25.c b/board/syteco/zmx25/zmx25.c index fe5589d93..4f37c59d8 100644 --- a/board/syteco/zmx25/zmx25.c +++ b/board/syteco/zmx25/zmx25.c @@ -33,6 +33,7 @@  #include <asm/io.h>  #include <asm/arch/imx-regs.h>  #include <asm/arch/imx25-pinmux.h> +#include <asm/arch/sys_proto.h>  DECLARE_GLOBAL_DATA_PTR; diff --git a/board/woodburn/Makefile b/board/woodburn/Makefile new file mode 100644 index 000000000..b60163f9f --- /dev/null +++ b/board/woodburn/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de> +# +# (C) Copyright 2008-2009 Freescale Semiconductor, Inc. +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +COBJS	:= woodburn.o +SOBJS	:= lowlevel_init.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)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/woodburn/imximage.cfg b/board/woodburn/imximage.cfg new file mode 100644 index 000000000..b4cc8ecf6 --- /dev/null +++ b/board/woodburn/imximage.cfg @@ -0,0 +1,4 @@ +BOOT_FROM      sd + +# DDR2 init +DATA 4 0xB8001010 0x00000304 diff --git a/board/woodburn/lowlevel_init.S b/board/woodburn/lowlevel_init.S new file mode 100644 index 000000000..57fb1b139 --- /dev/null +++ b/board/woodburn/lowlevel_init.S @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de> + * + * (C) Copyright 2008-2010 Freescale Semiconductor, Inc. + * + * Copyright (C) 2011, Stefano Babic <sbabic@denx.de> + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <config.h> +#include <asm/arch/lowlevel_macro.S> + +.globl lowlevel_init +lowlevel_init: + +	core_init + +	init_aips + +	init_max + +	init_m3if + +	mov pc, lr diff --git a/board/woodburn/woodburn.c b/board/woodburn/woodburn.c new file mode 100644 index 000000000..286749f3c --- /dev/null +++ b/board/woodburn/woodburn.c @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2012, Stefano Babic <sbabic@denx.de> + * + * Based on flea3.c and mx35pdk.c + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/errno.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/crm_regs.h> +#include <asm/arch/clock.h> +#include <asm/arch/mx35_pins.h> +#include <asm/arch/iomux.h> +#include <i2c.h> +#include <pmic.h> +#include <fsl_pmic.h> +#include <mc13892.h> +#include <mmc.h> +#include <fsl_esdhc.h> +#include <linux/types.h> +#include <asm/gpio.h> +#include <asm/arch/sys_proto.h> +#include <netdev.h> +#include <spl.h> + +#define CCM_CCMR_CONFIG		0x003F4208 + +#define ESDCTL_DDR2_CONFIG	0x007FFC3F + +/* For MMC */ +#define GPIO_MMC_CD	7 +#define GPIO_MMC_WP	8 + +DECLARE_GLOBAL_DATA_PTR; + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1, +		PHYS_SDRAM_1_SIZE); + +	return 0; +} + +static void board_setup_sdram(void) +{ +	struct esdc_regs *esdc = (struct esdc_regs *)ESDCTL_BASE_ADDR; + +	/* Initialize with default values both CSD0/1 */ +	writel(0x2000, &esdc->esdctl0); +	writel(0x2000, &esdc->esdctl1); + +	mx3_setup_sdram_bank(CSD0_BASE_ADDR, ESDCTL_DDR2_CONFIG, +		 13, 10, 2, 0x8080); +} + +static void setup_iomux_fec(void) +{ +	/* setup pins for FEC */ +	mxc_request_iomux(MX35_PIN_FEC_TX_CLK, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_RX_CLK, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_RX_DV, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_COL, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_RDATA0, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_TDATA0, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_TX_EN, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_MDC, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_MDIO, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_TX_ERR, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_RX_ERR, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_CRS, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_RDATA1, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_TDATA1, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_RDATA2, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_TDATA2, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_RDATA3, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_FEC_TDATA3, MUX_CONFIG_FUNC); +} + +int woodburn_init(void) +{ +	struct ccm_regs *ccm = +		(struct ccm_regs *)IMX_CCM_BASE; + +	/* initialize PLL and clock configuration */ +	writel(CCM_CCMR_CONFIG, &ccm->ccmr); + +	/* Set-up RAM */ +	board_setup_sdram(); + +	/* enable clocks */ +	writel(readl(&ccm->cgr0) | +		MXC_CCM_CGR0_EMI_MASK | +		MXC_CCM_CGR0_EDIO_MASK | +		MXC_CCM_CGR0_EPIT1_MASK, +		&ccm->cgr0); + +	writel(readl(&ccm->cgr1) | +		MXC_CCM_CGR1_FEC_MASK | +		MXC_CCM_CGR1_GPIO1_MASK | +		MXC_CCM_CGR1_GPIO2_MASK | +		MXC_CCM_CGR1_GPIO3_MASK | +		MXC_CCM_CGR1_I2C1_MASK | +		MXC_CCM_CGR1_I2C2_MASK | +		MXC_CCM_CGR1_I2C3_MASK, +		&ccm->cgr1); + +	/* Set-up NAND */ +	__raw_writel(readl(&ccm->rcsr) | MXC_CCM_RCSR_NFC_FMS, &ccm->rcsr); + +	/* Set pinmux for the required peripherals */ +	setup_iomux_fec(); + +	/* setup GPIO1_4 FEC_ENABLE signal */ +	mxc_request_iomux(MX35_PIN_SCKR, MUX_CONFIG_ALT5); +	gpio_direction_output(4, 1); +	mxc_request_iomux(MX35_PIN_HCKT, MUX_CONFIG_ALT5); +	gpio_direction_output(9, 0); +	gpio_set_value(9, 1); + +	return 0; +} + +#if defined(CONFIG_SPL_BUILD) +void board_init_f(ulong dummy) +{ +	/* Set the stack pointer. */ +	asm volatile("mov sp, %0\n" : : "r"(CONFIG_SPL_STACK)); + +	/* Initialize MUX and SDRAM */ +	woodburn_init(); + +	/* Clear the BSS. */ +	memset(__bss_start, 0, __bss_end__ - __bss_start); + +	/* Set global data pointer. */ +	gd = &gdata; + +	preloader_console_init(); +	timer_init(); + +	board_init_r(NULL, 0); +} + +void spl_board_init(void) +{ +} + +#endif + + +/* Booting from NOR in external mode */ +int board_early_init_f(void) +{ +	return woodburn_init(); +} + + +int board_init(void) +{ +	struct pmic *p; +	u32 val; + +	/* address of boot parameters */ +	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; + +	pmic_init(); +	p = get_pmic(); + +	/* +	 * Set switchers in Auto in NORMAL mode & STANDBY mode +	 * Setup the switcher mode for SW1 & SW2 +	 */ +	pmic_reg_read(p, REG_SW_4, &val); +	val = (val & ~((SWMODE_MASK << SWMODE1_SHIFT) | +		(SWMODE_MASK << SWMODE2_SHIFT))); +	val |= (SWMODE_AUTO_AUTO << SWMODE1_SHIFT) | +		(SWMODE_AUTO_AUTO << SWMODE2_SHIFT); +	/* Set SWILIMB */ +	val |= (1 << 22); +	pmic_reg_write(p, REG_SW_4, val); + +	/* Setup the switcher mode for SW3 & SW4 */ +	pmic_reg_read(p, REG_SW_5, &val); +	val &= ~((SWMODE_MASK << SWMODE4_SHIFT) | +		(SWMODE_MASK << SWMODE3_SHIFT)); +	val |= (SWMODE_AUTO_AUTO << SWMODE4_SHIFT) | +		(SWMODE_AUTO_AUTO << SWMODE3_SHIFT); +	pmic_reg_write(p, REG_SW_5, val); + +	/* Set VGEN1 to 3.15V */ +	pmic_reg_read(p, REG_SETTING_0, &val); +	val &= ~(VGEN1_MASK); +	val |= VGEN1_3_15; +	pmic_reg_write(p, REG_SETTING_0, val); + +	pmic_reg_read(p, REG_MODE_0, &val); +	val |= VGEN1EN; +	pmic_reg_write(p, REG_MODE_0, val); +	udelay(2000); + +	return 0; +} + +#if defined(CONFIG_FSL_ESDHC) +struct fsl_esdhc_cfg esdhc_cfg = {MMC_SDHC1_BASE_ADDR}; + +int board_mmc_init(bd_t *bis) +{ +	/* configure pins for SDHC1 only */ +	mxc_request_iomux(MX35_PIN_SD1_CMD, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_SD1_CLK, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_SD1_DATA0, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_SD1_DATA1, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_SD1_DATA2, MUX_CONFIG_FUNC); +	mxc_request_iomux(MX35_PIN_SD1_DATA3, MUX_CONFIG_FUNC); + +	/* MMC Card Detect on GPIO1_7 */ +	mxc_request_iomux(MX35_PIN_SCKT, MUX_CONFIG_ALT5); +	mxc_iomux_set_input(MUX_IN_GPIO1_IN_7, 0x1); +	gpio_direction_input(GPIO_MMC_CD); + +	mxc_request_iomux(MX35_PIN_FST, MUX_CONFIG_ALT5); +	mxc_iomux_set_input(MUX_IN_GPIO1_IN_8, 0x1); +	gpio_direction_output(GPIO_MMC_WP, 0); + +	esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK); + +	return fsl_esdhc_initialize(bis, &esdhc_cfg); +} + +int board_mmc_getcd(struct mmc *mmc) +{ +	return !gpio_get_value(GPIO_MMC_CD); +} +#endif + +u32 get_board_rev(void) +{ +	int rev = 0; + +	return (get_cpu_rev() & ~(0xF << 8)) | (rev & 0xF) << 8; +} diff --git a/boards.cfg b/boards.cfg index 4dd989383..6f21af082 100644 --- a/boards.cfg +++ b/boards.cfg @@ -50,6 +50,8 @@ tt01                         arm         arm1136     -                   hale  imx31_litekit                arm         arm1136     -                   logicpd        mx31  flea3                        arm         arm1136     -                   CarMediaLab    mx35  mx35pdk                      arm         arm1136     -                   freescale      mx35 +woodburn                     arm         arm1136     -                   -              mx35 +woodburn_sd                  arm         arm1136     woodburn            -              mx35        woodburn_sd:IMX_CONFIG=board/woodburn/imximage.cfg  omap2420h4                   arm         arm1136     -                   ti             omap24xx  tnetv107x_evm                arm         arm1176     tnetv107xevm        ti             tnetv107x  rpi_b                        arm         arm1176     rpi_b               raspberrypi    bcm2835 diff --git a/drivers/misc/pmic_fsl.c b/drivers/misc/pmic_fsl.c index 0ff75ed76..c8d4c8d9e 100644 --- a/drivers/misc/pmic_fsl.c +++ b/drivers/misc/pmic_fsl.c @@ -26,6 +26,12 @@  #include <pmic.h>  #include <fsl_pmic.h> +#if defined(CONFIG_PMIC_FSL_MC13892) +#define FSL_PMIC_I2C_LENGTH	3 +#elif defined(CONFIG_PMIC_FSL_MC34704) +#define FSL_PMIC_I2C_LENGTH	1 +#endif +  #if defined(CONFIG_PMIC_SPI)  static u32 pmic_spi_prepare_tx(u32 reg, u32 *val, u32 write)  { @@ -53,7 +59,7 @@ int pmic_init(void)  #elif defined(CONFIG_PMIC_I2C)  	p->interface = PMIC_I2C;  	p->hw.i2c.addr = CONFIG_SYS_FSL_PMIC_I2C_ADDR; -	p->hw.i2c.tx_num = 3; +	p->hw.i2c.tx_num = FSL_PMIC_I2C_LENGTH;  	p->bus = I2C_PMIC;  #else  #error "You must select CONFIG_PMIC_SPI or CONFIG_PMIC_I2C" diff --git a/include/configs/mx25pdk.h b/include/configs/mx25pdk.h index bd000a7f0..a4bd8b0ae 100644 --- a/include/configs/mx25pdk.h +++ b/include/configs/mx25pdk.h @@ -19,8 +19,10 @@  /* High Level Configuration Options */ +#define CONFIG_MX25  #define CONFIG_SYS_HZ			1000  #define CONFIG_SYS_TEXT_BASE		0x81200000 +#define CONFIG_MXC_GPIO  #define CONFIG_DISPLAY_CPUINFO  #define CONFIG_DISPLAY_BOARDINFO @@ -41,6 +43,7 @@  #define PHYS_SDRAM_1_SIZE	(64 * 1024 * 1024)  #define CONFIG_BOARD_EARLY_INIT_F +#define CONFIG_BOARD_LATE_INIT  #define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1  #define CONFIG_SYS_INIT_RAM_ADDR	IMX_RAM_BASE @@ -64,9 +67,10 @@  /* No NOR flash present */  #define CONFIG_ENV_OFFSET      (6 * 64 * 1024)  #define CONFIG_ENV_SIZE        (8 * 1024) -#define CONFIG_ENV_IS_NOWHERE  #define CONFIG_SYS_NO_FLASH +#define CONFIG_ENV_IS_IN_MMC +#define CONFIG_SYS_MMC_ENV_DEV 0  /* U-Boot general configuration */  #define CONFIG_SYS_PROMPT	"MX25PDK U-Boot > " @@ -83,7 +87,11 @@  /* U-Boot commands */  #include <config_cmd_default.h> +#define CONFIG_CMD_BOOTZ  #define CONFIG_CMD_CACHE +#define CONFIG_CMD_MMC +#define CONFIG_CMD_EXT2 +#define CONFIG_CMD_FAT  /* Ethernet */  #define CONFIG_FEC_MXC @@ -92,6 +100,36 @@  #define CONFIG_CMD_NET  #define CONFIG_ENV_OVERWRITE +/* ESDHC driver */ +#define CONFIG_MMC +#define CONFIG_GENERIC_MMC +#define CONFIG_FSL_ESDHC +#define CONFIG_SYS_FSL_ESDHC_ADDR	0 +#define CONFIG_SYS_FSL_ESDHC_NUM	1 + +/* PMIC Configs */ +#define CONFIG_PMIC +#define CONFIG_PMIC_I2C +#define CONFIG_PMIC_FSL +#define CONFIG_PMIC_FSL_MC34704 +#define CONFIG_SYS_FSL_PMIC_I2C_ADDR	0x54 + +#define CONFIG_DOS_PARTITION + +/* I2C Configs */ +#define CONFIG_CMD_I2C +#define CONFIG_HARD_I2C +#define CONFIG_I2C_MXC +#define CONFIG_SYS_I2C_BASE		IMX_I2C_BASE +#define CONFIG_SYS_I2C_SPEED		100000 + +/* Ethernet Configs */ + +#define CONFIG_CMD_PING +#define CONFIG_CMD_DHCP +#define CONFIG_CMD_MII +#define CONFIG_CMD_NET +  #define CONFIG_BOOTDELAY	3  #define CONFIG_LOADADDR		0x81000000	/* loadaddr env var */ diff --git a/include/configs/mx35pdk.h b/include/configs/mx35pdk.h index 826c91249..d89db7af1 100644 --- a/include/configs/mx35pdk.h +++ b/include/configs/mx35pdk.h @@ -68,6 +68,7 @@  #define CONFIG_PMIC  #define CONFIG_PMIC_I2C  #define CONFIG_PMIC_FSL +#define CONFIG_PMIC_FSL_MC13892  #define CONFIG_SYS_FSL_PMIC_I2C_ADDR	0x08  #define CONFIG_RTC_MC13XXX @@ -94,6 +95,7 @@  #include <config_cmd_default.h> +#define CONFIG_CMD_BOOTZ  #define CONFIG_CMD_PING  #define CONFIG_CMD_DHCP  #define CONFIG_BOOTP_SUBNETMASK diff --git a/include/configs/mx51evk.h b/include/configs/mx51evk.h index 225d359ec..89feaed7d 100644 --- a/include/configs/mx51evk.h +++ b/include/configs/mx51evk.h @@ -144,7 +144,7 @@   ***********************************************************/  #include <config_cmd_default.h> - +#define CONFIG_CMD_BOOTZ  #undef CONFIG_CMD_IMLS  #define CONFIG_CMD_DATE diff --git a/include/configs/mx53evk.h b/include/configs/mx53evk.h index d1f684cbc..c472075c9 100644 --- a/include/configs/mx53evk.h +++ b/include/configs/mx53evk.h @@ -59,6 +59,7 @@  #define CONFIG_PMIC_I2C  #define CONFIG_PMIC_FSL  #define CONFIG_SYS_FSL_PMIC_I2C_ADDR    8 +#define CONFIG_PMIC_FSL_MC13892  #define CONFIG_RTC_MC13XXX  /* MMC Configs */ diff --git a/include/configs/mx53loco.h b/include/configs/mx53loco.h index a1b27cef5..a62ea7859 100644 --- a/include/configs/mx53loco.h +++ b/include/configs/mx53loco.h @@ -93,6 +93,7 @@  #define CONFIG_PMIC_I2C  #define CONFIG_DIALOG_PMIC  #define CONFIG_PMIC_FSL +#define CONFIG_PMIC_FSL_MC13892  #define CONFIG_SYS_DIALOG_PMIC_I2C_ADDR	0x48  #define CONFIG_SYS_FSL_PMIC_I2C_ADDR	0x8 @@ -103,6 +104,7 @@  /* Command definition */  #include <config_cmd_default.h> +#define CONFIG_CMD_BOOTZ  #undef CONFIG_CMD_IMLS diff --git a/include/configs/mx6qsabre_common.h b/include/configs/mx6qsabre_common.h index bfb9cd468..fa38d791d 100644 --- a/include/configs/mx6qsabre_common.h +++ b/include/configs/mx6qsabre_common.h @@ -72,6 +72,7 @@  /* Command definition */  #include <config_cmd_default.h> +#define CONFIG_CMD_BOOTZ  #undef CONFIG_CMD_IMLS  #define CONFIG_BOOTDELAY               3 diff --git a/include/configs/woodburn.h b/include/configs/woodburn.h new file mode 100644 index 000000000..95a71c45b --- /dev/null +++ b/include/configs/woodburn.h @@ -0,0 +1,34 @@ +/* + * (C) Copyright 2011, Stefano Babic <sbabic@denx.de> + * + * (C) Copyright 2008-2010 Freescale Semiconductor, Inc. + * + * Configuration for the woodburn board. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#include <asm/arch/imx-regs.h> +#include "woodburn_common.h" + +/* Set TEXT at the beginning of the NOR flash */ +#define CONFIG_SYS_TEXT_BASE	0xA0000000 +#define CONFIG_BOARD_EARLY_INIT_F + +#endif				/* __CONFIG_H */ diff --git a/include/configs/woodburn_common.h b/include/configs/woodburn_common.h new file mode 100644 index 000000000..58a96cffc --- /dev/null +++ b/include/configs/woodburn_common.h @@ -0,0 +1,313 @@ +/* + * (C) Copyright 2011, Stefano Babic <sbabic@denx.de> + * + * (C) Copyright 2008-2010 Freescale Semiconductor, Inc. + * + * Configuration for the woodburn board. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __WOODBURN_COMMON_CONFIG_H +#define __WOODBURN_COMMON_CONFIG_H + +#include <asm/arch/imx-regs.h> + + /* High Level Configuration Options */ +#define CONFIG_ARM1136	/* This is an arm1136 CPU core */ +#define CONFIG_MX35 +#define CONFIG_MX35_HCLK_FREQ	24000000 + +#define CONFIG_SYS_DCACHE_OFF +#define CONFIG_SYS_CACHELINE_SIZE	32 + +#define CONFIG_DISPLAY_CPUINFO + +/* Only in case the value is not present in mach-types.h */ +#ifndef MACH_TYPE_FLEA3 +#define MACH_TYPE_FLEA3                3668 +#endif + +#define CONFIG_MACH_TYPE		MACH_TYPE_FLEA3 + +/* This is required to setup the ESDC controller */ + +#define CONFIG_CMDLINE_TAG		/* enable passing of ATAGs */ +#define CONFIG_REVISION_TAG +#define CONFIG_SETUP_MEMORY_TAGS +#define CONFIG_INITRD_TAG + +/* + * Size of malloc() pool + */ +#define CONFIG_SYS_MALLOC_LEN		(CONFIG_ENV_SIZE + 1024 * 1024) + +/* + * Hardware drivers + */ +#define CONFIG_HARD_I2C +#define CONFIG_I2C_MXC +#define CONFIG_SYS_I2C_BASE		I2C1_BASE_ADDR +#define CONFIG_SYS_I2C_SPEED		100000 +#define CONFIG_MXC_SPI +#define CONFIG_MXC_GPIO + +/* PMIC Controller */ +#define CONFIG_PMIC +#define CONFIG_PMIC_I2C +#define CONFIG_PMIC_FSL_MC13892 +#define CONFIG_PMIC_FSL +#define CONFIG_SYS_FSL_PMIC_I2C_ADDR	0x8 +#define CONFIG_RTC_MC13XXX + + +/* mmc driver */ +#define CONFIG_MMC +#define CONFIG_GENERIC_MMC +#define CONFIG_FSL_ESDHC +#define CONFIG_SYS_FSL_ESDHC_ADDR	0 +#define CONFIG_SYS_FSL_ESDHC_NUM	1 + +/* + * UART (console) + */ +#define CONFIG_MXC_UART +#define CONFIG_MXC_UART_BASE	UART1_BASE + +/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE +#define CONFIG_CONS_INDEX	1 +#define CONFIG_BAUDRATE		115200 + +/* + * Command definition + */ + +#include <config_cmd_default.h> + +#define CONFIG_CMD_PING +#define CONFIG_CMD_DATE +#define CONFIG_CMD_DHCP +#define CONFIG_BOOTP_SUBNETMASK +#define CONFIG_BOOTP_GATEWAY +#define CONFIG_BOOTP_DNS + +#define CONFIG_CMD_NAND +#define CONFIG_CMD_CACHE + +#define CONFIG_CMD_I2C +#define CONFIG_CMD_SPI +#define CONFIG_CMD_MII +#define CONFIG_CMD_NET + +#define CONFIG_CMD_MMC +#define CONFIG_DOS_PARTITION +#define CONFIG_EFI_PARTITION +#define CONFIG_CMD_EXT2 +#define CONFIG_CMD_FAT + +#define CONFIG_CMD_GPIO +#define CONFIG_MXC_GPIO + +#define CONFIG_NET_RETRY_COUNT	100 + +#define CONFIG_BOOTDELAY	3 + +#define CONFIG_LOADADDR		0x80800000	/* loadaddr env var */ + + +/* + * Ethernet on SOC (FEC) + */ +#define CONFIG_FEC_MXC +#define IMX_FEC_BASE	FEC_BASE_ADDR +#define CONFIG_PHYLIB +#define CONFIG_PHY_MICREL +#define CONFIG_FEC_MXC_PHYADDR	0x1 + +#define CONFIG_MII +#define CONFIG_DISCOVER_PHY + +#define CONFIG_ARP_TIMEOUT	200UL + +/* + * Miscellaneous configurable options + */ +#define CONFIG_SYS_LONGHELP	/* undef to save memory */ +#define CONFIG_SYS_PROMPT	"woodburn U-Boot > " +#define CONFIG_CMDLINE_EDITING +#define CONFIG_SYS_HUSH_PARSER	/* Use the HUSH parser */ + +#define CONFIG_AUTO_COMPLETE +#define CONFIG_SYS_CBSIZE	256	/* Console I/O Buffer Size */ +/* Print Buffer Size */ +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16) +#define CONFIG_SYS_MAXARGS	16	/* max number of command args */ +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */ + +#define CONFIG_SYS_MEMTEST_START	0	/* memtest works on */ +#define CONFIG_SYS_MEMTEST_END		0x10000 + +#undef	CONFIG_SYS_CLKS_IN_HZ	/* everything, incl board info, in Hz */ + +#define CONFIG_SYS_LOAD_ADDR		CONFIG_LOADADDR + +#define CONFIG_SYS_HZ				1000 + + +/* + * Stack sizes + * + * The stack sizes are set up in start.S using the settings below + */ +#define CONFIG_STACKSIZE	(128 * 1024)	/* regular stack */ + +/* + * Physical Memory Map + */ +#define CONFIG_NR_DRAM_BANKS	1 +#define PHYS_SDRAM_1		CSD0_BASE_ADDR +#define PHYS_SDRAM_1_SIZE	(256 * 1024 * 1024) + +#define CONFIG_SYS_SDRAM_BASE		CSD0_BASE_ADDR + +#define CONFIG_SYS_GBL_DATA_OFFSET	(LOW_LEVEL_SRAM_STACK - \ +						IRAM_BASE_ADDR - \ +						GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_SP_ADDR		(IRAM_BASE_ADDR + \ +					CONFIG_SYS_GBL_DATA_OFFSET) + +/* + * MTD Command for mtdparts + */ +#define CONFIG_CMD_MTDPARTS +#define CONFIG_MTD_DEVICE +#define CONFIG_FLASH_CFI_MTD +#define CONFIG_MTD_PARTITIONS +#define MTDIDS_DEFAULT		"nand0=mxc_nand,nor0=physmap-flash.0" +#define MTDPARTS_DEFAULT	"mtdparts=mxc_nand:50m(root1)," \ +				"32m(rootfb)," \ +				"64m(pcache)," \ +				"64m(app1)," \ +				"10m(app2),-(spool);" \ +				"physmap-flash.0:512k(u-boot),64k(env1)," \ +				"64k(env2),3776k(kernel1),3776k(kernel2)" + +/* + * FLASH and environment organization + */ +#define CONFIG_SYS_FLASH_BASE		CS0_BASE_ADDR +#define CONFIG_SYS_MAX_FLASH_BANKS 1	/* max number of memory banks */ +#define CONFIG_SYS_MAX_FLASH_SECT 512	/* max number of sectors on one chip */ +/* Monitor at beginning of flash */ +#define CONFIG_SYS_MONITOR_BASE	CONFIG_SYS_FLASH_BASE +#define CONFIG_SYS_MONITOR_LEN		(512 * 1024) + +#define CONFIG_ENV_SECT_SIZE	(128 * 1024) +#define CONFIG_ENV_SIZE		CONFIG_ENV_SECT_SIZE + +/* Address and size of Redundant Environment Sector	*/ +#define CONFIG_ENV_OFFSET_REDUND	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) +#define CONFIG_ENV_SIZE_REDUND	CONFIG_ENV_SIZE + +#define CONFIG_ENV_ADDR		(CONFIG_SYS_MONITOR_BASE + \ +				CONFIG_SYS_MONITOR_LEN) + +#define CONFIG_ENV_IS_IN_FLASH + +/* + * CFI FLASH driver setup + */ +#define CONFIG_SYS_FLASH_CFI		/* Flash memory is CFI compliant */ +#define CONFIG_FLASH_CFI_DRIVER + +/* A non-standard buffered write algorithm */ +#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE	/* faster */ +#define CONFIG_SYS_FLASH_PROTECTION	/* Use hardware sector protection */ + +/* + * NAND FLASH driver setup + */ +#define CONFIG_NAND_MXC +#define CONFIG_NAND_MXC_V1_1 +#define CONFIG_MXC_NAND_REGS_BASE	(NFC_BASE_ADDR) +#define CONFIG_SYS_MAX_NAND_DEVICE	1 +#define CONFIG_SYS_NAND_BASE		(NFC_BASE_ADDR) +#define CONFIG_MXC_NAND_HWECC +#define CONFIG_SYS_NAND_LARGEPAGE + +#if 0 +#define CONFIG_MTD_DEBUG +#define CONFIG_MTD_DEBUG_VERBOSE	7 +#endif +#define CONFIG_SYS_NAND_ONFI_DETECTION + +/* + * Default environment and default scripts + * to update uboot and load kernel + */ +#define xstr(s)	str(s) +#define str(s)	#s + +#define CONFIG_HOSTNAME woodburn +#define	CONFIG_EXTRA_ENV_SETTINGS					\ +	"netdev=eth0\0"							\ +	"nfsargs=setenv bootargs root=/dev/nfs rw "			\ +		"nfsroot=${serverip}:${rootpath}\0"			\ +	"ramargs=setenv bootargs root=/dev/ram rw\0"			\ +	"addip_sta=setenv bootargs ${bootargs} "			\ +		"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"	\ +		":${hostname}:${netdev}:off panic=1\0"			\ +	"addip_dyn=setenv bootargs ${bootargs} ip=dhcp\0"		\ +	"addip=if test -n ${ipdyn};then run addip_dyn;"			\ +		"else run addip_sta;fi\0"	\ +	"addmtd=setenv bootargs ${bootargs} ${mtdparts}\0"		\ +	"addtty=setenv bootargs ${bootargs}"				\ +		" console=ttymxc0,${baudrate}\0"			\ +	"addmisc=setenv bootargs ${bootargs} ${misc}\0"			\ +	"loadaddr=80800000\0"						\ +	"kernel_addr_r=80800000\0"					\ +	"hostname=" xstr(CONFIG_HOSTNAME) "\0"				\ +	"bootfile=" xstr(CONFIG_HOSTNAME) "/uImage\0"			\ +	"ramdisk_file=" xstr(CONFIG_HOSTNAME) "/uRamdisk\0"		\ +	"flash_self=run ramargs addip addtty addmtd addmisc;"		\ +		"bootm ${kernel_addr} ${ramdisk_addr}\0"		\ +	"flash_nfs=run nfsargs addip addtty addmtd addmisc;"		\ +		"bootm ${kernel_addr}\0"				\ +	"net_nfs=tftp ${kernel_addr_r} ${bootfile}; "			\ +		"run nfsargs addip addtty addmtd addmisc;"		\ +		"bootm ${kernel_addr_r}\0"				\ +	"net_self_load=tftp ${kernel_addr_r} ${bootfile};"		\ +		"tftp ${ramdisk_addr_r} ${ramdisk_file};\0"		\ +	"net_self=if run net_self_load;then "				\ +		"run ramargs addip addtty addmtd addmisc;"		\ +		"bootm ${kernel_addr_r} ${ramdisk_addr_r};"		\ +		"else echo Images not loades;fi\0"			\ +	"u-boot=" xstr(CONFIG_HOSTNAME) "/u-boot.bin\0"			\ +	"load=tftp ${loadaddr} ${u-boot}\0"				\ +	"uboot_addr=" xstr(CONFIG_SYS_MONITOR_BASE) "\0"		\ +	"update=protect off ${uboot_addr} +80000;"			\ +		"erase ${uboot_addr} +80000;"				\ +		"cp.b ${loadaddr} ${uboot_addr} ${filesize}\0"		\ +	"upd=if run load;then echo Updating u-boot;if run update;"	\ +		"then echo U-Boot updated;"				\ +			"else echo Error updating u-boot !;"		\ +			"echo Board without bootloader !!;"		\ +		"fi;"							\ +		"else echo U-Boot not downloaded..exiting;fi\0"		\ +	"bootcmd=run net_nfs\0" + +#endif				/* __CONFIG_H */ diff --git a/include/configs/woodburn_sd.h b/include/configs/woodburn_sd.h new file mode 100644 index 000000000..63185c543 --- /dev/null +++ b/include/configs/woodburn_sd.h @@ -0,0 +1,60 @@ +/* + * (C) Copyright 2011, Stefano Babic <sbabic@denx.de> + * + * (C) Copyright 2008-2010 Freescale Semiconductor, Inc. + * + * Configuration for the woodburn board. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#include <asm/arch/imx-regs.h> +#include "woodburn_common.h" + +/* Set TEXT in RAM */ +#define CONFIG_SYS_TEXT_BASE	0x82000000 + +#define CONFIG_BOOT_INTERNAL + +/* + * SPL + */ +#define	CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK +#define	CONFIG_SPL_LDSCRIPT	"arch/arm/cpu/arm1136/u-boot-spl.lds" +#define	CONFIG_SPL_LIBCOMMON_SUPPORT +#define	CONFIG_SPL_LIBGENERIC_SUPPORT +#define CONFIG_SPL_LIBDISK_SUPPORT +#define CONFIG_SPL_SERIAL_SUPPORT +#define CONFIG_SPL_MMC_SUPPORT +#define CONFIG_SPL_BOARD_INIT +#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR	0x100 /* address 0x60000 */ +#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS	0x400 /* 512 KB */ +#define	CONFIG_SPL_GPIO_SUPPORT + +#define CONFIG_SPL_TEXT_BASE		0x10002300 +#define CONFIG_SPL_MAX_SIZE		(64 * 1024)	/* 8 KB for stack */ +#define CONFIG_SPL_STACK		LOW_LEVEL_SRAM_STACK + +#define CONFIG_SYS_SPL_MALLOC_START	0x8f000000 +#define CONFIG_SYS_SPL_MALLOC_SIZE	0x80000 +#define CONFIG_SPL_BSS_START_ADDR	0x8f080000 /* end of RAM */ +#define CONFIG_SPL_BSS_MAX_SIZE		0x80000 + +#endif				/* __CONFIG_H */ diff --git a/include/mc34704.h b/include/mc34704.h new file mode 100644 index 000000000..6611d54ae --- /dev/null +++ b/include/mc34704.h @@ -0,0 +1,49 @@ +/* + * (C) Copyright 2012 Freescale Semiconductor, Inc. + * + * 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. + * + */ + +#ifndef __MC34704_H__ +#define __MC34704_H__ + +enum { +	MC34704_RESERVED0_REG = 0,	/* 0x00 */ +	MC34704_GENERAL1_REG,		/* 0x01 */ +	MC34704_GENERAL2_REG,		/* 0x02 */ +	MC34704_GENERAL3_REG,		/* 0x03 */ +	MC34704_RESERVED4_REG,		/* 0x04 */ +	MC34704_VGSET2_REG,		/* 0x05 */ +	MC34704_REG2SET1_REG,		/* 0x06 */ +	MC34704_REG2SET2_REG,		/* 0x07 */ +	MC34704_REG3SET1_REG,		/* 0x08 */ +	MC34704_REG3SET2_REG,		/* 0x09 */ +	MC34704_REG4SET1_REG,		/* 0x0a */ +	MC34704_REG4SET2_REG,		/* 0x0b */ +	MC34704_REG5SET1_REG,		/* 0x0c */ +	MC34704_REG5SET2_REG,		/* 0x0d */ +	MC34704_REG5SET3_REG,		/* 0x0e */ +	MC34704_RESERVEDF_REG,		/* 0x0f */ +	MC34704_RESERVED10_REG,		/* 0x10 */ +	MC34704_RESERVED11_REG,		/* 0x11 */ +	MC34704_RESERVED12_REG,		/* 0x12 */ +	MC34704_FSW2SET_REG,		/* 0x13 */ +	MC34704_RESERVED14_REG,		/* 0x14 */ +	MC34704_REG8SET1_REG,		/* 0x15 */ +	MC34704_REG8SET2_REG,		/* 0x16 */ +	MC34704_REG8SET3_REG,		/* 0x17 */ +	MC34704_FAULTS_REG,		/* 0x18 */ +	MC34704_I2CSET1,		/* 0x19 */ +	MC34704_NUM_OF_REGS, +}; + +/* GENERAL2 register fields */ +#define ONOFFE		(1 << 0) +#define ONOFFD		(1 << 1) +#define ALLOFF		(1 << 4) + +#endif /* __MC34704_H__ */ diff --git a/nand_spl/board/freescale/mx31pdk/u-boot.lds b/nand_spl/board/freescale/mx31pdk/u-boot.lds index da49c100c..a26110f39 100644 --- a/nand_spl/board/freescale/mx31pdk/u-boot.lds +++ b/nand_spl/board/freescale/mx31pdk/u-boot.lds @@ -54,6 +54,8 @@ SECTIONS  	. = ALIGN(4); +	__image_copy_end = .; +  	.rel.dyn : {  		__rel_dyn_start = .;  		*(.rel*) diff --git a/spl/Makefile b/spl/Makefile index 3195390b2..6a79c3cd3 100644 --- a/spl/Makefile +++ b/spl/Makefile @@ -120,6 +120,12 @@ $(OBJTREE)/MLO.byteswap: $(obj)u-boot-spl.bin  	$(OBJTREE)/tools/mkimage -T omapimage -n byteswap \  		-a $(CONFIG_SPL_TEXT_BASE) -d $< $@ +ifneq ($(CONFIG_IMX_CONFIG),) +$(OBJTREE)/SPL:	$(obj)u-boot-spl.bin +	$(OBJTREE)/tools/mkimage -n  $(SRCTREE)/$(CONFIG_IMX_CONFIG) -T imximage \ +		-e $(CONFIG_SPL_TEXT_BASE) -d $< $@ +endif +  ALL-y	+= $(obj)u-boot-spl.bin  ifdef CONFIG_SAMSUNG |