diff options
| -rwxr-xr-x | MAKEALL | 1 | ||||
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | board/freescale/m5275evb/Makefile | 40 | ||||
| -rw-r--r-- | board/freescale/m5275evb/config.mk | 25 | ||||
| -rw-r--r-- | board/freescale/m5275evb/m5275evb.c | 112 | ||||
| -rw-r--r-- | board/freescale/m5275evb/mii.c | 319 | ||||
| -rw-r--r-- | board/freescale/m5275evb/u-boot.lds | 141 | ||||
| -rw-r--r-- | include/configs/M5275EVB.h | 223 | 
8 files changed, 864 insertions, 0 deletions
| @@ -660,6 +660,7 @@ LIST_coldfire="			\  	M5253EVB		\  	M5271EVB		\  	M5272C3			\ +	M5275EVB		\  	M5282EVB		\  	M5329AFEE		\  	M5373EVB		\ @@ -1819,6 +1819,9 @@ M5271EVB_config :		unconfig  M5272C3_config :		unconfig  	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 m5272c3 +M5275EVB_config :		unconfig +	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 m5275evb freescale +  M5282EVB_config :		unconfig  	@$(MKCONFIG) $(@:_config=) m68k mcf52x2 m5282evb diff --git a/board/freescale/m5275evb/Makefile b/board/freescale/m5275evb/Makefile new file mode 100644 index 000000000..9a0fa8053 --- /dev/null +++ b/board/freescale/m5275evb/Makefile @@ -0,0 +1,40 @@ +# +# (C) Copyright 2000-2003 +# 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 mii.o + +$(LIB):	.depend $(OBJS) +	$(AR) crv $@ $(OBJS) + +######################################################################### + +.depend:	Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) +		$(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +sinclude .depend + +######################################################################### diff --git a/board/freescale/m5275evb/config.mk b/board/freescale/m5275evb/config.mk new file mode 100644 index 000000000..ccb2cf735 --- /dev/null +++ b/board/freescale/m5275evb/config.mk @@ -0,0 +1,25 @@ +# +# (C) Copyright 2000-2003 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.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 +# + +TEXT_BASE = 0xffe00000 diff --git a/board/freescale/m5275evb/m5275evb.c b/board/freescale/m5275evb/m5275evb.c new file mode 100644 index 000000000..a1b290293 --- /dev/null +++ b/board/freescale/m5275evb/m5275evb.c @@ -0,0 +1,112 @@ +/* + * (C) Copyright 2000-2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * Copyright (C) 2005-2008 Arthur Shipkowski (art@videon-central.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/immap.h> + +#define PERIOD		13	/* system bus period in ns */ +#define SDRAM_TREFI	7800	/* in ns */ + +int checkboard(void) +{ +	puts("Board: "); +	puts("Freescale MCF5275 EVB\n"); +	return 0; +}; + +long int initdram(int board_type) +{ +	volatile sdramctrl_t *sdp = (sdramctrl_t *)(MMAP_SDRAM); +	volatile gpio_t *gpio_reg = (gpio_t *)(MMAP_GPIO); + +	gpio_reg->par_sdram = 0x3FF; /* Enable SDRAM */ + +	/* Set up chip select */ +	sdp->sdbar0 = CFG_SDRAM_BASE; +	sdp->sdbmr0 = MCF_SDRAMC_SDMRn_BAM_32M | MCF_SDRAMC_SDMRn_V; + +	/* Set up timing */ +	sdp->sdcfg1 = 0x83711630; +	sdp->sdcfg2 = 0x46770000; + +	/* Enable clock */ +	sdp->sdcr = MCF_SDRAMC_SDCR_MODE_EN | MCF_SDRAMC_SDCR_CKE; + +	/* Set precharge */ +	sdp->sdcr |= MCF_SDRAMC_SDCR_IPALL; + +	/* Dummy write to start SDRAM */ +	*((volatile unsigned long *)CFG_SDRAM_BASE) = 0xa5a59696; + +	/* Send LEMR */ +	sdp->sdmr = MCF_SDRAMC_SDMR_BNKAD_LEMR +			| MCF_SDRAMC_SDMR_AD(0x0) +			| MCF_SDRAMC_SDMR_CMD; +	*((volatile unsigned long *)CFG_SDRAM_BASE) = 0xa5a59696; + +	/* Send LMR */ +	sdp->sdmr = 0x058d0000; +	*((volatile unsigned long *)CFG_SDRAM_BASE) = 0xa5a59696; + +	/* Stop sending commands */ +	sdp->sdmr &= ~(MCF_SDRAMC_SDMR_CMD); + +	/* Set precharge */ +	sdp->sdcr |= MCF_SDRAMC_SDCR_IPALL; +	*((volatile unsigned long *)CFG_SDRAM_BASE) = 0xa5a59696; + +	/* Stop manual precharge, send 2 IREF */ +	sdp->sdcr &= ~(MCF_SDRAMC_SDCR_IPALL); +	sdp->sdcr |= MCF_SDRAMC_SDCR_IREF; +	*((volatile unsigned long *)CFG_SDRAM_BASE) = 0xa5a59696; +	*((volatile unsigned long *)CFG_SDRAM_BASE) = 0xa5a59696; + +	/* Write mode register, clear reset DLL */ +	sdp->sdmr = 0x018d0000; +	*((volatile unsigned long *)CFG_SDRAM_BASE) = 0xa5a59696; + +	/* Stop sending commands */ +	sdp->sdmr &= ~(MCF_SDRAMC_SDMR_CMD); +	sdp->sdcr &= ~(MCF_SDRAMC_SDCR_MODE_EN); + +	/* Turn on auto refresh, lock SDMR */ +	sdp->sdcr = +		MCF_SDRAMC_SDCR_CKE +		| MCF_SDRAMC_SDCR_REF +		| MCF_SDRAMC_SDCR_MUX(1) +		/* 1 added to round up */ +		| MCF_SDRAMC_SDCR_RCNT((SDRAM_TREFI/(PERIOD*64)) - 1 + 1) +		| MCF_SDRAMC_SDCR_DQS_OE(0x3); + +	return CFG_SDRAM_SIZE * 1024 * 1024; +}; + +int testdram(void) +{ +	/* TODO: XXX XXX XXX */ +	printf("DRAM test not implemented!\n"); + +	return (0); +} diff --git a/board/freescale/m5275evb/mii.c b/board/freescale/m5275evb/mii.c new file mode 100644 index 000000000..bbc93f6d4 --- /dev/null +++ b/board/freescale/m5275evb/mii.c @@ -0,0 +1,319 @@ +/* + * Copyright (C) 2004-2007 Freescale Semiconductor, Inc. + * TsiChung Liew (Tsi-Chung.Liew@freescale.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/fec.h> +#include <asm/immap.h> + +#include <config.h> +#include <net.h> + +DECLARE_GLOBAL_DATA_PTR; + +#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI) +#undef MII_DEBUG +#undef ET_DEBUG + +int fecpin_setclear(struct eth_device *dev, int setclear) +{ +	struct fec_info_s *info = (struct fec_info_s *) dev->priv; +	volatile gpio_t *gpio = (gpio_t *)MMAP_GPIO; + +	if (setclear) { +		/* Enable Ethernet pins */ +		if (info->iobase == CFG_FEC0_IOBASE) { +			gpio->par_feci2c |= 0x0F00; +			gpio->par_fec0hl |= 0xC0; +		} else { +			gpio->par_feci2c |= 0x00A0; +			gpio->par_fec1hl |= 0xC0; +		} +	} else { +		if (info->iobase == CFG_FEC0_IOBASE) { +                        gpio->par_feci2c &= ~0x0F00; +                        gpio->par_fec0hl &= ~0xC0; +		} else { +                        gpio->par_feci2c &= ~0x00A0; +                        gpio->par_fec1hl &= ~0xC0; +		} +	} + +	return 0; +} + +#if defined(CFG_DISCOVER_PHY) || defined(CONFIG_CMD_MII) +#include <miiphy.h> + +/* Make MII read/write commands for the FEC. */ +#define mk_mii_read(ADDR, REG)	(0x60020000 | ((ADDR << 23) | (REG & 0x1f) << 18)) + +#define mk_mii_write(ADDR, REG, VAL)	(0x50020000 | ((ADDR << 23) | (REG & 0x1f) << 18) | (VAL & 0xffff)) + +/* PHY identification */ +#define PHY_ID_LXT970		0x78100000	/* LXT970 */ +#define PHY_ID_LXT971		0x001378e0	/* LXT971 and 972 */ +#define PHY_ID_82555		0x02a80150	/* Intel 82555 */ +#define PHY_ID_QS6612		0x01814400	/* QS6612 */ +#define PHY_ID_AMD79C784	0x00225610	/* AMD 79C784 */ +#define PHY_ID_LSI80225		0x0016f870	/* LSI 80225 */ +#define PHY_ID_LSI80225B	0x0016f880	/* LSI 80225/B */ +#define PHY_ID_DP83848VV	0x20005C90	/* National 83848 */ +#define PHY_ID_DP83849		0x20005CA2	/* National 82849 */ +#define PHY_ID_KS8721BL		0x00221619	/* Micrel KS8721BL/SL */ + +#define STR_ID_LXT970		"LXT970" +#define STR_ID_LXT971		"LXT971" +#define STR_ID_82555		"Intel82555" +#define STR_ID_QS6612		"QS6612" +#define STR_ID_AMD79C784	"AMD79C784" +#define STR_ID_LSI80225		"LSI80225" +#define STR_ID_LSI80225B	"LSI80225/B" +#define STR_ID_DP83848VV	"N83848" +#define STR_ID_DP83849		"N83849" +#define STR_ID_KS8721BL		"KS8721BL" + +/**************************************************************************** + * mii_init -- Initialize the MII for MII command without ethernet + * This function is a subset of eth_init + **************************************************************************** + */ +void mii_reset(struct fec_info_s *info) +{ +	volatile fec_t *fecp = (fec_t *) (info->miibase); +	int i; + +	fecp->ecr = FEC_ECR_RESET; +	for (i = 0; (fecp->ecr & FEC_ECR_RESET) && (i < FEC_RESET_DELAY); ++i) { +		udelay(1); +	} +	if (i == FEC_RESET_DELAY) { +		printf("FEC_RESET_DELAY timeout\n"); +	} +} + +/* send command to phy using mii, wait for result */ +uint mii_send(uint mii_cmd) +{ +	struct fec_info_s *info; +	struct eth_device *dev; +	volatile fec_t *ep; +	uint mii_reply; +	int j = 0; + +	/* retrieve from register structure */ +	dev = eth_get_dev(); +	info = dev->priv; + +	ep = (fec_t *) info->miibase; + +	ep->mmfr = mii_cmd;	/* command to phy */ + +	/* wait for mii complete */ +	while (!(ep->eir & FEC_EIR_MII) && (j < MCFFEC_TOUT_LOOP)) { +		udelay(1); +		j++; +	} +	if (j >= MCFFEC_TOUT_LOOP) { +		printf("MII not complete\n"); +		return -1; +	} + +	mii_reply = ep->mmfr;	/* result from phy */ +	ep->eir = FEC_EIR_MII;	/* clear MII complete */ +#ifdef ET_DEBUG +	printf("%s[%d] %s: sent=0x%8.8x, reply=0x%8.8x\n", +	       __FILE__, __LINE__, __FUNCTION__, mii_cmd, mii_reply); +#endif + +	return (mii_reply & 0xffff);	/* data read from phy */ +} +#endif	/* CFG_DISCOVER_PHY || (CONFIG_COMMANDS & CONFIG_CMD_MII) */ + +#if defined(CFG_DISCOVER_PHY) +int mii_discover_phy(struct eth_device *dev) +{ +#define MAX_PHY_PASSES 11 +	struct fec_info_s *info = dev->priv; +	int phyaddr, pass; +	uint phyno, phytype; + +	if (info->phyname_init) +		return info->phy_addr; + +	phyaddr = -1;		/* didn't find a PHY yet */ +	for (pass = 1; pass <= MAX_PHY_PASSES && phyaddr < 0; ++pass) { +		if (pass > 1) { +			/* PHY may need more time to recover from reset. +			 * The LXT970 needs 50ms typical, no maximum is +			 * specified, so wait 10ms before try again. +			 * With 11 passes this gives it 100ms to wake up. +			 */ +			udelay(10000);	/* wait 10ms */ +		} + +		for (phyno = 0; phyno < 32 && phyaddr < 0; ++phyno) { + +			phytype = mii_send(mk_mii_read(phyno, PHY_PHYIDR1)); +#ifdef ET_DEBUG +			printf("PHY type 0x%x pass %d type\n", phytype, pass); +#endif +			if (phytype != 0xffff) { +				phyaddr = phyno; +				phytype <<= 16; +				phytype |= +				    mii_send(mk_mii_read(phyno, PHY_PHYIDR2)); + +				switch (phytype & 0xffffffff) { +				case PHY_ID_KS8721BL: +					strcpy(info->phy_name, +					       STR_ID_KS8721BL); +					info->phyname_init = 1; +					break; +				default: +					strcpy(info->phy_name, "unknown"); +					info->phyname_init = 1; +					break; +				} + +#ifdef ET_DEBUG +				printf("PHY @ 0x%x pass %d type ", phyno, pass); +				switch (phytype & 0xffffffff) { +				case PHY_ID_KS8721BL: +					printf(STR_ID_KS8721BL); +					break; +				default: +					printf("0x%08x\n", phytype); +					break; +				} +#endif +			} +		} +	} +	if (phyaddr < 0) +		printf("No PHY device found.\n"); + +	return phyaddr; +} +#endif				/* CFG_DISCOVER_PHY */ + +void mii_init(void) __attribute__((weak,alias("__mii_init"))); + +void __mii_init(void) +{ +	volatile fec_t *fecp; +	struct fec_info_s *info; +	struct eth_device *dev; +	int miispd = 0, i = 0; +	u16 autoneg = 0; + +	/* retrieve from register structure */ +	dev = eth_get_dev(); +	info = dev->priv; + +	fecp = (fec_t *) info->miibase; + +	fecpin_setclear(dev, 1); + +	mii_reset(info); + +	/* We use strictly polling mode only */ +	fecp->eimr = 0; + +	/* Clear any pending interrupt */ +	fecp->eir = 0xffffffff; + +	/* Set MII speed */ +	miispd = (gd->bus_clk / 1000000) / 5; +	fecp->mscr = miispd << 1; + +	info->phy_addr = mii_discover_phy(dev); + +#define AUTONEGLINK		(PHY_BMSR_AUTN_COMP | PHY_BMSR_LS) +	while (i < MCFFEC_TOUT_LOOP) { +		autoneg = 0; +		miiphy_read(dev->name, info->phy_addr, PHY_BMSR, &autoneg); +		i++; + +		if ((autoneg & AUTONEGLINK) == AUTONEGLINK) +			break; + +		udelay(500); +	} +	if (i >= MCFFEC_TOUT_LOOP) { +		printf("Auto Negotiation not complete\n"); +	} + +	/* adapt to the half/full speed settings */ +	info->dup_spd = miiphy_duplex(dev->name, info->phy_addr) << 16; +	info->dup_spd |= miiphy_speed(dev->name, info->phy_addr); +} + +/***************************************************************************** + * Read and write a MII PHY register, routines used by MII Utilities + * + * FIXME: These routines are expected to return 0 on success, but mii_send + *	  does _not_ return an error code. Maybe 0xFFFF means error, i.e. + *	  no PHY connected... + *	  For now always return 0. + * FIXME: These routines only work after calling eth_init() at least once! + *	  Otherwise they hang in mii_send() !!! Sorry! + *****************************************************************************/ + +int mcffec_miiphy_read(char *devname, unsigned char addr, unsigned char reg, +		       unsigned short *value) +{ +	short rdreg;		/* register working value */ + +#ifdef MII_DEBUG +	printf("miiphy_read(0x%x) @ 0x%x = ", reg, addr); +#endif +	rdreg = mii_send(mk_mii_read(addr, reg)); + +	*value = rdreg; + +#ifdef MII_DEBUG +	printf("0x%04x\n", *value); +#endif + +	return 0; +} + +int mcffec_miiphy_write(char *devname, unsigned char addr, unsigned char reg, +			unsigned short value) +{ +	short rdreg;		/* register working value */ + +#ifdef MII_DEBUG +	printf("miiphy_write(0x%x) @ 0x%x = ", reg, addr); +#endif + +	rdreg = mii_send(mk_mii_write(addr, reg, value)); + +#ifdef MII_DEBUG +	printf("0x%04x\n", value); +#endif + +	return 0; +} + +#endif				/* CONFIG_CMD_NET, FEC_ENET & NET_MULTI */ diff --git a/board/freescale/m5275evb/u-boot.lds b/board/freescale/m5275evb/u-boot.lds new file mode 100644 index 000000000..43d65001b --- /dev/null +++ b/board/freescale/m5275evb/u-boot.lds @@ -0,0 +1,141 @@ +/* + * (C) Copyright 2000-2003 + * 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(m68k) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); +/* Do we need any of these for elf? +   __DYNAMIC = 0;    */ +SECTIONS +{ +  /* 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/mcf52x2/start.o		(.text) +    common/dlmalloc.o		(.text) +    lib_generic/string.o	(.text) +    lib_generic/zlib.o		(.text) + +    . = DEFINED(env_offset) ? env_offset : .; +    common/environment.o(.text) + +    *(.text) +    *(.fixup) +    *(.got1) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(.rodata) +    *(.rodata1) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x00FF) & 0xFFFFFF00; +  _erotext = .; +  PROVIDE (erotext = .); +    .reloc   : +  { +    __got_start = .; +    *(.got) +    __got_end = .; +    _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 = .; +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +   . = ALIGN(4); +   _ebss = .; +  } +  _end = . ; +  PROVIDE (end = .); +} diff --git a/include/configs/M5275EVB.h b/include/configs/M5275EVB.h new file mode 100644 index 000000000..599f8dcb4 --- /dev/null +++ b/include/configs/M5275EVB.h @@ -0,0 +1,223 @@ +/* + * Configuation settings for the Motorola MC5275EVB board. + * + * By Arthur Shipkowski <art@videon-central.com> + * Copyright (C) 2005 Videon Central, Inc. + * + * Based off of M5272C3 board code by Josef Baumgartner + * <josef.baumgartner@telex.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 + */ + +/* + * board/config.h - configuration options, board specific + */ + +#ifndef _M5275EVB_H +#define _M5275EVB_H + +/* + * High Level Configuration Options + * (easy to change) + */ +#define CONFIG_MCF52x2			/* define processor family */ +#define CONFIG_M5275			/* define processor type */ +#define CONFIG_M5275EVB			/* define board type */ + +#define CONFIG_MCFTMR + +#define CONFIG_MCFUART +#define CFG_UART_PORT		(0) +#define CONFIG_BAUDRATE		19200 +#define CFG_BAUDRATE_TABLE	{ 9600 , 19200 , 38400 , 57600, 115200 } + +/* Configuration for environment + * Environment is embedded in u-boot in the second sector of the flash + */ +#ifndef CONFIG_MONITOR_IS_IN_RAM +#define CFG_ENV_OFFSET		0x4000 +#define CFG_ENV_SECT_SIZE	0x2000 +#define CFG_ENV_IS_IN_FLASH	1 +#define CFG_ENV_IS_EMBEDDED	1 +#else +#define CFG_ENV_ADDR		0xffe04000 +#define CFG_ENV_SECT_SIZE	0x2000 +#define CFG_ENV_IS_IN_FLASH	1 +#endif + +/* + * BOOTP options + */ +#define CONFIG_BOOTP_BOOTFILESIZE +#define CONFIG_BOOTP_BOOTPATH +#define CONFIG_BOOTP_GATEWAY +#define CONFIG_BOOTP_HOSTNAME + +/* Available command configuration */ +#include <config_cmd_default.h> + +#define CONFIG_CMD_PING +#define CONFIG_CMD_MII +#define CONFIG_CMD_NET +#define CONFIG_CMD_ELF +#define CONFIG_CMD_FLASH +#define CONFIG_CMD_I2C +#define CONFIG_CMD_MEMORY +#define CONFIG_CMD_DHCP + +#undef CONFIG_CMD_LOADS +#undef CONFIG_CMD_LOADB + +#define CONFIG_MCFFEC +#ifdef CONFIG_MCFFEC +#define CONFIG_NET_MULTI	1 +#define CONFIG_MII		1 +#define CFG_DISCOVER_PHY +#define CFG_RX_ETH_BUFFER	8 +#define CFG_FAULT_ECHO_LINK_DOWN +#define CFG_FEC0_PINMUX		0 +#define CFG_FEC0_MIIBASE	CFG_FEC0_IOBASE +#define CFG_FEC1_PINMUX		0 +#define CFG_FEC1_MIIBASE	CFG_FEC1_IOBASE +#define MCFFEC_TOUT_LOOP	50000 +#define CONFIG_HAS_ETH1 +/* If CFG_DISCOVER_PHY is not defined - hardcoded */ +#ifndef CFG_DISCOVER_PHY +#define FECDUPLEX		FULL +#define FECSPEED		_100BASET +#else +#ifndef CFG_FAULT_ECHO_LINK_DOWN +#define CFG_FAULT_ECHO_LINK_DOWN +#endif +#endif +#endif + +/* I2C */ +#define CONFIG_FSL_I2C +#define CONFIG_HARD_I2C		/* I2C with hw support */ +#undef CONFIG_SOFT_I2C +#define CFG_I2C_SPEED		80000 +#define CFG_I2C_SLAVE		0x7F +#define CFG_I2C_OFFSET		0x00000300 +#define CFG_IMMR		CFG_MBAR + +#ifdef CONFIG_MCFFEC +#define CONFIG_ETHADDR		00:06:3b:01:41:55 +#define CONFIG_ETH1ADDR		00:0e:0c:bc:e5:60 +#endif + +#define CFG_PROMPT		"-> " +#define CFG_LONGHELP		/* undef to save memory	*/ + +#if (CONFIG_CMD_KGDB) +#	define CFG_CBSIZE	1024 +#else +#	define CFG_CBSIZE	256 +#endif +#define CFG_PBSIZE		(CFG_CBSIZE + sizeof(CFG_PROMPT) + 16) +#define CFG_MAXARGS		16 +#define CFG_BARGSIZE		CFG_CBSIZE + +#define CFG_LOAD_ADDR		0x800000 + +#define CONFIG_BOOTDELAY	5 +#define CONFIG_BOOTCOMMAND	"bootm ffe40000" +#define CFG_MEMTEST_START	0x400 +#define CFG_MEMTEST_END		0x380000 + +#define CFG_HZ			1000 +#define CFG_CLK			150000000 + +/* + * Low Level Configuration Settings + * (address mappings, register initial values, etc.) + * You should know what you are doing if you make changes here. + */ + +#define CFG_MBAR		0x40000000 + +/*----------------------------------------------------------------------- + * Definitions for initial stack pointer and data area (in DPRAM) + */ +#define CFG_INIT_RAM_ADDR	0x20000000 +#define CFG_INIT_RAM_END	0x10000	/* End of used area in internal SRAM */ +#define CFG_GBL_DATA_SIZE	1000	/* bytes reserved for initial data */ +#define CFG_GBL_DATA_OFFSET	(CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_SP_OFFSET	CFG_GBL_DATA_OFFSET + +/*----------------------------------------------------------------------- + * Start addresses for the final memory configuration + * (Set up by the startup code) + * Please note that CFG_SDRAM_BASE _must_ start at 0 + */ +#define CFG_SDRAM_BASE		0x00000000 +#define CFG_SDRAM_SIZE		16	/* SDRAM size in MB */ +#define CFG_FLASH_BASE		0xffe00000 + +#ifdef CONFIG_MONITOR_IS_IN_RAM +#define CFG_MONITOR_BASE	0x20000 +#else +#define CFG_MONITOR_BASE	(CFG_FLASH_BASE + 0x400) +#endif + +#define CFG_MONITOR_LEN		0x20000 +#define CFG_MALLOC_LEN		(256 << 10) +#define CFG_BOOTPARAMS_LEN	64*1024 + +/* + * 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 mmap for Linux */ + +/*----------------------------------------------------------------------- + * FLASH organization + */ +#define CFG_MAX_FLASH_BANKS	1	/* max number of memory banks */ +#define CFG_MAX_FLASH_SECT	11	/* max number of sectors on one chip */ +#define CFG_FLASH_ERASE_TOUT	1000 + +#define CFG_FLASH_CFI		1 +#define CFG_FLASH_CFI_DRIVER	1 +#define CFG_FLASH_SIZE		0x200000 + +/*----------------------------------------------------------------------- + * Cache Configuration + */ +#define CFG_CACHELINE_SIZE	16 + +/*----------------------------------------------------------------------- + * Memory bank definitions + */ +#define CFG_AR0_PRELIM		(CFG_FLASH_BASE >> 16) +#define CFG_CR0_PRELIM		0x1980 +#define CFG_MR0_PRELIM		0x001F0001 + +#define CFG_AR1_PRELIM		0x3000 +#define CFG_CR1_PRELIM		0x1900 +#define CFG_MR1_PRELIM		0x00070001 + +/*----------------------------------------------------------------------- + * Port configuration + */ +#define CFG_FECI2C		0x0FA0 + +#endif	/* _M5275EVB_H */ |