diff options
| -rwxr-xr-x | MAKEALL | 1 | ||||
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | board/socrates/Makefile | 53 | ||||
| -rw-r--r-- | board/socrates/config.mk | 30 | ||||
| -rw-r--r-- | board/socrates/law.c | 57 | ||||
| -rw-r--r-- | board/socrates/sdram.c | 122 | ||||
| -rw-r--r-- | board/socrates/socrates.c | 186 | ||||
| -rw-r--r-- | board/socrates/tlb.c | 117 | ||||
| -rw-r--r-- | board/socrates/u-boot.lds | 150 | ||||
| -rw-r--r-- | include/configs/socrates.h | 410 | 
10 files changed, 1129 insertions, 0 deletions
| @@ -354,6 +354,7 @@ LIST_85xx="		\  	sbc8540		\  	sbc8548		\  	sbc8560		\ +	socrates	\  	stxgp3		\  	stxssa		\  	TQM8540		\ @@ -2208,6 +2208,9 @@ sbc8560_66_config:	unconfig  	fi  	@$(MKCONFIG) -a sbc8560 ppc mpc85xx sbc8560 +socrates_config:	unconfig +	@$(MKCONFIG) $(@:_config=) ppc mpc85xx socrates +  stxgp3_config:		unconfig  	@$(MKCONFIG) $(@:_config=) ppc mpc85xx stxgp3 diff --git a/board/socrates/Makefile b/board/socrates/Makefile new file mode 100644 index 000000000..6453f2480 --- /dev/null +++ b/board/socrates/Makefile @@ -0,0 +1,53 @@ +# +# (C) Copyright 2008 +# Sergei Poselenov,  Emcraft Systems, sposelenov@emcraft.com. +# (C) Copyright 2001-2006 +# 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	= $(obj)lib$(BOARD).a +# + +COBJS	:= $(BOARD).o law.o tlb.o sdram.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) + +clean: +	rm -f $(OBJS) $(SOBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/socrates/config.mk b/board/socrates/config.mk new file mode 100644 index 000000000..1cf5d380d --- /dev/null +++ b/board/socrates/config.mk @@ -0,0 +1,30 @@ +# Copyright 2004 Freescale Semiconductor. +# +# Modified by Sergei Poselenov +# (C) Copyright 2008, Emcraft Systems. +# +# 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 +# + +# +# socrates board +# default CCARBAR is at 0xff700000 +# assume U-Boot is less than 256k +# +TEXT_BASE = 0xfffc0000 diff --git a/board/socrates/law.c b/board/socrates/law.c new file mode 100644 index 000000000..5f4b8ca4f --- /dev/null +++ b/board/socrates/law.c @@ -0,0 +1,57 @@ +/* + * (C) Copyright 2008 + * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.com. + * + * Copyright 2008 Freescale Semiconductor, Inc. + * + * (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 <common.h> +#include <asm/fsl_law.h> +#include <asm/mmu.h> + +/* + * LAW(Local Access Window) configuration: + * + * 0x0000_0000	   0x7fff_ffff	   DDR			   2G + * 0x8000_0000	   0x9fff_ffff	   PCI1 MEM		   512M + * 0xc000_0000	   0xdfff_ffff	   RapidIO		   512M + * 0xe000_0000	   0xe000_ffff	   CCSR			   1M + * 0xe200_0000	   0xe2ff_ffff	   PCI1 IO		   16M + * 0xf800_0000	   0xf80f_ffff	   BCSR			   1M + * 0xfe00_0000	   0xffff_ffff	   FLASH (boot bank)	   32M + * + * Notes: + *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window. + *    If flash is 8M at default position (last 8M), no LAW needed. + */ + +struct law_entry law_table[] = { +	SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_512M, LAW_TRGT_IF_DDR), +	SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI), +	SET_LAW_ENTRY(3, CFG_LBC_FLASH_BASE, LAW_SIZE_128M, LAW_TRGT_IF_LBC), +	SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI), +	SET_LAW_ENTRY(5, CFG_RIO_MEM_BASE, LAWAR_SIZE_512M, LAW_TRGT_IF_RIO), +}; + +int num_law_entries = ARRAY_SIZE(law_table); diff --git a/board/socrates/sdram.c b/board/socrates/sdram.c new file mode 100644 index 000000000..329eaccd5 --- /dev/null +++ b/board/socrates/sdram.c @@ -0,0 +1,122 @@ +/* + * (C) Copyright 2008 + * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.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 <asm/immap_85xx.h> +#include <asm/processor.h> +#include <asm/mmu.h> +#include <spd_sdram.h> + + +#if !defined(CONFIG_SPD_EEPROM) +/* + * Autodetect onboard DDR SDRAM on 85xx platforms + * + * NOTE: Some of the hardcoded values are hardware dependant, + *       so this should be extended for other future boards + *       using this routine! + */ +long int sdram_setup(int casl) +{ +	volatile ccsr_ddr_t *ddr = (void *)(CFG_MPC85xx_DDR_ADDR); + +	/* +	 * Disable memory controller. +	 */ +	ddr->cs0_config = 0; +	ddr->sdram_cfg = 0; + +	ddr->cs0_bnds = CFG_DDR_CS0_BNDS; +	ddr->cs0_config = CFG_DDR_CS0_CONFIG; +	ddr->timing_cfg_0 = CFG_DDR_TIMING_0; +	ddr->timing_cfg_1 = CFG_DDR_TIMING_1; +	ddr->timing_cfg_2 = CFG_DDR_TIMING_2; +	ddr->sdram_mode = CFG_DDR_MODE; +	ddr->sdram_interval = CFG_DDR_INTERVAL; +	ddr->sdram_cfg_2 = CFG_DDR_CONFIG_2; +	ddr->sdram_clk_cntl = CFG_DDR_CLK_CONTROL; + +	asm ("sync;isync;msync"); +	udelay(1000); + +	ddr->sdram_cfg = CFG_DDR_CONFIG; +	asm ("sync; isync; msync"); +	udelay(1000); + +	if (get_ram_size(0, CFG_SDRAM_SIZE<<20) == CFG_SDRAM_SIZE<<20) { +		/* +		 * OK, size detected -> all done +		 */ +		return CFG_SDRAM_SIZE<<20; +	} + +	return 0;				/* nothing found !		*/ +} +#endif + +long int initdram (int board_type) +{ +	long dram_size = 0; +#if defined(CONFIG_SPD_EEPROM) +	dram_size = spd_sdram (); +#else +	dram_size = sdram_setup(CONFIG_DDR_DEFAULT_CL); +#endif +	return dram_size; +} + +#if defined(CFG_DRAM_TEST) +int testdram (void) +{ +	uint *pstart = (uint *) CFG_MEMTEST_START; +	uint *pend = (uint *) CFG_MEMTEST_END; +	uint *p; + +	printf ("SDRAM test phase 1:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0xaaaaaaaa; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0xaaaaaaaa) { +			printf ("SDRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf ("SDRAM test phase 2:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0x55555555; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0x55555555) { +			printf ("SDRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf ("SDRAM test passed.\n"); +	return 0; +} +#endif diff --git a/board/socrates/socrates.c b/board/socrates/socrates.c new file mode 100644 index 000000000..57f32feda --- /dev/null +++ b/board/socrates/socrates.c @@ -0,0 +1,186 @@ +/* + * (C) Copyright 2008 + * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.com. + * + * Copyright 2004 Freescale Semiconductor. + * (C) Copyright 2002,2003, Motorola Inc. + * Xianghua Xiao, (X.Xiao@motorola.com) + * + * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.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 <pci.h> +#include <asm/processor.h> +#include <asm/immap_85xx.h> +#include <ioports.h> +#include <flash.h> + +DECLARE_GLOBAL_DATA_PTR; + +extern flash_info_t flash_info[];	/* FLASH chips info */ + +void local_bus_init (void); +ulong flash_get_size (ulong base, int banknum); + +int checkboard (void) +{ +	char *s = getenv("serial#"); + +	puts("Board: Socrates"); +	if (s != NULL) { +		puts(", serial# "); +		puts(s); +	} +	putc('\n'); + +#ifdef CONFIG_PCI +	printf ("PCI1:  32 bit, %d MHz (compiled)\n", +		CONFIG_SYS_CLK_FREQ / 1000000); +#else +	printf ("PCI1:  disabled\n"); +#endif + +	/* +	 * Initialize local bus. +	 */ +	local_bus_init (); + +	return 0; +} + +int misc_init_r (void) +{ +	volatile ccsr_lbc_t *memctl = (void *)(CFG_MPC85xx_LBC_ADDR); + +	/* +	 * Adjust flash start and offset to detected values +	 */ +	gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize; +	gd->bd->bi_flashoffset = 0; + +	/* +	 * Check if boot FLASH isn't max size +	 */ +	if (gd->bd->bi_flashsize < (0 - CFG_FLASH0)) { +		memctl->or0 = gd->bd->bi_flashstart | (CFG_OR0_PRELIM & 0x00007fff); +		memctl->br0 = gd->bd->bi_flashstart | (CFG_BR0_PRELIM & 0x00007fff); + +		/* +		 * Re-check to get correct base address +		 */ +		flash_get_size(gd->bd->bi_flashstart, CFG_MAX_FLASH_BANKS - 1); +	} + +	/* +	 * Check if only one FLASH bank is available +	 */ +	if (gd->bd->bi_flashsize != CFG_MAX_FLASH_BANKS * (0 - CFG_FLASH0)) { +		memctl->or1 = 0; +		memctl->br1 = 0; + +		/* +		 * Re-do flash protection upon new addresses +		 */ +		flash_protect (FLAG_PROTECT_CLEAR, +			       gd->bd->bi_flashstart, 0xffffffff, +			       &flash_info[CFG_MAX_FLASH_BANKS - 1]); + +		/* Monitor protection ON by default */ +		flash_protect (FLAG_PROTECT_SET, +			       CFG_MONITOR_BASE, CFG_MONITOR_BASE + monitor_flash_len - 1, +			       &flash_info[CFG_MAX_FLASH_BANKS - 1]); + +		/* Environment protection ON by default */ +		flash_protect (FLAG_PROTECT_SET, +			       CFG_ENV_ADDR, +			       CFG_ENV_ADDR + CFG_ENV_SECT_SIZE - 1, +			       &flash_info[CFG_MAX_FLASH_BANKS - 1]); + +		/* Redundant environment protection ON by default */ +		flash_protect (FLAG_PROTECT_SET, +			       CFG_ENV_ADDR_REDUND, +			       CFG_ENV_ADDR_REDUND + CFG_ENV_SIZE_REDUND - 1, +			       &flash_info[CFG_MAX_FLASH_BANKS - 1]); +	} + +	return 0; +} + +/* + * Initialize Local Bus + */ +void local_bus_init (void) +{ + +	volatile ccsr_lbc_t *lbc = (void *)(CFG_MPC85xx_LBC_ADDR); +	volatile ccsr_local_ecm_t *ecm = (void *)(CFG_MPC85xx_ECM_ADDR); + +	lbc->ltesr = 0xffffffff;	/* Clear LBC error interrupts */ +	lbc->lteir = 0xffffffff;	/* Enable LBC error interrupts */ +	ecm->eedr = 0xffffffff;		/* Clear ecm errors */ +	ecm->eeer = 0xffffffff;		/* Enable ecm errors */ + +} + +#if defined(CONFIG_PCI) +/* + * Initialize PCI Devices, report devices found. + */ + +#ifndef CONFIG_PCI_PNP +static struct pci_config_table pci_mpc85xxads_config_table[] = { +	{PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, +	 PCI_IDSEL_NUMBER, PCI_ANY_ID, +	 pci_cfgfunc_config_device, {PCI_ENET0_IOADDR, +				     PCI_ENET0_MEMADDR, +				     PCI_COMMAND_MEMORY | +				     PCI_COMMAND_MASTER}}, +	{} +}; +#endif + + +static struct pci_controller hose = { +#ifndef CONFIG_PCI_PNP +	config_table:pci_mpc85xxads_config_table, +#endif +}; + +#endif /* CONFIG_PCI */ + + +void pci_init_board (void) +{ +#ifdef CONFIG_PCI +	pci_mpc85xx_init (&hose); +#endif /* CONFIG_PCI */ +} + +#ifdef CONFIG_BOARD_EARLY_INIT_R +int board_early_init_r (void) +{ +#ifdef CONFIG_PS2MULT +	ps2mult_early_init(); +#endif /* CONFIG_PS2MULT */ +	return (0); +} +#endif /* CONFIG_BOARD_EARLY_INIT_R */ diff --git a/board/socrates/tlb.c b/board/socrates/tlb.c new file mode 100644 index 000000000..b80caea5e --- /dev/null +++ b/board/socrates/tlb.c @@ -0,0 +1,117 @@ +/* + * (C) Copyright 2008 + * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.com. + * + * Copyright 2008 Freescale Semiconductor, Inc. + * + * (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 <common.h> +#include <asm/mmu.h> + +struct fsl_e_tlb_entry tlb_table[] = { +	/* TLB 0 - for temp stack in cache */ +	SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR, +		      MAS3_SX|MAS3_SW|MAS3_SR, 0, +		      0, 0, BOOKE_PAGESZ_4K, 0), +	SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024, +		      MAS3_SX|MAS3_SW|MAS3_SR, 0, +		      0, 0, BOOKE_PAGESZ_4K, 0), +	SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024, +		      MAS3_SX|MAS3_SW|MAS3_SR, 0, +		      0, 0, BOOKE_PAGESZ_4K, 0), +	SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024, +		      MAS3_SX|MAS3_SW|MAS3_SR, 0, +		      0, 0, BOOKE_PAGESZ_4K, 0), + + +	/* +	 * TLB 0, 1:	128M	Non-cacheable, guarded +	 * 0xf8000000	128M	FLASH +	 * Out of reset this entry is only 4K. +	 */ +	SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 1, BOOKE_PAGESZ_64M, 1), +	SET_TLB_ENTRY(1, CFG_FLASH_BASE + 0x4000000, CFG_FLASH_BASE + 0x4000000, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 0, BOOKE_PAGESZ_64M, 1), + +	/* +	 * TLB 2:	256M	Non-cacheable, guarded +	 * 0x80000000	256M	PCI1 MEM First half +	 */ +	SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 2, BOOKE_PAGESZ_256M, 1), + +	/* +	 * TLB 3:	256M	Non-cacheable, guarded +	 * 0x90000000	256M	PCI1 MEM Second half +	 */ +	SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 3, BOOKE_PAGESZ_256M, 1), + +	/* +	 * TLB 4:	256M	Non-cacheable, guarded +	 * 0xc0000000	256M	Rapid IO MEM First half +	 */ +	SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE, CFG_RIO_MEM_BASE, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 4, BOOKE_PAGESZ_256M, 1), + +	/* +	 * TLB 5:	256M	Non-cacheable, guarded +	 * 0xd0000000	256M	Rapid IO MEM Second half +	 */ +	SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE + 0x10000000, CFG_RIO_MEM_BASE + 0x10000000, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 5, BOOKE_PAGESZ_256M, 1), + +	/* +	 * TLB 6:	64M	Non-cacheable, guarded +	 * 0xe000_0000	1M	CCSRBAR +	 * 0xe200_0000	16M	PCI1 IO +	 */ +	SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR_PHYS, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 6, BOOKE_PAGESZ_64M, 1), + +	/* +	 * TLB 7+8:	512M	DDR, cache disabled (needed for memory test) +	 * 0x00000000  512M	DDR System memory +	 * Without SPD EEPROM configured DDR, this must be setup manually. +	 * Make sure the TLB count at the top of this table is correct. +	 * Likely it needs to be increased by two for these entries. +	 */ +	SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 7, BOOKE_PAGESZ_256M, 1), + +	SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE + 0x10000000, CFG_DDR_SDRAM_BASE + 0x10000000, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 8, BOOKE_PAGESZ_256M, 1), +}; + +int num_tlb_entries = ARRAY_SIZE(tlb_table); diff --git a/board/socrates/u-boot.lds b/board/socrates/u-boot.lds new file mode 100644 index 000000000..8d2f65ccc --- /dev/null +++ b/board/socrates/u-boot.lds @@ -0,0 +1,150 @@ +/* + * (C) Copyright 2008 + * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.com. + * + * (C) Copyright 2002,2003, Motorola,Inc. + * Xianghua Xiao, X.Xiao@motorola.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 + */ + +OUTPUT_ARCH(powerpc) +/* Do we need any of these for elf? +   __DYNAMIC = 0;    */ +SECTIONS +{ +  .resetvec 0xFFFFFFFC : +  { +    *(.resetvec) +  } = 0xffff + +  .bootpg 0xFFFFF000 : +  { +    cpu/mpc85xx/start.o (.bootpg) +  } = 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	     : +  { +    cpu/mpc85xx/start.o (.text) +    cpu/mpc85xx/traps.o (.text) +    cpu/mpc85xx/interrupts.o (.text) +    cpu/mpc85xx/cpu_init.o (.text) +    cpu/mpc85xx/cpu.o (.text) +    cpu/mpc85xx/speed.o (.text) +    cpu/mpc85xx/pci.o (.text) +    common/dlmalloc.o (.text) +    lib_generic/crc32.o (.text) +    lib_ppc/extable.o (.text) +    lib_generic/zlib.o (.text) +    *(.text) +    *(.fixup) +    *(.got1) +   } +    _etext = .; +    PROVIDE (etext = .); +    .rodata    : +   { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .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 (NOLOAD)	     : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } +  _end = . ; +  PROVIDE (end = .); +} diff --git a/include/configs/socrates.h b/include/configs/socrates.h new file mode 100644 index 000000000..de8cd72ac --- /dev/null +++ b/include/configs/socrates.h @@ -0,0 +1,410 @@ +/* + * (C) Copyright 2008 + * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.com. + * + * Wolfgang Denk <wd@denx.de> + * Copyright 2004 Freescale Semiconductor. + * (C) Copyright 2002,2003 Motorola,Inc. + * Xianghua Xiao <X.Xiao@motorola.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 + */ + +/* + * Socrates + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/* High Level Configuration Options */ +#define CONFIG_BOOKE		1	/* BOOKE			*/ +#define CONFIG_E500		1	/* BOOKE e500 family		*/ +#define CONFIG_MPC85xx		1	/* MPC8540/60/55/41		*/ +#define CONFIG_MPC8544		1 +#define CONFIG_SOCRATES		1 + +#define CONFIG_PCI + +#define CONFIG_TSEC_ENET		/* tsec ethernet support	*/ + +#define CONFIG_MISC_INIT_R	1	/* Call misc_init_r		*/ + +#define CONFIG_FSL_LAW		1	/* Use common FSL init code */ + +/* + * Only possible on E500 Version 2 or newer cores. + */ +#define CONFIG_ENABLE_36BIT_PHYS	1 + +/* + * sysclk for MPC85xx + * + * Two valid values are: + *    33000000 + *    66000000 + * + * Most PCI cards are still 33Mhz, so in the presence of PCI, 33MHz + * is likely the desired value here, so that is now the default. + * The board, however, can run at 66MHz.  In any event, this value + * must match the settings of some switches.  Details can be found + * in the README.mpc85xxads. + */ + +#ifndef CONFIG_SYS_CLK_FREQ +#define CONFIG_SYS_CLK_FREQ	66666666 +#endif + +/* + * These can be toggled for performance analysis, otherwise use default. + */ +#define CONFIG_L2_CACHE			/* toggle L2 cache		*/ +#define CONFIG_BTB			/* toggle branch predition	*/ +#define CONFIG_ADDR_STREAMING		/* toggle addr streaming	*/ + +#define CFG_INIT_DBCR DBCR_IDM		/* Enable Debug Exceptions	*/ + +#undef	CFG_DRAM_TEST			/* memory test, takes time	*/ +#define CFG_MEMTEST_START	0x00000000 +#define CFG_MEMTEST_END		0x10000000 + +/* + * Base addresses -- Note these are effective addresses where the + * actual resources get mapped (not physical addresses) + */ +#define CFG_CCSRBAR_DEFAULT	0xFF700000	/* CCSRBAR Default	*/ +#define CFG_CCSRBAR		0xE0000000	/* relocated CCSRBAR	*/ +#define CFG_CCSRBAR_PHYS	CFG_CCSRBAR	/* physical addr of CCSRBAR */ +#define CFG_IMMR		CFG_CCSRBAR	/* PQII uses CFG_IMMR	*/ + +/* + * DDR Setup + */ +#define CFG_DDR_SDRAM_BASE	0x00000000	/* DDR is system memory	*/ +#define CFG_SDRAM_BASE		CFG_DDR_SDRAM_BASE + +#define CONFIG_DDR_DEFAULT_CL	30		/* CAS latency 3	*/ + +/* Hardcoded values, to use instead of SPD */ +#define CFG_DDR_CS0_BNDS		0x0000000f +#define CFG_DDR_CS0_CONFIG		0x80010102 +#define CFG_DDR_TIMING_0		0x00260802 +#define CFG_DDR_TIMING_1		0x3935D322 +#define CFG_DDR_TIMING_2		0x14904CC8 +#define CFG_DDR_MODE			0x00480432 +#define CFG_DDR_INTERVAL		0x030C0100 +#define CFG_DDR_CONFIG_2		0x04400000 +#define CFG_DDR_CONFIG			0xC3008000 +#define CFG_DDR_CLK_CONTROL		0x03800000 +#define CFG_SDRAM_SIZE			256 /* in Megs */ + +#if 1 +#define CONFIG_SPD_EEPROM	1 	/* Use SPD EEPROM for DDR setup*/ +#define SPD_EEPROM_ADDRESS	0x50		/* DDR DIMM */ +#define MPC85xx_DDR_SDRAM_CLK_CNTL	/* 85xx has clock control reg */ +#endif + +/* + * Flash on the Local Bus + */ +/* + * Flash on the LocalBus + */ +#define CFG_LBC_CACHE_BASE	0xf0000000	/* Localbus cacheable	 */ + +#define CFG_FLASH0		0xFE000000 +#define CFG_FLASH1		0xFC000000 +#define CFG_FLASH_BANKS_LIST	{ CFG_FLASH1, CFG_FLASH0 } + +#define CFG_LBC_FLASH_BASE	CFG_FLASH1	/* Localbus flash start	*/ +#define CFG_FLASH_BASE		CFG_LBC_FLASH_BASE /* start of FLASH	*/ + +#define CFG_BR0_PRELIM		0xfe001001	/* port size 16bit	*/ +#define CFG_OR0_PRELIM		0xfe000ff7	/* 32MB Flash		*/ +#define CFG_BR1_PRELIM		0xfc001001	/* port size 16bit	*/ +#define CFG_OR1_PRELIM		0xfe000ff7	/* 32MB Flash		*/ + +#define CFG_FLASH_CFI				/* flash is CFI compat.	*/ +#define CFG_FLASH_CFI_DRIVER			/* Use common CFI driver*/ +#define CFG_FLASH_EMPTY_INFO		/* print 'E' for empty sector	*/ + +#define CFG_MAX_FLASH_BANKS	2		/* number of banks	*/ +#define CFG_MAX_FLASH_SECT	512		/* sectors per device	*/ +#undef	CFG_FLASH_CHECKSUM +#define CFG_FLASH_ERASE_TOUT	60000	/* Flash Erase Timeout (ms)	*/ +#define CFG_FLASH_WRITE_TOUT	500	/* Flash Write Timeout (ms)	*/ + +#define CFG_MONITOR_BASE	TEXT_BASE	/* start of monitor	*/ + +#define CFG_LBC_LCRR		0x00030008    /* LB clock ratio reg	*/ +#define CFG_LBC_LBCR		0x00000000    /* LB config reg		*/ +#define CFG_LBC_LSRT		0x20000000    /* LB sdram refresh timer	*/ +#define CFG_LBC_MRTPR		0x20000000    /* LB refresh timer presc.*/ + +#define CONFIG_L1_INIT_RAM +#define CFG_INIT_RAM_LOCK	1 +#define CFG_INIT_RAM_ADDR	0xe4010000	/* Initial RAM address	*/ +#define CFG_INIT_RAM_END	0x4000		/* End used area in RAM	*/ + +#define CFG_GBL_DATA_SIZE	128		/* num bytes initial data*/ +#define CFG_GBL_DATA_OFFSET	(CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_SP_OFFSET	CFG_GBL_DATA_OFFSET + +#define CFG_MONITOR_LEN		(256 * 1024)	/* Reserve 256kB for Mon*/ +#define CFG_MALLOC_LEN		(128 * 1024)	/* Reserved for malloc	*/ + +/* Serial Port */ + +#define CONFIG_CONS_INDEX     1 +#undef	CONFIG_SERIAL_SOFTWARE_FIFO +#define CFG_NS16550 +#define CFG_NS16550_SERIAL +#define CFG_NS16550_REG_SIZE	1 +#define CFG_NS16550_CLK		get_bus_freq(0) + +#define CFG_NS16550_COM1	(CFG_CCSRBAR+0x4500) +#define CFG_NS16550_COM2	(CFG_CCSRBAR+0x4600) + +#define CONFIG_BAUDRATE         115200 + +#define CFG_BAUDRATE_TABLE  \ +	{300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200} + +#define CONFIG_CMDLINE_EDITING	1	/* add command line history	*/ +#define CFG_HUSH_PARSER		1	/* Use the HUSH parser		*/ +#ifdef	CFG_HUSH_PARSER +#define	CFG_PROMPT_HUSH_PS2	"> " +#endif + + +/* + * I2C + */ +#define CONFIG_FSL_I2C		/* Use FSL common I2C driver */ +#define CONFIG_HARD_I2C			/* I2C with hardware support	*/ +#undef	CONFIG_SOFT_I2C			/* I2C bit-banged		*/ +#define CFG_I2C_SPEED		400000	/* I2C speed and slave address	*/ +#define CFG_I2C_SLAVE		0x7F +#define CFG_I2C_NOPROBES	{0x48}	/* Don't probe these addrs	*/ +#define CFG_I2C_OFFSET		0x3000 + +/* I2C RTC */ +#define CONFIG_RTC_DS1337		/* Use ds1337 rtc via i2c	*/ +#define CFG_I2C_RTC_ADDR	0x68	/* at address 0x68		*/ + +#if 0 +/* I2C EEPROM */ +/* + * EEPROM configuration for onboard EEPROM M24C32 (M24C64 should work also). + */ +#define CFG_I2C_EEPROM_ADDR		0x50	/* 1010000x		*/ +#define CFG_I2C_EEPROM_ADDR_LEN		2 +#define CFG_EEPROM_PAGE_WRITE_BITS	5	/* =32 Bytes per write	*/ +#define CFG_EEPROM_PAGE_WRITE_ENABLE +#define CFG_EEPROM_PAGE_WRITE_DELAY_MS	20 +#define CFG_I2C_MULTI_EEPROMS		1       /* more than one eeprom */ + +/* I2C SYSMON (LM75) */ +#define CONFIG_DTT_LM75		1		/* ON Semi's LM75	*/ +#define CONFIG_DTT_SENSORS	{0}		/* Sensor addresses	*/ +#define CFG_DTT_MAX_TEMP	70 +#define CFG_DTT_LOW_TEMP	-30 +#define CFG_DTT_HYSTERESIS	3 +#endif + +/* RapidIO MMU */ +#define CFG_RIO_MEM_BASE	0xc0000000	/* base address		*/ +#define CFG_RIO_MEM_PHYS	CFG_RIO_MEM_BASE +#define CFG_RIO_MEM_SIZE	0x20000000	/* 128M			*/ + +/* + * General PCI + * Memory space is mapped 1-1. + */ +#define CFG_PCI_PHYS		0x80000000	/* 1G PCI TLB */ + + +#define CFG_PCI1_MEM_BASE	0x80000000 +#define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE +#define CFG_PCI1_MEM_SIZE	0x20000000	/* 512M			*/ +#define CFG_PCI1_IO_BASE	0xE2000000 +#define CFG_PCI1_IO_PHYS	CFG_PCI1_IO_BASE +#define CFG_PCI1_IO_SIZE	0x01000000	/* 16M			*/ + +#if defined(CONFIG_PCI) + +#define CONFIG_PCI_PNP			/* do pci plug-and-play		*/ + +#define CONFIG_EEPRO100 +#undef CONFIG_TULIP + +#undef CONFIG_PCI_SCAN_SHOW		/* show pci devices on startup	*/ +#define CFG_PCI_SUBSYS_VENDORID 0x1057	/* Motorola			*/ + +#endif	/* CONFIG_PCI */ + + +#define CONFIG_NET_MULTI	1 +#define CONFIG_MII		1	/* MII PHY management */ +#define CONFIG_TSEC1	1 +#define CONFIG_TSEC1_NAME	"TSEC0" +#define CONFIG_TSEC2	1 +#define CONFIG_TSEC2_NAME	"TSEC1" +#undef CONFIG_MPC85XX_FEC + +#define TSEC1_PHY_ADDR		0 +#define TSEC2_PHY_ADDR		1 + +#define TSEC1_PHYIDX		0 +#define TSEC2_PHYIDX		0 +#define TSEC1_FLAGS		TSEC_GIGABIT +#define TSEC2_FLAGS		TSEC_GIGABIT + +/* Options are: TSEC[0-1] */ +#define CONFIG_ETHPRIME		"TSEC0" +#define CONFIG_PHY_GIGE		1	/* Include GbE speed/duplex detection */ + +/* + * Environment + */ +#define CFG_ENV_IS_IN_FLASH	1 +#define CFG_ENV_SECT_SIZE	0x20000 /* 128K(one sector) for env	*/ +#define CFG_ENV_ADDR		(CFG_MONITOR_BASE - CFG_ENV_SECT_SIZE) +#define CFG_ENV_SIZE		0x4000 +#define CFG_ENV_ADDR_REDUND	(CFG_ENV_ADDR-CFG_ENV_SECT_SIZE) +#define CFG_ENV_SIZE_REDUND	(CFG_ENV_SIZE) + +#define CONFIG_LOADS_ECHO	1	/* echo on for serial download	*/ +#define CFG_LOADS_BAUD_CHANGE	1	/* allow baudrate change	*/ + +#define	CONFIG_TIMESTAMP		/* Print image info with ts	*/ + + +/* + * BOOTP options + */ +#define CONFIG_BOOTP_BOOTFILESIZE +#define CONFIG_BOOTP_BOOTPATH +#define CONFIG_BOOTP_GATEWAY +#define CONFIG_BOOTP_HOSTNAME + + +/* + * Command line configuration. + */ +#include <config_cmd_default.h> + +#define CONFIG_CMD_DATE +#define CONFIG_CMD_DHCP +#undef CONFIG_CMD_DTT +#undef CONFIG_CMD_EEPROM +#define CONFIG_CMD_I2C +#define CONFIG_CMD_MII +#define CONFIG_CMD_NFS +#define CONFIG_CMD_PING +#undef CONFIG_CMD_RTC +#define CONFIG_CMD_SNTP + + +#if defined(CONFIG_PCI) +    #define CONFIG_CMD_PCI +#endif + + +#undef CONFIG_WATCHDOG			/* watchdog disabled		*/ + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP			/* undef to save memory		*/ +#define CFG_LOAD_ADDR	0x2000000	/* default load address		*/ +#define CFG_PROMPT	"=> "		/* Monitor Command Prompt	*/ + +#if defined(CONFIG_CMD_KGDB) +    #define CFG_CBSIZE	1024		/* Console I/O Buffer Size	*/ +#else +    #define CFG_CBSIZE	256		/* Console I/O Buffer Size	*/ +#endif + +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buf Size	*/ +#define CFG_MAXARGS	16		/* max number of command args	*/ +#define CFG_BARGSIZE	CFG_CBSIZE	/* Boot Argument Buffer Size	*/ +#define CFG_HZ		1000		/* decrementer freq: 1ms ticks	*/ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ	(8 << 20)	/* Initial Memory map for Linux	*/ + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD	0x01		/* Power-On: Boot from FLASH	*/ +#define BOOTFLAG_WARM	0x02		/* Software reboot		*/ + +#if defined(CONFIG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port*/ +#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use	*/ +#endif + + +#define CONFIG_LOADADDR	 200000		/* default addr for tftp & bootm*/ + +#define CONFIG_BOOTDELAY 5		/* -1 disables auto-boot	*/ + +#define CONFIG_PREBOOT	"echo;"	\ +	"echo Type \\\"run flash_nfs\\\" to mount root filesystem over NFS;" \ +	"echo" + +#undef	CONFIG_BOOTARGS		/* the boot command will set bootargs	*/ + +#define	CONFIG_EXTRA_ENV_SETTINGS					\ +	"bootfile=/tftpboot/socrates\0"				\ +	"netdev=eth0\0"							\ +	"consdev=ttyS0\0"						\ +	"nfsargs=setenv bootargs root=/dev/nfs rw "			\ +		"nfsroot=$serverip:$rootpath\0"				\ +	"ramargs=setenv bootargs root=/dev/ram rw\0"			\ +	"addip=setenv bootargs $bootargs "				\ +		"ip=$ipaddr:$serverip:$gatewayip:$netmask"		\ +		":$hostname:$netdev:off panic=1\0"			\ +	"addcons=setenv bootargs $bootargs "				\ +		"console=$consdev,$baudrate\0"				\ +	"flash_nfs=run nfsargs addip addcons;"				\ +		"bootm $kernel_addr\0"					\ +	"flash_self=run ramargs addip addcons;"				\ +		"bootm $kernel_addr $ramdisk_addr\0"			\ +	"net_nfs=tftp $loadaddr $bootfile;"				\ +		"run nfsargs addip addcons;bootm\0"			\ +	"rootpath=/opt/eldk/ppc_85xx\0"					\ +	"kernel_addr=FE000000\0"					\ +	"ramdisk_addr=FE180000\0"					\ +	"load=tftp 100000 /tftpboot/$hostname/u-boot.bin\0"		\ +	"update=protect off fffc0000 ffffffff;era fffc0000 ffffffff;"	\ +		"cp.b 100000 fffc0000 40000;"			        \ +		"setenv filesize;saveenv\0"				\ +	"upd=run load update\0"						\ +	"" +#define CONFIG_BOOTCOMMAND	"run flash_self" + +#endif	/* __CONFIG_H */ |