diff options
Diffstat (limited to 'board')
| -rw-r--r-- | board/esd/hub405/Makefile | 46 | ||||
| -rw-r--r-- | board/esd/hub405/config.mk | 28 | ||||
| -rw-r--r-- | board/esd/hub405/flash.c | 101 | ||||
| -rw-r--r-- | board/esd/hub405/hub405.c | 166 | ||||
| -rw-r--r-- | board/esd/hub405/u-boot.lds | 147 | 
5 files changed, 488 insertions, 0 deletions
| diff --git a/board/esd/hub405/Makefile b/board/esd/hub405/Makefile new file mode 100644 index 000000000..f5bda5519 --- /dev/null +++ b/board/esd/hub405/Makefile @@ -0,0 +1,46 @@ +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd@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 $(TOPDIR)/config.mk + +LIB	= lib$(BOARD).a + +OBJS	= $(BOARD).o flash.o + +$(LIB):	$(OBJS) $(SOBJS) +	$(AR) crv $@ $(OBJS) + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +.depend:	Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) +		$(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +sinclude .depend + +######################################################################### diff --git a/board/esd/hub405/config.mk b/board/esd/hub405/config.mk new file mode 100644 index 000000000..a6d31aad2 --- /dev/null +++ b/board/esd/hub405/config.mk @@ -0,0 +1,28 @@ +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd@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 +# + +# +# esd HUB405 boards +# + +TEXT_BASE = 0xFFFC0000 diff --git a/board/esd/hub405/flash.c b/board/esd/hub405/flash.c new file mode 100644 index 000000000..89af1190a --- /dev/null +++ b/board/esd/hub405/flash.c @@ -0,0 +1,101 @@ +/* + * (C) Copyright 2001 + * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.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 + */ + +#include <common.h> +#include <ppc4xx.h> +#include <asm/processor.h> + +/* + * include common flash code (for esd boards) + */ +#include "../common/flash.c" + +/*----------------------------------------------------------------------- + * Functions + */ +static ulong flash_get_size (vu_long * addr, flash_info_t * info); +static void flash_get_offsets (ulong base, flash_info_t * info); + +/*----------------------------------------------------------------------- + */ + +unsigned long flash_init (void) +{ +	unsigned long size_b0; +	int i; +	uint pbcr; +	unsigned long base_b0; +	int size_val = 0; + +	/* Init: no FLASHes known */ +	for (i=0; i<CFG_MAX_FLASH_BANKS; ++i) { +		flash_info[i].flash_id = FLASH_UNKNOWN; +	} + +	/* Static FLASH Bank configuration here - FIXME XXX */ + +	size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]); + +	if (flash_info[0].flash_id == FLASH_UNKNOWN) { +		printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n", +			size_b0, size_b0<<20); +	} + +	/* Setup offsets */ +	flash_get_offsets (-size_b0, &flash_info[0]); + +	/* Re-do sizing to get full correct info */ +	mtdcr(ebccfga, pb0cr); +	pbcr = mfdcr(ebccfgd); +	mtdcr(ebccfga, pb0cr); +	base_b0 = -size_b0; +	switch (size_b0) { +	case 1 << 20: +		size_val = 0; +		break; +	case 2 << 20: +		size_val = 1; +		break; +	case 4 << 20: +		size_val = 2; +		break; +	case 8 << 20: +		size_val = 3; +		break; +	case 16 << 20: +		size_val = 4; +		break; +	} +	pbcr = (pbcr & 0x0001ffff) | base_b0 | (size_val << 17); +	mtdcr(ebccfgd, pbcr); + +	/* Monitor protection ON by default */ +	(void)flash_protect(FLAG_PROTECT_SET, +			    -CFG_MONITOR_LEN, +			    0xffffffff, +			    &flash_info[0]); + +	flash_info[0].size = size_b0; + +	return (size_b0); +} diff --git a/board/esd/hub405/hub405.c b/board/esd/hub405/hub405.c new file mode 100644 index 000000000..ba8e8e331 --- /dev/null +++ b/board/esd/hub405/hub405.c @@ -0,0 +1,166 @@ +/* + * (C) Copyright 2001-2003 + * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.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 + */ + +#include <common.h> +#include <asm/processor.h> +#include <command.h> +#include <malloc.h> + +/* ------------------------------------------------------------------------- */ + + +int board_pre_init (void) +{ +	/* +	 * IRQ 0-15  405GP internally generated; active high; level sensitive +	 * IRQ 16    405GP internally generated; active low; level sensitive +	 * IRQ 17-24 RESERVED +	 * IRQ 25 (EXT IRQ 0) CAN0; active low; level sensitive +	 * IRQ 26 (EXT IRQ 1) SER0 ; active low; level sensitive +	 * IRQ 27 (EXT IRQ 2) SER1; active low; level sensitive +	 * IRQ 28 (EXT IRQ 3) FPGA 0; active low; level sensitive +	 * IRQ 29 (EXT IRQ 4) FPGA 1; active low; level sensitive +	 * IRQ 30 (EXT IRQ 5) PCI INTA; active low; level sensitive +	 * IRQ 31 (EXT IRQ 6) COMPACT FLASH; active high; level sensitive +	 */ +	mtdcr(uicsr, 0xFFFFFFFF);       /* clear all ints */ +	mtdcr(uicer, 0x00000000);       /* disable all ints */ +	mtdcr(uiccr, 0x00000000);       /* set all to be non-critical*/ +	mtdcr(uicpr, 0xFFFFFF9F);       /* set int polarities */ +	mtdcr(uictr, 0x10000000);       /* set int trigger levels */ +	mtdcr(uicvcr, 0x00000001);      /* set vect base=0,INT0 highest priority*/ +	mtdcr(uicsr, 0xFFFFFFFF);       /* clear all ints */ + +	/* +	 * EBC Configuration Register: set ready timeout to 512 ebc-clks -> ca. 15 us +	 */ +	mtebc (epcr, 0xa8400000); /* ebc always driven */ + +	return 0; +} + + +/* ------------------------------------------------------------------------- */ + +int misc_init_f (void) +{ +	return 0;  /* dummy implementation */ +} + + +int misc_init_r (void) +{ +	volatile unsigned char *duart0_mcr = (unsigned char *)((ulong)DUART0_BA + 4); +	volatile unsigned char *duart1_mcr = (unsigned char *)((ulong)DUART1_BA + 4); +	volatile unsigned char *duart2_mcr = (unsigned char *)((ulong)DUART2_BA + 4); +	volatile unsigned char *duart3_mcr = (unsigned char *)((ulong)DUART3_BA + 4); + +	/* +	 * Reset external DUARTs +	 */ +	out32(GPIO0_OR, in32(GPIO0_OR) | CFG_DUART_RST); /* set reset to high */ +	udelay(10); /* wait 10us */ +	out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_DUART_RST); /* set reset to low */ +	udelay(1000); /* wait 1ms */ + +	/* +	 * Enable interrupts in exar duart mcr[3] +	 */ +	*duart0_mcr = 0x08; +	*duart1_mcr = 0x08; +	*duart2_mcr = 0x08; +	*duart3_mcr = 0x08; + +	/* +	 * Set NAND-FLASH GPIO signals to default +	 */ +	out32(GPIO0_OR, in32(GPIO0_OR) & ~(CFG_NAND_CLE | CFG_NAND_ALE)); +	out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND_CE); + +	return (0); +} + + +/* + * Check Board Identity: + */ + +int checkboard (void) +{ +	unsigned char str[64]; +	int i = getenv_r ("serial#", str, sizeof(str)); + +	puts ("Board: "); + +	if (i == -1) { +		puts ("### No HW ID - assuming HUB405"); +	} else { +		puts(str); +	} + +	putc ('\n'); + +	return 0; +} + +/* ------------------------------------------------------------------------- */ + +long int initdram (int board_type) +{ +	unsigned long val; + +	mtdcr(memcfga, mem_mb0cf); +	val = mfdcr(memcfgd); + +#if 0 +	printf("\nmb0cf=%x\n", val); /* test-only */ +	printf("strap=%x\n", mfdcr(strap)); /* test-only */ +#endif + +	return (4*1024*1024 << ((val & 0x000e0000) >> 17)); +} + +/* ------------------------------------------------------------------------- */ + +int testdram (void) +{ +	/* TODO: XXX XXX XXX */ +	printf ("test: 16 MB - ok\n"); + +	return (0); +} + +/* ------------------------------------------------------------------------- */ + +#if (CONFIG_COMMANDS & CFG_CMD_NAND) +#include <linux/mtd/nand.h> +extern struct nand_chip nand_dev_desc[CFG_MAX_NAND_DEVICE]; + +void nand_init(void) +{ +	nand_probe(CFG_NAND_BASE); +	if (nand_dev_desc[0].ChipID != NAND_ChipID_UNKNOWN) { +		print_size(nand_dev_desc[0].totlen, "\n"); +	} +} +#endif diff --git a/board/esd/hub405/u-boot.lds b/board/esd/hub405/u-boot.lds new file mode 100644 index 000000000..ba555501e --- /dev/null +++ b/board/esd/hub405/u-boot.lds @@ -0,0 +1,147 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +/* Do we need any of these for elf? +   __DYNAMIC = 0;    */ +SECTIONS +{ +  .resetvec 0xFFFFFFFC : +  { +    *(.resetvec) +  } = 0xffff + +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .interp : { *(.interp) } +  .hash          : { *(.hash)		} +  .dynsym        : { *(.dynsym)		} +  .dynstr        : { *(.dynstr)		} +  .rel.text      : { *(.rel.text)		} +  .rela.text     : { *(.rela.text) 	} +  .rel.data      : { *(.rel.data)		} +  .rela.data     : { *(.rela.data) 	} +  .rel.rodata    : { *(.rel.rodata) 	} +  .rela.rodata   : { *(.rela.rodata) 	} +  .rel.got       : { *(.rel.got)		} +  .rela.got      : { *(.rela.got)		} +  .rel.ctors     : { *(.rel.ctors)	} +  .rela.ctors    : { *(.rela.ctors)	} +  .rel.dtors     : { *(.rel.dtors)	} +  .rela.dtors    : { *(.rela.dtors)	} +  .rel.bss       : { *(.rel.bss)		} +  .rela.bss      : { *(.rela.bss)		} +  .rel.plt       : { *(.rel.plt)		} +  .rela.plt      : { *(.rela.plt)		} +  .init          : { *(.init)	} +  .plt : { *(.plt) } +  .text      : +  { +    /* WARNING - the following is hand-optimized to fit within	*/ +    /* the sector layout of our flash chips!	XXX FIXME XXX	*/ + +    cpu/ppc4xx/start.o	(.text) +    cpu/ppc4xx/traps.o	(.text) +    cpu/ppc4xx/interrupts.o	(.text) +    cpu/ppc4xx/serial.o	(.text) +    cpu/ppc4xx/cpu_init.o	(.text) +    cpu/ppc4xx/speed.o	(.text) +    cpu/ppc4xx/405gp_enet.o	(.text) +    common/dlmalloc.o	(.text) +    lib_generic/crc32.o		(.text) +    lib_ppc/extable.o	(.text) +    lib_generic/zlib.o		(.text) + +/*    . = env_offset;*/ +/*    common/environment.o(.text)*/ + +    *(.text) +    *(.fixup) +    *(.got1) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x00FF) & 0xFFFFFF00; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    *(.got) +    _GOT2_TABLE_ = .; +    *(.got2) +    _FIXUP_TABLE_ = .; +    *(.fixup) +  } +  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2; +  __fixup_entries = (. - _FIXUP_TABLE_)>>2; + +  .data    : +  { +    *(.data) +    *(.data1) +    *(.sdata) +    *(.sdata2) +    *(.dynamic) +    CONSTRUCTORS +  } +  _edata  =  .; +  PROVIDE (edata = .); + +  __u_boot_cmd_start = .; +  .u_boot_cmd : { *(.u_boot_cmd) } +  __u_boot_cmd_end = .; + +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(256); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(256); +  __init_end = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } +  _end = . ; +  PROVIDE (end = .); +} |