diff options
Diffstat (limited to 'arch/powerpc')
| -rw-r--r-- | arch/powerpc/cpu/mpc512x/speed.c | 6 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/cmd_errata.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/cpu.c | 18 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/cpu_init.c | 14 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/fdt.c | 7 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/p2041_ids.c | 20 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/p3041_ids.c | 20 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/p5020_ids.c | 20 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/portals.c | 20 | ||||
| -rw-r--r-- | arch/powerpc/cpu/ppc4xx/Makefile | 4 | ||||
| -rw-r--r-- | arch/powerpc/cpu/ppc4xx/spl_boot.c | 72 | ||||
| -rw-r--r-- | arch/powerpc/cpu/ppc4xx/start.S | 37 | ||||
| -rw-r--r-- | arch/powerpc/cpu/ppc4xx/u-boot-spl.lds | 74 | ||||
| -rw-r--r-- | arch/powerpc/cpu/ppc4xx/u-boot.lds | 2 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/config_mpc85xx.h | 12 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/fsl_memac.h | 4 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/immap_85xx.h | 12 | ||||
| -rw-r--r-- | arch/powerpc/lib/board.c | 9 | 
19 files changed, 294 insertions, 64 deletions
| diff --git a/arch/powerpc/cpu/mpc512x/speed.c b/arch/powerpc/cpu/mpc512x/speed.c index 9a8f315d8..676187784 100644 --- a/arch/powerpc/cpu/mpc512x/speed.c +++ b/arch/powerpc/cpu/mpc512x/speed.c @@ -151,9 +151,3 @@ U_BOOT_CMD(clocks, 1, 0, do_clocks,  	"print clock configuration",  	"    clocks"  ); - -int prt_mpc512x_clks (void) -{ -	do_clocks (NULL, 0, 0, NULL); -	return (0); -} diff --git a/arch/powerpc/cpu/mpc85xx/cmd_errata.c b/arch/powerpc/cpu/mpc85xx/cmd_errata.c index 5d72f4c34..422782ca8 100644 --- a/arch/powerpc/cpu/mpc85xx/cmd_errata.c +++ b/arch/powerpc/cpu/mpc85xx/cmd_errata.c @@ -255,6 +255,9 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  #ifdef CONFIG_SYS_P4080_ERRATUM_PCIE_A003  	puts("Work-around for Erratum PCIe-A003 enabled\n");  #endif +#ifdef CONFIG_SYS_FSL_ERRATUM_USB14 +	puts("Work-around for Erratum USB14 enabled\n"); +#endif  	return 0;  } diff --git a/arch/powerpc/cpu/mpc85xx/cpu.c b/arch/powerpc/cpu/mpc85xx/cpu.c index df2ab6d73..6ce483e17 100644 --- a/arch/powerpc/cpu/mpc85xx/cpu.c +++ b/arch/powerpc/cpu/mpc85xx/cpu.c @@ -282,14 +282,6 @@ unsigned long get_tbclk (void)  #if defined(CONFIG_WATCHDOG)  void -watchdog_reset(void) -{ -	int re_enable = disable_interrupts(); -	reset_85xx_watchdog(); -	if (re_enable) enable_interrupts(); -} - -void  reset_85xx_watchdog(void)  {  	/* @@ -297,6 +289,16 @@ reset_85xx_watchdog(void)  	 */  	mtspr(SPRN_TSR, TSR_WIS);  } + +void +watchdog_reset(void) +{ +	int re_enable = disable_interrupts(); + +	reset_85xx_watchdog(); +	if (re_enable) +		enable_interrupts(); +}  #endif	/* CONFIG_WATCHDOG */  /* diff --git a/arch/powerpc/cpu/mpc85xx/cpu_init.c b/arch/powerpc/cpu/mpc85xx/cpu_init.c index de9d91611..53713e31d 100644 --- a/arch/powerpc/cpu/mpc85xx/cpu_init.c +++ b/arch/powerpc/cpu/mpc85xx/cpu_init.c @@ -623,6 +623,20 @@ skip_l2:  	}  #endif +#ifdef CONFIG_SYS_FSL_ERRATUM_USB14 +	/* On P204x/P304x/P50x0 Rev1.0, USB transmit will result internal +	 * multi-bit ECC errors which has impact on performance, so software +	 * should disable all ECC reporting from USB1 and USB2. +	 */ +	if (IS_SVR_REV(get_svr(), 1, 0)) { +		struct dcsr_dcfg_regs *dcfg = (struct dcsr_dcfg_regs *) +			(CONFIG_SYS_DCSRBAR + CONFIG_SYS_DCSR_DCFG_OFFSET); +		setbits_be32(&dcfg->ecccr1, +				(DCSR_DCFG_ECC_DISABLE_USB1 | +				 DCSR_DCFG_ECC_DISABLE_USB2)); +	} +#endif +  #ifdef CONFIG_FMAN_ENET  	fman_enet_init();  #endif diff --git a/arch/powerpc/cpu/mpc85xx/fdt.c b/arch/powerpc/cpu/mpc85xx/fdt.c index 24eb9789b..288f7b286 100644 --- a/arch/powerpc/cpu/mpc85xx/fdt.c +++ b/arch/powerpc/cpu/mpc85xx/fdt.c @@ -663,6 +663,13 @@ void ft_cpu_setup(void *blob, bd_t *bd)  #ifdef CONFIG_FSL_CORENET  	do_fixup_by_compat_u32(blob, "fsl,qoriq-clockgen-1.0",  		"clock-frequency", CONFIG_SYS_CLK_FREQ, 1); +	do_fixup_by_compat_u32(blob, "fsl,qoriq-clockgen-2", +		"clock-frequency", CONFIG_SYS_CLK_FREQ, 1); +	do_fixup_by_compat_u32(blob, "fsl,mpic", +		"clock-frequency", get_bus_freq(0)/2, 1); +#else +	do_fixup_by_compat_u32(blob, "fsl,mpic", +		"clock-frequency", get_bus_freq(0), 1);  #endif  	fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize); diff --git a/arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c b/arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c index 825a29238..b621adf4a 100644 --- a/arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c +++ b/arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c @@ -103,6 +103,10 @@ static const struct {  	{ 22, 168, FSL_SRDS_BANK_3 },  	{ 23, 169, FSL_SRDS_BANK_3 },  #endif +#if SRDS_MAX_BANK > 3 +	{ 24, 175, FSL_SRDS_BANK_4 }, +	{ 25, 176, FSL_SRDS_BANK_4 }, +#endif  };  int serdes_get_lane_idx(int lane) diff --git a/arch/powerpc/cpu/mpc85xx/p2041_ids.c b/arch/powerpc/cpu/mpc85xx/p2041_ids.c index 91d9cac56..ef685fea0 100644 --- a/arch/powerpc/cpu/mpc85xx/p2041_ids.c +++ b/arch/powerpc/cpu/mpc85xx/p2041_ids.c @@ -27,16 +27,16 @@  #ifdef CONFIG_SYS_DPAA_QBMAN  struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = {  	/* dqrr liodn, frame data liodn, liodn off, sdest */ -	SET_QP_INFO(1, 2, 1, 0), -	SET_QP_INFO(3, 4, 2, 1), -	SET_QP_INFO(5, 6, 3, 2), -	SET_QP_INFO(7, 8, 4, 3), -	SET_QP_INFO(9, 10, 5, 0), -	SET_QP_INFO(11, 12, 1, 1), -	SET_QP_INFO(13, 14, 2, 2), -	SET_QP_INFO(15, 16, 3, 3), -	SET_QP_INFO(17, 18, 4, 0), /* for now sdest to 0 */ -	SET_QP_INFO(19, 20, 5, 0), /* for now sdest to 0 */ +	SET_QP_INFO(1,  2,  1, 0), +	SET_QP_INFO(3,  4,  2, 1), +	SET_QP_INFO(5,  6,  3, 2), +	SET_QP_INFO(7,  8,  4, 3), +	SET_QP_INFO(9, 10,  5, 0), +	SET_QP_INFO(11, 12,  6, 1), +	SET_QP_INFO(13, 14,  7, 2), +	SET_QP_INFO(15, 16,  8, 3), +	SET_QP_INFO(17, 18,  9, 0), /* for now sdest to 0 */ +	SET_QP_INFO(19, 20, 10, 0), /* for now sdest to 0 */  };  #endif diff --git a/arch/powerpc/cpu/mpc85xx/p3041_ids.c b/arch/powerpc/cpu/mpc85xx/p3041_ids.c index e46a714dc..cab03f8ab 100644 --- a/arch/powerpc/cpu/mpc85xx/p3041_ids.c +++ b/arch/powerpc/cpu/mpc85xx/p3041_ids.c @@ -27,16 +27,16 @@  #ifdef CONFIG_SYS_DPAA_QBMAN  struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = {  	/* dqrr liodn, frame data liodn, liodn off, sdest */ -	SET_QP_INFO(1, 2, 1, 0), -	SET_QP_INFO(3, 4, 2, 1), -	SET_QP_INFO(5, 6, 3, 2), -	SET_QP_INFO(7, 8, 4, 3), -	SET_QP_INFO(9, 10, 5, 0), -	SET_QP_INFO(11, 12, 1, 1), -	SET_QP_INFO(13, 14, 2, 2), -	SET_QP_INFO(15, 16, 3, 3), -	SET_QP_INFO(17, 18, 4, 0), /* for now sdest to 0 */ -	SET_QP_INFO(19, 20, 5, 0), /* for now sdest to 0 */ +	SET_QP_INFO(1,  2,  1, 0), +	SET_QP_INFO(3,  4,  2, 1), +	SET_QP_INFO(5,  6,  3, 2), +	SET_QP_INFO(7,  8,  4, 3), +	SET_QP_INFO(9, 10,  5, 0), +	SET_QP_INFO(1, 12,  6, 1), +	SET_QP_INFO(13, 14,  7, 2), +	SET_QP_INFO(15, 16,  8, 3), +	SET_QP_INFO(17, 18,  9, 0), /* for now sdest to 0 */ +	SET_QP_INFO(19, 20, 10, 0), /* for now sdest to 0 */  };  #endif diff --git a/arch/powerpc/cpu/mpc85xx/p5020_ids.c b/arch/powerpc/cpu/mpc85xx/p5020_ids.c index e8c26bf44..ca05b9cb2 100644 --- a/arch/powerpc/cpu/mpc85xx/p5020_ids.c +++ b/arch/powerpc/cpu/mpc85xx/p5020_ids.c @@ -27,16 +27,16 @@  #ifdef CONFIG_SYS_DPAA_QBMAN  struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = {  	/* dqrr liodn, frame data liodn, liodn off, sdest */ -	SET_QP_INFO(1, 2, 1, 0), -	SET_QP_INFO(3, 4, 2, 1), -	SET_QP_INFO(5, 6, 3, 0), -	SET_QP_INFO(7, 8, 4, 1), -	SET_QP_INFO(9, 10, 5, 0), -	SET_QP_INFO(11, 12, 1, 1), -	SET_QP_INFO(13, 14, 2, 0), -	SET_QP_INFO(15, 16, 3, 1), -	SET_QP_INFO(17, 18, 4, 0), -	SET_QP_INFO(19, 20, 5, 1), +	SET_QP_INFO(1,  2,  1, 0), +	SET_QP_INFO(3,  4,  2, 1), +	SET_QP_INFO(5,  6,  3, 0), +	SET_QP_INFO(7,  8,  4, 1), +	SET_QP_INFO(9, 10,  5, 0), +	SET_QP_INFO(11, 12,  6, 1), +	SET_QP_INFO(13, 14,  7, 0), +	SET_QP_INFO(15, 16,  8, 1), +	SET_QP_INFO(17, 18,  9, 0), +	SET_QP_INFO(19, 20, 10, 1),  };  #endif diff --git a/arch/powerpc/cpu/mpc85xx/portals.c b/arch/powerpc/cpu/mpc85xx/portals.c index b59ef69f1..d529095ee 100644 --- a/arch/powerpc/cpu/mpc85xx/portals.c +++ b/arch/powerpc/cpu/mpc85xx/portals.c @@ -30,11 +30,9 @@  #include <asm/fsl_portals.h>  #include <asm/fsl_liodn.h> -static ccsr_qman_t *qman = (void *)CONFIG_SYS_FSL_QMAN_ADDR; -static ccsr_bman_t *bman = (void *)CONFIG_SYS_FSL_BMAN_ADDR; -  void setup_portals(void)  { +	ccsr_qman_t *qman = (void *)CONFIG_SYS_FSL_QMAN_ADDR;  #ifdef CONFIG_FSL_CORENET  	int i; @@ -166,6 +164,20 @@ static int fdt_qportal(void *blob, int off, int id, char *name,  			num = get_dpaa_liodn(dev, &liodns[0], id);  			ret = fdt_setprop(blob, childoff, "fsl,liodn",  					  &liodns[0], sizeof(u32) * num); +			if (!strncmp(name, "pme", 3)) { +				u32 pme_rev1, pme_rev2; +				ccsr_pme_t *pme_regs = +					(void *)CONFIG_SYS_FSL_CORENET_PME_ADDR; + +				pme_rev1 = in_be32(&pme_regs->pm_ip_rev_1); +				pme_rev2 = in_be32(&pme_regs->pm_ip_rev_2); +				ret = fdt_setprop(blob, childoff, +					"fsl,pme-rev1", &pme_rev1, sizeof(u32)); +				if (ret < 0) +					return ret; +				ret = fdt_setprop(blob, childoff, +					"fsl,pme-rev2", &pme_rev2, sizeof(u32)); +			}  #endif  		} else {  			return childoff; @@ -183,6 +195,7 @@ void fdt_fixup_qportals(void *blob)  	int off, err;  	unsigned int maj, min;  	unsigned int ip_cfg; +	ccsr_qman_t *qman = (void *)CONFIG_SYS_FSL_QMAN_ADDR;  	u32 rev_1 = in_be32(&qman->ip_rev_1);  	u32 rev_2 = in_be32(&qman->ip_rev_2);  	char compat[64]; @@ -272,6 +285,7 @@ void fdt_fixup_bportals(void *blob)  	int off, err;  	unsigned int maj, min;  	unsigned int ip_cfg; +	ccsr_bman_t *bman = (void *)CONFIG_SYS_FSL_BMAN_ADDR;  	u32 rev_1 = in_be32(&bman->ip_rev_1);  	u32 rev_2 = in_be32(&bman->ip_rev_2);  	char compat[64]; diff --git a/arch/powerpc/cpu/ppc4xx/Makefile b/arch/powerpc/cpu/ppc4xx/Makefile index 8da2f86e5..e301dc643 100644 --- a/arch/powerpc/cpu/ppc4xx/Makefile +++ b/arch/powerpc/cpu/ppc4xx/Makefile @@ -68,6 +68,10 @@ COBJS	+= miiphy.o  COBJS	+= uic.o  endif +ifdef CONFIG_SPL_BUILD +COBJS-y += spl_boot.o +endif +  SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS) $(COBJS-y))  START	:= $(addprefix $(obj),$(START)) diff --git a/arch/powerpc/cpu/ppc4xx/spl_boot.c b/arch/powerpc/cpu/ppc4xx/spl_boot.c new file mode 100644 index 000000000..80869f61b --- /dev/null +++ b/arch/powerpc/cpu/ppc4xx/spl_boot.c @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2013 Stefan Roese <sr@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. + */ + +#include <common.h> +#include <spl.h> + +DECLARE_GLOBAL_DATA_PTR; + +/* + * Return selected boot device. On PPC4xx its only NOR flash right now. + */ +u32 spl_boot_device(void) +{ +	return BOOT_DEVICE_NOR; +} + +/* + * SPL version of board_init_f() + */ +void board_init_f(ulong bootflag) +{ +	/* +	 * First we need to initialize the SDRAM, so that the real +	 * U-Boot or the OS (Linux) can be loaded +	 */ +	initdram(0); + +	/* Clear bss */ +	memset(__bss_start, '\0', __bss_end - __bss_start); + +	/* +	 * Init global_data pointer. Has to be done before calling +	 * get_clocks(), as it stores some clock values into gd needed +	 * later on in the serial driver. +	 */ +	/* Pointer is writable since we allocated a register for it */ +	gd = (gd_t *)(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET); +	/* Clear initial global data */ +	memset((void *)gd, 0, sizeof(gd_t)); + +	/* +	 * get_clocks() needs to be called so that the serial driver +	 * works correctly +	 */ +	get_clocks(); + +	/* +	 * Do rudimental console / serial setup +	 */ +	preloader_console_init(); + +	/* +	 * Call board_init_r() (SPL framework version) to load and boot +	 * real U-Boot or OS +	 */ +	board_init_r(NULL, 0); +	/* Does not return!!! */ +} diff --git a/arch/powerpc/cpu/ppc4xx/start.S b/arch/powerpc/cpu/ppc4xx/start.S index 52f262337..57ae1d382 100644 --- a/arch/powerpc/cpu/ppc4xx/start.S +++ b/arch/powerpc/cpu/ppc4xx/start.S @@ -232,7 +232,7 @@   *   * Use r12 to access the GOT   */ -#if !defined(CONFIG_NAND_SPL) +#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)  	START_GOT  	GOT_ENTRY(_GOT2_TABLE_)  	GOT_ENTRY(_FIXUP_TABLE_) @@ -248,7 +248,8 @@  	END_GOT  #endif /* CONFIG_NAND_SPL */ -#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL) +#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL) && \ +	!defined(CONFIG_SPL_BUILD)  	/*  	 * NAND U-Boot image is started from offset 0  	 */ @@ -270,6 +271,18 @@  	bl	_start_440  #endif +#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD) +	/* +	 * This is the entry of the real U-Boot from a board port +	 * that supports SPL booting on the PPC4xx. We only need +	 * to call board_init_f() here. Everything else has already +	 * been done in the SPL u-boot version. +	 */ +	GET_GOT			/* initialize GOT access		*/ +	bl	board_init_f	/* run 1st part of board init code (in Flash)*/ +	/* NOTREACHED - board_init_f() does not return */ +#endif +  /*   * 440 Startup -- on reset only the top 4k of the effective   * address space is mapped in by an entry in the instruction @@ -539,7 +552,7 @@ tlbnx2:	addi	r4,r4,1		/* Next TLB */   * r3 - 1st arg to board_init(): IMMP pointer   * r4 - 2nd arg to board_init(): boot flag   */ -#ifndef CONFIG_NAND_SPL +#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)  	.text  	.long	0x27051956		/* U-Boot Magic Number			*/  	.globl	version_string @@ -612,6 +625,18 @@ _end_of_vectors:  	.globl	_start  _start: +#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD) +	/* +	 * This is the entry of the real U-Boot from a board port +	 * that supports SPL booting on the PPC4xx. We only need +	 * to call board_init_f() here. Everything else has already +	 * been done in the SPL u-boot version. +	 */ +	GET_GOT			/* initialize GOT access		*/ +	bl	board_init_f	/* run 1st part of board init code (in Flash)*/ +	/* NOTREACHED - board_init_f() does not return */ +#endif +  /*****************************************************************************/  #if defined(CONFIG_440) @@ -796,7 +821,9 @@ _start:  #ifdef CONFIG_NAND_SPL  	bl	nand_boot_common	/* will not return */  #else +#ifndef CONFIG_SPL_BUILD  	GET_GOT +#endif  	bl	cpu_init_f	/* run low-level CPU init code	   (from Flash) */  	bl	board_init_f @@ -1080,7 +1107,7 @@ _start:  	/*----------------------------------------------------------------------- */ -#ifndef CONFIG_NAND_SPL +#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)  /*   * This code finishes saving the registers to the exception frame   * and jumps to the appropriate handler for the exception. @@ -1262,6 +1289,7 @@ in32r:  	lwbrx	r3,r0,r3  	blr +#if !defined(CONFIG_SPL_BUILD)  /*   * void relocate_code (addr_sp, gd, addr_moni)   * @@ -1626,6 +1654,7 @@ __440_msr_continue:  	mtlr	r4			/* restore link register	*/  	blr +#endif /* CONFIG_SPL_BUILD */  #if defined(CONFIG_440)  /*----------------------------------------------------------------------------+ diff --git a/arch/powerpc/cpu/ppc4xx/u-boot-spl.lds b/arch/powerpc/cpu/ppc4xx/u-boot-spl.lds new file mode 100644 index 000000000..ae1df1719 --- /dev/null +++ b/arch/powerpc/cpu/ppc4xx/u-boot-spl.lds @@ -0,0 +1,74 @@ +/* + * Copyright 2012-2013 Stefan Roese <sr@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 + */ + +MEMORY +{ +	sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, +		LENGTH = CONFIG_SPL_BSS_MAX_SIZE +	flash : ORIGIN = CONFIG_SPL_TEXT_BASE, +		LENGTH = CONFIG_SYS_SPL_MAX_LEN +} + +OUTPUT_ARCH(powerpc) +ENTRY(_start) +SECTIONS +{ +#ifdef CONFIG_440 +	.bootpg 0xfffff000 : +	{ +		arch/powerpc/cpu/ppc4xx/start.o	(.bootpg) + +		/* +		 * PPC440 board need a board specific object with the +		 * TLB definitions. This needs to get included right after +		 * start.o, since the first shadow TLB only covers 4k +		 * of address space. +		 */ +		CONFIG_BOARDDIR/init.o	(.bootpg) +	} > flash +#endif + +	.resetvec 0xFFFFFFFC : +	{ +		KEEP(*(.resetvec)) +	} > flash + +	.text : +	{ +		__start = .; +		arch/powerpc/cpu/ppc4xx/start.o	(.text) +		CONFIG_BOARDDIR/init.o	(.text) +		*(.text*) +	} > flash + +	. = ALIGN(4); +	.data : { *(SORT_BY_ALIGNMENT(.data*)) } > flash + +	. = ALIGN(4); +	.rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } > flash + +	.bss : +	{ +		. = ALIGN(4); +		__bss_start = .; +		*(.bss*) +		. = ALIGN(4); +		__bss_end = .; +	} > sdram +} diff --git a/arch/powerpc/cpu/ppc4xx/u-boot.lds b/arch/powerpc/cpu/ppc4xx/u-boot.lds index 06010d6b1..e994f0212 100644 --- a/arch/powerpc/cpu/ppc4xx/u-boot.lds +++ b/arch/powerpc/cpu/ppc4xx/u-boot.lds @@ -96,6 +96,7 @@ SECTIONS    . = ALIGN(256);    __init_end = .; +#ifndef CONFIG_SPL  #ifdef CONFIG_440    .bootpg RESET_VECTOR_ADDRESS - 0xffc :    { @@ -132,6 +133,7 @@ SECTIONS  #if (RESET_VECTOR_ADDRESS == 0xfffffffc)    . |= 0x10;  #endif +#endif /* CONFIG_SPL */    __bss_start = .;    .bss (NOLOAD)       : diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index d57c178f7..7267611cb 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -333,7 +333,9 @@  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111  #define CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011 +#define CONFIG_SYS_FSL_ERRATUM_USB14  #define CONFIG_SYS_FSL_ERRATUM_CPU_A003999 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003  #define CONFIG_SYS_FSL_ERRATUM_DDR_A003474  #define CONFIG_SYS_FSL_SRIO_PCIE_BOOT_MASTER  #define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 @@ -365,7 +367,9 @@  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111  #define CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011 +#define CONFIG_SYS_FSL_ERRATUM_USB14  #define CONFIG_SYS_FSL_ERRATUM_CPU_A003999 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003  #define CONFIG_SYS_FSL_ERRATUM_DDR_A003474  #define CONFIG_SYS_FSL_SRIO_PCIE_BOOT_MASTER  #define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 @@ -442,6 +446,8 @@  #define CONFIG_SYS_FSL_USB2_PHY_ENABLE  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_USB14 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003  #define CONFIG_SYS_FSL_ERRATUM_DDR_A003474  #define CONFIG_SYS_FSL_SRIO_PCIE_BOOT_MASTER  #define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 @@ -473,7 +479,7 @@  #define CONFIG_SYS_FSL_USB2_PHY_ENABLE  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 -#define CONFIG_SYS_FSL_ERRATUM_USB138 +#define CONFIG_SYS_FSL_ERRATUM_USB14  #define CONFIG_SYS_FSL_ERRATUM_DDR_A003  #define CONFIG_SYS_FSL_ERRATUM_DDR_A003474  #define CONFIG_SYS_FSL_ERRATUM_A004699 @@ -490,7 +496,6 @@  #define CONFIG_NUM_DDR_CONTROLLERS	1  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000  #define CONFIG_NAND_FSL_IFC -#define CONFIG_SYS_FSL_ERRATUM_IFC_A003399  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111  #elif defined(CONFIG_BSC9132) @@ -503,7 +508,6 @@  #define CONFIG_NUM_DDR_CONTROLLERS	2  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000  #define CONFIG_NAND_FSL_IFC -#define CONFIG_SYS_FSL_ERRATUM_IFC_A003399  #define CONFIG_SYS_FSL_ERRATUM_ESDHC111  #define CONFIG_SYS_FSL_ESDHC_P1010_BROKEN_SDCLK  #define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" @@ -560,6 +564,7 @@  #define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.4"  #define CONFIG_SYS_FSL_USB1_PHY_ENABLE  #define CONFIG_SYS_FSL_ERRATUM_A_004934 +#define CONFIG_SYS_FSL_ERRATUM_A005871  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000  #elif defined(CONFIG_PPC_B4860) @@ -585,6 +590,7 @@  #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5  #define CONFIG_SYS_FSL_USB1_PHY_ENABLE  #define CONFIG_SYS_FSL_ERRATUM_A_004934 +#define CONFIG_SYS_FSL_ERRATUM_A005871  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000  #else diff --git a/arch/powerpc/include/asm/fsl_memac.h b/arch/powerpc/include/asm/fsl_memac.h index d6b60e65b..69f95d1d1 100644 --- a/arch/powerpc/include/asm/fsl_memac.h +++ b/arch/powerpc/include/asm/fsl_memac.h @@ -222,6 +222,10 @@ struct memac {  /* IF_MODE - Interface Mode Register */  #define IF_MODE_EN_AUTO	0x00008000 /* 1 - Enable automatic speed selection */ +#define IF_MODE_SETSP_100M	0x00000000 /* 00 - 100Mbps RGMII */ +#define IF_MODE_SETSP_10M	0x00002000 /* 01 - 10Mbps RGMII */ +#define IF_MODE_SETSP_1000M	0x00004000 /* 10 - 1000Mbps RGMII */ +#define IF_MODE_SETSP_MASK	0x00006000 /* setsp mask bits */  #define IF_MODE_XGMII	0x00000000 /* 00- XGMII(10) interface mode */  #define IF_MODE_GMII		0x00000002 /* 10- GMII interface mode */  #define IF_MODE_MASK	0x00000003 /* mask for mode interface mode */ diff --git a/arch/powerpc/include/asm/immap_85xx.h b/arch/powerpc/include/asm/immap_85xx.h index 4eb3f7923..baaa9fee5 100644 --- a/arch/powerpc/include/asm/immap_85xx.h +++ b/arch/powerpc/include/asm/immap_85xx.h @@ -2914,7 +2914,8 @@ struct ccsr_pman {  #define CONFIG_SYS_MPC85xx_IFC_OFFSET		0x124000  #define CONFIG_SYS_MPC85xx_GPIO_OFFSET		0x130000  #define CONFIG_SYS_FSL_CORENET_RMAN_OFFSET	0x1e0000 -#ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 +#if defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2) && !defined(CONFIG_PPC_B4860)\ +	&& !defined(CONFIG_PPC_B4420)  #define CONFIG_SYS_MPC85xx_PCIE1_OFFSET		0x240000  #define CONFIG_SYS_MPC85xx_PCIE2_OFFSET		0x250000  #define CONFIG_SYS_MPC85xx_PCIE3_OFFSET		0x260000 @@ -3160,4 +3161,13 @@ struct ccsr_cluster_l2 {  #define CONFIG_SYS_FSL_CLUSTER_1_L2 \  	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CLUSTER_1_L2_OFFSET)  #endif /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */ + +#define	CONFIG_SYS_DCSR_DCFG_OFFSET	0X20000 +struct dcsr_dcfg_regs { +	u8  res_0[0x520]; +	u32 ecccr1; +#define	DCSR_DCFG_ECC_DISABLE_USB1	0x00008000 +#define	DCSR_DCFG_ECC_DISABLE_USB2	0x00004000 +	u8  res_524[0x1000 - 0x524]; /* 0x524 - 0x1000 */ +};  #endif /*__IMMAP_85xx__*/ diff --git a/arch/powerpc/lib/board.c b/arch/powerpc/lib/board.c index 422b4a39b..41b22949f 100644 --- a/arch/powerpc/lib/board.c +++ b/arch/powerpc/lib/board.c @@ -1050,15 +1050,6 @@ void board_init_r(gd_t *id, ulong dest_addr)  	/* NOTREACHED - no way out of command loop except booting */  } -void hang(void) -{ -	puts("### ERROR ### Please RESET the board ###\n"); -	bootstage_error(BOOTSTAGE_ID_NEED_RESET); -	for (;;) -		; -} - -  #if 0	/* We could use plain global data, but the resulting code is bigger */  /*   * Pointer to initial global data area |