diff options
Diffstat (limited to 'board')
| -rw-r--r-- | board/a3m071/a3m071.c | 26 | ||||
| -rw-r--r-- | board/freescale/b4860qds/tlb.c | 19 | ||||
| -rw-r--r-- | board/freescale/common/Makefile | 6 | ||||
| -rw-r--r-- | board/freescale/common/cds_pci_ft.c | 26 | ||||
| -rw-r--r-- | board/freescale/common/sdhc_boot.c | 2 | ||||
| -rw-r--r-- | board/freescale/p1010rdb/p1010rdb.c | 2 | ||||
| -rw-r--r-- | board/freescale/p1022ds/Makefile | 14 | ||||
| -rw-r--r-- | board/freescale/p1022ds/law.c | 1 | ||||
| -rw-r--r-- | board/freescale/p1022ds/spl_minimal.c | 129 | ||||
| -rw-r--r-- | board/freescale/p1022ds/tlb.c | 20 | ||||
| -rw-r--r-- | board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c | 66 | ||||
| -rw-r--r-- | board/freescale/p1_p2_rdb_pc/spl_minimal.c | 15 | ||||
| -rw-r--r-- | board/h2200/h2200.c | 9 | ||||
| -rw-r--r-- | board/lwmon5/lwmon5.c | 75 | ||||
| -rw-r--r-- | board/lwmon5/sdram.c | 4 | ||||
| -rw-r--r-- | board/sandbox/sandbox/sandbox.c | 2 | ||||
| -rw-r--r-- | board/xilinx/microblaze-generic/microblaze-generic.c | 11 | ||||
| -rw-r--r-- | board/xilinx/microblaze-generic/xparameters.h | 4 | 
18 files changed, 404 insertions, 27 deletions
| diff --git a/board/a3m071/a3m071.c b/board/a3m071/a3m071.c index 0f9f883e9..c62ba6217 100644 --- a/board/a3m071/a3m071.c +++ b/board/a3m071/a3m071.c @@ -8,7 +8,7 @@   * (C) Copyright 2006   * MicroSys GmbH   * - * Copyright 2012 Stefan Roese <sr@denx.de> + * Copyright 2012-2013 Stefan Roese <sr@denx.de>   *   * See file CREDITS for list of people who contributed to this   * project. @@ -241,12 +241,26 @@ void spl_board_init(void)  	/* And write new value back to register */  	out_be32(&mm->ipbi_ws_ctrl, val); -#endif -	/* -	 * No need to change the pin multiplexing (MPC5XXX_GPS_PORT_CONFIG) -	 * as all 3 config versions (failsave level) have the same setup. -	 */ + +	/* Setup pin multiplexing */ +	if (failsavelevel == 2) { +		/* fpga-version ok */ +#if defined(CONFIG_SYS_GPS_PORT_CONFIG_2) +		out_be32(&gpio->port_config, CONFIG_SYS_GPS_PORT_CONFIG_2); +#endif +	} else if (failsavelevel == 1) { +		/* digiboard-version ok - fpga not */ +#if defined(CONFIG_SYS_GPS_PORT_CONFIG_1) +		out_be32(&gpio->port_config, CONFIG_SYS_GPS_PORT_CONFIG_1); +#endif +	} else { +		/* full failsave-mode */ +#if defined(CONFIG_SYS_GPS_PORT_CONFIG) +		out_be32(&gpio->port_config, CONFIG_SYS_GPS_PORT_CONFIG); +#endif +	} +#endif  	/*  	 * Setup gpio_wkup_7 as watchdog AS INPUT to disable it - see diff --git a/board/freescale/b4860qds/tlb.c b/board/freescale/b4860qds/tlb.c index 373cb7848..6d634bf69 100644 --- a/board/freescale/b4860qds/tlb.c +++ b/board/freescale/b4860qds/tlb.c @@ -111,8 +111,6 @@ struct fsl_e_tlb_entry tlb_table[] = {  #ifdef CONFIG_SYS_NAND_BASE  	/*  	 * *I*G - NAND -	 * entry 14 and 15 has been used hard coded, they will be disabled -	 * in cpu_init_f, so we use entry 16 for nand.  	 */  	SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS,  			MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, @@ -122,6 +120,23 @@ struct fsl_e_tlb_entry tlb_table[] = {  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 12, BOOKE_PAGESZ_4K, 1), +	/* +	 * *I*G - SRIO +	 * entry 14 and 15 has been used hard coded, they will be disabled +	 * in cpu_init_f, so we use entry 16 for SRIO2. +	 */ +#ifdef CONFIG_SYS_SRIO1_MEM_PHYS +	/* *I*G* - SRIO1 */ +	SET_TLB_ENTRY(1, CONFIG_SYS_SRIO1_MEM_VIRT, CONFIG_SYS_SRIO1_MEM_PHYS, +		MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 13, BOOKE_PAGESZ_256M, 1), +#endif +#ifdef CONFIG_SYS_SRIO2_MEM_PHYS +	/* *I*G* - SRIO2 */ +	SET_TLB_ENTRY(1, CONFIG_SYS_SRIO2_MEM_VIRT, CONFIG_SYS_SRIO2_MEM_PHYS, +		MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 16, BOOKE_PAGESZ_256M, 1), +#endif  };  int num_tlb_entries = ARRAY_SIZE(tlb_table); diff --git a/board/freescale/common/Makefile b/board/freescale/common/Makefile index 75725b49a..72bb56cac 100644 --- a/board/freescale/common/Makefile +++ b/board/freescale/common/Makefile @@ -33,10 +33,14 @@ COBJS-$(CONFIG_FSL_CADMUS)	+= cadmus.o  COBJS-$(CONFIG_FSL_VIA)		+= cds_via.o  COBJS-$(CONFIG_FMAN_ENET)	+= fman.o  COBJS-$(CONFIG_FSL_PIXIS)	+= pixis.o +ifndef CONFIG_SPL_BUILD  COBJS-$(CONFIG_FSL_NGPIXIS)	+= ngpixis.o +endif  COBJS-$(CONFIG_FSL_QIXIS)	+= qixis.o  COBJS-$(CONFIG_PQ_MDS_PIB)	+= pq-mds-pib.o +ifndef CONFIG_SPL_BUILD  COBJS-$(CONFIG_ID_EEPROM)	+= sys_eeprom.o +endif  COBJS-$(CONFIG_FSL_SGMII_RISER)	+= sgmii_riser.o  ifndef CONFIG_RAMBOOT_PBL  COBJS-$(CONFIG_FSL_FIXED_MMC_LOCATION)	+= sdhc_boot.o @@ -48,7 +52,9 @@ COBJS-$(CONFIG_MPC8555CDS)	+= cds_pci_ft.o  COBJS-$(CONFIG_MPC8536DS)	+= ics307_clk.o  COBJS-$(CONFIG_MPC8572DS)	+= ics307_clk.o +ifndef CONFIG_SPL_BUILD  COBJS-$(CONFIG_P1022DS)		+= ics307_clk.o +endif  COBJS-$(CONFIG_P2020DS)		+= ics307_clk.o  COBJS-$(CONFIG_P3041DS)		+= ics307_clk.o  COBJS-$(CONFIG_P4080DS)		+= ics307_clk.o diff --git a/board/freescale/common/cds_pci_ft.c b/board/freescale/common/cds_pci_ft.c index 8a09f99cc..32233db40 100644 --- a/board/freescale/common/cds_pci_ft.c +++ b/board/freescale/common/cds_pci_ft.c @@ -31,7 +31,8 @@ static void cds_pci_fixup(void *blob)  	int node;  	const char *path;  	int len, slot, i; -	u32 *map = NULL; +	u32 *map = NULL, *piccells = NULL; +	int off, cells;  	node = fdt_path_offset(blob, "/aliases");  	if (node >= 0) { @@ -41,6 +42,25 @@ static void cds_pci_fixup(void *blob)  			if (node >= 0) {  				map = fdt_getprop_w(blob, node, "interrupt-map", &len);  			} +			/* Each item in "interrupt-map" property is translated with +			 * following cells: +			 * PCI #address-cells, PCI #interrupt-cells, +			 * PIC address, PIC #address-cells, PIC #interrupt-cells. +			 */ +			cells = fdt_getprop_u32_default(blob, path, "#address-cells", 1); +			cells += fdt_getprop_u32_default(blob, path, "#interrupt-cells", 1); +			off = fdt_node_offset_by_phandle(blob, fdt32_to_cpu(*(map+cells))); +			if (off <= 0) +				return; +			cells += 1; +			piccells = (u32 *)fdt_getprop(blob, off, "#address-cells", NULL); +			if (piccells == NULL) +				return; +			cells += *piccells; +			piccells = (u32 *)fdt_getprop(blob, off, "#interrupt-cells", NULL); +			if (piccells == NULL) +				return; +			cells += *piccells;  		}  	} @@ -49,12 +69,12 @@ static void cds_pci_fixup(void *blob)  		slot = get_pci_slot(); -		for (i=0;i<len;i+=7) { +		for (i=0;i<len;i+=cells) {  			/* We rotate the interrupt pins so that the mapping  			 * changes depending on the slot the carrier card is in.  			 */  			map[3] = ((map[3] + slot - 2) % 4) + 1; -			map+=7; +			map+=cells;  		}  	}  } diff --git a/board/freescale/common/sdhc_boot.c b/board/freescale/common/sdhc_boot.c index e4323181f..fd0e910d7 100644 --- a/board/freescale/common/sdhc_boot.c +++ b/board/freescale/common/sdhc_boot.c @@ -32,7 +32,7 @@  #define ESDHC_BOOT_IMAGE_SIZE	0x48  #define ESDHC_BOOT_IMAGE_ADDR	0x50 -int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr) +int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)  {  	u8 *tmp_buf;  	u32 blklen, code_offset, code_len, n; diff --git a/board/freescale/p1010rdb/p1010rdb.c b/board/freescale/p1010rdb/p1010rdb.c index 11e2e8ae4..0c30d7634 100644 --- a/board/freescale/p1010rdb/p1010rdb.c +++ b/board/freescale/p1010rdb/p1010rdb.c @@ -217,7 +217,7 @@ void fdt_del_flexcan(void *blob)  	int nodeoff = 0;  	while ((nodeoff = fdt_node_offset_by_compatible(blob, 0, -				"fsl,flexcan-v1.0")) >= 0) { +				"fsl,p1010-flexcan")) >= 0) {  		fdt_del_node(blob, nodeoff);  	}  } diff --git a/board/freescale/p1022ds/Makefile b/board/freescale/p1022ds/Makefile index c6d3418c1..0eeef0526 100644 --- a/board/freescale/p1022ds/Makefile +++ b/board/freescale/p1022ds/Makefile @@ -11,12 +11,26 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(BOARD).o +MINIMAL= + +ifdef CONFIG_SPL_BUILD +ifdef CONFIG_SPL_INIT_MINIMAL +MINIMAL=y +endif +endif + +ifdef MINIMAL + +COBJS-y        += spl_minimal.o tlb.o law.o + +else  COBJS-y	+= $(BOARD).o  COBJS-y	+= ddr.o  COBJS-y	+= law.o  COBJS-y	+= tlb.o  COBJS-$(CONFIG_FSL_DIU_FB) += diu.o +endif  SRCS	:= $(SOBJS:.o=.S) $(COBJS-y:.o=.c)  OBJS	:= $(addprefix $(obj),$(COBJS-y)) diff --git a/board/freescale/p1022ds/law.c b/board/freescale/p1022ds/law.c index b23b8f9af..c4398ddff 100644 --- a/board/freescale/p1022ds/law.c +++ b/board/freescale/p1022ds/law.c @@ -16,6 +16,7 @@  struct law_entry law_table[] = {  	SET_LAW(CONFIG_SYS_FLASH_BASE_PHYS, LAW_SIZE_256M, LAW_TRGT_IF_LBC),  	SET_LAW(PIXIS_BASE_PHYS, LAW_SIZE_4K, LAW_TRGT_IF_LBC), +	SET_LAW(CONFIG_SYS_NAND_BASE_PHYS, LAW_SIZE_32K, LAW_TRGT_IF_LBC),  };  int num_law_entries = ARRAY_SIZE(law_table); diff --git a/board/freescale/p1022ds/spl_minimal.c b/board/freescale/p1022ds/spl_minimal.c new file mode 100644 index 000000000..8d12fa6c7 --- /dev/null +++ b/board/freescale/p1022ds/spl_minimal.c @@ -0,0 +1,129 @@ +/* + * Copyright 2011 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 <common.h> +#include <ns16550.h> +#include <asm/io.h> +#include <nand.h> +#include <asm/fsl_law.h> +#include <asm/fsl_ddr_sdram.h> + + +/* + * Fixed sdram init -- doesn't use serial presence detect. + */ +void sdram_init(void) +{ +	volatile ccsr_ddr_t *ddr = (ccsr_ddr_t *)CONFIG_SYS_MPC8xxx_DDR_ADDR; + +	__raw_writel(CONFIG_SYS_DDR_CS0_BNDS, &ddr->cs0_bnds); +	__raw_writel(CONFIG_SYS_DDR_CS0_CONFIG, &ddr->cs0_config); +#if CONFIG_CHIP_SELECTS_PER_CTRL > 1 +	__raw_writel(CONFIG_SYS_DDR_CS1_BNDS, &ddr->cs1_bnds); +	__raw_writel(CONFIG_SYS_DDR_CS1_CONFIG, &ddr->cs1_config); +#endif +	__raw_writel(CONFIG_SYS_DDR_TIMING_3, &ddr->timing_cfg_3); +	__raw_writel(CONFIG_SYS_DDR_TIMING_0, &ddr->timing_cfg_0); +	__raw_writel(CONFIG_SYS_DDR_TIMING_1, &ddr->timing_cfg_1); +	__raw_writel(CONFIG_SYS_DDR_TIMING_2, &ddr->timing_cfg_2); + +	__raw_writel(CONFIG_SYS_DDR_CONTROL_2, &ddr->sdram_cfg_2); +	__raw_writel(CONFIG_SYS_DDR_MODE_1, &ddr->sdram_mode); +	__raw_writel(CONFIG_SYS_DDR_MODE_2, &ddr->sdram_mode_2); + +	__raw_writel(CONFIG_SYS_DDR_INTERVAL, &ddr->sdram_interval); +	__raw_writel(CONFIG_SYS_DDR_DATA_INIT, &ddr->sdram_data_init); +	__raw_writel(CONFIG_SYS_DDR_CLK_CTRL, &ddr->sdram_clk_cntl); + +	__raw_writel(CONFIG_SYS_DDR_TIMING_4, &ddr->timing_cfg_4); +	__raw_writel(CONFIG_SYS_DDR_TIMING_5, &ddr->timing_cfg_5); +	__raw_writel(CONFIG_SYS_DDR_ZQ_CONTROL, &ddr->ddr_zq_cntl); +	__raw_writel(CONFIG_SYS_DDR_WRLVL_CONTROL, &ddr->ddr_wrlvl_cntl); + +	/* Set, but do not enable the memory */ +	__raw_writel(CONFIG_SYS_DDR_CONTROL & ~SDRAM_CFG_MEM_EN, +			&ddr->sdram_cfg); + +	in_be32(&ddr->sdram_cfg); +	udelay(500); + +	/* Let the controller go */ +	out_be32(&ddr->sdram_cfg, in_be32(&ddr->sdram_cfg) | SDRAM_CFG_MEM_EN); +	in_be32(&ddr->sdram_cfg); + +	set_next_law(0, CONFIG_SYS_SDRAM_SIZE_LAW, LAW_TRGT_IF_DDR_1); +} + +const static u32 sysclk_tbl[] = { +	66666000, 7499900, 83332500, 8999900, +	99999000, 11111000, 12499800, 13333200 +}; + +void board_init_f(ulong bootflag) +{ +	int px_spd; +	u32 plat_ratio, sys_clk, bus_clk; +	ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; + +	/* for FPGA */ +	set_lbc_br(2, CONFIG_SYS_BR2_PRELIM); +	set_lbc_or(2, CONFIG_SYS_OR2_PRELIM); + +	/* initialize selected port with appropriate baud rate */ +	px_spd = in_8((unsigned char *)(PIXIS_BASE + PIXIS_SPD)); +	sys_clk = sysclk_tbl[px_spd & PIXIS_SPD_SYSCLK_MASK]; +	plat_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_PLAT_RATIO; +	bus_clk = sys_clk * plat_ratio / 2; + +	NS16550_init((NS16550_t)CONFIG_SYS_NS16550_COM1, +			bus_clk / 16 / CONFIG_BAUDRATE); + +	puts("\nNAND boot... "); + +	/* Initialize the DDR3 */ +	sdram_init(); + +	/* copy code to RAM and jump to it - this should not return */ +	/* NOTE - code has to be copied out of NAND buffer before +	 * other blocks can be read. +	 */ +	relocate_code(CONFIG_SPL_RELOC_STACK, 0, +			CONFIG_SPL_RELOC_TEXT_BASE); +} + +void board_init_r(gd_t *gd, ulong dest_addr) +{ +	nand_boot(); +} + +void putc(char c) +{ +	if (c == '\n') +		NS16550_putc((NS16550_t)CONFIG_SYS_NS16550_COM1, '\r'); + +	NS16550_putc((NS16550_t)CONFIG_SYS_NS16550_COM1, c); +} + +void puts(const char *str) +{ +	while (*str) +		putc(*str++); +} diff --git a/board/freescale/p1022ds/tlb.c b/board/freescale/p1022ds/tlb.c index 71e71f707..3acc44912 100644 --- a/board/freescale/p1022ds/tlb.c +++ b/board/freescale/p1022ds/tlb.c @@ -41,6 +41,7 @@ struct fsl_e_tlb_entry tlb_table[] = {  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 1, BOOKE_PAGESZ_1M, 1), +#ifndef CONFIG_SPL_BUILD  	/* W**G* - Flash/promjet, localbus */  	/* This will be changed to *I*G* after relocation to RAM. */  	SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE_PHYS, @@ -67,24 +68,31 @@ struct fsl_e_tlb_entry tlb_table[] = {  	SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_IO_VIRT, CONFIG_SYS_PCIE3_IO_PHYS,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 6, BOOKE_PAGESZ_256K, 1), +#endif  	SET_TLB_ENTRY(1, PIXIS_BASE, PIXIS_BASE_PHYS,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 7, BOOKE_PAGESZ_4K, 1), -#ifdef CONFIG_SYS_RAMBOOT -	/* *I*G - eSDHC/eSPI/NAND boot */ +#if defined(CONFIG_SYS_RAMBOOT) || defined(CONFIG_SPL) +	/* **** - eSDHC/eSPI/NAND boot */  	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,  			MAS3_SX|MAS3_SW|MAS3_SR, 0,  			0, 8, BOOKE_PAGESZ_1G, 1), - -	/* map the second 1G */ +	/* **** - eSDHC/eSPI/NAND boot - second 1GB of memory */  	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000,  			CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000, -			MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +			MAS3_SX|MAS3_SW|MAS3_SR, 0,  			0, 9, BOOKE_PAGESZ_1G, 1),  #endif -# + +#ifdef CONFIG_SYS_NAND_BASE +	/* *I*G - NAND */ +	SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS, +			MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +			0, 10, BOOKE_PAGESZ_16K, 1), +#endif +  };  int num_tlb_entries = ARRAY_SIZE(tlb_table); diff --git a/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c b/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c index 5b5b86c82..2e0e0c73a 100644 --- a/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c +++ b/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c @@ -55,6 +55,13 @@  #define GPIO_SLIC_PIN		30  #define GPIO_SLIC_DATA		(1 << (31 - GPIO_SLIC_PIN)) +#if defined(CONFIG_P1021RDB) && !defined(CONFIG_SYS_RAMBOOT) +#define GPIO_DDR_RST_PORT	1 +#define GPIO_DDR_RST_PIN	8 +#define GPIO_DDR_RST_DATA	(1 << (31 - GPIO_DDR_RST_PIN)) + +#define GPIO_2BIT_MASK		(0x3 << (32 - (GPIO_DDR_RST_PIN + 1) * 2)) +#endif  #if defined(CONFIG_P1025RDB) || defined(CONFIG_P1021RDB)  #define PCA_IOPORT_I2C_ADDR		0x23 @@ -67,7 +74,7 @@  const qe_iop_conf_t qe_iop_conf_tab[] = {  	/* GPIO */  	{1,   1, 2, 0, 0}, /* GPIO7/PB1   - LOAD_DEFAULT_N */ -#if 0 +#if defined(CONFIG_P1021RDB) && !defined(CONFIG_SYS_RAMBOOT)  	{1,   8, 1, 1, 0}, /* GPIO10/PB8  - DDR_RST */  #endif  	{0,  15, 1, 0, 0}, /* GPIO11/A15  - WDI */ @@ -159,6 +166,16 @@ void board_gpio_init(void)  	ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);  	par_io_t *par_io = (par_io_t *) &(gur->qe_par_io); +#if defined(CONFIG_P1021RDB) && !defined(CONFIG_SYS_RAMBOOT) +	/* reset DDR3 */ +	setbits_be32(&par_io[GPIO_DDR_RST_PORT].cpdat, GPIO_DDR_RST_DATA); +	udelay(1000); +	clrbits_be32(&par_io[GPIO_DDR_RST_PORT].cpdat, GPIO_DDR_RST_DATA); +	udelay(1000); +	setbits_be32(&par_io[GPIO_DDR_RST_PORT].cpdat, GPIO_DDR_RST_DATA); +	/* disable CE_PB8 */ +	clrbits_be32(&par_io[GPIO_DDR_RST_PORT].cpdir1, GPIO_2BIT_MASK); +#endif  	/* Enable VSC7385 switch */  	setbits_be32(&par_io[GPIO_GETH_SW_PORT].cpdat, GPIO_GETH_SW_DATA); @@ -421,6 +438,8 @@ void ft_board_setup(void *blob, bd_t *bd)  {  	phys_addr_t base;  	phys_size_t size; +	const char *soc_usb_compat = "fsl-usb2-dr"; +	int err, usb1_off, usb2_off;  	ft_cpu_setup(blob, bd); @@ -442,5 +461,50 @@ void ft_board_setup(void *blob, bd_t *bd)  #if defined(CONFIG_HAS_FSL_DR_USB)  	fdt_fixup_dr_usb(blob, bd);  #endif + +#if defined(CONFIG_SDCARD) || defined(CONFIG_SPIFLASH) +	/* Delete eLBC node as it is muxed with USB2 controller */ +	if (hwconfig("usb2")) { +		const char *soc_elbc_compat = "fsl,p1020-elbc"; +		int off = fdt_node_offset_by_compatible(blob, -1, +				soc_elbc_compat); +		if (off < 0) { +			printf("WARNING: could not find compatible node %s: %s.\n", +			       soc_elbc_compat, +			       fdt_strerror(off)); +				return; +		} +		err = fdt_del_node(blob, off); +		if (err < 0) { +			printf("WARNING: could not remove %s: %s.\n", +			       soc_elbc_compat, fdt_strerror(err)); +		} +		return; +	} +#endif + +/* Delete USB2 node as it is muxed with eLBC */ +	usb1_off = fdt_node_offset_by_compatible(blob, -1, +		soc_usb_compat); +	if (usb1_off < 0) { +		printf("WARNING: could not find compatible node %s: %s.\n", +		       soc_usb_compat, +		       fdt_strerror(usb1_off)); +		return; +	} +	usb2_off = fdt_node_offset_by_compatible(blob, usb1_off, +			soc_usb_compat); +	if (usb2_off < 0) { +		printf("WARNING: could not find compatible node %s: %s.\n", +		       soc_usb_compat, +		       fdt_strerror(usb2_off)); +		return; +	} +	err = fdt_del_node(blob, usb2_off); +	if (err < 0) { +		printf("WARNING: could not remove %s: %s.\n", +		       soc_usb_compat, fdt_strerror(err)); +	} +  }  #endif diff --git a/board/freescale/p1_p2_rdb_pc/spl_minimal.c b/board/freescale/p1_p2_rdb_pc/spl_minimal.c index 09019e98a..e2bfb0d63 100644 --- a/board/freescale/p1_p2_rdb_pc/spl_minimal.c +++ b/board/freescale/p1_p2_rdb_pc/spl_minimal.c @@ -81,6 +81,8 @@ void board_init_f(ulong bootflag)  	ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;  #ifndef CONFIG_QE  	ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR); +#elif defined(CONFIG_P1021RDB) +	par_io_t *par_io = (par_io_t *)&(gur->qe_par_io);  #endif  	/* initialize selected port with appropriate baud rate */ @@ -102,6 +104,19 @@ void board_init_f(ulong bootflag)  	__raw_writel(0x00200000, &pgpio->gpdat);  	udelay(1000);  	__raw_writel(0x00000000, &pgpio->gpdir); +#elif defined(CONFIG_P1021RDB) +	/* init DDR3 reset signal CE_PB8 */ +	out_be32(&par_io[1].cpdir1, 0x00004000); +	out_be32(&par_io[1].cpodr, 0x00800000); +	out_be32(&par_io[1].cppar1, 0x00000000); +	/* reset DDR3 */ +	out_be32(&par_io[1].cpdat, 0x00800000); +	udelay(1000); +	out_be32(&par_io[1].cpdat, 0x00000000); +	udelay(1000); +	out_be32(&par_io[1].cpdat, 0x00800000); +	/* disable the CE_PB8 */ +	out_be32(&par_io[1].cpdir1, 0x00000000);  #endif  #ifndef CONFIG_SYS_INIT_L2_ADDR diff --git a/board/h2200/h2200.c b/board/h2200/h2200.c index 720b06e4c..738e480a4 100644 --- a/board/h2200/h2200.c +++ b/board/h2200/h2200.c @@ -32,6 +32,15 @@ int board_eth_init(bd_t *bis)  	return 0;  } +void reset_cpu(ulong ignore) +{ +	/* Enable VLIO interface on Hamcop */ +	writeb(0x1, 0x4000); + +	/* Reset board (cold reset) */ +	writeb(0xff, 0x4002); +} +  int board_init(void)  {  	/* We have RAM, disable cache */ diff --git a/board/lwmon5/lwmon5.c b/board/lwmon5/lwmon5.c index 29e24fb26..9cf0fa167 100644 --- a/board/lwmon5/lwmon5.c +++ b/board/lwmon5/lwmon5.c @@ -1,5 +1,5 @@  /* - * (C) Copyright 2007-2010 + * (C) Copyright 2007-2013   * Stefan Roese, DENX Software Engineering, sr@denx.de.   *   * This program is free software; you can redistribute it and/or @@ -200,9 +200,11 @@ int misc_init_r(void)  	u32 pbcr;  	int size_val = 0;  	u32 reg; +#ifndef CONFIG_LCD4_LWMON5  	unsigned long usb2d0cr = 0;  	unsigned long usb2phy0cr, usb2h0cr = 0;  	unsigned long sdr0_pfc1, sdr0_srst; +#endif  	/*  	 * FLASH stuff... @@ -233,6 +235,7 @@ int misc_init_r(void)  		      CONFIG_ENV_ADDR_REDUND + 2 * CONFIG_ENV_SECT_SIZE - 1,  		      &flash_info[cfi_flash_num_flash_banks - 1]); +#ifndef CONFIG_LCD4_LWMON5  	/*  	 * USB suff...  	 */ @@ -306,6 +309,7 @@ int misc_init_r(void)  	/* 7. Reassert internal PHY reset: */  	mtsdr(SDR0_SRST1, SDR0_SRST1_USB20PHY);  	udelay(1000); +#endif  	/*  	 * Clear resets @@ -313,7 +317,9 @@ int misc_init_r(void)  	mtsdr(SDR0_SRST1, 0x00000000);  	mtsdr(SDR0_SRST0, 0x00000000); +#ifndef CONFIG_LCD4_LWMON5  	printf("USB:   Host(int phy) Device(ext phy)\n"); +#endif  	/*  	 * Clear PLB4A0_ACR[WRP] @@ -323,10 +329,12 @@ int misc_init_r(void)  	reg = mfdcr(PLB4A0_ACR) & ~PLB4Ax_ACR_WRP_MASK;  	mtdcr(PLB4A0_ACR, reg); +#ifndef CONFIG_LCD4_LWMON5  	/*  	 * Init matrix keyboard  	 */  	misc_init_r_kbd(); +#endif  	return 0;  } @@ -336,7 +344,7 @@ int checkboard(void)  	char buf[64];  	int i = getenv_f("serial#", buf, sizeof(buf)); -	puts("Board: lwmon5"); +	printf("Board: %s", __stringify(CONFIG_HOSTNAME));  	if (i > 0) {  		puts(", serial# "); @@ -495,3 +503,66 @@ void board_reset(void)  {  	gpio_write_bit(CONFIG_SYS_GPIO_BOARD_RESET, 1);  } + +#ifdef CONFIG_SPL_OS_BOOT +/* + * lwmon5 specific implementation of spl_start_uboot() + * + * RETURN + * 0 if booting into OS is selected (default) + * 1 if booting into U-Boot is selected + */ +int spl_start_uboot(void) +{ +	char s[8]; + +	env_init(); +	getenv_f("boot_os", s, sizeof(s)); +	if ((s != NULL) && (strcmp(s, "yes") == 0)) +		return 0; + +	return 1; +} + +/* + * This function is called from the SPL U-Boot version for + * early init stuff, that needs to be done for OS (e.g. Linux) + * booting. Doing it later in the real U-Boot would not work + * in case that the SPL U-Boot boots Linux directly. + */ +void spl_board_init(void) +{ +	const gdc_regs *regs = board_get_regs(); + +	/* +	 * Setup PFC registers, mainly for ethernet support +	 * later on in Linux +	 */ +	board_early_init_f(); + +	/* +	 * Clear resets +	 */ +	mtsdr(SDR0_SRST1, 0x00000000); +	mtsdr(SDR0_SRST0, 0x00000000); + +	/* +	 * Reset Lime controller +	 */ +	gpio_write_bit(CONFIG_SYS_GPIO_LIME_S, 1); +	udelay(500); +	gpio_write_bit(CONFIG_SYS_GPIO_LIME_RST, 1); + +	out_be32((void *)CONFIG_SYS_LIME_SDRAM_CLOCK, CONFIG_SYS_MB862xx_CCF); +	udelay(300); +	out_be32((void *)CONFIG_SYS_LIME_MMR, CONFIG_SYS_MB862xx_MMR); + +	while (regs->index) { +		out_be32((void *)(CONFIG_SYS_LIME_BASE_0 + GC_DISP_BASE) + +			 regs->index, regs->value); +		regs++; +	} + +	board_backlight_brightness(DEFAULT_BRIGHTNESS); +} +#endif diff --git a/board/lwmon5/sdram.c b/board/lwmon5/sdram.c index b64b35a94..78b8fbc84 100644 --- a/board/lwmon5/sdram.c +++ b/board/lwmon5/sdram.c @@ -6,7 +6,7 @@   * Alain Saurel,	    AMCC/IBM, alain.saurel@fr.ibm.com   * Robert Snyder,	    AMCC/IBM, rob.snyder@fr.ibm.com   * - * (C) Copyright 2007-2008 + * (C) Copyright 2007-2013   * Stefan Roese, DENX Software Engineering, sr@denx.de.   *   * This program is free software; you can redistribute it and/or @@ -160,6 +160,7 @@ static void program_ecc(u32 start_address,   ************************************************************************/  phys_size_t initdram (int board_type)  { +#if defined(CONFIG_SPL_BUILD) || !defined(CONFIG_LCD4_LWMON5)  	/* CL=4 */  	mtsdram(DDR0_02, 0x00000000); @@ -253,6 +254,7 @@ phys_size_t initdram (int board_type)  	 * exceptions are enabled.  	 */  	set_mcsr(get_mcsr()); +#endif /* CONFIG_SPL_BUILD */  	return (CONFIG_SYS_MBYTES_SDRAM << 20);  } diff --git a/board/sandbox/sandbox/sandbox.c b/board/sandbox/sandbox/sandbox.c index 98830139a..8bdba9267 100644 --- a/board/sandbox/sandbox/sandbox.c +++ b/board/sandbox/sandbox/sandbox.c @@ -56,6 +56,6 @@ int timer_init(void)  int dram_init(void)  { -	gd->ram_size = CONFIG_DRAM_SIZE; +	gd->ram_size = CONFIG_SYS_SDRAM_SIZE;  	return 0;  } diff --git a/board/xilinx/microblaze-generic/microblaze-generic.c b/board/xilinx/microblaze-generic/microblaze-generic.c index 70f94c1a5..befbb3a3e 100644 --- a/board/xilinx/microblaze-generic/microblaze-generic.c +++ b/board/xilinx/microblaze-generic/microblaze-generic.c @@ -38,10 +38,15 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	*((unsigned long *)(CONFIG_SYS_GPIO_0_ADDR)) =  	    ++(*((unsigned long *)(CONFIG_SYS_GPIO_0_ADDR)));  #endif -#ifdef CONFIG_SYS_RESET_ADDRESS -	puts ("Reseting board\n"); -	asm ("bra r0"); + +#ifdef CONFIG_XILINX_TB_WATCHDOG +	hw_watchdog_disable();  #endif + +	puts ("Reseting board\n"); +	__asm__ __volatile__ ("	mts rmsr, r0;" \ +				"bra r0"); +  	return 0;  } diff --git a/board/xilinx/microblaze-generic/xparameters.h b/board/xilinx/microblaze-generic/xparameters.h index 50a82d94a..c846f97f5 100644 --- a/board/xilinx/microblaze-generic/xparameters.h +++ b/board/xilinx/microblaze-generic/xparameters.h @@ -77,3 +77,7 @@  #define XILINX_LLTEMAC_SDMA_CTRL_BASEADDR	0x42000180  #define XILINX_LLTEMAC_BASEADDR1		0x44200000  #define XILINX_LLTEMAC_FIFO_BASEADDR1		0x42100000 + +/* Watchdog IP is wxi_timebase_wdt_0 */ +#define XILINX_WATCHDOG_BASEADDR	0x50000000 +#define XILINX_WATCHDOG_IRQ		1 |