diff options
| -rw-r--r-- | MAINTAINERS | 1 | ||||
| -rwxr-xr-x | MAKEALL | 1 | ||||
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | board/Marvell/rd6281a/Makefile | 51 | ||||
| -rw-r--r-- | board/Marvell/rd6281a/config.mk | 25 | ||||
| -rw-r--r-- | board/Marvell/rd6281a/rd6281a.c | 179 | ||||
| -rw-r--r-- | board/Marvell/rd6281a/rd6281a.h | 41 | ||||
| -rw-r--r-- | include/configs/rd6281a.h | 198 | 
8 files changed, 499 insertions, 0 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index 0d0eccc70..3d7226587 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -688,6 +688,7 @@ Hugo Villeneuve <hugo.villeneuve@lyrtech.com>  Prafulla Wadaskar <prafulla@marvell.com>  	mv88f6281gtw_ge	ARM926EJS (Kirkwood SoC) +	rd6281a		ARM926EJS (Kirkwood SoC)  	sheevaplug	ARM926EJS (Kirkwood SoC)  Richard Woodruff <r-woodruff2@ti.com> @@ -522,6 +522,7 @@ LIST_ARM9="			\  	omap1610inn		\  	omap5912osk		\  	omap730p2		\ +	rd6281a			\  	sbc2410x		\  	scb9328			\  	sheevaplug		\ @@ -2961,6 +2961,9 @@ omap730p2_cs3boot_config :	unconfig  	fi;  	@$(MKCONFIG) -a $(call xtract_omap730p2,$@) arm arm926ejs omap730p2 NULL omap +rd6281a_config: unconfig +	@$(MKCONFIG) $(@:_config=) arm arm926ejs $(@:_config=) Marvell kirkwood +  sbc2410x_config: unconfig  	@$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0 diff --git a/board/Marvell/rd6281a/Makefile b/board/Marvell/rd6281a/Makefile new file mode 100644 index 000000000..907dd7d01 --- /dev/null +++ b/board/Marvell/rd6281a/Makefile @@ -0,0 +1,51 @@ +# +# (C) Copyright 2009 +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar <prafulla@marvell.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., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).a + +COBJS	:= rd6281a.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS) + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/Marvell/rd6281a/config.mk b/board/Marvell/rd6281a/config.mk new file mode 100644 index 000000000..a4ea76910 --- /dev/null +++ b/board/Marvell/rd6281a/config.mk @@ -0,0 +1,25 @@ +# +# (C) Copyright 2009 +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar <prafulla@marvell.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., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA +# + +TEXT_BASE = 0x00600000 diff --git a/board/Marvell/rd6281a/rd6281a.c b/board/Marvell/rd6281a/rd6281a.c new file mode 100644 index 000000000..8713a3cf9 --- /dev/null +++ b/board/Marvell/rd6281a/rd6281a.c @@ -0,0 +1,179 @@ +/* + * (C) Copyright 2009 + * Marvell Semiconductor <www.marvell.com> + * Written-by: Prafulla Wadaskar <prafulla@marvell.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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include <common.h> +#include <miiphy.h> +#include <netdev.h> +#include <asm/arch/kirkwood.h> +#include <asm/arch/mpp.h> +#include "rd6281a.h" + +DECLARE_GLOBAL_DATA_PTR; + +int board_init(void) +{ +	/* +	 * default gpio configuration +	 * There are maximum 64 gpios controlled through 2 sets of registers +	 * the  below configuration configures mainly initial LED status +	 */ +	kw_config_gpio(RD6281A_OE_VAL_LOW, +			RD6281A_OE_VAL_HIGH, +			RD6281A_OE_LOW, RD6281A_OE_HIGH); + +	/* Multi-Purpose Pins Functionality configuration */ +	u32 kwmpp_config[] = { +		MPP0_NF_IO2, +		MPP1_NF_IO3, +		MPP2_NF_IO4, +		MPP3_NF_IO5, +		MPP4_NF_IO6, +		MPP5_NF_IO7, +		MPP6_SYSRST_OUTn, +		MPP7_GPO, +		MPP8_TW_SDA, +		MPP9_TW_SCK, +		MPP10_UART0_TXD, +		MPP11_UART0_RXD, +		MPP12_SD_CLK, +		MPP13_SD_CMD, +		MPP14_SD_D0, +		MPP15_SD_D1, +		MPP16_SD_D2, +		MPP17_SD_D3, +		MPP18_NF_IO0, +		MPP19_NF_IO1, +		MPP20_GE1_0, +		MPP21_GE1_1, +		MPP22_GE1_2, +		MPP23_GE1_3, +		MPP24_GE1_4, +		MPP25_GE1_5, +		MPP26_GE1_6, +		MPP27_GE1_7, +		MPP28_GPIO, +		MPP29_GPIO, +		MPP30_GE1_10, +		MPP31_GE1_11, +		MPP32_GE1_12, +		MPP33_GE1_13, +		MPP34_GE1_14, +		MPP35_GPIO, +		MPP36_AUDIO_SPDIFI, +		MPP37_AUDIO_SPDIFO, +		MPP38_GPIO, +		MPP39_TDM_SPI_CS0, +		MPP40_TDM_SPI_SCK, +		MPP41_TDM_SPI_MISO, +		MPP42_TDM_SPI_MOSI, +		MPP43_TDM_CODEC_INTn, +		MPP44_GPIO, +		MPP45_TDM_PCLK, +		MPP46_TDM_FS, +		MPP47_TDM_DRX, +		MPP48_TDM_DTX, +		MPP49_GPIO, +		0 +	}; +	kirkwood_mpp_conf(kwmpp_config); + +	/* +	 * arch number of board +	 */ +	gd->bd->bi_arch_number = MACH_TYPE_RD88F6281; + +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100; + +	return 0; +} + +int dram_init(void) +{ +	int i; + +	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) { +		gd->bd->bi_dram[i].start = kw_sdram_bar(i); +		gd->bd->bi_dram[i].size = kw_sdram_bs(i); +	} +	return 0; +} + +void mv_phy_88e1116_init(char *name) +{ +	u16 reg; +	u16 devadr; + +	if (miiphy_set_current_dev(name)) +		return; + +	/* command to read PHY dev address */ +	if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) { +		printf("Err..%s could not read PHY dev address\n", +			__FUNCTION__); +		return; +	} + +	/* +	 * Enable RGMII delay on Tx and Rx for CPU port +	 * Ref: sec 4.7.2 of chip datasheet +	 */ +	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2); +	miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, ®); +	reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL); +	miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg); +	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0); + +	/* reset the phy */ +	if (miiphy_read (name, devadr, PHY_BMCR, ®) != 0) { +		printf("Err..(%s) PHY status read failed\n", __FUNCTION__); +		return; +	} +	if (miiphy_write (name, devadr, PHY_BMCR, reg | 0x8000) != 0) { +		printf("Err..(%s) PHY reset failed\n", __FUNCTION__); +		return; +	} + +	printf("88E1116 Initialized on %s\n", name); +} + +/* Configure and enable Switch and PHY */ +void reset_phy(void) +{ +	/* configure and initialize switch */ +	struct mv88e61xx_config swcfg = { +		.name = "egiga0", +		.vlancfg = MV88E61XX_VLANCFG_ROUTER, +		.rgmii_delay = MV88E61XX_RGMII_DELAY_EN, +		.led_init = MV88E61XX_LED_INIT_EN, +		.portstate = MV88E61XX_PORTSTT_FORWARDING, +		.cpuport = (1 << 5), +		.ports_enabled = 0x3f, +	}; + +	mv88e61xx_switch_initialize(&swcfg); + +	/* configure and initialize PHY */ +	mv_phy_88e1116_init("egiga1"); +} diff --git a/board/Marvell/rd6281a/rd6281a.h b/board/Marvell/rd6281a/rd6281a.h new file mode 100644 index 000000000..c978befe9 --- /dev/null +++ b/board/Marvell/rd6281a/rd6281a.h @@ -0,0 +1,41 @@ +/* + * (C) Copyright 2009 + * Marvell Semiconductor <www.marvell.com> + * Written-by: Prafulla Wadaskar <prafulla@marvell.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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#ifndef __RD6281A_H +#define __RD6281A_H + +#define RD6281A_OE_LOW			(~(1 << 7)) +#define RD6281A_OE_HIGH			(~(1 << 2 | 1 << 12)) +#define RD6281A_OE_VAL_LOW		(0) +#define RD6281A_OE_VAL_HIGH		(1 << 12) + +/* PHY related */ +#define MV88E1116_LED_FCTRL_REG		10 +#define MV88E1116_CPRSP_CR3_REG		21 +#define MV88E1116_MAC_CTRL_REG		21 +#define MV88E1116_PGADR_REG		22 +#define MV88E1116_RGMII_TXTM_CTRL	(1 << 4) +#define MV88E1116_RGMII_RXTM_CTRL	(1 << 5) + +#endif /* __RD6281A_H */ diff --git a/include/configs/rd6281a.h b/include/configs/rd6281a.h new file mode 100644 index 000000000..3d8e25cc8 --- /dev/null +++ b/include/configs/rd6281a.h @@ -0,0 +1,198 @@ +/* + * (C) Copyright 2009 + * Marvell Semiconductor <www.marvell.com> + * Written-by: Prafulla Wadaskar <prafulla@marvell.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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#ifndef _CONFIG_RD6281A_H +#define _CONFIG_RD6281A_H + +/* + * Version number information + */ +#define CONFIG_IDENT_STRING	"\nMarvell-RD6281A" + +/* + * High Level Configuration Options (easy to change) + */ +#define CONFIG_MARVELL		1 +#define CONFIG_ARM926EJS	1	/* Basic Architecture */ +#define CONFIG_FEROCEON_88FR131	1	/* CPU Core subversion */ +#define CONFIG_KIRKWOOD		1	/* SOC Family Name */ +#define CONFIG_KW88F6281	1	/* SOC Name */ +#define CONFIG_MACH_RD6281A		/* Machine type */ + +#define CONFIG_MD5	/* get_random_hex on krikwood needs MD5 support */ +#define CONFIG_SKIP_LOWLEVEL_INIT	/* disable board lowlevel_init */ +#define CONFIG_KIRKWOOD_EGIGA_INIT	/* Enable GbePort0/1 for kernel */ +#define CONFIG_KIRKWOOD_RGMII_PAD_1V8	/* Set RGMII Pad voltage to 1.8V */ + +/* + * CLKs configurations + */ +#define CONFIG_SYS_HZ		1000 + +/* + * NS16550 Configuration + */ +#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE	(-4) +#define CONFIG_SYS_NS16550_CLK		CONFIG_SYS_TCLK +#define CONFIG_SYS_NS16550_COM1		KW_UART0_BASE + +/* + * Serial Port configuration + * The following definitions let you select what serial you want to use + * for your console driver. + */ + +#define CONFIG_CONS_INDEX	1	/*Console on UART0 */ +#define CONFIG_BAUDRATE			115200 +#define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, \ +					  115200,230400, 460800, 921600 } +/* auto boot */ +#define CONFIG_BOOTDELAY	3	/* default enable autoboot */ + +/* + * 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 CONFIG_CMDLINE_TAG	1	/* enable passing of ATAGs */ +#define CONFIG_INITRD_TAG	1	/* enable INITRD tag */ +#define CONFIG_SETUP_MEMORY_TAGS 1	/* enable memory tag */ + +#define	CONFIG_SYS_PROMPT	"Marvell>> "	/* Command Prompt */ +#define	CONFIG_SYS_CBSIZE	1024	/* Console I/O Buff Size */ +#define	CONFIG_SYS_PBSIZE	(CONFIG_SYS_CBSIZE \ +		+sizeof(CONFIG_SYS_PROMPT) + 16)	/* Print Buff */ +/* + * Commands configuration + */ +#define CONFIG_SYS_NO_FLASH		/* Declare no flash (NOR/SPI) */ +#include <config_cmd_default.h> +#define CONFIG_CMD_AUTOSCRIPT +#define CONFIG_CMD_DHCP +#define CONFIG_CMD_ENV +#define CONFIG_CMD_FAT +#define CONFIG_CMD_NAND +#define CONFIG_CMD_PING +#define CONFIG_CMD_USB + +/* + * NAND configuration + */ +#ifdef CONFIG_CMD_NAND +#define CONFIG_NAND_KIRKWOOD +#define CONFIG_SYS_MAX_NAND_DEVICE	1 +#define NAND_MAX_CHIPS			1 +#define CONFIG_SYS_NAND_BASE		0xD8000000	/* KW_DEFADR_NANDF */ +#define NAND_ALLOW_ERASE_ALL		1 +#endif + +/* + * Environment variables configurations + */ +#ifdef CONFIG_CMD_NAND +#define CONFIG_ENV_IS_IN_NAND		1 +#define CONFIG_ENV_SECT_SIZE		0x20000	/* 128K */ +#else +#define CONFIG_ENV_IS_NOWHERE		1	/* if env in SDRAM */ +#endif +/* + * max 4k env size is enough, but in case of nand + * it has to be rounded to sector size + */ +#define CONFIG_ENV_SIZE			0x20000	/* 128k */ +#define CONFIG_ENV_ADDR			0x40000 +#define CONFIG_ENV_OFFSET		0x40000	/* env starts here */ + +/* + * Default environment variables + */ +#define CONFIG_BOOTCOMMAND		"${x_bootcmd_kernel}; "	\ +	"setenv bootargs ${x_bootargs} ${x_bootargs_root}; "	\ +	"${x_bootcmd_usb}; bootm 0x6400000;" + +#define CONFIG_MTDPARTS		"orion_nand:512k(uboot),"	\ +	"3m@1m(kernel),1m@4m(psm),13m@5m(rootfs) rw\0" + +#define CONFIG_EXTRA_ENV_SETTINGS	"x_bootargs=console"	\ +	"=ttyS0,115200 mtdparts="CONFIG_MTDPARTS	\ +	"x_bootcmd_kernel=nand read 0x6400000 0x100000 0x300000\0" \ +	"x_bootcmd_usb=usb start\0" \ +	"x_bootargs_root=root=/dev/mtdblock3 rw rootfstype=jffs2\0" + +/* + * Size of malloc() pool + */ +#define CONFIG_SYS_MALLOC_LEN	(1024 * 128) /* 128kB for malloc() */ +/* size in bytes reserved for initial data */ +#define CONFIG_SYS_GBL_DATA_SIZE	128 + +/* + * Other required minimal configurations + */ +#define CONFIG_CONSOLE_INFO_QUIET	/* some code reduction */ +#define CONFIG_ARCH_CPU_INIT	/* call arch_cpu_init() */ +#define CONFIG_ARCH_MISC_INIT	/* call arch_misc_init() */ +#define CONFIG_DISPLAY_CPUINFO	/* Display cpu info */ +#define CONFIG_NR_DRAM_BANKS	4 +#define CONFIG_STACKSIZE	0x00100000	/* regular stack- 1M */ +#define CONFIG_SYS_LOAD_ADDR	0x00800000	/* default load adr- 8M */ +#define CONFIG_SYS_MEMTEST_START 0x00400000	/* 4M */ +#define CONFIG_SYS_MEMTEST_END	0x007fffff	/*(_8M -1) */ +#define CONFIG_SYS_RESET_ADDRESS 0xffff0000	/* Rst Vector Adr */ +#define CONFIG_SYS_MAXARGS	16	/* max number of command args */ + +/* + * Ethernet Driver configuration + */ +#ifdef CONFIG_CMD_NET +#define CONFIG_NETCONSOLE	/* include NetConsole support */ +#define CONFIG_NET_MULTI	/* specify more that one ports available */ +#define CONFIG_MII		/* expose smi ove miiphy interface */ +#define CONFIG_KIRKWOOD_EGIGA	/* Enable kirkwood Gbe Controller Driver */ +#define CONFIG_KIRKWOOD_EGIGA_PORTS	{1,1}	/* enable both ports */ +#define CONFIG_MV88E61XX_MULTICHIP_ADRMODE +#define CONFIG_DIS_AUTO_NEG_SPEED_GMII /*Disable Auto speed negociation */ +#define CONFIG_PHY_SPEED	_1000BASET	/*Force PHYspeed to 1GBPs */ +#define CONFIG_PHY_BASE_ADR	0x0A +#define CONFIG_ENV_OVERWRITE	/* ethaddr can be reprogrammed */ +#define CONFIG_RESET_PHY_R	/* use reset_phy() to init switch and PHY */ +#define CONFIG_MV88E61XX_SWITCH	/* Enable MV88E61XX switch driver */ +#endif /* CONFIG_CMD_NET */ + +/* + * USB/EHCI + */ +#ifdef CONFIG_CMD_USB +#define CONFIG_USB_EHCI			/* Enable EHCI USB support */ +#define CONFIG_USB_EHCI_KIRKWOOD	/* on Kirkwood platform	*/ +#define CONFIG_EHCI_IS_TDI +#define CONFIG_USB_STORAGE +#define CONFIG_DOS_PARTITION +#define CONFIG_ISO_PARTITION +#define CONFIG_SUPPORT_VFAT +#endif /* CONFIG_CMD_USB */ + +#endif /* _CONFIG_RD6281A_H */ |