diff options
43 files changed, 2074 insertions, 322 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index b37ed0ce9..5a5b9bd10 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1036,6 +1036,7 @@ Mark Jonas <mark.jonas@de.bosch.com>  Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>  	MS7720SE	SH7720 +	R0P77570030RL	SH7757  	R0P77850011RL	SH7785  ######################################################################### @@ -892,6 +892,18 @@ The following options need to be configured:  			automatically converts one 32 bit word to two 16 bit  			words you may also try CONFIG_SMC911X_32_BIT. +		CONFIG_SH_ETHER +		Support for Renesas on-chip Ethernet controller + +			CONFIG_SH_ETHER_USE_PORT +			Define the number of ports to be used + +			CONFIG_SH_ETHER_PHY_ADDR +			Define the ETH PHY's address + +			CONFIG_SH_ETHER_CACHE_WRITEBACK +			If this option is set, the driver enables cache flush. +  - USB Support:  		At the moment only the UHCI host controller is  		supported (PIP405, MIP405, MPC5200); define @@ -1648,6 +1660,11 @@ The following options need to be configured:  		SPI EEPROM, also an instance works with Crystal A/D and  		D/As on the SACSng board) +		CONFIG_SH_SPI + +		Enables the driver for SPI controller on SuperH. Currently +		only SH7757 is supported. +  		CONFIG_SPI_X  		Enables extended (16-bit) SPI EEPROM addressing. diff --git a/arch/sh/config.mk b/arch/sh/config.mk index 4ef85e3e5..433cc1538 100644 --- a/arch/sh/config.mk +++ b/arch/sh/config.mk @@ -31,4 +31,10 @@ endif  PLATFORM_CPPFLAGS += -DCONFIG_SH -D__SH__  PLATFORM_LDFLAGS += -e $(CONFIG_SYS_TEXT_BASE) --defsym reloc_dst=$(CONFIG_SYS_TEXT_BASE)  LDFLAGS_u-boot = --gc-sections + +ifdef CONFIG_SYS_LDSCRIPT +LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT)) +else  LDSCRIPT := $(SRCTREE)/$(CPUDIR)/u-boot.lds +endif + diff --git a/arch/sh/include/asm/cpu_sh4.h b/arch/sh/include/asm/cpu_sh4.h index fdcebd608..9b29d3ae7 100644 --- a/arch/sh/include/asm/cpu_sh4.h +++ b/arch/sh/include/asm/cpu_sh4.h @@ -44,6 +44,8 @@  # include <asm/cpu_sh7722.h>  #elif defined (CONFIG_CPU_SH7723)  # include <asm/cpu_sh7723.h> +#elif defined (CONFIG_CPU_SH7757) +# include <asm/cpu_sh7757.h>  #elif defined (CONFIG_CPU_SH7763)  # include <asm/cpu_sh7763.h>  #elif defined (CONFIG_CPU_SH7780) diff --git a/arch/sh/include/asm/cpu_sh7757.h b/arch/sh/include/asm/cpu_sh7757.h new file mode 100644 index 000000000..17a6537bc --- /dev/null +++ b/arch/sh/include/asm/cpu_sh7757.h @@ -0,0 +1,218 @@ +/* + * Copyright (C) 2011  Renesas Solutions Corp. + * + * 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 + * + */ + +#ifndef _ASM_CPU_SH7757_H_ +#define _ASM_CPU_SH7757_H_ + +#define CCR		0xFF00001C +#define WTCNT		0xFFCC0000 +#define CCR_CACHE_INIT	0x0000090b +#define CACHE_OC_NUM_WAYS	1 + +#ifndef __ASSEMBLY__		/* put C only stuff in this section */ +/* MMU */ +struct mmu_regs { +	unsigned int	reserved[4]; +	unsigned int	mmucr; +}; +#define MMU_BASE	((struct mmu_regs *)0xff000000) + +/* Watchdog */ +#define WTCSR0		0xffcc0002 +#define WRSTCSR_R	0xffcc0003 +#define WRSTCSR_W	0xffcc0002 +#define WTCSR_PREFIX		0xa500 +#define WRSTCSR_PREFIX		0x6900 +#define WRSTCSR_WOVF_PREFIX	0x9600 + +/* SCIF */ +#define SCIF0_BASE	0xfe4b0000	/* The real name is SCIF2 */ +#define SCIF1_BASE	0xfe4c0000	/* The real name is SCIF3 */ +#define SCIF2_BASE	0xfe4d0000	/* The real name is SCIF4 */ + +/* SerMux */ +#define SMR0		0xfe470000 + +/* TMU0 */ +#define TSTR		0xFE430004 +#define TOCR		0xFE430000 +#define TSTR0		0xFE430004 +#define TCOR0		0xFE430008 +#define TCNT0		0xFE43000C +#define TCR0		0xFE430010 +#define TCOR1		0xFE430014 +#define TCNT1		0xFE430018 +#define TCR1		0xFE43001C +#define TCOR2		0xFE430020 +#define TCNT2		0xFE430024 +#define TCR2		0xFE430028 +#define TCPR2		0xFE43002C + +/* ETHER, GETHER MAC address */ +struct ether_mac_regs { +	unsigned int	reserved[114]; +	unsigned int	mahr; +	unsigned int	reserved2; +	unsigned int	malr; +}; +#define GETHER0_MAC_BASE	((struct ether_mac_regs *)0xfee0400) +#define GETHER1_MAC_BASE	((struct ether_mac_regs *)0xfee0c00) +#define ETHER0_MAC_BASE		((struct ether_mac_regs *)0xfef0000) +#define ETHER1_MAC_BASE		((struct ether_mac_regs *)0xfef0800) + +/* GETHER */ +struct gether_control_regs { +	unsigned int	gbecont; +}; +#define GETHER_CONTROL_BASE	((struct gether_control_regs *)0xffc10100) +#define GBECONT_RMII1		0x00020000 +#define GBECONT_RMII0		0x00010000 + +/* USB0/1 */ +struct usb_common_regs { +	unsigned short	reserved[129]; +	unsigned short	suspmode; +}; +#define USB0_COMMON_BASE	((struct usb_common_regs *)0xfe450000) +#define USB1_COMMON_BASE	((struct usb_common_regs *)0xfe4f0000) + +struct usb0_phy_regs { +	unsigned short	reset; +	unsigned short	reserved[4]; +	unsigned short	portsel; +}; +#define USB0_PHY_BASE		((struct usb0_phy_regs *)0xfe5f0000) + +struct usb1_port_regs { +	unsigned int	port1sel; +	unsigned int	reserved; +	unsigned int	usb1intsts; +}; +#define USB1_PORT_BASE		((struct usb1_port_regs *)0xfe4f2000) + +struct usb1_alignment_regs { +	unsigned int	ehcidatac;	/* 0xfe4fe018 */ +	unsigned int	reserved[63]; +	unsigned int	ohcidatac; +}; +#define USB1_ALIGNMENT_BASE	((struct usb1_alignment_regs *)0xfe4fe018) + +/* GCTRL, GRA */ +struct gctrl_regs { +	unsigned int	wprotect; +	unsigned int	gplldiv; +	unsigned int	gracr2;		/* GRA */ +	unsigned int	gracr3;		/* GRA */ +	unsigned int	reserved[4]; +	unsigned int	fcntcr1; +	unsigned int	fcntcr2; +	unsigned int	reserved2[2]; +	unsigned int	gpll1div; +	unsigned int	vcompsel; +	unsigned int	reserved3[62]; +	unsigned int	fdlmon; +	unsigned int	reserved4[2]; +	unsigned int	flcrmon; +	unsigned int	reserved5[944]; +	unsigned int	spibootcan; +}; +#define GCTRL_BASE		((struct gctrl_regs *)0xffc10000) + +/* PCIe setup */ +struct pcie_setup_regs { +	unsigned int	pbictl0; +	unsigned int	gradevctl; +	unsigned int	reserved[2]; +	unsigned int	bmcinf[6]; +	unsigned int	reserved2[118]; +	unsigned int	idset[2]; +	unsigned int	subidset; +	unsigned int	reserved3[2]; +	unsigned int	linkconfset[4]; +	unsigned int	trsid; +	unsigned int	reserved4[6]; +	unsigned int	toutset; +	unsigned int	reserved5[7]; +	unsigned int	lad0; +	unsigned int	ladmsk0; +	unsigned int	lad1; +	unsigned int	ladmsk1; +	unsigned int	lad2; +	unsigned int	ladmsk2; +	unsigned int	lad3; +	unsigned int	ladmsk3; +	unsigned int	lad4; +	unsigned int	ladmsk4; +	unsigned int	lad5; +	unsigned int	ladmsk5; +	unsigned int	reserved6[94]; +	unsigned int	vdmrxvid[2]; +	unsigned int	reserved7; +	unsigned int	pbiintfr; +	unsigned int	pbiinten; +	unsigned int	msimap; +	unsigned int	barmap; +	unsigned int	baracsize; +	unsigned int	advserest; +	unsigned int	pbictl3; +	unsigned int	reserved8[8]; +	unsigned int	pbictl1; +	unsigned int	scratch0; +	unsigned int	reserved9[6]; +	unsigned int	pbictl2; +	unsigned int	reserved10; +	unsigned int	pbirev; +}; +#define PCIE_SETUP_BASE		((struct pcie_setup_regs *)0xffca1000) + +struct pcie_system_bus_regs { +	unsigned int	reserved[3]; +	unsigned int	endictl0; +	unsigned int	endictl1; +}; +#define PCIE_SYSTEM_BUS_BASE	((struct pcie_system_bus_regs *)0xffca1600) + + +/* PCIe-Bridge */ +struct pciebrg_regs { +	unsigned short	ctrl_h8s; +	unsigned short	reserved[7]; +	unsigned short	cp_addr; +	unsigned short	reserved2; +	unsigned short	cp_data; +	unsigned short	reserved3; +	unsigned short	cp_ctrl; +}; +#define PCIEBRG_BASE		((struct pciebrg_regs *)0xffd60000) + +/* CPU version */ +#define CCN_PRR			0xff000044 +#define prr_mask(_val)		((_val >> 4) & 0xff) +#define PRR_SH7757_B0		0x10 +#define PRR_SH7757_C0		0x11 + +#define is_sh7757_b0(_val)						\ +({									\ +	int __ret = prr_mask(__raw_readl(CCN_PRR)) == PRR_SH7757_B0;	\ +	__ret;								\ +}) +#endif	/* ifndef __ASSEMBLY__ */ + +#endif	/* _ASM_CPU_SH7757_H_ */ diff --git a/board/espt/config.mk b/board/espt/config.mk deleted file mode 100644 index 21b51de76..000000000 --- a/board/espt/config.mk +++ /dev/null @@ -1,9 +0,0 @@ -# -# board/espt/config.mk -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x8FFC0000 diff --git a/board/mpr2/config.mk b/board/mpr2/config.mk deleted file mode 100644 index 4a4bca17d..000000000 --- a/board/mpr2/config.mk +++ /dev/null @@ -1,37 +0,0 @@ -# -# Copyright (C) 2007 -# Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com> -# -# Copyright (C) 2007 -# Nobuhiro Iwamatsu <iwamatsu@nigauri.org> -# -# Copyright (C) 2007 -# Kenati Technologies, Inc. -# -# Copyright (C) 2008 -# Mark Jonas <mark.jonas@de.bosch.com> -# -# board/mpr2/config.mk -# -# 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 - -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x8FFC0000 diff --git a/board/ms7720se/config.mk b/board/ms7720se/config.mk deleted file mode 100644 index d2944a6b2..000000000 --- a/board/ms7720se/config.mk +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (C) 2007 -# Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com> -# -# Copyright (C) 2007 -# Nobuhiro Iwamatsu <iwamatsu@nigauri.org> -# -# Copyright (C) 2007 -# Kenati Technologies, Inc. -# -# board/ms7720se/config.mk -# -# 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 - -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x8FFC0000 diff --git a/board/ms7722se/config.mk b/board/ms7722se/config.mk deleted file mode 100644 index 3f1606bf8..000000000 --- a/board/ms7722se/config.mk +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (C) 2007 -# Nobuhiro Iwamatsu <iwamatsu@nigauri.org> -# -# Copyright (C) 2007 -# Kenati Technologies, Inc. -# -# board/ms7722se/config.mk -# -# 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 - -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x8FFC0000 diff --git a/board/ms7750se/config.mk b/board/ms7750se/config.mk deleted file mode 100644 index ba4d15591..000000000 --- a/board/ms7750se/config.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright (C) 2007 -# Nobuhiro Iwamatsu <iwamatsu@nigauri.org> -# -# 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 -# -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# -CONFIG_SYS_TEXT_BASE = 0x8FFC0000 diff --git a/board/renesas/ap325rxa/config.mk b/board/renesas/ap325rxa/config.mk deleted file mode 100644 index f572afdd7..000000000 --- a/board/renesas/ap325rxa/config.mk +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (C) 2007 -# Nobuhiro Iwamatsu <iwamatsu@nigauri.org> -# -# 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 - -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x8FFC0000 diff --git a/board/renesas/r2dplus/config.mk b/board/renesas/r2dplus/config.mk deleted file mode 100644 index 55163b925..000000000 --- a/board/renesas/r2dplus/config.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright (C) 2007,2008 -# Nobuhiro Iwamatsu <iwamatsu@nigauri.org> -# -# 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 -# -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# -CONFIG_SYS_TEXT_BASE = 0x0FFC0000 diff --git a/board/renesas/r7780mp/config.mk b/board/renesas/r7780mp/config.mk deleted file mode 100644 index 70ee3fd25..000000000 --- a/board/renesas/r7780mp/config.mk +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright (C) 2007,2008 Nobuhiro Iwamatsu -# -# board/r77870mp/config.mk -# -# 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 - -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x0FFC0000 diff --git a/board/renesas/rsk7203/config.mk b/board/renesas/rsk7203/config.mk deleted file mode 100644 index 5b533f65b..000000000 --- a/board/renesas/rsk7203/config.mk +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2007,2008 Nobuhiro Iwamatsu -# Copyright (C) 2008 Renesas Solutions Corp. -# -# u-boot/board/rsk7203/config.mk -# -# 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 - -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x0C7C0000 diff --git a/board/renesas/MigoR/config.mk b/board/renesas/sh7757lcr/Makefile index ffe954c10..e2e46ba08 100644 --- a/board/renesas/MigoR/config.mk +++ b/board/renesas/sh7757lcr/Makefile @@ -1,11 +1,5 @@  # -# Copyright (C) 2007 -# Nobuhiro Iwamatsu <iwamatsu@nigauri.org> -# -# Copyright (C) 2007 -# Kenati Technologies, Inc. -# -# board/MigoR/config.mk +# Copyright (C) 2011  Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>  #  # This program is free software; you can redistribute it and/or  # modify it under the terms of the GNU General Public License as @@ -22,10 +16,28 @@  # Foundation, Inc., 59 Temple Place, Suite 330, Boston,  # MA 02111-1307 USA -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +COBJS	:= sh7757lcr.o spi-boot.o +SOBJS	:= lowlevel_init.o + +$(LIB):	$(obj).depend $(COBJS) $(SOBJS) +	$(call cmd_link_o_target, $(COBJS) $(SOBJS)) + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### -CONFIG_SYS_TEXT_BASE = 0x8FFC0000 diff --git a/board/renesas/sh7757lcr/lowlevel_init.S b/board/renesas/sh7757lcr/lowlevel_init.S new file mode 100644 index 000000000..ab1aa494a --- /dev/null +++ b/board/renesas/sh7757lcr/lowlevel_init.S @@ -0,0 +1,558 @@ +/* + * Copyright (C) 2011  Renesas Solutions Corp. + * + * 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 <config.h> +#include <version.h> +#include <asm/processor.h> +#include <asm/macro.h> + +.macro	or32, addr, data +	mov.l \addr, r1 +	mov.l \data, r0 +	mov.l @r1, r2 +	or    r2, r0 +	mov.l r0, @r1 +.endm + +.macro	wait_DBCMD +	mov.l	DBWAIT_A, r0 +	mov.l	@r0, r1 +.endm + +	.global lowlevel_init +	.section	.spiboot1.text +	.align  2 + +lowlevel_init: + +	/*------- GPIO -------*/ +	write8 PGDR_A,	PGDR_D	/* eMMC power off */ + +	write16 PACR_A,	PACR_D +	write16 PBCR_A,	PBCR_D +	write16 PCCR_A,	PCCR_D +	write16 PDCR_A,	PDCR_D +	write16 PECR_A,	PECR_D +	write16 PFCR_A,	PFCR_D +	write16 PGCR_A,	PGCR_D +	write16 PHCR_A,	PHCR_D +	write16 PICR_A,	PICR_D +	write16 PJCR_A,	PJCR_D +	write16 PKCR_A,	PKCR_D +	write16 PLCR_A,	PLCR_D +	write16 PMCR_A,	PMCR_D +	write16 PNCR_A,	PNCR_D +	write16 POCR_A,	POCR_D +	write16 PQCR_A,	PQCR_D +	write16 PRCR_A,	PRCR_D +	write16 PSCR_A,	PSCR_D +	write16 PTCR_A,	PTCR_D +	write16 PUCR_A,	PUCR_D +	write16 PVCR_A,	PVCR_D +	write16 PWCR_A,	PWCR_D +	write16 PXCR_A,	PXCR_D +	write16 PYCR_A,	PYCR_D +	write16 PZCR_A,	PZCR_D +	write16 PSEL0_A, PSEL0_D +	write16 PSEL1_A, PSEL1_D +	write16 PSEL2_A, PSEL2_D +	write16 PSEL3_A, PSEL3_D +	write16 PSEL4_A, PSEL4_D +	write16 PSEL5_A, PSEL5_D +	write16 PSEL6_A, PSEL6_D +	write16 PSEL7_A, PSEL7_D +	write16 PSEL8_A, PSEL8_D + +	bra	exit_gpio +	nop + +	.align	4 + +/*------- GPIO -------*/ +PGDR_A:		.long	0xffec0040 +PACR_A:		.long	0xffec0000 +PBCR_A:		.long	0xffec0002 +PCCR_A:		.long	0xffec0004 +PDCR_A:		.long	0xffec0006 +PECR_A:		.long	0xffec0008 +PFCR_A:		.long	0xffec000a +PGCR_A:		.long	0xffec000c +PHCR_A:		.long	0xffec000e +PICR_A:		.long	0xffec0010 +PJCR_A:		.long	0xffec0012 +PKCR_A:		.long	0xffec0014 +PLCR_A:		.long	0xffec0016 +PMCR_A:		.long	0xffec0018 +PNCR_A:		.long	0xffec001a +POCR_A:		.long	0xffec001c +PQCR_A:		.long	0xffec0020 +PRCR_A:		.long	0xffec0022 +PSCR_A:		.long	0xffec0024 +PTCR_A:		.long	0xffec0026 +PUCR_A:		.long	0xffec0028 +PVCR_A:		.long	0xffec002a +PWCR_A:		.long	0xffec002c +PXCR_A:		.long	0xffec002e +PYCR_A:		.long	0xffec0030 +PZCR_A:		.long	0xffec0032 +PSEL0_A:	.long	0xffec0070 +PSEL1_A:	.long	0xffec0072 +PSEL2_A:	.long	0xffec0074 +PSEL3_A:	.long	0xffec0076 +PSEL4_A:	.long	0xffec0078 +PSEL5_A:	.long	0xffec007a +PSEL6_A:	.long	0xffec007c +PSEL7_A:	.long	0xffec0082 +PSEL8_A:	.long	0xffec0084 + +PGDR_D:		.long	0x80 +PACR_D:		.long	0x0000 +PBCR_D:		.long	0x0001 +PCCR_D:		.long	0x0000 +PDCR_D:		.long	0x0000 +PECR_D:		.long	0x0000 +PFCR_D:		.long	0x0000 +PGCR_D:		.long	0x0000 +PHCR_D:		.long	0x0000 +PICR_D:		.long	0x0000 +PJCR_D:		.long	0x0000 +PKCR_D:		.long	0x0003 +PLCR_D:		.long	0x0000 +PMCR_D:		.long	0x0000 +PNCR_D:		.long	0x0000 +POCR_D:		.long	0x0000 +PQCR_D:		.long	0xc000 +PRCR_D:		.long	0x0000 +PSCR_D:		.long	0x0000 +PTCR_D:		.long	0x0000 +#if defined(CONFIG_SH7757_OFFSET_SPI) +PUCR_D:		.long	0x0055 +#else +PUCR_D:		.long	0x0000 +#endif +PVCR_D:		.long	0x0000 +PWCR_D:		.long	0x0000 +PXCR_D:		.long	0x0000 +PYCR_D:		.long	0x0000 +PZCR_D:		.long	0x0000 +PSEL0_D:	.long	0xfe00 +PSEL1_D:	.long	0x0000 +PSEL2_D:	.long	0x3000 +PSEL3_D:	.long	0xff00 +PSEL4_D:	.long	0x771f +PSEL5_D:	.long	0x0ffc +PSEL6_D:	.long	0x00ff +PSEL7_D:	.long	0xfc00 +PSEL8_D:	.long	0x0000 + +	.align	2 + +exit_gpio: +	mov	#0, r14 +	mova	2f, r0 +	mov.l	PC_MASK, r1 +	tst	r0, r1 +	bf	2f + +	bra	exit_pmb +	nop + +	.align	2 + +/* If CPU runs on SDRAM, PC is 0x8???????. */ +PC_MASK:	.long	0x20000000 + +2: +	mov	#1, r14 + +	mov.l	EXPEVT_A, r0 +	mov.l	@r0, r0 +	mov.l	EXPEVT_POWER_ON_RESET, r1 +	cmp/eq	r0, r1 +	bt	1f + +	/* +	 * If EXPEVT value is manual reset or tlb multipul-hit, +	 * initialization of DDR3IF is not necessary. +	 */ +	bra	exit_ddr +	nop + +1: +	/* For Core Reset */ +	mov.l	DBACEN_A, r0 +	mov.l	@r0, r0 +	cmp/eq	#0, r0 +	bt	3f + +	/* +	 * If DBACEN == 1(DBSC was already enabled), we have to avoid the +	 * initialization of DDR3-SDRAM. +	 */ +	bra	exit_ddr +	nop + +3: +	/*------- DDR3IF -------*/ +	/* oscillation stabilization time */ +	wait_timer	WAIT_OSC_TIME + +	/* step 3 */ +	write32 DBCMD_A, DBCMD_RSTL_VAL +	wait_timer	WAIT_30US + +	/* step 4 */ +	write32 DBCMD_A, DBCMD_PDEN_VAL + +	/* step 5 */ +	write32 DBKIND_A, DBKIND_D + +	/* step 6 */ +	write32 DBCONF_A, DBCONF_D +	write32 DBTR0_A, DBTR0_D +	write32 DBTR1_A, DBTR1_D +	write32 DBTR2_A, DBTR2_D +	write32 DBTR3_A, DBTR3_D +	write32 DBTR4_A, DBTR4_D +	write32 DBTR5_A, DBTR5_D +	write32 DBTR6_A, DBTR6_D +	write32 DBTR7_A, DBTR7_D +	write32 DBTR8_A, DBTR8_D +	write32 DBTR9_A, DBTR9_D +	write32 DBTR10_A, DBTR10_D +	write32 DBTR11_A, DBTR11_D +	write32 DBTR12_A, DBTR12_D +	write32 DBTR13_A, DBTR13_D +	write32 DBTR14_A, DBTR14_D +	write32 DBTR15_A, DBTR15_D +	write32 DBTR16_A, DBTR16_D +	write32 DBTR17_A, DBTR17_D +	write32 DBTR18_A, DBTR18_D +	write32 DBTR19_A, DBTR19_D +	write32 DBRNK0_A, DBRNK0_D + +	/* step 7 */ +	write32 DBPDCNT3_A, DBPDCNT3_D + +	/* step 8 */ +	write32 DBPDCNT1_A, DBPDCNT1_D +	write32 DBPDCNT2_A, DBPDCNT2_D +	write32 DBPDLCK_A, DBPDLCK_D +	write32 DBPDRGA_A, DBPDRGA_D +	write32 DBPDRGD_A, DBPDRGD_D + +	/* step 9 */ +	wait_timer	WAIT_30US + +	/* step 10 */ +	write32 DBPDCNT0_A, DBPDCNT0_D + +	/* step 11 */ +	wait_timer	WAIT_30US +	wait_timer	WAIT_30US + +	/* step 12 */ +	write32 DBCMD_A, DBCMD_WAIT_VAL +	wait_DBCMD + +	/* step 13 */ +	write32 DBCMD_A, DBCMD_RSTH_VAL +	wait_DBCMD + +	/* step 14 */ +	write32 DBCMD_A, DBCMD_WAIT_VAL +	write32 DBCMD_A, DBCMD_WAIT_VAL +	write32 DBCMD_A, DBCMD_WAIT_VAL +	write32 DBCMD_A, DBCMD_WAIT_VAL + +	/* step 15 */ +	write32 DBCMD_A, DBCMD_PDXT_VAL + +	/* step 16 */ +	write32 DBCMD_A, DBCMD_MRS2_VAL + +	/* step 17 */ +	write32 DBCMD_A, DBCMD_MRS3_VAL + +	/* step 18 */ +	write32 DBCMD_A, DBCMD_MRS1_VAL + +	/* step 19 */ +	write32 DBCMD_A, DBCMD_MRS0_VAL + +	/* step 20 */ +	write32 DBCMD_A, DBCMD_ZQCL_VAL + +	write32 DBCMD_A, DBCMD_REF_VAL +	write32 DBCMD_A, DBCMD_REF_VAL +	wait_DBCMD + +	/* step 21 */ +	write32 DBADJ0_A, DBADJ0_D +	write32 DBADJ1_A, DBADJ1_D +	write32 DBADJ2_A, DBADJ2_D + +	/* step 22 */ +	write32 DBRFCNF0_A, DBRFCNF0_D +	write32 DBRFCNF1_A, DBRFCNF1_D +	write32 DBRFCNF2_A, DBRFCNF2_D + +	/* step 23 */ +	write32 DBCALCNF_A, DBCALCNF_D + +	/* step 24 */ +	write32 DBRFEN_A, DBRFEN_D +	write32 DBCMD_A, DBCMD_SRXT_VAL + +	/* step 25 */ +	write32 DBACEN_A, DBACEN_D + +	/* step 26 */ +	wait_DBCMD + +	/* enable DDR-ECC */ +	write32 ECD_ECDEN_A, ECD_ECDEN_D +	write32 ECD_INTSR_A, ECD_INTSR_D +	write32 ECD_SPACER_A, ECD_SPACER_D +	write32 ECD_MCR_A, ECD_MCR_D + +	bra	exit_ddr +	nop + +	.align 4 + +EXPEVT_A:		.long	0xff000024 +EXPEVT_POWER_ON_RESET:	.long	0x00000000 + +/*------- DDR3IF -------*/ +DBCMD_A:	.long	0xfe800018 +DBKIND_A:	.long	0xfe800020 +DBCONF_A:	.long	0xfe800024 +DBTR0_A:	.long	0xfe800040 +DBTR1_A:	.long	0xfe800044 +DBTR2_A:	.long	0xfe800048 +DBTR3_A:	.long	0xfe800050 +DBTR4_A:	.long	0xfe800054 +DBTR5_A:	.long	0xfe800058 +DBTR6_A:	.long	0xfe80005c +DBTR7_A:	.long	0xfe800060 +DBTR8_A:	.long	0xfe800064 +DBTR9_A:	.long	0xfe800068 +DBTR10_A:	.long	0xfe80006c +DBTR11_A:	.long	0xfe800070 +DBTR12_A:	.long	0xfe800074 +DBTR13_A:	.long	0xfe800078 +DBTR14_A:	.long	0xfe80007c +DBTR15_A:	.long	0xfe800080 +DBTR16_A:	.long	0xfe800084 +DBTR17_A:	.long	0xfe800088 +DBTR18_A:	.long	0xfe80008c +DBTR19_A:	.long	0xfe800090 +DBRNK0_A:	.long	0xfe800100 +DBPDCNT0_A:	.long	0xfe800200 +DBPDCNT1_A:	.long	0xfe800204 +DBPDCNT2_A:	.long	0xfe800208 +DBPDCNT3_A:	.long	0xfe80020c +DBPDLCK_A:	.long	0xfe800280 +DBPDRGA_A:	.long	0xfe800290 +DBPDRGD_A:	.long	0xfe8002a0 +DBADJ0_A:	.long	0xfe8000c0 +DBADJ1_A:	.long	0xfe8000c4 +DBADJ2_A:	.long	0xfe8000c8 +DBRFCNF0_A:	.long	0xfe8000e0 +DBRFCNF1_A:	.long	0xfe8000e4 +DBRFCNF2_A:	.long	0xfe8000e8 +DBCALCNF_A:	.long	0xfe8000f4 +DBRFEN_A:	.long	0xfe800014 +DBACEN_A:	.long	0xfe800010 +DBWAIT_A:	.long	0xfe80001c + +WAIT_OSC_TIME:	.long	6000 +WAIT_30US:	.long	13333 + +DBCMD_RSTL_VAL:	.long	0x20000000 +DBCMD_PDEN_VAL:	.long	0x1000d73c +DBCMD_WAIT_VAL:	.long	0x0000d73c +DBCMD_RSTH_VAL:	.long	0x2100d73c +DBCMD_PDXT_VAL:	.long	0x110000c8 +DBCMD_MRS0_VAL:	.long	0x28000930 +DBCMD_MRS1_VAL:	.long	0x29000004 +DBCMD_MRS2_VAL:	.long	0x2a000008 +DBCMD_MRS3_VAL:	.long	0x2b000000 +DBCMD_ZQCL_VAL:	.long	0x03000200 +DBCMD_REF_VAL:	.long	0x0c000000 +DBCMD_SRXT_VAL:	.long	0x19000000 +DBKIND_D:	.long	0x00000007 +DBCONF_D:	.long	0x0f030a01 +DBTR0_D:	.long	0x00000007 +DBTR1_D:	.long	0x00000006 +DBTR2_D:	.long	0x00000000 +DBTR3_D:	.long	0x00000007 +DBTR4_D:	.long	0x00070007 +DBTR5_D:	.long	0x0000001b +DBTR6_D:	.long	0x00000014 +DBTR7_D:	.long	0x00000005 +DBTR8_D:	.long	0x00000015 +DBTR9_D:	.long	0x00000006 +DBTR10_D:	.long	0x00000008 +DBTR11_D:	.long	0x00000007 +DBTR12_D:	.long	0x0000000e +DBTR13_D:	.long	0x00000056 +DBTR14_D:	.long	0x00000006 +DBTR15_D:	.long	0x00000004 +DBTR16_D:	.long	0x00150002 +DBTR17_D:	.long	0x000c0017 +DBTR18_D:	.long	0x00000200 +DBTR19_D:	.long	0x00000040 +DBRNK0_D:	.long	0x00000001 +DBPDCNT0_D:	.long	0x00000001 +DBPDCNT1_D:	.long	0x00000001 +DBPDCNT2_D:	.long	0x00000000 +DBPDCNT3_D:	.long	0x00004010 +DBPDLCK_D:	.long	0x0000a55a +DBPDRGA_D:	.long	0x00000028 +DBPDRGD_D:	.long	0x00017100 + +DBADJ0_D:	.long	0x00000000 +DBADJ1_D:	.long	0x00000000 +DBADJ2_D:	.long	0x18061806 +DBRFCNF0_D:	.long	0x000001ff +DBRFCNF1_D:	.long	0x08001000 +DBRFCNF2_D:	.long	0x00000000 +DBCALCNF_D:	.long	0x0000ffff +DBRFEN_D:	.long	0x00000001 +DBACEN_D:	.long	0x00000001 + +/*------- DDR-ECC -------*/ +ECD_ECDEN_A:	.long	0xffc1012c +ECD_ECDEN_D:	.long	0x00000001 +ECD_INTSR_A:	.long	0xfe900024 +ECD_INTSR_D:	.long	0xffffffff +ECD_SPACER_A:	.long	0xfe900018 +ECD_SPACER_D:	.long	SH7757LCR_SDRAM_ECC_SETTING +ECD_MCR_A:	.long	0xfe900010 +ECD_MCR_D:	.long	0x00000001 + +	.align 2 +exit_ddr: + +#if defined(CONFIG_SH_32BIT) +	/*------- set PMB -------*/ +	write32	PASCR_A,	PASCR_29BIT_D +	write32	MMUCR_A,	MMUCR_D + +	/***************************************************************** +	 * ent	virt		phys		v	sz	c	wt +	 * 0	0xa0000000	0x00000000	1	128M	0	1 +	 * 1	0xa8000000	0x48000000	1	128M	0	1 +	 * 5	0x88000000	0x48000000	1	128M	1	1 +	 */ +	write32	PMB_ADDR_SPIBOOT_A,	PMB_ADDR_SPIBOOT_D +	write32	PMB_DATA_SPIBOOT_A,	PMB_DATA_SPIBOOT_D +	write32	PMB_ADDR_DDR_C1_A,	PMB_ADDR_DDR_C1_D +	write32	PMB_DATA_DDR_C1_A,	PMB_DATA_DDR_C1_D +	write32	PMB_ADDR_DDR_N1_A,	PMB_ADDR_DDR_N1_D +	write32	PMB_DATA_DDR_N1_A,	PMB_DATA_DDR_N1_D + +	write32	PMB_ADDR_ENTRY2,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY3,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY4,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY6,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY7,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY8,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY9,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY10,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY11,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY12,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY13,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY14,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY15,	PMB_ADDR_NOT_USE_D + +	write32	PASCR_A,	PASCR_INIT +	mov.l	DUMMY_ADDR, r0 +	icbi	@r0 +#endif	/* if defined(CONFIG_SH_32BIT) */ + +exit_pmb: +	/* CPU is running on ILRAM? */ +	mov	r14, r0 +	tst	#1, r0 +	bt	1f + +	mov.l	_bss_start, r15 +	mov.l	_spiboot_main, r0 +100:	bsrf	r0 +	nop + +	.align	2 +_spiboot_main:	.long	(spiboot_main - (100b + 4)) +_bss_start:	.long	bss_start + +1: + +	write32	CCR_A,	CCR_D + +	rts +	 nop + +	.align 4 + +#if defined(CONFIG_SH_32BIT) +/*------- set PMB -------*/ +PMB_ADDR_SPIBOOT_A:	.long	PMB_ADDR_BASE(0) +PMB_ADDR_DDR_N1_A:	.long	PMB_ADDR_BASE(1) +PMB_ADDR_DDR_C1_A:	.long	PMB_ADDR_BASE(5) +PMB_ADDR_ENTRY2:	.long	PMB_ADDR_BASE(2) +PMB_ADDR_ENTRY3:	.long	PMB_ADDR_BASE(3) +PMB_ADDR_ENTRY4:	.long	PMB_ADDR_BASE(4) +PMB_ADDR_ENTRY6:	.long	PMB_ADDR_BASE(6) +PMB_ADDR_ENTRY7:	.long	PMB_ADDR_BASE(7) +PMB_ADDR_ENTRY8:	.long	PMB_ADDR_BASE(8) +PMB_ADDR_ENTRY9:	.long	PMB_ADDR_BASE(9) +PMB_ADDR_ENTRY10:	.long	PMB_ADDR_BASE(10) +PMB_ADDR_ENTRY11:	.long	PMB_ADDR_BASE(11) +PMB_ADDR_ENTRY12:	.long	PMB_ADDR_BASE(12) +PMB_ADDR_ENTRY13:	.long	PMB_ADDR_BASE(13) +PMB_ADDR_ENTRY14:	.long	PMB_ADDR_BASE(14) +PMB_ADDR_ENTRY15:	.long	PMB_ADDR_BASE(15) + +PMB_ADDR_SPIBOOT_D:	.long	mk_pmb_addr_val(0xa0) +PMB_ADDR_DDR_C1_D:	.long	mk_pmb_addr_val(0x88) +PMB_ADDR_DDR_N1_D:	.long	mk_pmb_addr_val(0xa8) +PMB_ADDR_NOT_USE_D:	.long	0x00000000 + +PMB_DATA_SPIBOOT_A:	.long	PMB_DATA_BASE(0) +PMB_DATA_DDR_N1_A:	.long	PMB_DATA_BASE(1) +PMB_DATA_DDR_C1_A:	.long	PMB_DATA_BASE(5) + +/*						ppn   ub v s1 s0  c  wt */ +PMB_DATA_SPIBOOT_D:	.long	mk_pmb_data_val(0x00, 0, 1, 1, 0, 0, 1) +PMB_DATA_DDR_C1_D:	.long	mk_pmb_data_val(0x48, 0, 1, 1, 0, 1, 1) +PMB_DATA_DDR_N1_D:	.long	mk_pmb_data_val(0x48, 1, 1, 1, 0, 0, 1) + +PASCR_A:		.long	0xff000070 +DUMMY_ADDR:		.long	0xa0000000 +PASCR_29BIT_D:		.long	0x00000000 +PASCR_INIT:		.long	0x80000080 +MMUCR_A:		.long	0xff000010 +MMUCR_D:		.long	0x00000004	/* clear ITLB */ +#endif	/* CONFIG_SH_32BIT */ + +CCR_A:		.long	CCR +CCR_D:		.long	CCR_CACHE_INIT diff --git a/board/renesas/sh7757lcr/sh7757lcr.c b/board/renesas/sh7757lcr/sh7757lcr.c new file mode 100644 index 000000000..a62be24cd --- /dev/null +++ b/board/renesas/sh7757lcr/sh7757lcr.c @@ -0,0 +1,454 @@ +/* + * Copyright (C) 2011  Renesas Solutions Corp. + * + * 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 <malloc.h> +#include <asm/processor.h> +#include <asm/io.h> +#include <spi_flash.h> + +int checkboard(void) +{ +	puts("BOARD: R0P7757LC0030RL board\n"); + +	return 0; +} + +static void init_gctrl(void) +{ +	struct gctrl_regs *gctrl = GCTRL_BASE; +	unsigned long graofst; + +	graofst = (SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_GRA_OFFSET) >> 24; +	writel(graofst | 0x20000f00, &gctrl->gracr3); +} + +static int init_pcie_bridge_from_spi(void *buf, size_t size) +{ +	struct spi_flash *spi; +	int ret; +	unsigned long pcie_addr; + +	spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3); +	if (!spi) { +		printf("%s: spi_flash probe error.\n", __func__); +		return 1; +	} + +	if (is_sh7757_b0()) +		pcie_addr = SH7757LCR_PCIEBRG_ADDR_B0; +	else +		pcie_addr = SH7757LCR_PCIEBRG_ADDR; + +	ret = spi_flash_read(spi, pcie_addr, size, buf); +	if (ret) { +		printf("%s: spi_flash read error.\n", __func__); +		spi_flash_free(spi); +		return 1; +	} +	spi_flash_free(spi); + +	return 0; +} + +static void init_pcie_bridge(void) +{ +	struct pciebrg_regs *pciebrg = PCIEBRG_BASE; +	struct pcie_setup_regs *pcie_setup = PCIE_SETUP_BASE; +	int i; +	unsigned char *data; +	unsigned short tmp; +	unsigned long pcie_size; + +	if (!(readw(&pciebrg->ctrl_h8s) & 0x0001)) +		return; + +	if (is_sh7757_b0()) +		pcie_size = SH7757LCR_PCIEBRG_SIZE_B0; +	else +		pcie_size = SH7757LCR_PCIEBRG_SIZE; + +	data = malloc(pcie_size); +	if (!data) { +		printf("%s: malloc error.\n", __func__); +		return; +	} +	if (init_pcie_bridge_from_spi(data, pcie_size)) { +		free(data); +		return; +	} + +	if (data[0] == 0xff && data[1] == 0xff && data[2] == 0xff && +	    data[3] == 0xff) { +		free(data); +		printf("%s: skipped initialization\n", __func__); +		return; +	} + +	writew(0xa501, &pciebrg->ctrl_h8s);	/* reset */ +	writew(0x0000, &pciebrg->cp_ctrl); +	writew(0x0000, &pciebrg->cp_addr); + +	for (i = 0; i < pcie_size; i += 2) { +		tmp = (data[i] << 8) | data[i + 1]; +		writew(tmp, &pciebrg->cp_data); +	} + +	writew(0xa500, &pciebrg->ctrl_h8s);	/* start */ +	if (!is_sh7757_b0()) +		writel(0x00000001, &pcie_setup->pbictl3); + +	free(data); +} + +static void init_usb_phy(void) +{ +	struct usb_common_regs *common0 = USB0_COMMON_BASE; +	struct usb_common_regs *common1 = USB1_COMMON_BASE; +	struct usb0_phy_regs *phy = USB0_PHY_BASE; +	struct usb1_port_regs *port = USB1_PORT_BASE; +	struct usb1_alignment_regs *align = USB1_ALIGNMENT_BASE; + +	writew(0x0100, &phy->reset);		/* set reset */ +	/* port0 = USB0, port1 = USB1 */ +	writew(0x0002, &phy->portsel); +	writel(0x0001, &port->port1sel);	/* port1 = Host */ +	writew(0x0111, &phy->reset);		/* clear reset */ + +	writew(0x4000, &common0->suspmode); +	writew(0x4000, &common1->suspmode); + +#if defined(__LITTLE_ENDIAN) +	writel(0x00000000, &align->ehcidatac); +	writel(0x00000000, &align->ohcidatac); +#endif +} + +static void set_mac_to_sh_eth_register(int channel, char *mac_string) +{ +	struct ether_mac_regs *ether; +	unsigned char mac[6]; +	unsigned long val; + +	eth_parse_enetaddr(mac_string, mac); + +	if (!channel) +		ether = ETHER0_MAC_BASE; +	else +		ether = ETHER1_MAC_BASE; + +	val = (mac[0] << 24) | (mac[1] << 16) | (mac[2] << 8) | mac[3]; +	writel(val, ðer->mahr); +	val = (mac[4] << 8) | mac[5]; +	writel(val, ðer->malr); +} + +static void set_mac_to_sh_giga_eth_register(int channel, char *mac_string) +{ +	struct ether_mac_regs *ether; +	unsigned char mac[6]; +	unsigned long val; + +	eth_parse_enetaddr(mac_string, mac); + +	if (!channel) +		ether = GETHER0_MAC_BASE; +	else +		ether = GETHER1_MAC_BASE; + +	val = (mac[0] << 24) | (mac[1] << 16) | (mac[2] << 8) | mac[3]; +	writel(val, ðer->mahr); +	val = (mac[4] << 8) | mac[5]; +	writel(val, ðer->malr); +} + +/***************************************************************** + * This PMB must be set on this timing. The lowlevel_init is run on + * Area 0(phys 0x00000000), so we have to map it. + * + * The new PMB table is following: + * ent	virt		phys		v	sz	c	wt + * 0	0xa0000000	0x40000000	1	128M	0	1 + * 1	0xa8000000	0x48000000	1	128M	0	1 + * 2	0xb0000000	0x50000000	1	128M	0	1 + * 3	0xb8000000	0x58000000	1	128M	0	1 + * 4	0x80000000	0x40000000	1	128M	1	1 + * 5	0x88000000	0x48000000	1	128M	1	1 + * 6	0x90000000	0x50000000	1	128M	1	1 + * 7	0x98000000	0x58000000	1	128M	1	1 + */ +static void set_pmb_on_board_init(void) +{ +	struct mmu_regs *mmu = MMU_BASE; + +	/* clear ITLB */ +	writel(0x00000004, &mmu->mmucr); + +	/* delete PMB for SPIBOOT */ +	writel(0, PMB_ADDR_BASE(0)); +	writel(0, PMB_DATA_BASE(0)); + +	/* add PMB for SDRAM(0x40000000 - 0x47ffffff) */ +	/*			ppn  ub v s1 s0  c  wt */ +	writel(mk_pmb_addr_val(0xa0), PMB_ADDR_BASE(0)); +	writel(mk_pmb_data_val(0x40, 1, 1, 1, 0, 0, 1), PMB_DATA_BASE(0)); +	writel(mk_pmb_addr_val(0xb0), PMB_ADDR_BASE(2)); +	writel(mk_pmb_data_val(0x50, 1, 1, 1, 0, 0, 1), PMB_DATA_BASE(2)); +	writel(mk_pmb_addr_val(0xb8), PMB_ADDR_BASE(3)); +	writel(mk_pmb_data_val(0x58, 1, 1, 1, 0, 0, 1), PMB_DATA_BASE(3)); +	writel(mk_pmb_addr_val(0x80), PMB_ADDR_BASE(4)); +	writel(mk_pmb_data_val(0x40, 0, 1, 1, 0, 1, 1), PMB_DATA_BASE(4)); +	writel(mk_pmb_addr_val(0x90), PMB_ADDR_BASE(6)); +	writel(mk_pmb_data_val(0x50, 0, 1, 1, 0, 1, 1), PMB_DATA_BASE(6)); +	writel(mk_pmb_addr_val(0x98), PMB_ADDR_BASE(7)); +	writel(mk_pmb_data_val(0x58, 0, 1, 1, 0, 1, 1), PMB_DATA_BASE(7)); +} + +int board_init(void) +{ +	struct gether_control_regs *gether = GETHER_CONTROL_BASE; + +	set_pmb_on_board_init(); + +	/* enable RMII's MDIO (disable GRMII's MDIO) */ +	writel(0x00030000, &gether->gbecont); + +	init_gctrl(); +	init_usb_phy(); + +	return 0; +} + +int dram_init(void) +{ +	DECLARE_GLOBAL_DATA_PTR; + +	gd->bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; +	gd->bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE; +	printf("DRAM:  %dMB\n", CONFIG_SYS_SDRAM_SIZE / (1024 * 1024)); +	printf("    Physical address\n"); +	printf("    0x%08x - 0x%08x : Accessible Space as ECC Area\n", +		SH7757LCR_SDRAM_PHYS_TOP, +		SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_SDRAM_SIZE - 1); +	printf("    0x%08x - 0x%08x : No Access Area\n", +		SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_SDRAM_SIZE, +		SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_SDRAM_SIZE * 2 - 1); +	printf("    0x%08x - 0x%08x : Non-ECC Area for DVC/AVC\n", +		SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_SDRAM_ECC_SETTING * 2, +		SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_SDRAM_ECC_SETTING * 2 + +			SH7757LCR_SDRAM_DVC_SIZE - 1); +	printf("    0x%08x - 0x%08x : Non-ECC Area for G200eR2\n", +		SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_GRA_OFFSET, +		SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_GRA_OFFSET + 0x00ffffff); + +	return 0; +} + +static int get_sh_eth_mac_raw(unsigned char *buf, int size) +{ +	struct spi_flash *spi; +	int ret; + +	spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3); +	if (spi == NULL) { +		printf("%s: spi_flash probe error.\n", __func__); +		return 1; +	} + +	ret = spi_flash_read(spi, SH7757LCR_ETHERNET_MAC_BASE, size, buf); +	if (ret) { +		printf("%s: spi_flash read error.\n", __func__); +		spi_flash_free(spi); +		return 1; +	} +	spi_flash_free(spi); + +	return 0; +} + +static int get_sh_eth_mac(int channel, char *mac_string, unsigned char *buf) +{ +	memcpy(mac_string, &buf[channel * (SH7757LCR_ETHERNET_MAC_SIZE + 1)], +		SH7757LCR_ETHERNET_MAC_SIZE); +	mac_string[SH7757LCR_ETHERNET_MAC_SIZE] = 0x00;	/* terminate */ + +	return 0; +} + +static void init_ethernet_mac(void) +{ +	char mac_string[64]; +	char env_string[64]; +	int i; +	unsigned char *buf; + +	buf = malloc(256); +	if (!buf) { +		printf("%s: malloc error.\n", __func__); +		return; +	} +	get_sh_eth_mac_raw(buf, 256); + +	/* Fast Ethernet */ +	for (i = 0; i < SH7757LCR_ETHERNET_NUM_CH; i++) { +		get_sh_eth_mac(i, mac_string, buf); +		if (i == 0) +			setenv("ethaddr", mac_string); +		else { +			sprintf(env_string, "eth%daddr", i); +			setenv(env_string, mac_string); +		} + +		set_mac_to_sh_eth_register(i, mac_string); +	} + +	/* Gigabit Ethernet */ +	for (i = 0; i < SH7757LCR_GIGA_ETHERNET_NUM_CH; i++) { +		get_sh_eth_mac(i + SH7757LCR_ETHERNET_NUM_CH, mac_string, buf); +		sprintf(env_string, "eth%daddr", i + SH7757LCR_ETHERNET_NUM_CH); +		setenv(env_string, mac_string); + +		set_mac_to_sh_giga_eth_register(i, mac_string); +	} + +	free(buf); +} + +static void init_pcie(void) +{ +	struct pcie_setup_regs *pcie_setup = PCIE_SETUP_BASE; +	struct pcie_system_bus_regs *pcie_sysbus = PCIE_SYSTEM_BUS_BASE; + +	writel(0x00000ff2, &pcie_setup->ladmsk0); +	writel(0x00000001, &pcie_setup->barmap); +	writel(0xffcaa000, &pcie_setup->lad0); +	writel(0x00030000, &pcie_sysbus->endictl0); +	writel(0x00000003, &pcie_sysbus->endictl1); +	writel(0x00000004, &pcie_setup->pbictl2); +} + +static void finish_spiboot(void) +{ +	struct gctrl_regs *gctrl = GCTRL_BASE; +	/* +	 *  SH7757 B0 does not use LBSC. +	 *  So if we set SPIBOOTCAN to 1, SH7757 can not access Area0. +	 *  This setting is not cleared by manual reset, So we have to set it +	 *  to 0. +	 */ +	writel(0x00000000, &gctrl->spibootcan); +} + +int board_late_init(void) +{ +	init_ethernet_mac(); +	init_pcie_bridge(); +	init_pcie(); +	finish_spiboot(); + +	return 0; +} + +int do_sh_g200(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	struct gctrl_regs *gctrl = GCTRL_BASE; +	unsigned long graofst; + +	writel(0xfedcba98, &gctrl->wprotect); +	graofst = (SH7757LCR_SDRAM_PHYS_TOP + SH7757LCR_GRA_OFFSET) >> 24; +	writel(graofst | 0xa0000f00, &gctrl->gracr3); + +	return 0; +} + +U_BOOT_CMD( +	sh_g200,	1,	1,	do_sh_g200, +	"enable sh-g200", +	"enable SH-G200 bus (disable PCIe-G200)" +); + +int do_write_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	int i, ret; +	char mac_string[256]; +	struct spi_flash *spi; +	unsigned char *buf; + +	if (argc != 5) { +		buf = malloc(256); +		if (!buf) { +			printf("%s: malloc error.\n", __func__); +			return 1; +		} + +		get_sh_eth_mac_raw(buf, 256); + +		/* print current MAC address */ +		for (i = 0; i < 4; i++) { +			get_sh_eth_mac(i, mac_string, buf); +			if (i < 2) +				printf(" ETHERC ch%d = %s\n", i, mac_string); +			else +				printf("GETHERC ch%d = %s\n", i-2, mac_string); +		} +		free(buf); +		return 0; +	} + +	/* new setting */ +	memset(mac_string, 0xff, sizeof(mac_string)); +	sprintf(mac_string, "%s\t%s\t%s\t%s", +		argv[1], argv[2], argv[3], argv[4]); + +	/* write MAC data to SPI rom */ +	spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3); +	if (!spi) { +		printf("%s: spi_flash probe error.\n", __func__); +		return 1; +	} + +	ret = spi_flash_erase(spi, SH7757LCR_ETHERNET_MAC_BASE_SPI, +				SH7757LCR_SPI_SECTOR_SIZE); +	if (ret) { +		printf("%s: spi_flash erase error.\n", __func__); +		return 1; +	} + +	ret = spi_flash_write(spi, SH7757LCR_ETHERNET_MAC_BASE_SPI, +				sizeof(mac_string), mac_string); +	if (ret) { +		printf("%s: spi_flash write error.\n", __func__); +		spi_flash_free(spi); +		return 1; +	} +	spi_flash_free(spi); + +	puts("The writing of the MAC address to SPI ROM was completed.\n"); + +	return 0; +} + +U_BOOT_CMD( +	write_mac,	5,	1,	do_write_mac, +	"write MAC address for ETHERC/GETHERC", +	"[ETHERC ch0] [ETHERC ch1] [GETHERC ch0] [GETHERC ch1]\n" +); diff --git a/board/renesas/sh7757lcr/spi-boot.c b/board/renesas/sh7757lcr/spi-boot.c new file mode 100644 index 000000000..823844e54 --- /dev/null +++ b/board/renesas/sh7757lcr/spi-boot.c @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2011  Renesas Solutions Corp. + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License.  See the file "COPYING.LIB" in the main + * directory of this archive for more details. + */ + +#include <common.h> + +#define CONFIG_RAM_BOOT_PHYS	0x4ef80000 +#if defined(CONFIG_SH7757_OFFSET_SPI) +#define CONFIG_SPI_ADDR		0x00010000 +#else +#define CONFIG_SPI_ADDR		0x00000000 +#endif +#define CONFIG_SPI_LENGTH	0x00030000 +#define CONFIG_RAM_BOOT		0x8ef80000 + +#define SPIWDMADR	0xFE001018 +#define SPIWDMCNTR	0xFE001020 +#define SPIDMCOR	0xFE001028 +#define SPIDMINTSR	0xFE001188 +#define SPIDMINTMR	0xFE001190 + +#define SPIDMINTSR_DMEND	0x00000004 + +#define TBR	0xFE002000 +#define RBR	0xFE002000 + +#define CR1	0xFE002008 +#define CR2	0xFE002010 +#define CR3	0xFE002018 +#define CR4	0xFE002020 + +/* CR1 */ +#define SPI_TBE		0x80 +#define SPI_TBF		0x40 +#define SPI_RBE		0x20 +#define SPI_RBF		0x10 +#define SPI_PFONRD	0x08 +#define SPI_SSDB	0x04 +#define SPI_SSD		0x02 +#define SPI_SSA		0x01 + +/* CR2 */ +#define SPI_RSTF	0x80 +#define SPI_LOOPBK	0x40 +#define SPI_CPOL	0x20 +#define SPI_CPHA	0x10 +#define SPI_L1M0	0x08 + +/* CR4 */ +#define SPI_TBEI	0x80 +#define SPI_TBFI	0x40 +#define SPI_RBEI	0x20 +#define SPI_RBFI	0x10 +#define SPI_SSS		0x01 + +#define spi_write(val, addr)	(*(volatile unsigned long *)(addr)) = val +#define spi_read(addr)		(*(volatile unsigned long *)(addr)) + +/* M25P80 */ +#define M25_READ	0x03 + +#define __uses_spiboot2	__attribute__((section(".spiboot2.text"))) +static void __uses_spiboot2 spi_reset(void) +{ +	spi_write(0xfe, CR1); + +	spi_write(0, SPIDMCOR); +	spi_write(0x00, CR1); + +	spi_write(spi_read(CR2) | SPI_RSTF, CR2);	/* fifo reset */ +	spi_write(spi_read(CR2) & ~SPI_RSTF, CR2); +} + +static void __uses_spiboot2 spi_read_flash(void *buf, unsigned long addr, +					   unsigned long len) +{ +	spi_write(M25_READ, TBR); +	spi_write((addr >> 16) & 0xFF, TBR); +	spi_write((addr >> 8) & 0xFF, TBR); +	spi_write(addr & 0xFF, TBR); + +	spi_write(SPIDMINTSR_DMEND, SPIDMINTSR); +	spi_write((unsigned long)buf, SPIWDMADR); +	spi_write(len & 0xFFFFFFE0, SPIWDMCNTR); +	spi_write(1, SPIDMCOR); + +	spi_write(0xff, CR3); +	spi_write(spi_read(CR1) | SPI_SSDB, CR1); +	spi_write(spi_read(CR1) | SPI_SSA, CR1); + +	while (!(spi_read(SPIDMINTSR) & SPIDMINTSR_DMEND)) +		; +} + +void __uses_spiboot2 spiboot_main(void) +{ +	void (*_start)(void) = (void *)CONFIG_SYS_TEXT_BASE; + +	spi_reset(); +	spi_read_flash((void *)CONFIG_RAM_BOOT_PHYS, CONFIG_SPI_ADDR, +			CONFIG_SPI_LENGTH); + +	_start(); +} + diff --git a/board/renesas/sh7757lcr/u-boot.lds b/board/renesas/sh7757lcr/u-boot.lds new file mode 100644 index 000000000..a88d7814a --- /dev/null +++ b/board/renesas/sh7757lcr/u-boot.lds @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2007 + * Nobuhiro Iwamatsu <iwamatsu@nigauri.org> + * + * Copyright (C) 2011 + * Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.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_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux") +OUTPUT_ARCH(sh) +ENTRY(_start) + +SECTIONS +{ +	/* +	 * entry and reloct_dst will be provided via ldflags +	 */ +	. = .; + +	PROVIDE (_ftext = .); +	PROVIDE (_fcode = .); +	PROVIDE (_start = .); + +	.text : +	{ +		arch/sh/cpu/sh4/start.o		(.text) +		*(.spiboot1.text) +		*(.spiboot2.text) +		. = ALIGN(8192); +		common/env_embedded.o	(.ppcenv) +		. = ALIGN(8192); +		common/env_embedded.o	(.ppcenvr) +		. = ALIGN(8192); +		*(.text) +		. = ALIGN(4); +	} =0xFF +	PROVIDE (_ecode = .); +	.rodata : +	{ +		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) +		. = ALIGN(4); +	} +	PROVIDE (_etext = .); + + +	PROVIDE (_fdata = .); +	.data : +	{ +		*(.data) +		. = ALIGN(4); +	} +	PROVIDE (_edata = .); + +	PROVIDE (_fgot = .); +	.got : +	{ +		*(.got) +		. = ALIGN(4); +	} +	PROVIDE (_egot = .); + +	PROVIDE (__u_boot_cmd_start = .); +	.u_boot_cmd : +	{ +		*(.u_boot_cmd) +		. = ALIGN(4); +	} +	PROVIDE (__u_boot_cmd_end = .); + +	PROVIDE (reloc_dst_end = .); +	/* _reloc_dst_end = .; */ + +	PROVIDE (bss_start = .); +	PROVIDE (__bss_start = .); +	.bss (NOLOAD) : +	{ +		*(.bss) +		. = ALIGN(4); +	} +	PROVIDE (bss_end = .); + +	PROVIDE (_end = .); +} diff --git a/board/renesas/sh7763rdp/config.mk b/board/renesas/sh7763rdp/config.mk deleted file mode 100644 index 54c1a5b3e..000000000 --- a/board/renesas/sh7763rdp/config.mk +++ /dev/null @@ -1,11 +0,0 @@ -# -# board/sh7763rdp/config.mk -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x8FFC0000 - -# PLATFORM_CPPFLAGS += -DCONFIG_MULTIBOOT diff --git a/board/renesas/sh7785lcr/Makefile b/board/renesas/sh7785lcr/Makefile index b5c496f76..e404fa6e4 100644 --- a/board/renesas/sh7785lcr/Makefile +++ b/board/renesas/sh7785lcr/Makefile @@ -23,8 +23,12 @@ LIB	= $(obj)lib$(BOARD).o  COBJS	:= sh7785lcr.o selfcheck.o rtl8169_mac.o  SOBJS	:= lowlevel_init.o -$(LIB):	$(obj).depend $(COBJS) $(SOBJS) -	$(call cmd_link_o_target, $(COBJS) $(SOBJS)) +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB): $(obj).depend $(OBJS) $(SOBJS) +	$(call cmd_link_o_target, $(OBJS) $(SOBJS))  clean:  	rm -f $(SOBJS) $(OBJS) diff --git a/board/renesas/sh7785lcr/config.mk b/board/renesas/sh7785lcr/config.mk deleted file mode 100644 index 6853d2b28..000000000 --- a/board/renesas/sh7785lcr/config.mk +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (C) 2007 -# Nobuhiro Iwamatsu <iwamatsu@nigauri.org> -# -# 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 - -# -# CONFIG_SYS_TEXT_BASE refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# -sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp - -ifdef CONFIG_SH_32BIT -CONFIG_SYS_TEXT_BASE = 0x8FF80000 -else -CONFIG_SYS_TEXT_BASE = 0x0ff80000 -endif diff --git a/board/shmin/config.mk b/board/shmin/config.mk deleted file mode 100644 index 0c7605e7f..000000000 --- a/board/shmin/config.mk +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright (C) 2010 Nobuhiro Iwamatsu -# -# u-boot/board/shmin/config.mk -# -# 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 refers to image _after_ relocation. -# -# NOTE: Must match value used in u-boot.lds (in this directory). -# - -CONFIG_SYS_TEXT_BASE = 0x8DFB0000 diff --git a/boards.cfg b/boards.cfg index c3b164e7e..c977528b1 100644 --- a/boards.cfg +++ b/boards.cfg @@ -750,6 +750,7 @@ ms7750se                     sh          sh4         ms7750se            -  ap325rxa                     sh          sh4         ap325rxa            renesas        -  r2dplus                      sh          sh4         r2dplus             renesas        -  r7780mp                      sh          sh4         r7780mp             renesas        - +sh7757lcr                    sh          sh4         sh7757lcr           renesas        -  sh7763rdp                    sh          sh4         sh7763rdp           renesas        -  sh7785lcr                    sh          sh4         sh7785lcr           renesas        -  sh7785lcr_32bit              sh          sh4         sh7785lcr           renesas        -           sh7785lcr:SH_32BIT=1 diff --git a/doc/README.sh7757lcr b/doc/README.sh7757lcr new file mode 100644 index 000000000..cae14e055 --- /dev/null +++ b/doc/README.sh7757lcr @@ -0,0 +1,64 @@ +======================================== +Renesas R0P7757LC0030RL board +======================================== + +This board specification: +========================= + +The R0P7757LC0030RL(board config name:sh7757lcr) has the following device: + + - SH7757 (SH-4A) + - DDR3-SDRAM 256MB (with ECC) + - SPI ROM 8MB + - 2D Graphic controller + - Ethernet controller + + +configuration for This board: +============================= + +You can select the configuration as follows: + + - make sh7785lcr_config + + +This board specific command: +============================ + +This board has the following its specific command: + + - sh_g200 + - write_mac + + +1. sh_g200 + +If we run this command, SH4 can control the G200. +The default setting is that SH4 cannot control the G200. + + +2. write_mac + +You can write MAC address to SPI ROM. + + Usage 1) Write MAC address + +   write_mac [ETHERC ch0] [ETHERC ch1] [GETHERC ch0] [GETHERC ch1] + +	For example) +	 => write_mac 00:00:87:6c:21:80 00:00:87:6c:21:81 00:00:87:6c:21:82 00:00:87:6c:21:83 +		*) We have to input the command as a single line +		   (without carriage return) +		*) We have to reset after input the command. + + Usage 2) Show current data + +   write_mac + +	For example) +		=> write_mac +		 ETHERC ch0 = 00:00:87:6c:21:80 +		 ETHERC ch1 = 00:00:87:6c:21:81 +		GETHERC ch0 = 00:00:87:6c:21:82 +		GETHERC ch1 = 00:00:87:6c:21:83 + diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 86cc324e9..53d918d38 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -36,6 +36,12 @@  #ifndef CONFIG_SH_ETHER_PHY_ADDR  # error "Please define CONFIG_SH_ETHER_PHY_ADDR"  #endif +#ifdef CONFIG_SH_ETHER_CACHE_WRITEBACK +#define flush_cache_wback(addr, len)	\ +			dcache_wback_range((u32)addr, (u32)(addr + len - 1)) +#else +#define flush_cache_wback(...) +#endif  #define SH_ETH_PHY_DELAY 50000 @@ -197,6 +203,7 @@ int sh_eth_send(struct eth_device *dev, volatile void *packet, int len)  	}  	/* Update tx descriptor */ +	flush_cache_wback(packet, len);  	port_info->tx_desc_cur->td2 = ADDR_TO_PHY(packet);  	port_info->tx_desc_cur->td1 = len << 16;  	/* Must preserve the end of descriptor list indication */ @@ -312,6 +319,7 @@ static int sh_eth_tx_desc_init(struct sh_eth_dev *eth)  	tmp_addr = (u32) (((int)port_info->tx_desc_malloc + TX_DESC_SIZE - 1) &  			  ~(TX_DESC_SIZE - 1)); +	flush_cache_wback(tmp_addr, NUM_TX_DESC * sizeof(struct tx_desc_s));  	/* Make sure we use a P2 address (non-cacheable) */  	port_info->tx_desc_base = (struct tx_desc_s *)ADDR_TO_P2(tmp_addr);  	port_info->tx_desc_cur = port_info->tx_desc_base; @@ -361,6 +369,7 @@ static int sh_eth_rx_desc_init(struct sh_eth_dev *eth)  	tmp_addr = (u32) (((int)port_info->rx_desc_malloc + RX_DESC_SIZE - 1) &  			  ~(RX_DESC_SIZE - 1)); +	flush_cache_wback(tmp_addr, NUM_RX_DESC * sizeof(struct rx_desc_s));  	/* Make sure we use a P2 address (non-cacheable) */  	port_info->rx_desc_base = (struct rx_desc_s *)ADDR_TO_P2(tmp_addr); diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index e34a12423..d582fbbb1 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -37,6 +37,7 @@ COBJS-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o  COBJS-$(CONFIG_MXC_SPI) += mxc_spi.o  COBJS-$(CONFIG_OMAP3_SPI) += omap3_spi.o  COBJS-$(CONFIG_SOFT_SPI) += soft_spi.o +COBJS-$(CONFIG_SH_SPI) += sh_spi.o  COBJS	:= $(COBJS-y)  SRCS	:= $(COBJS:.o=.c) diff --git a/drivers/spi/sh_spi.c b/drivers/spi/sh_spi.c new file mode 100644 index 000000000..ba43bec8b --- /dev/null +++ b/drivers/spi/sh_spi.c @@ -0,0 +1,261 @@ +/* + * SH SPI driver + * + * Copyright (C) 2011 Renesas Solutions Corp. + * + * 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; version 2 of the License. + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + * + */ + +#include <common.h> +#include <malloc.h> +#include <spi.h> +#include <asm/io.h> +#include "sh_spi.h" + +static void sh_spi_write(unsigned long data, unsigned long *reg) +{ +	writel(data, reg); +} + +static unsigned long sh_spi_read(unsigned long *reg) +{ +	return readl(reg); +} + +static void sh_spi_set_bit(unsigned long val, unsigned long *reg) +{ +	unsigned long tmp; + +	tmp = sh_spi_read(reg); +	tmp |= val; +	sh_spi_write(tmp, reg); +} + +static void sh_spi_clear_bit(unsigned long val, unsigned long *reg) +{ +	unsigned long tmp; + +	tmp = sh_spi_read(reg); +	tmp &= ~val; +	sh_spi_write(tmp, reg); +} + +static void clear_fifo(struct sh_spi *ss) +{ +	sh_spi_set_bit(SH_SPI_RSTF, &ss->regs->cr2); +	sh_spi_clear_bit(SH_SPI_RSTF, &ss->regs->cr2); +} + +static int recvbuf_wait(struct sh_spi *ss) +{ +	while (sh_spi_read(&ss->regs->cr1) & SH_SPI_RBE) { +		if (ctrlc()) +			return 1; +		udelay(10); +	} +	return 0; +} + +static int write_fifo_empty_wait(struct sh_spi *ss) +{ +	while (!(sh_spi_read(&ss->regs->cr1) & SH_SPI_TBE)) { +		if (ctrlc()) +			return 1; +		udelay(10); +	} +	return 0; +} + +void spi_init(void) +{ +} + +struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, +		unsigned int max_hz, unsigned int mode) +{ +	struct sh_spi *ss; + +	if (!spi_cs_is_valid(bus, cs)) +		return NULL; + +	ss = malloc(sizeof(struct spi_slave)); +	if (!ss) +		return NULL; + +	ss->slave.bus = bus; +	ss->slave.cs = cs; +	ss->regs = (struct sh_spi_regs *)CONFIG_SH_SPI_BASE; + +	/* SPI sycle stop */ +	sh_spi_write(0xfe, &ss->regs->cr1); +	/* CR1 init */ +	sh_spi_write(0x00, &ss->regs->cr1); +	/* CR3 init */ +	sh_spi_write(0x00, &ss->regs->cr3); + +	clear_fifo(ss); + +	/* 1/8 clock */ +	sh_spi_write(sh_spi_read(&ss->regs->cr2) | 0x07, &ss->regs->cr2); +	udelay(10); + +	return &ss->slave; +} + +void spi_free_slave(struct spi_slave *slave) +{ +	struct sh_spi *spi = to_sh_spi(slave); + +	free(spi); +} + +int spi_claim_bus(struct spi_slave *slave) +{ +	return 0; +} + +void spi_release_bus(struct spi_slave *slave) +{ +	struct sh_spi *ss = to_sh_spi(slave); + +	sh_spi_write(sh_spi_read(&ss->regs->cr1) & +		~(SH_SPI_SSA | SH_SPI_SSDB | SH_SPI_SSD), &ss->regs->cr1); +} + +static int sh_spi_send(struct sh_spi *ss, const unsigned char *tx_data, +			unsigned int len, unsigned long flags) +{ +	int i, cur_len, ret = 0; +	int remain = (int)len; +	unsigned long tmp; + +	if (len >= SH_SPI_FIFO_SIZE) +		sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); + +	while (remain > 0) { +		cur_len = (remain < SH_SPI_FIFO_SIZE) ? +				remain : SH_SPI_FIFO_SIZE; +		for (i = 0; i < cur_len && +			!(sh_spi_read(&ss->regs->cr4) & SH_SPI_WPABRT) && +			!(sh_spi_read(&ss->regs->cr1) & SH_SPI_TBF); +				i++) +			sh_spi_write(tx_data[i], &ss->regs->tbr_rbr); + +		cur_len = i; + +		if (sh_spi_read(&ss->regs->cr4) & SH_SPI_WPABRT) { +			/* Abort the transaction */ +			flags |= SPI_XFER_END; +			sh_spi_set_bit(SH_SPI_WPABRT, &ss->regs->cr4); +			ret = 1; +			break; +		} + +		remain -= cur_len; +		tx_data += cur_len; + +		if (remain > 0) +			write_fifo_empty_wait(ss); +	} + +	if (flags & SPI_XFER_END) { +		tmp = sh_spi_read(&ss->regs->cr1); +		tmp = tmp & ~(SH_SPI_SSD | SH_SPI_SSDB); +		sh_spi_write(tmp, &ss->regs->cr1); +		sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); +		udelay(100); +		write_fifo_empty_wait(ss); +	} + +	return ret; +} + +static int sh_spi_receive(struct sh_spi *ss, unsigned char *rx_data, +			  unsigned int len, unsigned long flags) +{ +	int i; +	unsigned long tmp; + +	if (len > SH_SPI_MAX_BYTE) +		sh_spi_write(SH_SPI_MAX_BYTE, &ss->regs->cr3); +	else +		sh_spi_write(len, &ss->regs->cr3); + +	tmp = sh_spi_read(&ss->regs->cr1); +	tmp = tmp & ~(SH_SPI_SSD | SH_SPI_SSDB); +	sh_spi_write(tmp, &ss->regs->cr1); +	sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); + +	for (i = 0; i < len; i++) { +		if (recvbuf_wait(ss)) +			return 0; + +		rx_data[i] = (unsigned char)sh_spi_read(&ss->regs->tbr_rbr); +	} +	sh_spi_write(0, &ss->regs->cr3); + +	return 0; +} + +int  spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, +		void *din, unsigned long flags) +{ +	struct sh_spi *ss = to_sh_spi(slave); +	const unsigned char *tx_data = dout; +	unsigned char *rx_data = din; +	unsigned int len = bitlen / 8; +	int ret = 0; + +	if (flags & SPI_XFER_BEGIN) +		sh_spi_write(sh_spi_read(&ss->regs->cr1) & ~SH_SPI_SSA, +				&ss->regs->cr1); + +	if (tx_data) +		ret = sh_spi_send(ss, tx_data, len, flags); + +	if (ret == 0 && rx_data) +		ret = sh_spi_receive(ss, rx_data, len, flags); + +	if (flags & SPI_XFER_END) { +		sh_spi_set_bit(SH_SPI_SSD, &ss->regs->cr1); +		udelay(100); + +		sh_spi_clear_bit(SH_SPI_SSA | SH_SPI_SSDB | SH_SPI_SSD, +				 &ss->regs->cr1); +		clear_fifo(ss); +	} + +	return ret; +} + +int  spi_cs_is_valid(unsigned int bus, unsigned int cs) +{ +	/* This driver supports "bus = 0" and "cs = 0" only. */ +	if (!bus && !cs) +		return 1; +	else +		return 0; +} + +void spi_cs_activate(struct spi_slave *slave) +{ + +} + +void spi_cs_deactivate(struct spi_slave *slave) +{ + +} + diff --git a/drivers/spi/sh_spi.h b/drivers/spi/sh_spi.h new file mode 100644 index 000000000..b1cf98cc3 --- /dev/null +++ b/drivers/spi/sh_spi.h @@ -0,0 +1,79 @@ +/* + * SH SPI driver + * + * Copyright (C) 2011 Renesas Solutions Corp. + * + * 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; version 2 of the License. + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + * + */ + +#ifndef __SH_SPI_H__ +#define __SH_SPI_H__ + +#include <spi.h> + +struct sh_spi_regs { +	unsigned long tbr_rbr; +	unsigned long resv1; +	unsigned long cr1; +	unsigned long resv2; +	unsigned long cr2; +	unsigned long resv3; +	unsigned long cr3; +	unsigned long resv4; +	unsigned long cr4; +}; + +/* CR1 */ +#define SH_SPI_TBE	0x80 +#define SH_SPI_TBF	0x40 +#define SH_SPI_RBE	0x20 +#define SH_SPI_RBF	0x10 +#define SH_SPI_PFONRD	0x08 +#define SH_SPI_SSDB	0x04 +#define SH_SPI_SSD	0x02 +#define SH_SPI_SSA	0x01 + +/* CR2 */ +#define SH_SPI_RSTF	0x80 +#define SH_SPI_LOOPBK	0x40 +#define SH_SPI_CPOL	0x20 +#define SH_SPI_CPHA	0x10 +#define SH_SPI_L1M0	0x08 + +/* CR3 */ +#define SH_SPI_MAX_BYTE	0xFF + +/* CR4 */ +#define SH_SPI_TBEI	0x80 +#define SH_SPI_TBFI	0x40 +#define SH_SPI_RBEI	0x20 +#define SH_SPI_RBFI	0x10 +#define SH_SPI_WPABRT	0x04 +#define SH_SPI_SSS	0x01 + +#define SH_SPI_FIFO_SIZE	32 + +struct sh_spi { +	struct spi_slave	slave; +	struct sh_spi_regs	*regs; +}; + +static inline struct sh_spi *to_sh_spi(struct spi_slave *slave) +{ +	return container_of(slave, struct sh_spi, slave); +} + +#endif + diff --git a/include/configs/MigoR.h b/include/configs/MigoR.h index 8a6b8d06b..7d9368c5a 100644 --- a/include/configs/MigoR.h +++ b/include/configs/MigoR.h @@ -59,6 +59,7 @@  #define MIGO_R_FLASH_BASE_1	(0xA0000000)  #define MIGO_R_FLASH_BANK_SIZE	(64 * 1024 * 1024) +#define CONFIG_SYS_TEXT_BASE	0x8FFC0000  #define CONFIG_SYS_LONGHELP			/* undef to save memory	*/  #define CONFIG_SYS_PROMPT		"=> "	/* Monitor Command Prompt */  #define CONFIG_SYS_CBSIZE		256		/* Buffer size for input from the Console */ diff --git a/include/configs/ap325rxa.h b/include/configs/ap325rxa.h index e7f37f59f..711dd3c3a 100644 --- a/include/configs/ap325rxa.h +++ b/include/configs/ap325rxa.h @@ -63,6 +63,8 @@  #define AP325RXA_FLASH_BASE_1		(0xA0000000)  #define AP325RXA_FLASH_BANK_SIZE	(128 * 1024 * 1024) +#define CONFIG_SYS_TEXT_BASE	0x8FFC0000 +  /* undef to save memory	*/  #define CONFIG_SYS_LONGHELP  /* Monitor Command Prompt */ diff --git a/include/configs/espt.h b/include/configs/espt.h index 26389ed02..ad3c335b0 100644 --- a/include/configs/espt.h +++ b/include/configs/espt.h @@ -56,6 +56,7 @@  #define CONFIG_BAUDRATE         115200  #define CONFIG_CONS_SCIF0		1 +#define CONFIG_SYS_TEXT_BASE	0x8FFC0000  #define CONFIG_SYS_LONGHELP		/* undef to save memory */  #define CONFIG_SYS_PROMPT		"=> "	/* Monitor Command Prompt */  #define CONFIG_SYS_CBSIZE		256	/* Buffer size for input from the Console */ diff --git a/include/configs/mpr2.h b/include/configs/mpr2.h index 311f52402..f32899f47 100644 --- a/include/configs/mpr2.h +++ b/include/configs/mpr2.h @@ -58,6 +58,8 @@  #define CONFIG_SYS_MONITOR_LEN		(128 * 1024)  #define CONFIG_SYS_MALLOC_LEN		(256 * 1024) +#define CONFIG_SYS_TEXT_BASE	0x8FFC0000 +  /* Memory */  #define CONFIG_SYS_SDRAM_BASE		0x8C000000  #define CONFIG_SYS_SDRAM_SIZE		(64 * 1024 * 1024) diff --git a/include/configs/ms7720se.h b/include/configs/ms7720se.h index 5304237a7..dd79b2d92 100644 --- a/include/configs/ms7720se.h +++ b/include/configs/ms7720se.h @@ -52,6 +52,7 @@  #define MS7720SE_FLASH_BASE_1		0xA0000000  #define MS7720SE_FLASH_BANK_SIZE	(8 * 1024 * 1024) +#define CONFIG_SYS_TEXT_BASE	0x8FFC0000  #define CONFIG_SYS_LONGHELP		/* undef to save memory	*/  #define CONFIG_SYS_PROMPT	"=> "	/* Monitor Command Prompt */  #define CONFIG_SYS_CBSIZE	256	/* Buffer size for input from the Console */ diff --git a/include/configs/ms7722se.h b/include/configs/ms7722se.h index 1ddadf696..c8d04f7cf 100644 --- a/include/configs/ms7722se.h +++ b/include/configs/ms7722se.h @@ -57,6 +57,7 @@  #define MS7722SE_FLASH_BASE_1	(0xA0000000)  #define MS7722SE_FLASH_BANK_SIZE	(8*1024 * 1024) +#define CONFIG_SYS_TEXT_BASE	0x8FFC0000  #define CONFIG_SYS_LONGHELP				/* undef to save memory	*/  #define CONFIG_SYS_PROMPT		"=> "		/* Monitor Command Prompt */  #define CONFIG_SYS_CBSIZE		256		/* Buffer size for input from the Console */ diff --git a/include/configs/ms7750se.h b/include/configs/ms7750se.h index 9b43acb20..16fb0d4fe 100644 --- a/include/configs/ms7750se.h +++ b/include/configs/ms7750se.h @@ -64,6 +64,7 @@  /* List of legal baudrate settings for this board */  #define CONFIG_SYS_BAUDRATE_TABLE	{ 115200, 57600, 38400, 19200, 9600 } +#define CONFIG_SYS_TEXT_BASE		0x8FFC0000  #define CONFIG_SYS_MEMTEST_START	(CONFIG_SYS_SDRAM_BASE)  #define CONFIG_SYS_MEMTEST_END		(CONFIG_SYS_TEXT_BASE - 0x100000) diff --git a/include/configs/r2dplus.h b/include/configs/r2dplus.h index 8689513fb..5534b4992 100644 --- a/include/configs/r2dplus.h +++ b/include/configs/r2dplus.h @@ -40,6 +40,7 @@  #define CONFIG_SYS_SDRAM_BASE		(0x8C000000)  #define CONFIG_SYS_SDRAM_SIZE		(0x04000000) +#define CONFIG_SYS_TEXT_BASE	0x0FFC0000  #define CONFIG_SYS_LONGHELP  #define CONFIG_SYS_PROMPT		"=> "  #define CONFIG_SYS_CBSIZE		256 diff --git a/include/configs/r7780mp.h b/include/configs/r7780mp.h index 802416f3e..e1febf36b 100644 --- a/include/configs/r7780mp.h +++ b/include/configs/r7780mp.h @@ -60,6 +60,7 @@  /* check for keypress on bootdelay==0 */  /*#define CONFIG_ZERO_BOOTDELAY_CHECK*/ +#define CONFIG_SYS_TEXT_BASE		0x0FFC0000  #define CONFIG_SYS_SDRAM_BASE		(0x08000000)  #define CONFIG_SYS_SDRAM_SIZE		(128 * 1024 * 1024) diff --git a/include/configs/rsk7203.h b/include/configs/rsk7203.h index b3feaa8c3..0802140ea 100644 --- a/include/configs/rsk7203.h +++ b/include/configs/rsk7203.h @@ -54,6 +54,7 @@  #define RSK7203_FLASH_BASE_1	0x20000000	/* Non cache */  #define RSK7203_FLASH_BANK_SIZE	(4 * 1024 * 1024) +#define CONFIG_SYS_TEXT_BASE	0x0C7C0000  #define CONFIG_SYS_LONGHELP		/* undef to save memory	*/  #define CONFIG_SYS_PROMPT	"=> "	/* Monitor Command Prompt */  #define CONFIG_SYS_CBSIZE	256	/* Buffer size for input from the Console */ diff --git a/include/configs/sh7757lcr.h b/include/configs/sh7757lcr.h new file mode 100644 index 000000000..9799767c5 --- /dev/null +++ b/include/configs/sh7757lcr.h @@ -0,0 +1,146 @@ +/* + * Configuation settings for the sh7757lcr board + * + * Copyright (C) 2011 Renesas Solutions Corp. + * + * 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 + */ + +#ifndef __SH7757LCR_H +#define __SH7757LCR_H + +#undef DEBUG +#define CONFIG_SH		1 +#define CONFIG_SH4A		1 +#define CONFIG_SH_32BIT		1 +#define CONFIG_CPU_SH7757	1 +#define CONFIG_SH7757LCR	1 + +#define CONFIG_SYS_TEXT_BASE	0x8ef80000 +#define CONFIG_SYS_LDSCRIPT	"board/renesas/sh7757lcr/u-boot.lds" + +#define CONFIG_CMD_MEMORY +#define CONFIG_CMD_NET +#define CONFIG_CMD_PING +#define CONFIG_CMD_NFS +#define CONFIG_CMD_DFL +#define CONFIG_CMD_SDRAM +#define CONFIG_CMD_SF +#define CONFIG_CMD_RUN +#define CONFIG_CMD_SAVEENV +#define CONFIG_CMD_MD5SUM +#define CONFIG_MD5 +#define CONFIG_CMD_LOADS + +#define CONFIG_BAUDRATE		115200 +#define CONFIG_BOOTDELAY	3 +#define CONFIG_BOOTARGS		"console=ttySC2,115200 root=/dev/nfs ip=dhcp" + +#define CONFIG_VERSION_VARIABLE +#undef	CONFIG_SHOW_BOOT_PROGRESS + +/* MEMORY */ +#define SH7757LCR_SDRAM_BASE		(0x80000000) +#define SH7757LCR_SDRAM_SIZE		(240 * 1024 * 1024) +#define SH7757LCR_SDRAM_ECC_SETTING	0x0f000000	/* 240MByte */ +#define SH7757LCR_SDRAM_DVC_SIZE	(16 * 1024 * 1024) + +#define CONFIG_SYS_LONGHELP +#define CONFIG_SYS_PROMPT		"=> " +#define CONFIG_SYS_CBSIZE		256 +#define CONFIG_SYS_PBSIZE		256 +#define CONFIG_SYS_MAXARGS		16 +#define CONFIG_SYS_BARGSIZE		512 +#define CONFIG_SYS_BAUDRATE_TABLE	{ 115200 } + +/* SCIF */ +#define CONFIG_SCIF_CONSOLE	1 +#define CONFIG_CONS_SCIF2	1 +#undef	CONFIG_SYS_CONSOLE_INFO_QUIET +#undef	CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE +#undef	CONFIG_SYS_CONSOLE_ENV_OVERWRITE + +#define CONFIG_SYS_MEMTEST_START	(SH7757LCR_SDRAM_BASE) +#define CONFIG_SYS_MEMTEST_END		(CONFIG_SYS_MEMTEST_START + \ +					 224 * 1024 * 1024) +#undef	CONFIG_SYS_ALT_MEMTEST +#undef	CONFIG_SYS_MEMTEST_SCRATCH +#undef	CONFIG_SYS_LOADS_BAUD_CHANGE + +#define CONFIG_SYS_SDRAM_BASE		(SH7757LCR_SDRAM_BASE) +#define CONFIG_SYS_SDRAM_SIZE		(SH7757LCR_SDRAM_SIZE) +#define CONFIG_SYS_LOAD_ADDR		(CONFIG_SYS_SDRAM_BASE + \ +					 (128 + 16) * 1024 * 1024) + +#define CONFIG_SYS_MONITOR_BASE		0x00000000 +#define CONFIG_SYS_MONITOR_LEN		(256 * 1024) +#define CONFIG_SYS_MALLOC_LEN		(4 * 1024 * 1024) +#define CONFIG_SYS_BOOTMAPSZ		(8 * 1024 * 1024) + +/* FLASH */ +#define CONFIG_SYS_NO_FLASH + +/* Ether */ +#define CONFIG_NET_MULTI		1 +#define CONFIG_SH_ETHER			1 +#define CONFIG_SH_ETHER_USE_PORT	0 +#define CONFIG_SH_ETHER_PHY_ADDR	1 +#define CONFIG_SH_ETHER_CACHE_WRITEBACK	1 + +#define SH7757LCR_ETHERNET_MAC_BASE_SPI	0x000b0000 +#define SH7757LCR_SPI_SECTOR_SIZE	(64 * 1024) +#define SH7757LCR_ETHERNET_MAC_BASE	SH7757LCR_ETHERNET_MAC_BASE_SPI +#define SH7757LCR_ETHERNET_MAC_SIZE	17 +#define SH7757LCR_ETHERNET_NUM_CH	2 +#define BOARD_LATE_INIT			1 + +/* Gigabit Ether */ +#define SH7757LCR_GIGA_ETHERNET_NUM_CH	2 + +/* SPI */ +#define CONFIG_SH_SPI			1 +#define CONFIG_SH_SPI_BASE		0xfe002000 +#define CONFIG_SPI_FLASH +#define CONFIG_SPI_FLASH_STMICRO	1 + +/* SH7757 board */ +#define SH7757LCR_SDRAM_PHYS_TOP	0x40000000 +#define SH7757LCR_GRA_OFFSET		0x1f000000 +#define SH7757LCR_PCIEBRG_ADDR_B0	0x000a0000 +#define SH7757LCR_PCIEBRG_SIZE_B0	(64 * 1024) +#define SH7757LCR_PCIEBRG_ADDR		0x00090000 +#define SH7757LCR_PCIEBRG_SIZE		(96 * 1024) + +/* ENV setting */ +#define CONFIG_ENV_IS_EMBEDDED +#define CONFIG_ENV_IS_IN_SPI_FLASH +#define CONFIG_ENV_SECT_SIZE	(64 * 1024) +#define CONFIG_ENV_ADDR		(0x00080000) +#define CONFIG_ENV_OFFSET	(CONFIG_ENV_ADDR) +#define CONFIG_ENV_OVERWRITE	1 +#define CONFIG_ENV_SIZE		(CONFIG_ENV_SECT_SIZE) +#define CONFIG_ENV_SIZE_REDUND	(CONFIG_ENV_SECT_SIZE) +#define CONFIG_EXTRA_ENV_SETTINGS				\ +		"netboot=bootp; bootm\0" + +/* Board Clock */ +#define CONFIG_SYS_CLK_FREQ	48000000 +#define CONFIG_SYS_TMU_CLK_DIV	4 +#define CONFIG_SYS_HZ		1000 +#endif	/* __SH7757LCR_H */ diff --git a/include/configs/sh7763rdp.h b/include/configs/sh7763rdp.h index 209cb88f3..6a08413aa 100644 --- a/include/configs/sh7763rdp.h +++ b/include/configs/sh7763rdp.h @@ -56,6 +56,7 @@  #define CONFIG_BAUDRATE         115200  #define CONFIG_CONS_SCIF2		1 +#define CONFIG_SYS_TEXT_BASE	0x8FFC0000  #define CONFIG_SYS_LONGHELP		/* undef to save memory */  #define CONFIG_SYS_PROMPT		"=> "	/* Monitor Command Prompt */  #define CONFIG_SYS_CBSIZE		256	/* Buffer size for input from the Console */ diff --git a/include/configs/sh7785lcr.h b/include/configs/sh7785lcr.h index a95a75962..8eb9a1299 100644 --- a/include/configs/sh7785lcr.h +++ b/include/configs/sh7785lcr.h @@ -63,6 +63,7 @@  /* MEMORY */  #if defined(CONFIG_SH_32BIT) +#define CONFIG_SYS_TEXT_BASE		0x8FF80000  /* 0x40000000 - 0x47FFFFFF does not use */  #define CONFIG_SH_SDRAM_OFFSET		(0x8000000)  #define SH7785LCR_SDRAM_PHYS_BASE	(0x40000000 + CONFIG_SH_SDRAM_OFFSET) @@ -72,6 +73,7 @@  #define SH7785LCR_FLASH_BANK_SIZE	(64 * 1024 * 1024)  #define SH7785LCR_USB_BASE		(0xa6000000)  #else +#define CONFIG_SYS_TEXT_BASE		0x0FF80000  #define SH7785LCR_SDRAM_BASE		(0x08000000)  #define SH7785LCR_SDRAM_SIZE		(128 * 1024 * 1024)  #define SH7785LCR_FLASH_BASE_1		(0xa0000000) diff --git a/include/configs/shmin.h b/include/configs/shmin.h index bee7e4437..3a008f0dc 100644 --- a/include/configs/shmin.h +++ b/include/configs/shmin.h @@ -56,6 +56,7 @@  #define SHMIN_SDRAM_BASE		(0x8C000000)  #define SHMIN_FLASH_BASE_1		(0xA0000000) +#define CONFIG_SYS_TEXT_BASE	0x8DFB0000  #define CONFIG_SYS_LONGHELP		/* undef to save memory	*/  #define CONFIG_SYS_PROMPT	"=> "	/* Monitor Command Prompt */  #define CONFIG_SYS_CBSIZE	256	/* Buffer size for input from the Console */  |