diff options
Diffstat (limited to 'board')
| -rw-r--r-- | board/cds/mpc8541cds/mpc8541cds.c | 4 | ||||
| -rw-r--r-- | board/cds/mpc8548cds/Makefile | 51 | ||||
| -rw-r--r-- | board/cds/mpc8548cds/config.mk | 30 | ||||
| -rw-r--r-- | board/cds/mpc8548cds/init.S | 255 | ||||
| -rw-r--r-- | board/cds/mpc8548cds/mpc8548cds.c | 329 | ||||
| -rw-r--r-- | board/cds/mpc8548cds/u-boot.lds | 147 | ||||
| -rw-r--r-- | board/cds/mpc8555cds/mpc8555cds.c | 4 | ||||
| -rw-r--r-- | board/mpc8540ads/mpc8540ads.c | 4 | ||||
| -rw-r--r-- | board/mpc8560ads/mpc8560ads.c | 4 | 
9 files changed, 820 insertions, 8 deletions
| diff --git a/board/cds/mpc8541cds/mpc8541cds.c b/board/cds/mpc8541cds/mpc8541cds.c index c75a4dfe0..6b8aa68f5 100644 --- a/board/cds/mpc8541cds/mpc8541cds.c +++ b/board/cds/mpc8541cds/mpc8541cds.c @@ -32,7 +32,7 @@  #include "../common/cadmus.h"  #include "../common/eeprom.h" -#if defined(CONFIG_DDR_ECC) +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  extern void ddr_enable_ecc(unsigned int dram_size);  #endif @@ -271,7 +271,7 @@ initdram(int board_type)  #endif  	dram_size = spd_sdram(); -#if defined(CONFIG_DDR_ECC) +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  	/*  	 * Initialize and enable DDR ECC.  	 */ diff --git a/board/cds/mpc8548cds/Makefile b/board/cds/mpc8548cds/Makefile new file mode 100644 index 000000000..0d4abbd71 --- /dev/null +++ b/board/cds/mpc8548cds/Makefile @@ -0,0 +1,51 @@ +# +# Copyright 2004 Freescale Semiconductor. +# (C) Copyright 2001 +# 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 \ +	   ../common/cadmus.o \ +	   ../common/eeprom.o + +SOBJS	:= init.o + +$(LIB):	$(OBJS) $(SOBJS) +	$(AR) crv $@ $(OBJS) + +clean: +	rm -f $(OBJS) $(SOBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +.depend:	Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) +		$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +-include .depend + +######################################################################### diff --git a/board/cds/mpc8548cds/config.mk b/board/cds/mpc8548cds/config.mk new file mode 100644 index 000000000..242a67620 --- /dev/null +++ b/board/cds/mpc8548cds/config.mk @@ -0,0 +1,30 @@ +# +# Copyright 2004 Freescale Semiconductor. +# +# 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 +# + +# +# mpc8548cds board +# +TEXT_BASE = 0xfff80000 + +PLATFORM_CPPFLAGS += -DCONFIG_E500=1 +PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1 +PLATFORM_CPPFLAGS += -DCONFIG_MPC8548=1 diff --git a/board/cds/mpc8548cds/init.S b/board/cds/mpc8548cds/init.S new file mode 100644 index 000000000..53dcd0d76 --- /dev/null +++ b/board/cds/mpc8548cds/init.S @@ -0,0 +1,255 @@ +/* + * Copyright 2004 Freescale Semiconductor. + * Copyright 2002,2003, Motorola Inc. + * + * 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 <ppc_asm.tmpl> +#include <ppc_defs.h> +#include <asm/cache.h> +#include <asm/mmu.h> +#include <config.h> +#include <mpc85xx.h> + + +/* + * TLB0 and TLB1 Entries + * + * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR. + * However, CCSRBAR is then relocated to CFG_CCSRBAR right after + * these TLB entries are established. + * + * The TLB entries for DDR are dynamically setup in spd_sdram() + * and use TLB1 Entries 8 through 15 as needed according to the + * size of DDR memory. + * + * MAS0: tlbsel, esel, nv + * MAS1: valid, iprot, tid, ts, tsize + * MAS2: epn, sharen, x0, x1, w, i, m, g, e + * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr + */ + +#define	entry_start \ +	mflr	r1 	;	\ +	bl	0f 	; + +#define	entry_end \ +0:	mflr	r0	;	\ +	mtlr	r1	;	\ +	blr		; + + +	.section	.bootpg, "ax" +	.globl	tlb1_entry +tlb1_entry: +	entry_start + +	/* +	 * Number of TLB0 and TLB1 entries in the following table +	 */ +	.long 13 + +#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR) +	/* +	 * TLB0		4K	Non-cacheable, guarded +	 * 0xff700000	4K	Initial CCSRBAR mapping +	 * +	 * This ends up at a TLB0 Index==0 entry, and must not collide +	 * with other TLB0 Entries. +	 */ +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,0,1,0,1,0,1) +#else +#error("Update the number of table entries in tlb1_entry") +#endif + +	/* +	 * TLB0		16K	Cacheable, non-guarded +	 * 0xd001_0000	16K	Temporary Global data for initialization +	 * +	 * Use four 4K TLB0 entries.  These entries must be cacheable +	 * as they provide the bootstrap memory before the memory +	 * controler and real memory have been configured. +	 * +	 * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c, +	 * and must not collide with other TLB0 entries. +	 */ +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR), +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR), +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 4 * 1024), +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 4 * 1024), +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024), +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 8 * 1024), +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 12 * 1024), +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 12 * 1024), +			0,0,0,0,0,1,0,1,0,1) + + +	/* +	 * TLB 0:	16M	Non-cacheable, guarded +	 * 0xff000000	16M	FLASH +	 * Out of reset this entry is only 4K. +	 */ +	.long TLB1_MAS0(1, 0, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_FLASH_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_FLASH_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 1:	256M	Non-cacheable, guarded +	 * 0x80000000	256M	PCI1 MEM First half +	 */ +	.long TLB1_MAS0(1, 1, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 2:	256M	Non-cacheable, guarded +	 * 0x90000000	256M	PCI1 MEM Second half +	 */ +	.long TLB1_MAS0(1, 2, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE + 0x10000000), +			0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE + 0x10000000), +			0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 3:	256M	Non-cacheable, guarded +	 * 0xa0000000	256M	PCI2 MEM First half +	 */ +	.long TLB1_MAS0(1, 3, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 4:	256M	Non-cacheable, guarded +	 * 0xb0000000	256M	PCI2 MEM Second half +	 */ +	.long TLB1_MAS0(1, 4, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE + 0x10000000), +			0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE + 0x10000000), +			0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 5:	64M	Non-cacheable, guarded +	 * 0xe000_0000	1M	CCSRBAR +	 * 0xe200_0000	16M	PCI1 IO +	 * 0xe300_0000	16M	PCI2 IO +	 */ +	.long TLB1_MAS0(1, 5, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 6:	64M	Cacheable, non-guarded +	 * 0xf000_0000	64M	LBC SDRAM +	 */ +	.long TLB1_MAS0(1, 6, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_SDRAM_BASE), 0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 7:	1M	Non-cacheable, guarded +	 * 0xf8000000	1M	CADMUS registers +	 */ +	.long TLB1_MAS0(1, 7, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M) +	.long TLB1_MAS2(E500_TLB_EPN(CADMUS_BASE_ADDR), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CADMUS_BASE_ADDR), 0,0,0,0,0,1,0,1,0,1) + +	entry_end + +/* + * LAW(Local Access Window) configuration: + * + * 0x0000_0000     0x7fff_ffff     DDR                     2G + * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M + * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M + * 0xe000_0000     0xe000_ffff     CCSR                    1M + * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M + * 0xe300_0000     0xe3ff_ffff     PCI2 IO                 16M + * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M + * 0xf800_0000     0xf80f_ffff     NVRAM/CADMUS (*)        1M + * 0xff00_0000     0xff7f_ffff     FLASH (2nd bank)        8M + * 0xff80_0000     0xffff_ffff     FLASH (boot bank)       8M + * + * 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. + * + * The defines below are 1-off of the actual LAWAR0 usage. + * So LAWAR3 define uses the LAWAR4 register in the ECM. + */ + +#define LAWBAR0 0 +#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN) + +#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff) +#define LAWAR1 	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M)) + +#define LAWBAR2 ((CFG_PCI2_MEM_BASE>>12) & 0xfffff) +#define LAWAR2 	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M)) + +#define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff) +#define LAWAR3 	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_16M)) + +#define LAWBAR4 ((CFG_PCI2_IO_BASE>>12) & 0xfffff) +#define LAWAR4 	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_16M)) + +/* LBC window - maps 256M 0xf0000000 -> 0xffffffff */ +#define LAWBAR5 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff) +#define LAWAR5 	(LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)) + +	.section .bootpg, "ax" +	.globl	law_entry + +law_entry: +	entry_start +	.long 6 +	.long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3 +	.long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5 +	entry_end diff --git a/board/cds/mpc8548cds/mpc8548cds.c b/board/cds/mpc8548cds/mpc8548cds.c new file mode 100644 index 000000000..5bc08900a --- /dev/null +++ b/board/cds/mpc8548cds/mpc8548cds.c @@ -0,0 +1,329 @@ +/* + * Copyright 2004 Freescale Semiconductor. + * + * (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 <spd.h> + +#include "../common/cadmus.h" +#include "../common/eeprom.h" + +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) +extern void ddr_enable_ecc(unsigned int dram_size); +#endif + +extern long int spd_sdram(void); + +void local_bus_init(void); +void sdram_init(void); + +int board_early_init_f (void) +{ +	return 0; +} + +int checkboard (void) +{ +	volatile immap_t *immap = (immap_t *) CFG_CCSRBAR; +	volatile ccsr_gur_t *gur = &immap->im_gur; + +	/* PCI slot in USER bits CSR[6:7] by convention. */ +	uint pci_slot = get_pci_slot (); + +	uint pci_dual = get_pci_dual ();	/* PCI DUAL in CM_PCI[3] */ +	uint pci1_32 = gur->pordevsr & 0x10000;	/* PORDEVSR[15] */ +	uint pci1_clk_sel = gur->porpllsr & 0x8000;	/* PORPLLSR[16] */ +	uint pci2_clk_sel = gur->porpllsr & 0x4000;	/* PORPLLSR[17] */ + +	uint pci1_speed = get_clock_freq ();	/* PCI PSPEED in [4:5] */ + +	uint cpu_board_rev = get_cpu_board_revision (); + +	printf ("Board: CDS Version 0x%02x, PCI Slot %d\n", +		get_board_version (), pci_slot); + +	printf ("CPU Board Revision %d.%d (0x%04x)\n", +		MPC85XX_CPU_BOARD_MAJOR (cpu_board_rev), +		MPC85XX_CPU_BOARD_MINOR (cpu_board_rev), cpu_board_rev); + +	printf ("    PCI1: %d bit, %s MHz, %s\n", +		(pci1_32) ? 32 : 64, +		(pci1_speed == 33000000) ? "33" : +		(pci1_speed == 66000000) ? "66" : "unknown", +		pci1_clk_sel ? "sync" : "async"); + +	if (pci_dual) { +		printf ("    PCI2: 32 bit, 66 MHz, %s\n", +			pci2_clk_sel ? "sync" : "async"); +	} else { +		printf ("    PCI2: disabled\n"); +	} + +	/* +	 * Initialize local bus. +	 */ +	local_bus_init (); + + +	/* +	 * Hack TSEC 3 and 4 IO voltages. +	 */ +	gur->tsec34ioovcr = 0xe7e0;	/*  1110 0111 1110 0xxx */ + +	return 0; +} + +long int +initdram(int board_type) +{ +	long dram_size = 0; +	volatile immap_t *immap = (immap_t *)CFG_IMMR; + +	puts("Initializing\n"); + +#if defined(CONFIG_DDR_DLL) +	{ +		/* +		 * Work around to stabilize DDR DLL MSYNC_IN. +		 * Errata DDR9 seems to have been fixed. +		 * This is now the workaround for Errata DDR11: +		 *    Override DLL = 1, Course Adj = 1, Tap Select = 0 +		 */ + +		volatile ccsr_gur_t *gur= &immap->im_gur; + +		gur->ddrdllcr = 0x81000000; +		asm("sync;isync;msync"); +		udelay(200); +	} +#endif +	dram_size = spd_sdram(); + +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) +	/* +	 * Initialize and enable DDR ECC. +	 */ +	ddr_enable_ecc(dram_size); +#endif +	/* +	 * SDRAM Initialization +	 */ +	sdram_init(); + +	puts("    DDR: "); +	return dram_size; +} + +/* + * Initialize Local Bus + */ +void +local_bus_init(void) +{ +	volatile immap_t *immap = (immap_t *)CFG_IMMR; +	volatile ccsr_gur_t *gur = &immap->im_gur; +	volatile ccsr_lbc_t *lbc = &immap->im_lbc; + +	uint clkdiv; +	uint lbc_hz; +	sys_info_t sysinfo; + +	get_sys_info(&sysinfo); +	clkdiv = (lbc->lcrr & 0x0f) * 2; +	lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv; + +	gur->lbiuiplldcr1 = 0x00078080; +	if (clkdiv == 16) { +		gur->lbiuiplldcr0 = 0x7c0f1bf0; +	} else if (clkdiv == 8) { +		gur->lbiuiplldcr0 = 0x6c0f1bf0; +	} else if (clkdiv == 4) { +		gur->lbiuiplldcr0 = 0x5c0f1bf0; +	} + +	lbc->lcrr |= 0x00030000; + +	asm("sync;isync;msync"); +} + +/* + * Initialize SDRAM memory on the Local Bus. + */ +void +sdram_init(void) +{ +#if defined(CFG_OR2_PRELIM) && defined(CFG_BR2_PRELIM) + +	uint idx; +	volatile immap_t *immap = (immap_t *)CFG_IMMR; +	volatile ccsr_lbc_t *lbc = &immap->im_lbc; +	uint *sdram_addr = (uint *)CFG_LBC_SDRAM_BASE; +	uint cpu_board_rev; +	uint lsdmr_common; + +	puts("    SDRAM: "); + +	print_size (CFG_LBC_SDRAM_SIZE * 1024 * 1024, "\n"); + +	/* +	 * Setup SDRAM Base and Option Registers +	 */ +	lbc->or2 = CFG_OR2_PRELIM; +	asm("msync"); + +	lbc->br2 = CFG_BR2_PRELIM; +	asm("msync"); + +	lbc->lbcr = CFG_LBC_LBCR; +	asm("msync"); + + +	lbc->lsrt = CFG_LBC_LSRT; +	lbc->mrtpr = CFG_LBC_MRTPR; +	asm("msync"); + +	/* +	 * MPC8548 uses "new" 15-16 style addressing. +	 */ +	cpu_board_rev = get_cpu_board_revision(); +	lsdmr_common = CFG_LBC_LSDMR_COMMON; +	lsdmr_common |= CFG_LBC_LSDMR_BSMA1516; + +	/* +	 * Issue PRECHARGE ALL command. +	 */ +	lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_PCHALL; +	asm("sync;msync"); +	*sdram_addr = 0xff; +	ppcDcbf((unsigned long) sdram_addr); +	udelay(100); + +	/* +	 * Issue 8 AUTO REFRESH commands. +	 */ +	for (idx = 0; idx < 8; idx++) { +		lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_ARFRSH; +		asm("sync;msync"); +		*sdram_addr = 0xff; +		ppcDcbf((unsigned long) sdram_addr); +		udelay(100); +	} + +	/* +	 * Issue 8 MODE-set command. +	 */ +	lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_MRW; +	asm("sync;msync"); +	*sdram_addr = 0xff; +	ppcDcbf((unsigned long) sdram_addr); +	udelay(100); + +	/* +	 * Issue NORMAL OP command. +	 */ +	lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_NORMAL; +	asm("sync;msync"); +	*sdram_addr = 0xff; +	ppcDcbf((unsigned long) sdram_addr); +	udelay(200);    /* Overkill. Must wait > 200 bus cycles */ + +#endif	/* enable SDRAM init */ +} + +#if defined(CFG_DRAM_TEST) +int +testdram(void) +{ +	uint *pstart = (uint *) CFG_MEMTEST_START; +	uint *pend = (uint *) CFG_MEMTEST_END; +	uint *p; + +	printf("Testing DRAM from 0x%08x to 0x%08x\n", +	       CFG_MEMTEST_START, +	       CFG_MEMTEST_END); + +	printf("DRAM test phase 1:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0xaaaaaaaa; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0xaaaaaaaa) { +			printf ("DRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf("DRAM test phase 2:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0x55555555; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0x55555555) { +			printf ("DRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf("DRAM test passed.\n"); +	return 0; +} +#endif + +#if defined(CONFIG_PCI) + +/* + * Initialize PCI Devices, report devices found. + */ + +#ifndef CONFIG_PCI_PNP +static struct pci_config_table pci_mpc85xxcds_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_mpc85xxcds_config_table, +#endif +}; + +#endif	/* CONFIG_PCI */ + +void +pci_init_board(void) +{ +#ifdef CONFIG_PCI +	extern void pci_mpc85xx_init(struct pci_controller *hose); + +	pci_mpc85xx_init(&hose); +#endif +} diff --git a/board/cds/mpc8548cds/u-boot.lds b/board/cds/mpc8548cds/u-boot.lds new file mode 100644 index 000000000..91ea9fdd7 --- /dev/null +++ b/board/cds/mpc8548cds/u-boot.lds @@ -0,0 +1,147 @@ +/* + * Copyright 2004 Freescale Semiconductor. + * + * 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 + +  .bootpg 0xFFFFF000 : +  { +    cpu/mpc85xx/start.o	(.bootpg) +    board/cds/mpc8548cds/init.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) +    board/cds/mpc8548cds/init.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/tsec.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) +  } +  .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 = .); +} diff --git a/board/cds/mpc8555cds/mpc8555cds.c b/board/cds/mpc8555cds/mpc8555cds.c index a40de2198..18adf5b9e 100644 --- a/board/cds/mpc8555cds/mpc8555cds.c +++ b/board/cds/mpc8555cds/mpc8555cds.c @@ -30,7 +30,7 @@  #include "../common/cadmus.h"  #include "../common/eeprom.h" -#if defined(CONFIG_DDR_ECC) +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  extern void ddr_enable_ecc(unsigned int dram_size);  #endif @@ -269,7 +269,7 @@ initdram(int board_type)  #endif  	dram_size = spd_sdram(); -#if defined(CONFIG_DDR_ECC) +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  	/*  	 * Initialize and enable DDR ECC.  	 */ diff --git a/board/mpc8540ads/mpc8540ads.c b/board/mpc8540ads/mpc8540ads.c index 01b03866e..d0eb6904a 100644 --- a/board/mpc8540ads/mpc8540ads.c +++ b/board/mpc8540ads/mpc8540ads.c @@ -31,7 +31,7 @@  #include <asm/immap_85xx.h>  #include <spd.h> -#if defined(CONFIG_DDR_ECC) +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  extern void ddr_enable_ecc(unsigned int dram_size);  #endif @@ -96,7 +96,7 @@ initdram(int board_type)  	dram_size = fixed_sdram ();  #endif -#if defined(CONFIG_DDR_ECC) +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  	/*  	 * Initialize and enable DDR ECC.  	 */ diff --git a/board/mpc8560ads/mpc8560ads.c b/board/mpc8560ads/mpc8560ads.c index 1990e5476..9accc5cd3 100644 --- a/board/mpc8560ads/mpc8560ads.c +++ b/board/mpc8560ads/mpc8560ads.c @@ -33,7 +33,7 @@  #include <spd.h>  #include <miiphy.h> -#if defined(CONFIG_DDR_ECC) +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  extern void ddr_enable_ecc(unsigned int dram_size);  #endif @@ -293,7 +293,7 @@ initdram(int board_type)  	dram_size = fixed_sdram ();  #endif -#if defined(CONFIG_DDR_ECC) +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)  	/*  	 * Initialize and enable DDR ECC.  	 */ |