All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
@ 2010-01-07  7:56 Heiko Schocher
  2010-01-17 23:51 ` Wolfgang Denk
  0 siblings, 1 reply; 26+ messages in thread
From: Heiko Schocher @ 2010-01-07  7:56 UTC (permalink / raw)
  To: u-boot

This patch adds support for the Keymile SUEN3 board variants which
are based on the Marvell Kirkwood (88F6281) SoC. All variants
uses common code stored in board/keymile/km_arm/km_arm.c

mgcoge2_arm_p1a board:
This adds support for the ARM part of the mgcoge2. The suen3
target was moved to the correct suen3 p1b version. There is a
difference between the GPIO configuration between suen3 and mgcoge2.

Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
Signed-off-by: Stefan Roese <sr@denx.de>
Signed-off-by: Heiko Schocher <hs@denx.de>
---
 MAINTAINERS                           |    2 +
 MAKEALL                               |    4 +
 Makefile                              |    8 +
 board/keymile/common/common.c         |   23 ++-
 board/keymile/km_arm/Makefile         |   51 +++++
 board/keymile/km_arm/config.mk        |   25 +++
 board/keymile/km_arm/km_arm.c         |  345 +++++++++++++++++++++++++++++++++
 board/keymile/km_arm/sdramregs.txt    |   31 +++
 board/keymile/km_arm/sdramregs_v1.txt |   28 +++
 include/configs/km-arm.h              |  192 ++++++++++++++++++
 include/configs/mgcoge2_arm_p1a.h     |   93 +++++++++
 include/configs/suen3.h               |  100 ++++++++++
 include/configs/suen3_p1a.h           |   79 ++++++++
 include/configs/suen3_p1b_p1c.h       |  107 ++++++++++
 14 files changed, 1084 insertions(+), 4 deletions(-)
 create mode 100644 board/keymile/km_arm/Makefile
 create mode 100644 board/keymile/km_arm/config.mk
 create mode 100644 board/keymile/km_arm/km_arm.c
 create mode 100644 board/keymile/km_arm/sdramregs.txt
 create mode 100644 board/keymile/km_arm/sdramregs_v1.txt
 create mode 100644 include/configs/km-arm.h
 create mode 100644 include/configs/mgcoge2_arm_p1a.h
 create mode 100644 include/configs/suen3.h
 create mode 100644 include/configs/suen3_p1a.h
 create mode 100644 include/configs/suen3_p1b_p1c.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 9734b1d..6ca5a21 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -385,6 +385,8 @@ Stefan Roese <sr@denx.de>

 	P3M750		PPC750FX/GX/GL

+	suen3		ARM926EJS (Kirkwood SoC)
+
 Yusdi Santoso <yusdi_santoso@adaptec.com>

 	HIDDEN_DRAGON	MPC8241/MPC8245
diff --git a/MAKEALL b/MAKEALL
index ab1bb6f..17f277b 100755
--- a/MAKEALL
+++ b/MAKEALL
@@ -554,6 +554,7 @@ LIST_ARM9="			\
 	da830evm		\
 	imx27lite		\
 	lpd7a400		\
+	mgcoge2_arm_p1a		\
 	mv88f6281gtw_ge		\
 	mx1ads			\
 	mx1fs2			\
@@ -572,6 +573,9 @@ LIST_ARM9="			\
 	sheevaplug		\
 	smdk2400		\
 	smdk2410		\
+	suen3_p1a		\
+	suen3_p1b_p1c		\
+	suen3			\
 	trab			\
 	VCMA9			\
 	versatile		\
diff --git a/Makefile b/Makefile
index ed6156f..968d8a9 100644
--- a/Makefile
+++ b/Makefile
@@ -2934,6 +2934,9 @@ lpd7a400_config \
 lpd7a404_config:	unconfig
 	@$(MKCONFIG) $(@:_config=) arm lh7a40x lpd7a40x

+mgcoge2_arm_p1a_config: unconfig
+	@$(MKCONFIG) $(@:_config=) arm arm926ejs km_arm keymile kirkwood
+
 mv88f6281gtw_ge_config: unconfig
 	@$(MKCONFIG) $(@:_config=) arm arm926ejs $(@:_config=) Marvell kirkwood

@@ -3023,6 +3026,11 @@ smdk2400_config	:	unconfig
 smdk2410_config	:	unconfig
 	@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

+suen3_config \
+suen3_p1a_config \
+suen3_p1b_p1c_config: unconfig
+	@$(MKCONFIG) $(@:_config=) arm arm926ejs km_arm keymile kirkwood
+
 SX1_stdout_serial_config \
 SX1_config:		unconfig
 	@mkdir -p $(obj)include
diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index ec27bda..33857c7 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -35,6 +35,7 @@
 #include <libfdt.h>
 #endif

+#include "../common/common.h"
 #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
 #include <i2c.h>

@@ -395,7 +396,12 @@ static void setports (int gpio)
 #endif
 #endif

-#if defined(CONFIG_KM8XX)
+#if (defined(CONFIG_MACH_SUEN3) && defined(CONFIG_HARD_I2C))
+#error I2C bus resetsequence not implemented yet.
+#endif
+
+#if defined(CONFIG_KM8XX) || \
+	(defined(CONFIG_MACH_SUEN3) && defined(CONFIG_SOFT_I2C))
 static void set_sda (int state)
 {
 	I2C_SDA(state);
@@ -411,6 +417,12 @@ static int get_sda (void)
 	return I2C_READ;
 }

+#if defined(CONFIG_MACH_SUEN3)
+static int get_scl (void)
+{
+	return (kw_gpio_get_value(SUEN3_SCL_PIN) ? 1 : 0);
+}
+#else
 static int get_scl (void)
 {
 	int	val;
@@ -421,10 +433,11 @@ static int get_scl (void)

 	return ((val & SCL_BIT) == SCL_BIT);
 }
+#endif

 #endif

-#if !defined(CONFIG_KMETER1)
+#if !defined(CONFIG_KMETER1) && !defined(CONFIG_SUVD3)
 static void writeStartSeq (void)
 {
 	set_sda (1);
@@ -483,7 +496,7 @@ static int i2c_make_abort (void)
  */
 void i2c_init_board(void)
 {
-#if defined(CONFIG_KMETER1)
+#if defined(CONFIG_KMETER1) || defined(CONFIG_SUVD3)
 	struct fsl_i2c *dev;
 	dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_I2C_OFFSET);
 	uchar	dummy;
@@ -500,7 +513,7 @@ void i2c_init_board(void)
 	out_8 (&dev->cr, (I2C_CR_MEN));

 #else
-#if defined(CONFIG_HARD_I2C)
+#if defined(CONFIG_HARD_I2C) && !defined(CONFIG_MACH_SUEN3)
 	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ;
 	volatile i2c8260_t *i2c	= (i2c8260_t *)&immap->im_i2c;

@@ -578,10 +591,12 @@ int fdt_get_node_and_value (void *blob,
 }
 #endif

+#if !defined(CONFIG_MACH_SUEN3)
 int ethernet_present (void)
 {
 	return (in_8((u8 *)CONFIG_SYS_PIGGY_BASE + CONFIG_SYS_SLOT_ID_OFF) & 0x80);
 }
+#endif

 int board_eth_init (bd_t *bis)
 {
diff --git a/board/keymile/km_arm/Makefile b/board/keymile/km_arm/Makefile
new file mode 100644
index 0000000..fffc6a3
--- /dev/null
+++ b/board/keymile/km_arm/Makefile
@@ -0,0 +1,51 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# 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	:= $(BOARD).o ../common/common.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/keymile/km_arm/config.mk b/board/keymile/km_arm/config.mk
new file mode 100644
index 0000000..fe7b0ef
--- /dev/null
+++ b/board/keymile/km_arm/config.mk
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# 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 = 0x004000000
diff --git a/board/keymile/km_arm/km_arm.c b/board/keymile/km_arm/km_arm.c
new file mode 100644
index 0000000..f3ebbed
--- /dev/null
+++ b/board/keymile/km_arm/km_arm.c
@@ -0,0 +1,345 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <nand.h>
+#include <netdev.h>
+#include <miiphy.h>
+#include <asm/arch/kirkwood.h>
+#include <asm/arch/mpp.h>
+
+#include "../common/common.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int	io_dev;
+extern I2C_MUX_DEVICE *i2c_mux_ident_muxstring (uchar *buf);
+
+/* 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_PEX_RST_OUTn,
+#if defined(CONFIG_KIRKWOOD_GPIO)
+	MPP8_GPIO,	/* SDA */
+	MPP9_GPIO,	/* SCL */
+#else
+	MPP8_TW_SDA,
+	MPP9_TW_SCK,
+#endif
+	MPP10_UART0_TXD,
+	MPP11_UART0_RXD,
+	MPP12_GPO,		/* Reserved */
+	MPP13_UART1_TXD,
+	MPP14_UART1_RXD,
+	MPP15_GPIO,		/* Not used */
+	MPP16_GPIO,		/* Not used */
+	MPP17_GPIO,		/* Reserved */
+	MPP18_NF_IO0,
+	MPP19_NF_IO1,
+	MPP20_GPIO,
+	MPP21_GPIO,
+	MPP22_GPIO,
+	MPP23_GPIO,
+	MPP24_GPIO,
+	MPP25_GPIO,
+	MPP26_GPIO,
+	MPP27_GPIO,
+	MPP28_GPIO,
+	MPP29_GPIO,
+	MPP30_GPIO,
+	MPP31_GPIO,
+	MPP32_GPIO,
+	MPP33_GPIO,
+	MPP34_GPIO,		/* CDL1 (input) */
+	MPP35_GPIO,		/* CDL2 (input) */
+	MPP36_GPIO,		/* MAIN_IRQ (input) */
+	MPP37_GPIO,		/* BOARD_LED */
+	MPP38_GPIO,		/* Piggy3 LED[1] */
+	MPP39_GPIO,		/* Piggy3 LED[2] */
+	MPP40_GPIO,		/* Piggy3 LED[3] */
+	MPP41_GPIO,		/* Piggy3 LED[4] */
+	MPP42_GPIO,		/* Piggy3 LED[5] */
+	MPP43_GPIO,		/* Piggy3 LED[6] */
+	MPP44_GPIO,		/* Piggy3 LED[7] */
+	MPP45_GPIO,		/* Piggy3 LED[8] */
+	MPP46_GPIO,		/* Reserved */
+	MPP47_GPIO,		/* Reserved */
+	MPP48_GPIO,		/* Reserved */
+	MPP49_GPIO,		/* SW_INTOUTn */
+	0
+};
+
+int ethernet_present(void)
+{
+	uchar	buf;
+	int	ret = 0;
+
+#if defined(CONFIG_SUEN_P1A)
+	int     oldbusnum = i2c_get_bus_num();
+
+	i2c_set_bus_num(io_dev);
+	if (i2c_read(0x74, 0, 1, &buf, 1) != 0) {
+		printf ("%s: Error reading EEprom\n", __FUNCTION__);
+		i2c_set_bus_num(oldbusnum);
+		return -1;
+	}
+	if ((buf & 0x80) == 0x80) {
+		ret = 1;
+	}
+	i2c_set_bus_num(oldbusnum);
+#else
+	if (i2c_read(0x10, 2, 1, &buf, 1) != 0) {
+		printf ("%s: Error reading Boco\n", __FUNCTION__);
+		return -1;
+	}
+	if ((buf & 0x40) == 0x40) {
+		ret = 1;
+	}
+#endif
+	return ret;
+}
+
+int misc_init_r(void)
+{
+	I2C_MUX_DEVICE	*i2cdev;
+	char *str;
+	int mach_type;
+
+	/* add I2C Bus for I/O Expander */
+	i2cdev = i2c_mux_ident_muxstring((uchar *)"pca9554a:70:a");
+	io_dev = i2cdev->busid;
+	puts("Piggy:");
+	if (ethernet_present() == 0)
+		puts (" not");
+	puts(" present\n");
+
+	str = getenv("mach_type");
+	if (str != NULL) {
+		mach_type = simple_strtoul(str, NULL, 10);
+		printf("Overwriting MACH_TYPE with %d!!!\n", mach_type);
+		gd->bd->bi_arch_number = mach_type;
+	}
+	return 0;
+}
+
+int board_init(void)
+{
+	u32 tmp;
+
+	kirkwood_mpp_conf(kwmpp_config);
+
+	tmp = readl(KW_GPIO0_BASE);
+	writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
+	tmp = readl(KW_GPIO0_BASE+4);
+	writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE+4);
+	printf("KM: setting NAND mode\n");
+
+	/*
+	 * arch number of board
+	 */
+	gd->bd->bi_arch_number = MACH_TYPE_SUEN3;
+
+	/* address of boot parameters */
+	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
+
+#if defined(CONFIG_KIRKWOOD_GPIO)
+	/* init the GPIO for I2C Bitbang driver */
+	kw_gpio_set_valid(SUEN3_SDA_PIN, 1);
+	kw_gpio_set_valid(SUEN3_SCL_PIN, 1);
+	kw_gpio_direction_output(SUEN3_SDA_PIN, 0);
+	kw_gpio_direction_output(SUEN3_SCL_PIN, 0);
+#endif
+	return 0;
+}
+
+#if defined(CONFIG_CMD_SF)
+int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	u32 tmp;
+	if (argc < 2) {
+		cmd_usage(cmdtp);
+		return 1;
+	}
+
+	if ((strcmp(argv[1], "on") != 0) &&
+	    (strcmp(argv[1], "off") != 0)) {
+		cmd_usage(cmdtp);
+		return 1;
+	}
+
+	if ((strcmp(argv[1], "off") == 0)) {
+		printf("SPI FLASH disabled, NAND enabled\n");
+		/* Multi-Purpose Pins Functionality configuration */
+		kwmpp_config[0] = MPP0_NF_IO2;
+		kwmpp_config[1] = MPP1_NF_IO3;
+		kwmpp_config[2] = MPP2_NF_IO4;
+		kwmpp_config[3] = MPP3_NF_IO5;
+
+		kirkwood_mpp_conf(kwmpp_config);
+		tmp = readl(KW_GPIO0_BASE);
+		writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
+
+		nand_init();
+	} else {
+		printf("SPI FLASH enabled, NAND disabled\n");
+		/* Multi-Purpose Pins Functionality configuration */
+		kwmpp_config[0] = MPP0_SPI_SCn;
+		kwmpp_config[1] = MPP1_SPI_MOSI;
+		kwmpp_config[2] = MPP2_SPI_SCK;
+		kwmpp_config[3] = MPP3_SPI_MISO;
+
+		kirkwood_mpp_conf(kwmpp_config);
+		tmp = readl(KW_GPIO0_BASE);
+		writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
+
+		nand_init();
+	}
+
+	return 0;
+}
+
+U_BOOT_CMD(
+	spitoggle,	2,	0,	do_spi_toggle,
+	"En-/disable SPI FLASH access",
+	"<on|off> - Enable (on) or disable (off) SPI FLASH access\n"
+	);
+#endif
+
+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 = get_ram_size((long *)kw_sdram_bar(i),
+						       kw_sdram_bs(i));
+	}
+	return 0;
+}
+
+/* Configure and enable MV88E1118 PHY */
+void reset_phy(void)
+{
+	char *name = "egiga0";
+
+	if (miiphy_set_current_dev(name))
+		return;
+
+	/* reset the phy */
+	miiphy_reset(name, CONFIG_PHY_BASE_ADR);
+}
+
+#if defined(CONFIG_HUSH_INIT_VAR)
+int hush_init_var (void)
+{
+	ivm_read_eeprom ();
+	return 0;
+}
+#endif
+
+#if defined(CONFIG_BOOTCOUNT_LIMIT)
+void bootcount_store (ulong a)
+{
+	volatile ulong *save_addr;
+	volatile ulong size = 0;
+	int i;
+	for (i=0; i<CONFIG_NR_DRAM_BANKS; i++) {
+		size += gd->bd->bi_dram[i].size;
+	}
+	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
+	save_addr[0] = a;
+	save_addr[1] = BOOTCOUNT_MAGIC;
+}
+
+ulong bootcount_load (void)
+{
+	volatile ulong *save_addr;
+	volatile ulong size = 0;
+	int i;
+	for (i=0; i<CONFIG_NR_DRAM_BANKS; i++) {
+		size += gd->bd->bi_dram[i].size;
+	}
+	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
+	if (save_addr[1] != BOOTCOUNT_MAGIC)
+		return 0;
+	else
+		return save_addr[0];
+}
+#endif
+
+#if defined(CONFIG_SYS_EEPROM_WREN)
+#define BOCOADDR	0x10
+#define DIRECT		0x04
+#define DIRECTMASK	0x04
+#define GPRT		0x08
+#define GPRTMASK	0x04
+int eeprom_reg_value (unsigned dev_addr, uchar reg, uchar reg_mask, int value)
+{
+	uchar buf;
+	if (i2c_read (dev_addr, reg, 1, &buf, 1) != 0)
+		return 1;
+	if (value)
+		buf |= reg_mask;
+	else
+		buf &= ~reg_mask;
+	if (i2c_write (dev_addr, reg, 1, &buf, 1) != 0)
+		return 1;
+	return 0;
+}
+
+int eeprom_write_enable (unsigned dev_addr, int state)
+{
+	uchar direction = state;
+	uchar gpio_value = !state;
+	uchar addr = BOCOADDR;
+	uchar direct = DIRECT;
+	uchar direct_mask = DIRECTMASK;
+	uchar gprt = GPRT;
+	uchar gprt_mask = GPRTMASK;
+
+	/* state 0: transition from write enabled to write disable */
+	/* state 1: transition from write disabled to write enable */
+
+	if (!state && eeprom_reg_value (addr, gprt, gprt_mask, gpio_value))
+		return 1;
+
+	if (eeprom_reg_value (addr, direct, direct_mask, direction))
+		return 1;
+
+	if (state && eeprom_reg_value (addr, gprt, gprt_mask, gpio_value))
+		return 1;
+
+	return 0;
+}
+#endif
diff --git a/board/keymile/km_arm/sdramregs.txt b/board/keymile/km_arm/sdramregs.txt
new file mode 100644
index 0000000..68c53a7
--- /dev/null
+++ b/board/keymile/km_arm/sdramregs.txt
@@ -0,0 +1,31 @@
+0xFFD10000 0x01112222
+0xFFD10008 0x00001100
+0xFFD100E0 0x1B1B1B1B
+0xFFD20134 0xFFFFFFFF
+0xFFD20138 0x009FFFFF
+0xFFD20154 0x00000000
+0xFFD2014C 0x00000000
+0xFFD20148 0x00000001
+0xFFD01400 0x43000400
+0xFFD01404 0x3a543000
+0xFFD01408 0x34136552
+0xFFD0140C 0x00000033
+0xFFD01410 0x0000000D
+0xFFD01414 0x00000000
+0xFFD01418 0x00000000
+0xFFD0141C 0x00000652
+0xFFD01420 0x00000044
+0xFFD01424 0x0000F07F
+0xFFD01428 0x00074510
+0xFFD0147c 0x00007451
+0xFFD01504 0x07FFFFF1
+0xFFD01508 0x00000000
+0xFFD0150C 0x00000000
+0xFFD01514 0x00000000
+0xFFD0151C 0x00000000
+0xFFD01494 0x00010001
+0xFFD01498 0x00000000
+0xFFD0149C 0x0000fc11
+0xFFD01480 0x00000001
+0x0 0x0
+
diff --git a/board/keymile/km_arm/sdramregs_v1.txt b/board/keymile/km_arm/sdramregs_v1.txt
new file mode 100644
index 0000000..6778a9b
--- /dev/null
+++ b/board/keymile/km_arm/sdramregs_v1.txt
@@ -0,0 +1,28 @@
+0xFFD10000 0x01111111
+0xFFD10008 0x00001100
+0xFFD100E0 0x1B1B1B1B
+0xFFD20134 0xBBBBBBBB
+0xFFD20138 0x00BBBBBB
+0xFFD20154 0x00000200
+0xFFD2014C 0x00001C00
+0xFFD20148 0x00000001
+0xFFD01400 0x43000400
+0xFFD01404 0x36343000
+0xFFD01408 0x2302544B
+0xFFD0140C 0x00000032
+0xFFD01410 0x0000000D
+0xFFD01414 0x00000000
+0xFFD01418 0x00000000
+0xFFD0141C 0x00000642
+0xFFD01420 0x00000040
+0xFFD01424 0x0000F07F
+0xFFD01504 0x07FFFFF1
+0xFFD01508 0x00000000
+0xFFD0150C 0x00000000
+0xFFD01514 0x00000000
+0xFFD0151C 0x00000000
+0xFFD01494 0x00000000
+0xFFD01498 0x00000000
+0xFFD0149C 0x0000E90F
+0xFFD01480 0x00000001
+0x0 0x0
diff --git a/include/configs/km-arm.h b/include/configs/km-arm.h
new file mode 100644
index 0000000..a4f3601
--- /dev/null
+++ b/include/configs/km-arm.h
@@ -0,0 +1,192 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/* for linking errors see http://lists.denx.de/pipermail/u-boot/2009-July/057350.html */
+
+#ifndef _CONFIG_KM_ARM_H
+#define _CONFIG_KM_ARM_H
+
+/*
+ * High Level Configuration Options (easy to change)
+ */
+#define CONFIG_MARVELL
+#define CONFIG_ARM926EJS		/* Basic Architecture */
+#define CONFIG_FEROCEON_88FR131		/* CPU Core subversion */
+#define CONFIG_KIRKWOOD			/* SOC Family Name */
+#define CONFIG_KW88F6281		/* SOC Name */
+#define CONFIG_MACH_SUEN3		/* Machine type */
+
+/* include common defines/options for all Keymile boards */
+#include "keymile-common.h"
+
+#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 */
+#undef  CONFIG_KIRKWOOD_PCIE_INIT	/* Disable PCIE Port0 for kernel */
+#define CONFIG_KIRKWOOD_RGMII_PAD_1V8	/* Set RGMII Pad voltage to 1.8V */
+
+#define CONFIG_MISC_INIT_R
+
+/*
+ * 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 */
+
+/*
+ * 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_BOOTMAPSZ	(8 << 20)	/* Initial Memmap for Linux */
+#define CONFIG_CMDLINE_TAG		/* enable passing of ATAGs  */
+#define CONFIG_INITRD_TAG		/* enable INITRD tag */
+#define CONFIG_SETUP_MEMORY_TAGS 	/* enable memory tag */
+
+/*
+ * Commands configuration
+ */
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NFS
+
+/*
+ * Without NOR FLASH we need this
+ */
+#define CONFIG_SYS_NO_FLASH
+#undef CONFIG_CMD_FLASH
+#undef CONFIG_CMD_IMLS
+
+/*
+ * NAND Flash configuration
+ */
+#define CONFIG_SYS_MAX_NAND_DEVICE	1
+#define NAND_MAX_CHIPS			1
+#define CONFIG_NAND_KIRKWOOD
+#define CONFIG_SYS_NAND_BASE		0xd8000000
+
+#define BOOTFLASH_START		0x0
+
+#define CONFIG_KM_CONSOLE_TTY	"ttyS0"
+
+/* 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_RESET_ADDRESS 0xffff0000	/* Rst Vector Adr */
+
+/*
+ * Ethernet Driver configuration
+ */
+#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_SYS_FAULT_ECHO_LINK_DOWN	/* detect link using phy */
+#define CONFIG_KIRKWOOD_EGIGA_PORTS	{1,0}	/* enable port 0 only */
+#define CONFIG_PHY_BASE_ADR	0
+#define CONFIG_ENV_OVERWRITE	/* ethaddr can be reprogrammed */
+#define CONFIG_RESET_PHY_R	/* use reset_phy() to init 88E1118 PHY */
+
+/*
+ * UBI related stuff
+ */
+#define CONFIG_SYS_USE_UBI
+
+/*
+ * I2C related stuff
+ */
+#undef	CONFIG_HARD_I2C		/* I2C with hardware support */
+#define	CONFIG_SOFT_I2C		/* I2C bit-banged	*/
+
+#if defined(CONFIG_HARD_I2C)
+#define	CONFIG_I2C_KIRKWOOD
+#define	CONFIG_I2C_KW_REG_BASE		KW_TWSI_BASE
+#define	CONFIG_SYS_I2C_SLAVE		0x0
+#define	CONFIG_SYS_I2C_SPEED		100000
+#endif
+
+#if defined(CONFIG_SOFT_I2C)
+#define	CONFIG_KIRKWOOD_GPIO		/* Enable GPIO Support */
+#ifndef __ASSEMBLY__
+#include <asm/arch-kirkwood/gpio.h>
+extern void __set_direction(unsigned pin, int high);
+#define SUEN3_SDA_PIN	8
+#define SUEN3_SCL_PIN	9
+
+#define I2C_ACTIVE	__set_direction(SUEN3_SDA_PIN, 0)
+#define I2C_TRISTATE	__set_direction(SUEN3_SDA_PIN, 1)
+#define I2C_READ	(kw_gpio_get_value(SUEN3_SDA_PIN) ? 1 : 0)
+#define I2C_SDA(bit)	kw_gpio_set_value(SUEN3_SDA_PIN, bit);
+#define I2C_SCL(bit)	kw_gpio_set_value(SUEN3_SCL_PIN, bit);
+#endif
+
+#define I2C_DELAY	udelay(3)	/* 1/4 I2C clock duration */
+#define I2C_SOFT_DECLARATIONS
+
+#define	CONFIG_SYS_I2C_SLAVE		0x0
+#define	CONFIG_SYS_I2C_SPEED		100000
+#endif
+
+#define CONFIG_SYS_I2C_EEPROM_ADDR	0x50
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN	2
+
+#if 1 // test-only cramfs ...
+#define CONFIG_SYS_MAX_FLASH_SECT	256
+
+#ifndef __ASSEMBLY__
+typedef struct {
+	unsigned long size;			/* total bank size in bytes		*/
+	unsigned short sector_count;		/* number of erase units		*/
+	unsigned long flash_id;			/* combined device & manufacturer code	*/
+	unsigned long start[CONFIG_SYS_MAX_FLASH_SECT];   /* virtual sector start address */
+	unsigned char protect[CONFIG_SYS_MAX_FLASH_SECT]; /* sector protection status	*/
+} flash_info_t;
+#endif
+#endif
+
+#endif /* _CONFIG_KM_ARM_H */
diff --git a/include/configs/mgcoge2_arm_p1a.h b/include/configs/mgcoge2_arm_p1a.h
new file mode 100644
index 0000000..d34cb7e
--- /dev/null
+++ b/include/configs/mgcoge2_arm_p1a.h
@@ -0,0 +1,93 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/* for linking errors see http://lists.denx.de/pipermail/u-boot/2009-July/057350.html */
+
+#ifndef _CONFIG_MGCOGE2_ARM_P1A_H
+#define _CONFIG_MGCOGE2_ARM_P1A_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile mgcoge2"
+
+#define CONFIG_HOSTNAME			mgcoge2
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM		/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x40 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9544a:70:8\0"
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4\0"		\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
diff --git a/include/configs/suen3.h b/include/configs/suen3.h
new file mode 100644
index 0000000..f52fcf5
--- /dev/null
+++ b/include/configs/suen3.h
@@ -0,0 +1,100 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/* for linking errors see http://lists.denx.de/pipermail/u-boot/2009-July/057350.html */
+
+#ifndef _CONFIG_SUEN3_H
+#define _CONFIG_SUEN3_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3"
+
+#define CONFIG_HOSTNAME			suen3
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM		/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x0 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9547:70:d\0"
+
+/* offset redund: (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) */
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+#define CONFIG_ENV_OFFSET_REDUND	0x2000 /* no bracets! */
+#define CONFIG_ENV_SIZE_REDUND		(CONFIG_ENV_SIZE)
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4 && "		\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET_REDUND) " 4\0"	\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
diff --git a/include/configs/suen3_p1a.h b/include/configs/suen3_p1a.h
new file mode 100644
index 0000000..731cdc9
--- /dev/null
+++ b/include/configs/suen3_p1a.h
@@ -0,0 +1,79 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/* for linking errors see http://lists.denx.de/pipermail/u-boot/2009-July/057350.html */
+
+#ifndef _CONFIG_SUEN3_P1A_H
+#define _CONFIG_SUEN3_P1A_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+#define CONFIG_SUEN_P1A
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3 V1"
+
+#define CONFIG_HOSTNAME			suen3_v1
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_NAND		/* use NAND for environment vars */
+#define CONFIG_ENV_OFFSET		(512 << 10)	/* Offset to env */
+#define CONFIG_ENV_OFFSET_REDUND	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"512k(u-boot),"						\
+		"128k(env),"						\
+		"128k(envred),"						\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"nand erase " xstr(BOOTFLASH_START) " 0x60000 && "	\
+		"nand write ${u-boot_addr_r} " xstr(BOOTFLASH_START) " "\
+		"0x60000\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=nand erase 0x80000 0x40000\0"				\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_P1A_H */
diff --git a/include/configs/suen3_p1b_p1c.h b/include/configs/suen3_p1b_p1c.h
new file mode 100644
index 0000000..63f9e6a
--- /dev/null
+++ b/include/configs/suen3_p1b_p1c.h
@@ -0,0 +1,107 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/* for linking errors see http://lists.denx.de/pipermail/u-boot/2009-July/057350.html */
+
+#ifndef _CONFIG_SUEN3_H
+#define _CONFIG_SUEN3_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3"
+
+#define CONFIG_HOSTNAME			suen3
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM		/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x40 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9544a:70:8\0"
+
+#if 0
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+/* offset redund: (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) */
+#define CONFIG_ENV_OFFSET_REDUND	0x2000 /* no bracets! */
+#define CONFIG_ENV_SIZE_REDUND		(CONFIG_ENV_SIZE)
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4 && "		\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET_REDUND) " 4\0"	\
+
+#endif
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00008000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4\0"		\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
-- 
1.6.2.5

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [U-Boot] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-07  7:56 [U-Boot] arm: suen3, suen3_v1, mgcoge2_arm_p1a support Heiko Schocher
@ 2010-01-17 23:51 ` Wolfgang Denk
  2010-01-18  8:34   ` Heiko Schocher
  2010-01-27  7:23   ` Heiko Schocher
  0 siblings, 2 replies; 26+ messages in thread
From: Wolfgang Denk @ 2010-01-17 23:51 UTC (permalink / raw)
  To: u-boot

Dear Heiko Schocher,

In message <4B459395.2050301@denx.de> you wrote:
> This patch adds support for the Keymile SUEN3 board variants which
> are based on the Marvell Kirkwood (88F6281) SoC. All variants
> uses common code stored in board/keymile/km_arm/km_arm.c
> 
> mgcoge2_arm_p1a board:
> This adds support for the ARM part of the mgcoge2. The suen3
> target was moved to the correct suen3 p1b version. There is a
> difference between the GPIO configuration between suen3 and mgcoge2.
...


> --- /dev/null
> +++ b/include/configs/km-arm.h
...
> +#if 1 // test-only cramfs ...
> +#define CONFIG_SYS_MAX_FLASH_SECT	256

Please do not add dead code (the "#if 1" here),
and do not use C++ comments (please fix this globally).

> +#ifndef __ASSEMBLY__
> +typedef struct {
> +	unsigned long size;			/* total bank size in bytes		*/
> +	unsigned short sector_count;		/* number of erase units		*/
> +	unsigned long flash_id;			/* combined device & manufacturer code	*/
> +	unsigned long start[CONFIG_SYS_MAX_FLASH_SECT];   /* virtual sector start address */
> +	unsigned char protect[CONFIG_SYS_MAX_FLASH_SECT]; /* sector protection status	*/
> +} flash_info_t;

Lines way too long. Please fix globally.

Umm.. why cannot you use the struct flash_info_t as declared in
"include/flash.h" ??


Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
A secure program has to be robust: it  must  be  able  to  deal  with
conditions  that "can't happen", whether user input, program error or
library/etc. This is basic damage  control.  Buffer  overflow  errors
have nothing to do with security, but everything with stupidity.
                 -- Wietse Venema in <5cnqm3$8r9@spike.porcupine.org>

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-17 23:51 ` Wolfgang Denk
@ 2010-01-18  8:34   ` Heiko Schocher
  2010-01-18  9:31     ` Stefan Roese
  2010-01-27  7:23   ` Heiko Schocher
  1 sibling, 1 reply; 26+ messages in thread
From: Heiko Schocher @ 2010-01-18  8:34 UTC (permalink / raw)
  To: u-boot

Hello Wolfgang,

Wolfgang Denk wrote:
> In message <4B459395.2050301@denx.de> you wrote:
>> This patch adds support for the Keymile SUEN3 board variants which
>> are based on the Marvell Kirkwood (88F6281) SoC. All variants
>> uses common code stored in board/keymile/km_arm/km_arm.c
>>
>> mgcoge2_arm_p1a board:
>> This adds support for the ARM part of the mgcoge2. The suen3
>> target was moved to the correct suen3 p1b version. There is a
>> difference between the GPIO configuration between suen3 and mgcoge2.
> ...
> 
> 
>> --- /dev/null
>> +++ b/include/configs/km-arm.h
> ...
>> +#if 1 // test-only cramfs ...
>> +#define CONFIG_SYS_MAX_FLASH_SECT	256
> 
> Please do not add dead code (the "#if 1" here),
> and do not use C++ comments (please fix this globally).

Ups, sorry.

>> +#ifndef __ASSEMBLY__
>> +typedef struct {
>> +	unsigned long size;			/* total bank size in bytes		*/
>> +	unsigned short sector_count;		/* number of erase units		*/
>> +	unsigned long flash_id;			/* combined device & manufacturer code	*/
>> +	unsigned long start[CONFIG_SYS_MAX_FLASH_SECT];   /* virtual sector start address */
>> +	unsigned char protect[CONFIG_SYS_MAX_FLASH_SECT]; /* sector protection status	*/
>> +} flash_info_t;
> 
> Lines way too long. Please fix globally.
> 
> Umm.. why cannot you use the struct flash_info_t as declared in
> "include/flash.h" ??

Hmm.. I take a look at this point... Stefan? Maybe, you can help here,
because this comes from your original port, I think.

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-18  8:34   ` Heiko Schocher
@ 2010-01-18  9:31     ` Stefan Roese
  0 siblings, 0 replies; 26+ messages in thread
From: Stefan Roese @ 2010-01-18  9:31 UTC (permalink / raw)
  To: u-boot

Hi Heiko,

On Monday 18 January 2010 09:34:08 Heiko Schocher wrote:
> >> +#if 1 // test-only cramfs ...
> >> +#define CONFIG_SYS_MAX_FLASH_SECT	256
> >
> > Please do not add dead code (the "#if 1" here),
> > and do not use C++ comments (please fix this globally).
> 
> Ups, sorry.
> 
> >> +#ifndef __ASSEMBLY__
> >> +typedef struct {
> >> +	unsigned long size;			/* total bank size in bytes		
*/
> >> +	unsigned short sector_count;		/* number of erase units		
*/
> >> +	unsigned long flash_id;			/* combined device & manufacturer 
code	*/
> >> +	unsigned long start[CONFIG_SYS_MAX_FLASH_SECT];   /* virtual sector
> >> start address */ +	unsigned char protect[CONFIG_SYS_MAX_FLASH_SECT]; /*
> >> sector protection status	*/ +} flash_info_t;
> >
> > Lines way too long. Please fix globally.
> >
> > Umm.. why cannot you use the struct flash_info_t as declared in
> > "include/flash.h" ??
> 
> Hmm.. I take a look at this point... Stefan? Maybe, you can help here,
> because this comes from your original port, I think.

IIRC, then this was part of the cramfs support provided by Keymile. Sorry, but 
I don't have a better patch available right now. Please let me know if I 
should investigate here further.

Cheers,
Stefan

--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-17 23:51 ` Wolfgang Denk
  2010-01-18  8:34   ` Heiko Schocher
@ 2010-01-27  7:23   ` Heiko Schocher
  2010-01-27  7:30     ` [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash Heiko Schocher
  2010-01-27  7:31     ` [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support Heiko Schocher
  1 sibling, 2 replies; 26+ messages in thread
From: Heiko Schocher @ 2010-01-27  7:23 UTC (permalink / raw)
  To: u-boot

Hello Wolfgang,

Wolfgang Denk wrote:
> In message <4B459395.2050301@denx.de> you wrote:
>> This patch adds support for the Keymile SUEN3 board variants which
>> are based on the Marvell Kirkwood (88F6281) SoC. All variants
>> uses common code stored in board/keymile/km_arm/km_arm.c
>>
>> mgcoge2_arm_p1a board:
>> This adds support for the ARM part of the mgcoge2. The suen3
>> target was moved to the correct suen3 p1b version. There is a
>> difference between the GPIO configuration between suen3 and mgcoge2.
> ...
> 
> 
>> --- /dev/null
>> +++ b/include/configs/km-arm.h
> ...
>> +#if 1 // test-only cramfs ...
>> +#define CONFIG_SYS_MAX_FLASH_SECT	256
> 
> Please do not add dead code (the "#if 1" here),
> and do not use C++ comments (please fix this globally).

Ok, fixed.

>> +#ifndef __ASSEMBLY__
>> +typedef struct {
>> +	unsigned long size;			/* total bank size in bytes		*/
>> +	unsigned short sector_count;		/* number of erase units		*/
>> +	unsigned long flash_id;			/* combined device & manufacturer code	*/
>> +	unsigned long start[CONFIG_SYS_MAX_FLASH_SECT];   /* virtual sector start address */
>> +	unsigned char protect[CONFIG_SYS_MAX_FLASH_SECT]; /* sector protection status	*/
>> +} flash_info_t;
> 
> Lines way too long. Please fix globally.
> 
> Umm.. why cannot you use the struct flash_info_t as declared in
> "include/flash.h" ??

Hmm.. this is, because keymile uses a cramfs without a NOR-flash.
And in fs/cramfs/cramfs.c this struct is used ...

I made in the meantime a patch, with solves this problem. I post
it soon for discussion. I also send an updated version of this
patch without this struct in the board config.

Thanks for the review!

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash
  2010-01-27  7:23   ` Heiko Schocher
@ 2010-01-27  7:30     ` Heiko Schocher
  2010-01-27 19:28       ` Wolfgang Denk
  2010-01-27  7:31     ` [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support Heiko Schocher
  1 sibling, 1 reply; 26+ messages in thread
From: Heiko Schocher @ 2010-01-27  7:30 UTC (permalink / raw)
  To: u-boot

[PATCH 1/2] cramfs: make cramfs usable without a NOR flash

Signed-off-by: Heiko Schocher <hs@denx.de>
---

- changes since v1:
  added comments from Wolfgang Denk:
  get rid of flash_info_t define in board config
  (to get this working patch 1/2 is introduced/needed)

 common/cmd_cramfs.c |   12 +++++++++++-
 fs/cramfs/cramfs.c  |    4 ++++
 2 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/common/cmd_cramfs.c b/common/cmd_cramfs.c
index 55e2d36..9e92163 100644
--- a/common/cmd_cramfs.c
+++ b/common/cmd_cramfs.c
@@ -43,7 +43,9 @@
 #endif

 #ifdef CONFIG_CRAMFS_CMDLINE
-flash_info_t flash_info[1];
+#if !defined(CONFIG_SYS_NO_FLASH)
+extern flash_info_t flash_info[];
+#endif

 #ifndef CONFIG_CMD_JFFS2
 #include <linux/stat.h>
@@ -119,7 +121,11 @@ int do_cramfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	dev.id = &id;
 	part.dev = &dev;
 	/* fake the address offset */
+#if !defined(CONFIG_SYS_NO_FLASH)
 	part.offset = addr - flash_info[id.num].start[0];
+#else
+	part.offset = addr;
+#endif

 	/* pre-set Boot file name */
 	if ((filename = getenv("bootfile")) == NULL) {
@@ -182,7 +188,11 @@ int do_cramfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	dev.id = &id;
 	part.dev = &dev;
 	/* fake the address offset */
+#if !defined(CONFIG_SYS_NO_FLASH)
 	part.offset = addr - flash_info[id.num].start[0];
+#else
+	part.offset = addr;
+#endif

 	if (argc == 2)
 		filename = argv[1];
diff --git a/fs/cramfs/cramfs.c b/fs/cramfs/cramfs.c
index 2956d39..910955d 100644
--- a/fs/cramfs/cramfs.c
+++ b/fs/cramfs/cramfs.c
@@ -41,8 +41,12 @@ struct cramfs_super super;

 /* CPU address space offset calculation macro, struct part_info offset is
  * device address space offset, so we need to shift it by a device start address. */
+#if !defined(CONFIG_SYS_NO_FLASH)
 extern flash_info_t flash_info[];
 #define PART_OFFSET(x)	(x->offset + flash_info[x->dev->id->num].start[0])
+#else
+#define PART_OFFSET(x)	(x->offset)
+#endif

 static int cramfs_read_super (struct part_info *info)
 {
-- 
1.6.2.5
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-27  7:23   ` Heiko Schocher
  2010-01-27  7:30     ` [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash Heiko Schocher
@ 2010-01-27  7:31     ` Heiko Schocher
  2010-01-27 13:50       ` Tom
                         ` (2 more replies)
  1 sibling, 3 replies; 26+ messages in thread
From: Heiko Schocher @ 2010-01-27  7:31 UTC (permalink / raw)
  To: u-boot

This patch adds support for the Keymile SUEN3 board variants which
are based on the Marvell Kirkwood (88F6281) SoC. All variants
uses common code stored in board/keymile/km_arm/km_arm.c

mgcoge2_arm_p1a board:
This adds support for the ARM part of the mgcoge2. The suen3
target was moved to the correct suen3 p1b version. There is a
difference between the GPIO configuration between suen3 and mgcoge2.

Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
Signed-off-by: Stefan Roese <sr@denx.de>
Signed-off-by: Heiko Schocher <hs@denx.de>
---

- changes since v1:
  added comments from Wolfgang Denk:
  get rid of flash_info_t define in board config
  (to get this working patch 1/2 is introduced/needed)

 MAINTAINERS                           |    2 +
 MAKEALL                               |    4 +
 Makefile                              |    8 +
 board/keymile/common/common.c         |   23 ++-
 board/keymile/km_arm/Makefile         |   51 +++++
 board/keymile/km_arm/config.mk        |   25 +++
 board/keymile/km_arm/km_arm.c         |  345 +++++++++++++++++++++++++++++++++
 board/keymile/km_arm/sdramregs.txt    |   31 +++
 board/keymile/km_arm/sdramregs_v1.txt |   28 +++
 include/configs/km-arm.h              |  189 ++++++++++++++++++
 include/configs/mgcoge2_arm_p1a.h     |   96 +++++++++
 include/configs/suen3.h               |  103 ++++++++++
 include/configs/suen3_p1a.h           |   82 ++++++++
 include/configs/suen3_p1b_p1c.h       |  110 +++++++++++
 14 files changed, 1093 insertions(+), 4 deletions(-)
 create mode 100644 board/keymile/km_arm/Makefile
 create mode 100644 board/keymile/km_arm/config.mk
 create mode 100644 board/keymile/km_arm/km_arm.c
 create mode 100644 board/keymile/km_arm/sdramregs.txt
 create mode 100644 board/keymile/km_arm/sdramregs_v1.txt
 create mode 100644 include/configs/km-arm.h
 create mode 100644 include/configs/mgcoge2_arm_p1a.h
 create mode 100644 include/configs/suen3.h
 create mode 100644 include/configs/suen3_p1a.h
 create mode 100644 include/configs/suen3_p1b_p1c.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 9734b1d..6ca5a21 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -385,6 +385,8 @@ Stefan Roese <sr@denx.de>

 	P3M750		PPC750FX/GX/GL

+	suen3		ARM926EJS (Kirkwood SoC)
+
 Yusdi Santoso <yusdi_santoso@adaptec.com>

 	HIDDEN_DRAGON	MPC8241/MPC8245
diff --git a/MAKEALL b/MAKEALL
index ab1bb6f..17f277b 100755
--- a/MAKEALL
+++ b/MAKEALL
@@ -554,6 +554,7 @@ LIST_ARM9="			\
 	da830evm		\
 	imx27lite		\
 	lpd7a400		\
+	mgcoge2_arm_p1a		\
 	mv88f6281gtw_ge		\
 	mx1ads			\
 	mx1fs2			\
@@ -572,6 +573,9 @@ LIST_ARM9="			\
 	sheevaplug		\
 	smdk2400		\
 	smdk2410		\
+	suen3_p1a		\
+	suen3_p1b_p1c		\
+	suen3			\
 	trab			\
 	VCMA9			\
 	versatile		\
diff --git a/Makefile b/Makefile
index ed6156f..968d8a9 100644
--- a/Makefile
+++ b/Makefile
@@ -2934,6 +2934,9 @@ lpd7a400_config \
 lpd7a404_config:	unconfig
 	@$(MKCONFIG) $(@:_config=) arm lh7a40x lpd7a40x

+mgcoge2_arm_p1a_config: unconfig
+	@$(MKCONFIG) $(@:_config=) arm arm926ejs km_arm keymile kirkwood
+
 mv88f6281gtw_ge_config: unconfig
 	@$(MKCONFIG) $(@:_config=) arm arm926ejs $(@:_config=) Marvell kirkwood

@@ -3023,6 +3026,11 @@ smdk2400_config	:	unconfig
 smdk2410_config	:	unconfig
 	@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

+suen3_config \
+suen3_p1a_config \
+suen3_p1b_p1c_config: unconfig
+	@$(MKCONFIG) $(@:_config=) arm arm926ejs km_arm keymile kirkwood
+
 SX1_stdout_serial_config \
 SX1_config:		unconfig
 	@mkdir -p $(obj)include
diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index ec27bda..33857c7 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -35,6 +35,7 @@
 #include <libfdt.h>
 #endif

+#include "../common/common.h"
 #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
 #include <i2c.h>

@@ -395,7 +396,12 @@ static void setports (int gpio)
 #endif
 #endif

-#if defined(CONFIG_KM8XX)
+#if (defined(CONFIG_MACH_SUEN3) && defined(CONFIG_HARD_I2C))
+#error I2C bus resetsequence not implemented yet.
+#endif
+
+#if defined(CONFIG_KM8XX) || \
+	(defined(CONFIG_MACH_SUEN3) && defined(CONFIG_SOFT_I2C))
 static void set_sda (int state)
 {
 	I2C_SDA(state);
@@ -411,6 +417,12 @@ static int get_sda (void)
 	return I2C_READ;
 }

+#if defined(CONFIG_MACH_SUEN3)
+static int get_scl (void)
+{
+	return (kw_gpio_get_value(SUEN3_SCL_PIN) ? 1 : 0);
+}
+#else
 static int get_scl (void)
 {
 	int	val;
@@ -421,10 +433,11 @@ static int get_scl (void)

 	return ((val & SCL_BIT) == SCL_BIT);
 }
+#endif

 #endif

-#if !defined(CONFIG_KMETER1)
+#if !defined(CONFIG_KMETER1) && !defined(CONFIG_SUVD3)
 static void writeStartSeq (void)
 {
 	set_sda (1);
@@ -483,7 +496,7 @@ static int i2c_make_abort (void)
  */
 void i2c_init_board(void)
 {
-#if defined(CONFIG_KMETER1)
+#if defined(CONFIG_KMETER1) || defined(CONFIG_SUVD3)
 	struct fsl_i2c *dev;
 	dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_I2C_OFFSET);
 	uchar	dummy;
@@ -500,7 +513,7 @@ void i2c_init_board(void)
 	out_8 (&dev->cr, (I2C_CR_MEN));

 #else
-#if defined(CONFIG_HARD_I2C)
+#if defined(CONFIG_HARD_I2C) && !defined(CONFIG_MACH_SUEN3)
 	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ;
 	volatile i2c8260_t *i2c	= (i2c8260_t *)&immap->im_i2c;

@@ -578,10 +591,12 @@ int fdt_get_node_and_value (void *blob,
 }
 #endif

+#if !defined(CONFIG_MACH_SUEN3)
 int ethernet_present (void)
 {
 	return (in_8((u8 *)CONFIG_SYS_PIGGY_BASE + CONFIG_SYS_SLOT_ID_OFF) & 0x80);
 }
+#endif

 int board_eth_init (bd_t *bis)
 {
diff --git a/board/keymile/km_arm/Makefile b/board/keymile/km_arm/Makefile
new file mode 100644
index 0000000..fffc6a3
--- /dev/null
+++ b/board/keymile/km_arm/Makefile
@@ -0,0 +1,51 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# 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	:= $(BOARD).o ../common/common.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/keymile/km_arm/config.mk b/board/keymile/km_arm/config.mk
new file mode 100644
index 0000000..fe7b0ef
--- /dev/null
+++ b/board/keymile/km_arm/config.mk
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# 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 = 0x004000000
diff --git a/board/keymile/km_arm/km_arm.c b/board/keymile/km_arm/km_arm.c
new file mode 100644
index 0000000..f3ebbed
--- /dev/null
+++ b/board/keymile/km_arm/km_arm.c
@@ -0,0 +1,345 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <nand.h>
+#include <netdev.h>
+#include <miiphy.h>
+#include <asm/arch/kirkwood.h>
+#include <asm/arch/mpp.h>
+
+#include "../common/common.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int	io_dev;
+extern I2C_MUX_DEVICE *i2c_mux_ident_muxstring (uchar *buf);
+
+/* 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_PEX_RST_OUTn,
+#if defined(CONFIG_KIRKWOOD_GPIO)
+	MPP8_GPIO,	/* SDA */
+	MPP9_GPIO,	/* SCL */
+#else
+	MPP8_TW_SDA,
+	MPP9_TW_SCK,
+#endif
+	MPP10_UART0_TXD,
+	MPP11_UART0_RXD,
+	MPP12_GPO,		/* Reserved */
+	MPP13_UART1_TXD,
+	MPP14_UART1_RXD,
+	MPP15_GPIO,		/* Not used */
+	MPP16_GPIO,		/* Not used */
+	MPP17_GPIO,		/* Reserved */
+	MPP18_NF_IO0,
+	MPP19_NF_IO1,
+	MPP20_GPIO,
+	MPP21_GPIO,
+	MPP22_GPIO,
+	MPP23_GPIO,
+	MPP24_GPIO,
+	MPP25_GPIO,
+	MPP26_GPIO,
+	MPP27_GPIO,
+	MPP28_GPIO,
+	MPP29_GPIO,
+	MPP30_GPIO,
+	MPP31_GPIO,
+	MPP32_GPIO,
+	MPP33_GPIO,
+	MPP34_GPIO,		/* CDL1 (input) */
+	MPP35_GPIO,		/* CDL2 (input) */
+	MPP36_GPIO,		/* MAIN_IRQ (input) */
+	MPP37_GPIO,		/* BOARD_LED */
+	MPP38_GPIO,		/* Piggy3 LED[1] */
+	MPP39_GPIO,		/* Piggy3 LED[2] */
+	MPP40_GPIO,		/* Piggy3 LED[3] */
+	MPP41_GPIO,		/* Piggy3 LED[4] */
+	MPP42_GPIO,		/* Piggy3 LED[5] */
+	MPP43_GPIO,		/* Piggy3 LED[6] */
+	MPP44_GPIO,		/* Piggy3 LED[7] */
+	MPP45_GPIO,		/* Piggy3 LED[8] */
+	MPP46_GPIO,		/* Reserved */
+	MPP47_GPIO,		/* Reserved */
+	MPP48_GPIO,		/* Reserved */
+	MPP49_GPIO,		/* SW_INTOUTn */
+	0
+};
+
+int ethernet_present(void)
+{
+	uchar	buf;
+	int	ret = 0;
+
+#if defined(CONFIG_SUEN_P1A)
+	int     oldbusnum = i2c_get_bus_num();
+
+	i2c_set_bus_num(io_dev);
+	if (i2c_read(0x74, 0, 1, &buf, 1) != 0) {
+		printf ("%s: Error reading EEprom\n", __FUNCTION__);
+		i2c_set_bus_num(oldbusnum);
+		return -1;
+	}
+	if ((buf & 0x80) == 0x80) {
+		ret = 1;
+	}
+	i2c_set_bus_num(oldbusnum);
+#else
+	if (i2c_read(0x10, 2, 1, &buf, 1) != 0) {
+		printf ("%s: Error reading Boco\n", __FUNCTION__);
+		return -1;
+	}
+	if ((buf & 0x40) == 0x40) {
+		ret = 1;
+	}
+#endif
+	return ret;
+}
+
+int misc_init_r(void)
+{
+	I2C_MUX_DEVICE	*i2cdev;
+	char *str;
+	int mach_type;
+
+	/* add I2C Bus for I/O Expander */
+	i2cdev = i2c_mux_ident_muxstring((uchar *)"pca9554a:70:a");
+	io_dev = i2cdev->busid;
+	puts("Piggy:");
+	if (ethernet_present() == 0)
+		puts (" not");
+	puts(" present\n");
+
+	str = getenv("mach_type");
+	if (str != NULL) {
+		mach_type = simple_strtoul(str, NULL, 10);
+		printf("Overwriting MACH_TYPE with %d!!!\n", mach_type);
+		gd->bd->bi_arch_number = mach_type;
+	}
+	return 0;
+}
+
+int board_init(void)
+{
+	u32 tmp;
+
+	kirkwood_mpp_conf(kwmpp_config);
+
+	tmp = readl(KW_GPIO0_BASE);
+	writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
+	tmp = readl(KW_GPIO0_BASE+4);
+	writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE+4);
+	printf("KM: setting NAND mode\n");
+
+	/*
+	 * arch number of board
+	 */
+	gd->bd->bi_arch_number = MACH_TYPE_SUEN3;
+
+	/* address of boot parameters */
+	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
+
+#if defined(CONFIG_KIRKWOOD_GPIO)
+	/* init the GPIO for I2C Bitbang driver */
+	kw_gpio_set_valid(SUEN3_SDA_PIN, 1);
+	kw_gpio_set_valid(SUEN3_SCL_PIN, 1);
+	kw_gpio_direction_output(SUEN3_SDA_PIN, 0);
+	kw_gpio_direction_output(SUEN3_SCL_PIN, 0);
+#endif
+	return 0;
+}
+
+#if defined(CONFIG_CMD_SF)
+int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	u32 tmp;
+	if (argc < 2) {
+		cmd_usage(cmdtp);
+		return 1;
+	}
+
+	if ((strcmp(argv[1], "on") != 0) &&
+	    (strcmp(argv[1], "off") != 0)) {
+		cmd_usage(cmdtp);
+		return 1;
+	}
+
+	if ((strcmp(argv[1], "off") == 0)) {
+		printf("SPI FLASH disabled, NAND enabled\n");
+		/* Multi-Purpose Pins Functionality configuration */
+		kwmpp_config[0] = MPP0_NF_IO2;
+		kwmpp_config[1] = MPP1_NF_IO3;
+		kwmpp_config[2] = MPP2_NF_IO4;
+		kwmpp_config[3] = MPP3_NF_IO5;
+
+		kirkwood_mpp_conf(kwmpp_config);
+		tmp = readl(KW_GPIO0_BASE);
+		writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
+
+		nand_init();
+	} else {
+		printf("SPI FLASH enabled, NAND disabled\n");
+		/* Multi-Purpose Pins Functionality configuration */
+		kwmpp_config[0] = MPP0_SPI_SCn;
+		kwmpp_config[1] = MPP1_SPI_MOSI;
+		kwmpp_config[2] = MPP2_SPI_SCK;
+		kwmpp_config[3] = MPP3_SPI_MISO;
+
+		kirkwood_mpp_conf(kwmpp_config);
+		tmp = readl(KW_GPIO0_BASE);
+		writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
+
+		nand_init();
+	}
+
+	return 0;
+}
+
+U_BOOT_CMD(
+	spitoggle,	2,	0,	do_spi_toggle,
+	"En-/disable SPI FLASH access",
+	"<on|off> - Enable (on) or disable (off) SPI FLASH access\n"
+	);
+#endif
+
+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 = get_ram_size((long *)kw_sdram_bar(i),
+						       kw_sdram_bs(i));
+	}
+	return 0;
+}
+
+/* Configure and enable MV88E1118 PHY */
+void reset_phy(void)
+{
+	char *name = "egiga0";
+
+	if (miiphy_set_current_dev(name))
+		return;
+
+	/* reset the phy */
+	miiphy_reset(name, CONFIG_PHY_BASE_ADR);
+}
+
+#if defined(CONFIG_HUSH_INIT_VAR)
+int hush_init_var (void)
+{
+	ivm_read_eeprom ();
+	return 0;
+}
+#endif
+
+#if defined(CONFIG_BOOTCOUNT_LIMIT)
+void bootcount_store (ulong a)
+{
+	volatile ulong *save_addr;
+	volatile ulong size = 0;
+	int i;
+	for (i=0; i<CONFIG_NR_DRAM_BANKS; i++) {
+		size += gd->bd->bi_dram[i].size;
+	}
+	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
+	save_addr[0] = a;
+	save_addr[1] = BOOTCOUNT_MAGIC;
+}
+
+ulong bootcount_load (void)
+{
+	volatile ulong *save_addr;
+	volatile ulong size = 0;
+	int i;
+	for (i=0; i<CONFIG_NR_DRAM_BANKS; i++) {
+		size += gd->bd->bi_dram[i].size;
+	}
+	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
+	if (save_addr[1] != BOOTCOUNT_MAGIC)
+		return 0;
+	else
+		return save_addr[0];
+}
+#endif
+
+#if defined(CONFIG_SYS_EEPROM_WREN)
+#define BOCOADDR	0x10
+#define DIRECT		0x04
+#define DIRECTMASK	0x04
+#define GPRT		0x08
+#define GPRTMASK	0x04
+int eeprom_reg_value (unsigned dev_addr, uchar reg, uchar reg_mask, int value)
+{
+	uchar buf;
+	if (i2c_read (dev_addr, reg, 1, &buf, 1) != 0)
+		return 1;
+	if (value)
+		buf |= reg_mask;
+	else
+		buf &= ~reg_mask;
+	if (i2c_write (dev_addr, reg, 1, &buf, 1) != 0)
+		return 1;
+	return 0;
+}
+
+int eeprom_write_enable (unsigned dev_addr, int state)
+{
+	uchar direction = state;
+	uchar gpio_value = !state;
+	uchar addr = BOCOADDR;
+	uchar direct = DIRECT;
+	uchar direct_mask = DIRECTMASK;
+	uchar gprt = GPRT;
+	uchar gprt_mask = GPRTMASK;
+
+	/* state 0: transition from write enabled to write disable */
+	/* state 1: transition from write disabled to write enable */
+
+	if (!state && eeprom_reg_value (addr, gprt, gprt_mask, gpio_value))
+		return 1;
+
+	if (eeprom_reg_value (addr, direct, direct_mask, direction))
+		return 1;
+
+	if (state && eeprom_reg_value (addr, gprt, gprt_mask, gpio_value))
+		return 1;
+
+	return 0;
+}
+#endif
diff --git a/board/keymile/km_arm/sdramregs.txt b/board/keymile/km_arm/sdramregs.txt
new file mode 100644
index 0000000..68c53a7
--- /dev/null
+++ b/board/keymile/km_arm/sdramregs.txt
@@ -0,0 +1,31 @@
+0xFFD10000 0x01112222
+0xFFD10008 0x00001100
+0xFFD100E0 0x1B1B1B1B
+0xFFD20134 0xFFFFFFFF
+0xFFD20138 0x009FFFFF
+0xFFD20154 0x00000000
+0xFFD2014C 0x00000000
+0xFFD20148 0x00000001
+0xFFD01400 0x43000400
+0xFFD01404 0x3a543000
+0xFFD01408 0x34136552
+0xFFD0140C 0x00000033
+0xFFD01410 0x0000000D
+0xFFD01414 0x00000000
+0xFFD01418 0x00000000
+0xFFD0141C 0x00000652
+0xFFD01420 0x00000044
+0xFFD01424 0x0000F07F
+0xFFD01428 0x00074510
+0xFFD0147c 0x00007451
+0xFFD01504 0x07FFFFF1
+0xFFD01508 0x00000000
+0xFFD0150C 0x00000000
+0xFFD01514 0x00000000
+0xFFD0151C 0x00000000
+0xFFD01494 0x00010001
+0xFFD01498 0x00000000
+0xFFD0149C 0x0000fc11
+0xFFD01480 0x00000001
+0x0 0x0
+
diff --git a/board/keymile/km_arm/sdramregs_v1.txt b/board/keymile/km_arm/sdramregs_v1.txt
new file mode 100644
index 0000000..6778a9b
--- /dev/null
+++ b/board/keymile/km_arm/sdramregs_v1.txt
@@ -0,0 +1,28 @@
+0xFFD10000 0x01111111
+0xFFD10008 0x00001100
+0xFFD100E0 0x1B1B1B1B
+0xFFD20134 0xBBBBBBBB
+0xFFD20138 0x00BBBBBB
+0xFFD20154 0x00000200
+0xFFD2014C 0x00001C00
+0xFFD20148 0x00000001
+0xFFD01400 0x43000400
+0xFFD01404 0x36343000
+0xFFD01408 0x2302544B
+0xFFD0140C 0x00000032
+0xFFD01410 0x0000000D
+0xFFD01414 0x00000000
+0xFFD01418 0x00000000
+0xFFD0141C 0x00000642
+0xFFD01420 0x00000040
+0xFFD01424 0x0000F07F
+0xFFD01504 0x07FFFFF1
+0xFFD01508 0x00000000
+0xFFD0150C 0x00000000
+0xFFD01514 0x00000000
+0xFFD0151C 0x00000000
+0xFFD01494 0x00000000
+0xFFD01498 0x00000000
+0xFFD0149C 0x0000E90F
+0xFFD01480 0x00000001
+0x0 0x0
diff --git a/include/configs/km-arm.h b/include/configs/km-arm.h
new file mode 100644
index 0000000..78b7041
--- /dev/null
+++ b/include/configs/km-arm.h
@@ -0,0 +1,189 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/* for linking errors see http://lists.denx.de/pipermail/u-boot/2009-July/057350.html */
+
+#ifndef _CONFIG_KM_ARM_H
+#define _CONFIG_KM_ARM_H
+
+/*
+ * High Level Configuration Options (easy to change)
+ */
+#define CONFIG_MARVELL
+#define CONFIG_ARM926EJS		/* Basic Architecture */
+#define CONFIG_FEROCEON_88FR131		/* CPU Core subversion */
+#define CONFIG_KIRKWOOD			/* SOC Family Name */
+#define CONFIG_KW88F6281		/* SOC Name */
+#define CONFIG_MACH_SUEN3		/* Machine type */
+
+/* include common defines/options for all Keymile boards */
+#include "keymile-common.h"
+
+#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 */
+#undef  CONFIG_KIRKWOOD_PCIE_INIT	/* Disable PCIE Port0 for kernel */
+#define CONFIG_KIRKWOOD_RGMII_PAD_1V8	/* Set RGMII Pad voltage to 1.8V */
+
+#define CONFIG_MISC_INIT_R
+
+/*
+ * 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 */
+
+/*
+ * 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_BOOTMAPSZ	(8 << 20)	/* Initial Memmap for Linux */
+#define CONFIG_CMDLINE_TAG		/* enable passing of ATAGs  */
+#define CONFIG_INITRD_TAG		/* enable INITRD tag */
+#define CONFIG_SETUP_MEMORY_TAGS 	/* enable memory tag */
+
+/*
+ * Commands configuration
+ */
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NFS
+
+/*
+ * Without NOR FLASH we need this
+ */
+#define CONFIG_SYS_NO_FLASH
+#undef CONFIG_CMD_FLASH
+#undef CONFIG_CMD_IMLS
+
+/*
+ * NAND Flash configuration
+ */
+#define CONFIG_SYS_MAX_NAND_DEVICE	1
+#define NAND_MAX_CHIPS			1
+#define CONFIG_NAND_KIRKWOOD
+#define CONFIG_SYS_NAND_BASE		0xd8000000
+
+#define BOOTFLASH_START		0x0
+
+#define CONFIG_KM_CONSOLE_TTY	"ttyS0"
+
+/* 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_RESET_ADDRESS 0xffff0000	/* Rst Vector Adr */
+
+/*
+ * Ethernet Driver configuration
+ */
+#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_SYS_FAULT_ECHO_LINK_DOWN	/* detect link using phy */
+#define CONFIG_KIRKWOOD_EGIGA_PORTS	{1,0}	/* enable port 0 only */
+#define CONFIG_PHY_BASE_ADR	0
+#define CONFIG_ENV_OVERWRITE	/* ethaddr can be reprogrammed */
+#define CONFIG_RESET_PHY_R	/* use reset_phy() to init 88E1118 PHY */
+
+/*
+ * UBI related stuff
+ */
+#define CONFIG_SYS_USE_UBI
+
+/*
+ * I2C related stuff
+ */
+#undef	CONFIG_HARD_I2C		/* I2C with hardware support */
+#define	CONFIG_SOFT_I2C		/* I2C bit-banged	*/
+
+#if defined(CONFIG_HARD_I2C)
+#define	CONFIG_I2C_KIRKWOOD
+#define	CONFIG_I2C_KW_REG_BASE		KW_TWSI_BASE
+#define	CONFIG_SYS_I2C_SLAVE		0x0
+#define	CONFIG_SYS_I2C_SPEED		100000
+#endif
+
+#if defined(CONFIG_SOFT_I2C)
+#define	CONFIG_KIRKWOOD_GPIO		/* Enable GPIO Support */
+#ifndef __ASSEMBLY__
+#include <asm/arch-kirkwood/gpio.h>
+extern void __set_direction(unsigned pin, int high);
+#define SUEN3_SDA_PIN	8
+#define SUEN3_SCL_PIN	9
+
+#define I2C_ACTIVE	__set_direction(SUEN3_SDA_PIN, 0)
+#define I2C_TRISTATE	__set_direction(SUEN3_SDA_PIN, 1)
+#define I2C_READ	(kw_gpio_get_value(SUEN3_SDA_PIN) ? 1 : 0)
+#define I2C_SDA(bit)	kw_gpio_set_value(SUEN3_SDA_PIN, bit);
+#define I2C_SCL(bit)	kw_gpio_set_value(SUEN3_SCL_PIN, bit);
+#endif
+
+#define I2C_DELAY	udelay(3)	/* 1/4 I2C clock duration */
+#define I2C_SOFT_DECLARATIONS
+
+#define	CONFIG_SYS_I2C_SLAVE		0x0
+#define	CONFIG_SYS_I2C_SPEED		100000
+#endif
+
+#define CONFIG_SYS_I2C_EEPROM_ADDR	0x50
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN	2
+
+#undef	CONFIG_CMD_DTT
+
+/* address for the bootcount (taken from end of RAM) */
+#define BOOTCOUNT_ADDR          0x801000
+
+#if defined(CONFIG_SYS_NO_FLASH)
+#define CONFIG_KM_UBI_PARTITION_NAME   "ubi0"
+#undef	CONFIG_FLASH_CFI_MTD
+#undef	CONFIG_JFFS2_CMDLINE
+#endif
+
+#endif /* _CONFIG_KM_ARM_H */
diff --git a/include/configs/mgcoge2_arm_p1a.h b/include/configs/mgcoge2_arm_p1a.h
new file mode 100644
index 0000000..253688b
--- /dev/null
+++ b/include/configs/mgcoge2_arm_p1a.h
@@ -0,0 +1,96 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * for linking errors see
+ * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
+ */
+
+#ifndef _CONFIG_MGCOGE2_ARM_P1A_H
+#define _CONFIG_MGCOGE2_ARM_P1A_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile mgcoge2"
+
+#define CONFIG_HOSTNAME			mgcoge2
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM	/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x40 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9544a:70:8\0"
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4\0"		\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
diff --git a/include/configs/suen3.h b/include/configs/suen3.h
new file mode 100644
index 0000000..c7a86e9
--- /dev/null
+++ b/include/configs/suen3.h
@@ -0,0 +1,103 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * for linking errors see
+ * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
+ */
+
+#ifndef _CONFIG_SUEN3_H
+#define _CONFIG_SUEN3_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3"
+
+#define CONFIG_HOSTNAME			suen3
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM		/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x0 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9547:70:d\0"
+
+/* offset redund: (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) */
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+#define CONFIG_ENV_OFFSET_REDUND	0x2000 /* no bracets! */
+#define CONFIG_ENV_SIZE_REDUND		(CONFIG_ENV_SIZE)
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4 && "		\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET_REDUND) " 4\0"	\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
diff --git a/include/configs/suen3_p1a.h b/include/configs/suen3_p1a.h
new file mode 100644
index 0000000..21489a8
--- /dev/null
+++ b/include/configs/suen3_p1a.h
@@ -0,0 +1,82 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * for linking errors see
+ * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
+ */
+
+#ifndef _CONFIG_SUEN3_P1A_H
+#define _CONFIG_SUEN3_P1A_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+#define CONFIG_SUEN_P1A
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3 V1"
+
+#define CONFIG_HOSTNAME			suen3_v1
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_NAND		/* use NAND for environment vars */
+#define CONFIG_ENV_OFFSET		(512 << 10)	/* Offset to env */
+#define CONFIG_ENV_OFFSET_REDUND	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"512k(u-boot),"						\
+		"128k(env),"						\
+		"128k(envred),"						\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"nand erase " xstr(BOOTFLASH_START) " 0x60000 && "	\
+		"nand write ${u-boot_addr_r} " xstr(BOOTFLASH_START) " "\
+		"0x60000\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=nand erase 0x80000 0x40000\0"				\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_P1A_H */
diff --git a/include/configs/suen3_p1b_p1c.h b/include/configs/suen3_p1b_p1c.h
new file mode 100644
index 0000000..cd8bf01
--- /dev/null
+++ b/include/configs/suen3_p1b_p1c.h
@@ -0,0 +1,110 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * for linking errors see
+ * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
+ */
+
+#ifndef _CONFIG_SUEN3_H
+#define _CONFIG_SUEN3_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3"
+
+#define CONFIG_HOSTNAME			suen3
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM		/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x40 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9544a:70:8\0"
+
+#if 0
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+/* offset redund: (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) */
+#define CONFIG_ENV_OFFSET_REDUND	0x2000 /* no bracets! */
+#define CONFIG_ENV_SIZE_REDUND		(CONFIG_ENV_SIZE)
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4 && "		\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET_REDUND) " 4\0"	\
+
+#endif
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00008000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4\0"		\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
-- 
1.6.2.5


-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-27  7:31     ` [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support Heiko Schocher
@ 2010-01-27 13:50       ` Tom
  2010-01-27 14:43         ` Heiko Schocher
  2010-01-27 19:49       ` Wolfgang Denk
  2010-02-01  7:37       ` [U-Boot] [PATCH 2/2 v3] " Heiko Schocher
  2 siblings, 1 reply; 26+ messages in thread
From: Tom @ 2010-01-27 13:50 UTC (permalink / raw)
  To: u-boot

Heiko Schocher wrote:
> This patch adds support for the Keymile SUEN3 board variants which
> are based on the Marvell Kirkwood (88F6281) SoC. All variants
> uses common code stored in board/keymile/km_arm/km_arm.c
> 
> mgcoge2_arm_p1a board:
> This adds support for the ARM part of the mgcoge2. The suen3
> target was moved to the correct suen3 p1b version. There is a
> difference between the GPIO configuration between suen3 and mgcoge2.
> 
It seems like these are 2 different board.
If they are, please split this patch.
Tom

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-27 13:50       ` Tom
@ 2010-01-27 14:43         ` Heiko Schocher
  2010-01-28 13:54           ` Tom
  0 siblings, 1 reply; 26+ messages in thread
From: Heiko Schocher @ 2010-01-27 14:43 UTC (permalink / raw)
  To: u-boot

Hello Tom,

Tom wrote:
> Heiko Schocher wrote:
>> This patch adds support for the Keymile SUEN3 board variants which
>> are based on the Marvell Kirkwood (88F6281) SoC. All variants
>> uses common code stored in board/keymile/km_arm/km_arm.c
>>
>> mgcoge2_arm_p1a board:
>> This adds support for the ARM part of the mgcoge2. The suen3
>> target was moved to the correct suen3 p1b version. There is a
>> difference between the GPIO configuration between suen3 and mgcoge2.
>>
> It seems like these are 2 different board.
> If they are, please split this patch.

No, the mgcoge2_arm_p1a was just the first version of this Hardware,
and the second and subsequent versions are renamed in suen3_x ...

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash
  2010-01-27  7:30     ` [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash Heiko Schocher
@ 2010-01-27 19:28       ` Wolfgang Denk
  2010-01-28  7:30         ` Heiko Schocher
  0 siblings, 1 reply; 26+ messages in thread
From: Wolfgang Denk @ 2010-01-27 19:28 UTC (permalink / raw)
  To: u-boot

Dear Heiko Schocher,

In message <4B5FEB9E.3040908@denx.de> you wrote:
> [PATCH 1/2] cramfs: make cramfs usable without a NOR flash

I'm afraid I still don't understand how this is supposed to work.

Where would you store the cramfs on a system "without a NOR flash"?
Are we talking about - say - a NAND storage device then?

> @@ -119,7 +121,11 @@ int do_cramfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>  	dev.id = &id;
>  	part.dev = &dev;
>  	/* fake the address offset */
> +#if !defined(CONFIG_SYS_NO_FLASH)
>  	part.offset = addr - flash_info[id.num].start[0];
> +#else
> +	part.offset = addr;
> +#endif

I understand that we now can have the cramfs image either in NOR flash
_or_ in NAND.

What about systems that have both NOR _and_ NAND?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The first 90% of a project takes 90% of the time, the last 10%  takes
the other 90% of the time.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-27  7:31     ` [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support Heiko Schocher
  2010-01-27 13:50       ` Tom
@ 2010-01-27 19:49       ` Wolfgang Denk
  2010-02-01  7:37       ` [U-Boot] [PATCH 2/2 v3] " Heiko Schocher
  2 siblings, 0 replies; 26+ messages in thread
From: Wolfgang Denk @ 2010-01-27 19:49 UTC (permalink / raw)
  To: u-boot

Dear Heiko Schocher,

In message <4B5FEBBB.9000700@denx.de> you wrote:
> This patch adds support for the Keymile SUEN3 board variants which
> are based on the Marvell Kirkwood (88F6281) SoC. All variants
> uses common code stored in board/keymile/km_arm/km_arm.c
> 
> mgcoge2_arm_p1a board:
> This adds support for the ARM part of the mgcoge2. The suen3
> target was moved to the correct suen3 p1b version. There is a
> difference between the GPIO configuration between suen3 and mgcoge2.
...
> +#if defined(CONFIG_CMD_SF)
> +int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> +{
> +	u32 tmp;
> +	if (argc < 2) {
> +		cmd_usage(cmdtp);
> +		return 1;
> +	}
> +
> +	if ((strcmp(argv[1], "on") != 0) &&
> +	    (strcmp(argv[1], "off") != 0)) {
> +		cmd_usage(cmdtp);
> +		return 1;
> +	}

You can omit this code here...

> +	if ((strcmp(argv[1], "off") == 0)) {
> +		printf("SPI FLASH disabled, NAND enabled\n");
> +		/* Multi-Purpose Pins Functionality configuration */
> +		kwmpp_config[0] = MPP0_NF_IO2;
> +		kwmpp_config[1] = MPP1_NF_IO3;
> +		kwmpp_config[2] = MPP2_NF_IO4;
> +		kwmpp_config[3] = MPP3_NF_IO5;
> +
> +		kirkwood_mpp_conf(kwmpp_config);
> +		tmp = readl(KW_GPIO0_BASE);
> +		writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
> +
> +		nand_init();
> +	} else {

... by replacing this with a

	} else if (strcmp(argv[1], "off") != 0) {

> +		printf("SPI FLASH enabled, NAND disabled\n");
> +		/* Multi-Purpose Pins Functionality configuration */
> +		kwmpp_config[0] = MPP0_SPI_SCn;
> +		kwmpp_config[1] = MPP1_SPI_MOSI;
> +		kwmpp_config[2] = MPP2_SPI_SCK;
> +		kwmpp_config[3] = MPP3_SPI_MISO;
> +
> +		kirkwood_mpp_conf(kwmpp_config);
> +		tmp = readl(KW_GPIO0_BASE);
> +		writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
> +
> +		nand_init();
> +	}

and adding the "else" here.

...
> +#if defined(CONFIG_BOOTCOUNT_LIMIT)
> +void bootcount_store (ulong a)
> +{
> +	volatile ulong *save_addr;
> +	volatile ulong size = 0;
> +	int i;
> +	for (i=0; i<CONFIG_NR_DRAM_BANKS; i++) {
> +		size += gd->bd->bi_dram[i].size;
> +	}
> +	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
> +	save_addr[0] = a;
> +	save_addr[1] = BOOTCOUNT_MAGIC;

Please use proper I/O accessors instead of volatile pointers.

> +
> +ulong bootcount_load (void)
> +{
> +	volatile ulong *save_addr;
> +	volatile ulong size = 0;
> +	int i;
> +	for (i=0; i<CONFIG_NR_DRAM_BANKS; i++) {
> +		size += gd->bd->bi_dram[i].size;
> +	}
> +	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
> +	if (save_addr[1] != BOOTCOUNT_MAGIC)
> +		return 0;
> +	else
> +		return save_addr[0];
> +}
> +#endif

Ditto.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
'What shall we do?' said Twoflower.  'Panic?'  said  Rincewind  hope-
fully. He always held that panic was the best means of survival; back
in  the  olden days, his theory went, people faced with hungry sabre-
toothed tigers could be divided very simply in those who panicked and
those who stood there saying 'What a magnificent  brute!'  or  'Here,
pussy.'                      - Terry Pratchett, _The Light Fantastic_

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash
  2010-01-27 19:28       ` Wolfgang Denk
@ 2010-01-28  7:30         ` Heiko Schocher
  2010-01-28 10:15           ` Wolfgang Denk
  0 siblings, 1 reply; 26+ messages in thread
From: Heiko Schocher @ 2010-01-28  7:30 UTC (permalink / raw)
  To: u-boot

Hello Wolfgang,

Wolfgang Denk wrote:
> In message <4B5FEB9E.3040908@denx.de> you wrote:
>> [PATCH 1/2] cramfs: make cramfs usable without a NOR flash
> 
> I'm afraid I still don't understand how this is supposed to work.
> 
> Where would you store the cramfs on a system "without a NOR flash"?
> Are we talking about - say - a NAND storage device then?

The cramfs image is located in RAM (where it first was copied from
whenever), and then files are read from it with the "cramfsload"
command ...

>> @@ -119,7 +121,11 @@ int do_cramfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>>  	dev.id = &id;
>>  	part.dev = &dev;
>>  	/* fake the address offset */
>> +#if !defined(CONFIG_SYS_NO_FLASH)
>>  	part.offset = addr - flash_info[id.num].start[0];
>> +#else
>> +	part.offset = addr;
>> +#endif
> 
> I understand that we now can have the cramfs image either in NOR flash
> _or_ in NAND.

No, we can have it in ROM or in RAM.

> What about systems that have both NOR _and_ NAND?

Are there such systems, with cramfs support? Actual cramfs support
in mainline is only for NOR devices ...

But, I think, it should work to extract a file from a cramfs stored
on a NAND on such systems with the "cramfsload" command ... if not,
the cramfs image could be copied from NAND to RAM, and then it
works ...

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash
  2010-01-28  7:30         ` Heiko Schocher
@ 2010-01-28 10:15           ` Wolfgang Denk
  2010-01-28 11:02             ` Heiko Schocher
  0 siblings, 1 reply; 26+ messages in thread
From: Wolfgang Denk @ 2010-01-28 10:15 UTC (permalink / raw)
  To: u-boot

Dear Heiko Schocher,

In message <4B613D24.7060604@denx.de> you wrote:
> 
> The cramfs image is located in RAM (where it first was copied from
> whenever), and then files are read from it with the "cramfsload"
> command ...

OK.

> >> +#if !defined(CONFIG_SYS_NO_FLASH)
> >>  	part.offset = addr - flash_info[id.num].start[0];
> >> +#else
> >> +	part.offset = addr;
> >> +#endif
...
> No, we can have it in ROM or in RAM.

OK.

> > What about systems that have both NOR _and_ NAND?
> 
> Are there such systems, with cramfs support? Actual cramfs support
> in mainline is only for NOR devices ...

Yes, but I understand that you want to also support cramfs when not
stored in NOR.

With your code I can read files from a cramfs image stored in RAM
(when there is nor NOR flash), _or_ I can read it from NOR flash.
Right?

But what about reading from files a cramfs image stored in RAM  on  a
system  that  _has_  NOR flash? And being able to read files a cramfs
image stored in NOR as well? It seems your code cannot do this.


I understand that the suggested patch is an improvement over the
existing state (it adds the capability to read cramfs in RAM on
NOR-les systems), but I think this restriction ("on NOR-less
systems") should be lifted as well.

In other words: I think, the decision whether to use

	part.offset = addr - flash_info[id.num].start[0];
or
	part.offset = addr;

should be made at run time (based on the location of the image - in
NOR versus in RAM - have a look at how this is done in the "cp"
command), not at compile time.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
G's Third Law:             In spite of all evidence  to  the  contra-
ry,  the  entire  universe  is composed of only two basic substances:
magic and bullshit.
H's Dictum:                There is no magic ...

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash
  2010-01-28 10:15           ` Wolfgang Denk
@ 2010-01-28 11:02             ` Heiko Schocher
  0 siblings, 0 replies; 26+ messages in thread
From: Heiko Schocher @ 2010-01-28 11:02 UTC (permalink / raw)
  To: u-boot

Hello Wolfgang,

Wolfgang Denk wrote:
> In message <4B613D24.7060604@denx.de> you wrote:
[...]
>>> What about systems that have both NOR _and_ NAND?
>> Are there such systems, with cramfs support? Actual cramfs support
>> in mainline is only for NOR devices ...
> 
> Yes, but I understand that you want to also support cramfs when not
> stored in NOR.
> 
> With your code I can read files from a cramfs image stored in RAM
> (when there is nor NOR flash), _or_ I can read it from NOR flash.
> Right?

No. This should work also!

Accessing a cramfs through a nor, the "cramfs_load()" is used,
as in ./common/cmd_jffs2.c, and if reading a file which resists
in RAM "cramfsload" command is used for reading the file.

> But what about reading from files a cramfs image stored in RAM  on  a
> system  that  _has_  NOR flash? And being able to read files a cramfs
> image stored in NOR as well? It seems your code cannot do this.

in fs/cramfs/cramfs.c

#define PART_OFFSET(x)  (x->offset + flash_info[x->dev->id->num].start[0])

and in common/cmd_cramfs.c

part.offset = addr - flash_info[id.num].start[0];

so, flash_info[id.num].start[0] is not really used, if using
cramfsload, so it should be possible to load a file out
of a cramfs, wherever the cramfs resides ... Nevertheless,
flash_info_t is defined or not, also, using "cramfs_load()"
on a NOR flash works, because there is no change.

My Patch is only necessary, because, if a board have no NOR flash,
flash_info_t is not defined.

> I understand that the suggested patch is an improvement over the
> existing state (it adds the capability to read cramfs in RAM on
> NOR-les systems), but I think this restriction ("on NOR-less
> systems") should be lifted as well.
> 
> In other words: I think, the decision whether to use
> 
> 	part.offset = addr - flash_info[id.num].start[0];
> or
> 	part.offset = addr;
> 
> should be made at run time (based on the location of the image - in

but on a board without NOR flash, you have no flash_info_t
defined, which results in a compilerror.

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-27 14:43         ` Heiko Schocher
@ 2010-01-28 13:54           ` Tom
  0 siblings, 0 replies; 26+ messages in thread
From: Tom @ 2010-01-28 13:54 UTC (permalink / raw)
  To: u-boot

Heiko Schocher wrote:
> Hello Tom,
> 
> Tom wrote:
>> Heiko Schocher wrote:
>>> This patch adds support for the Keymile SUEN3 board variants which
>>> are based on the Marvell Kirkwood (88F6281) SoC. All variants
>>> uses common code stored in board/keymile/km_arm/km_arm.c
>>>
>>> mgcoge2_arm_p1a board:
>>> This adds support for the ARM part of the mgcoge2. The suen3
>>> target was moved to the correct suen3 p1b version. There is a
>>> difference between the GPIO configuration between suen3 and mgcoge2.
>>>
>> It seems like these are 2 different board.
>> If they are, please split this patch.
> 
> No, the mgcoge2_arm_p1a was just the first version of this Hardware,
> and the second and subsequent versions are renamed in suen3_x ...
> 
Ok.
Thanks
Tom

> bye
> Heiko

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-01-27  7:31     ` [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support Heiko Schocher
  2010-01-27 13:50       ` Tom
  2010-01-27 19:49       ` Wolfgang Denk
@ 2010-02-01  7:37       ` Heiko Schocher
  2010-02-02 18:07         ` Prafulla Wadaskar
  2 siblings, 1 reply; 26+ messages in thread
From: Heiko Schocher @ 2010-02-01  7:37 UTC (permalink / raw)
  To: u-boot

This patch adds support for the Keymile SUEN3 board variants which
are based on the Marvell Kirkwood (88F6281) SoC. All variants
uses common code stored in board/keymile/km_arm/km_arm.c

mgcoge2_arm_p1a board:
This adds support for the ARM part of the mgcoge2. The suen3
target was moved to the correct suen3 p1b version. There is a
difference between the GPIO configuration between suen3 and mgcoge2.

Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
Signed-off-by: Stefan Roese <sr@denx.de>
Signed-off-by: Heiko Schocher <hs@denx.de>
---
- changes since v1:
  added comments from Wolfgang Denk:
  get rid of flash_info_t define in board config
  (to get this working patch 1/2 is introduced/needed)
- changes since v2:
  added comments from Wolfgang Denk
  - rearranged if/else in do_spi_toggle()
  - added I/O accessor functions for bootcounter

 MAINTAINERS                           |    2 +
 MAKEALL                               |    4 +
 Makefile                              |    8 +
 board/keymile/common/common.c         |   23 ++-
 board/keymile/km_arm/Makefile         |   51 +++++
 board/keymile/km_arm/config.mk        |   25 +++
 board/keymile/km_arm/km_arm.c         |  343 +++++++++++++++++++++++++++++++++
 board/keymile/km_arm/sdramregs.txt    |   31 +++
 board/keymile/km_arm/sdramregs_v1.txt |   28 +++
 include/configs/km-arm.h              |  189 ++++++++++++++++++
 include/configs/mgcoge2_arm_p1a.h     |   96 +++++++++
 include/configs/suen3.h               |  103 ++++++++++
 include/configs/suen3_p1a.h           |   82 ++++++++
 include/configs/suen3_p1b_p1c.h       |  110 +++++++++++
 14 files changed, 1091 insertions(+), 4 deletions(-)
 create mode 100644 board/keymile/km_arm/Makefile
 create mode 100644 board/keymile/km_arm/config.mk
 create mode 100644 board/keymile/km_arm/km_arm.c
 create mode 100644 board/keymile/km_arm/sdramregs.txt
 create mode 100644 board/keymile/km_arm/sdramregs_v1.txt
 create mode 100644 include/configs/km-arm.h
 create mode 100644 include/configs/mgcoge2_arm_p1a.h
 create mode 100644 include/configs/suen3.h
 create mode 100644 include/configs/suen3_p1a.h
 create mode 100644 include/configs/suen3_p1b_p1c.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 9734b1d..6ca5a21 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -385,6 +385,8 @@ Stefan Roese <sr@denx.de>

 	P3M750		PPC750FX/GX/GL

+	suen3		ARM926EJS (Kirkwood SoC)
+
 Yusdi Santoso <yusdi_santoso@adaptec.com>

 	HIDDEN_DRAGON	MPC8241/MPC8245
diff --git a/MAKEALL b/MAKEALL
index ab1bb6f..17f277b 100755
--- a/MAKEALL
+++ b/MAKEALL
@@ -554,6 +554,7 @@ LIST_ARM9="			\
 	da830evm		\
 	imx27lite		\
 	lpd7a400		\
+	mgcoge2_arm_p1a		\
 	mv88f6281gtw_ge		\
 	mx1ads			\
 	mx1fs2			\
@@ -572,6 +573,9 @@ LIST_ARM9="			\
 	sheevaplug		\
 	smdk2400		\
 	smdk2410		\
+	suen3_p1a		\
+	suen3_p1b_p1c		\
+	suen3			\
 	trab			\
 	VCMA9			\
 	versatile		\
diff --git a/Makefile b/Makefile
index ed6156f..968d8a9 100644
--- a/Makefile
+++ b/Makefile
@@ -2934,6 +2934,9 @@ lpd7a400_config \
 lpd7a404_config:	unconfig
 	@$(MKCONFIG) $(@:_config=) arm lh7a40x lpd7a40x

+mgcoge2_arm_p1a_config: unconfig
+	@$(MKCONFIG) $(@:_config=) arm arm926ejs km_arm keymile kirkwood
+
 mv88f6281gtw_ge_config: unconfig
 	@$(MKCONFIG) $(@:_config=) arm arm926ejs $(@:_config=) Marvell kirkwood

@@ -3023,6 +3026,11 @@ smdk2400_config	:	unconfig
 smdk2410_config	:	unconfig
 	@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

+suen3_config \
+suen3_p1a_config \
+suen3_p1b_p1c_config: unconfig
+	@$(MKCONFIG) $(@:_config=) arm arm926ejs km_arm keymile kirkwood
+
 SX1_stdout_serial_config \
 SX1_config:		unconfig
 	@mkdir -p $(obj)include
diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index ec27bda..33857c7 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -35,6 +35,7 @@
 #include <libfdt.h>
 #endif

+#include "../common/common.h"
 #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
 #include <i2c.h>

@@ -395,7 +396,12 @@ static void setports (int gpio)
 #endif
 #endif

-#if defined(CONFIG_KM8XX)
+#if (defined(CONFIG_MACH_SUEN3) && defined(CONFIG_HARD_I2C))
+#error I2C bus resetsequence not implemented yet.
+#endif
+
+#if defined(CONFIG_KM8XX) || \
+	(defined(CONFIG_MACH_SUEN3) && defined(CONFIG_SOFT_I2C))
 static void set_sda (int state)
 {
 	I2C_SDA(state);
@@ -411,6 +417,12 @@ static int get_sda (void)
 	return I2C_READ;
 }

+#if defined(CONFIG_MACH_SUEN3)
+static int get_scl (void)
+{
+	return (kw_gpio_get_value(SUEN3_SCL_PIN) ? 1 : 0);
+}
+#else
 static int get_scl (void)
 {
 	int	val;
@@ -421,10 +433,11 @@ static int get_scl (void)

 	return ((val & SCL_BIT) == SCL_BIT);
 }
+#endif

 #endif

-#if !defined(CONFIG_KMETER1)
+#if !defined(CONFIG_KMETER1) && !defined(CONFIG_SUVD3)
 static void writeStartSeq (void)
 {
 	set_sda (1);
@@ -483,7 +496,7 @@ static int i2c_make_abort (void)
  */
 void i2c_init_board(void)
 {
-#if defined(CONFIG_KMETER1)
+#if defined(CONFIG_KMETER1) || defined(CONFIG_SUVD3)
 	struct fsl_i2c *dev;
 	dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_I2C_OFFSET);
 	uchar	dummy;
@@ -500,7 +513,7 @@ void i2c_init_board(void)
 	out_8 (&dev->cr, (I2C_CR_MEN));

 #else
-#if defined(CONFIG_HARD_I2C)
+#if defined(CONFIG_HARD_I2C) && !defined(CONFIG_MACH_SUEN3)
 	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ;
 	volatile i2c8260_t *i2c	= (i2c8260_t *)&immap->im_i2c;

@@ -578,10 +591,12 @@ int fdt_get_node_and_value (void *blob,
 }
 #endif

+#if !defined(CONFIG_MACH_SUEN3)
 int ethernet_present (void)
 {
 	return (in_8((u8 *)CONFIG_SYS_PIGGY_BASE + CONFIG_SYS_SLOT_ID_OFF) & 0x80);
 }
+#endif

 int board_eth_init (bd_t *bis)
 {
diff --git a/board/keymile/km_arm/Makefile b/board/keymile/km_arm/Makefile
new file mode 100644
index 0000000..fffc6a3
--- /dev/null
+++ b/board/keymile/km_arm/Makefile
@@ -0,0 +1,51 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# 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	:= $(BOARD).o ../common/common.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/keymile/km_arm/config.mk b/board/keymile/km_arm/config.mk
new file mode 100644
index 0000000..fe7b0ef
--- /dev/null
+++ b/board/keymile/km_arm/config.mk
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# 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 = 0x004000000
diff --git a/board/keymile/km_arm/km_arm.c b/board/keymile/km_arm/km_arm.c
new file mode 100644
index 0000000..0edf3b2
--- /dev/null
+++ b/board/keymile/km_arm/km_arm.c
@@ -0,0 +1,343 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <nand.h>
+#include <netdev.h>
+#include <miiphy.h>
+#include <asm/io.h>
+#include <asm/arch/kirkwood.h>
+#include <asm/arch/mpp.h>
+
+#include "../common/common.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int	io_dev;
+extern I2C_MUX_DEVICE *i2c_mux_ident_muxstring (uchar *buf);
+
+/* 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_PEX_RST_OUTn,
+#if defined(CONFIG_KIRKWOOD_GPIO)
+	MPP8_GPIO,	/* SDA */
+	MPP9_GPIO,	/* SCL */
+#else
+	MPP8_TW_SDA,
+	MPP9_TW_SCK,
+#endif
+	MPP10_UART0_TXD,
+	MPP11_UART0_RXD,
+	MPP12_GPO,		/* Reserved */
+	MPP13_UART1_TXD,
+	MPP14_UART1_RXD,
+	MPP15_GPIO,		/* Not used */
+	MPP16_GPIO,		/* Not used */
+	MPP17_GPIO,		/* Reserved */
+	MPP18_NF_IO0,
+	MPP19_NF_IO1,
+	MPP20_GPIO,
+	MPP21_GPIO,
+	MPP22_GPIO,
+	MPP23_GPIO,
+	MPP24_GPIO,
+	MPP25_GPIO,
+	MPP26_GPIO,
+	MPP27_GPIO,
+	MPP28_GPIO,
+	MPP29_GPIO,
+	MPP30_GPIO,
+	MPP31_GPIO,
+	MPP32_GPIO,
+	MPP33_GPIO,
+	MPP34_GPIO,		/* CDL1 (input) */
+	MPP35_GPIO,		/* CDL2 (input) */
+	MPP36_GPIO,		/* MAIN_IRQ (input) */
+	MPP37_GPIO,		/* BOARD_LED */
+	MPP38_GPIO,		/* Piggy3 LED[1] */
+	MPP39_GPIO,		/* Piggy3 LED[2] */
+	MPP40_GPIO,		/* Piggy3 LED[3] */
+	MPP41_GPIO,		/* Piggy3 LED[4] */
+	MPP42_GPIO,		/* Piggy3 LED[5] */
+	MPP43_GPIO,		/* Piggy3 LED[6] */
+	MPP44_GPIO,		/* Piggy3 LED[7] */
+	MPP45_GPIO,		/* Piggy3 LED[8] */
+	MPP46_GPIO,		/* Reserved */
+	MPP47_GPIO,		/* Reserved */
+	MPP48_GPIO,		/* Reserved */
+	MPP49_GPIO,		/* SW_INTOUTn */
+	0
+};
+
+int ethernet_present(void)
+{
+	uchar	buf;
+	int	ret = 0;
+
+#if defined(CONFIG_SUEN_P1A)
+	int     oldbusnum = i2c_get_bus_num();
+
+	i2c_set_bus_num(io_dev);
+	if (i2c_read(0x74, 0, 1, &buf, 1) != 0) {
+		printf ("%s: Error reading EEprom\n", __FUNCTION__);
+		i2c_set_bus_num(oldbusnum);
+		return -1;
+	}
+	if ((buf & 0x80) == 0x80) {
+		ret = 1;
+	}
+	i2c_set_bus_num(oldbusnum);
+#else
+	if (i2c_read(0x10, 2, 1, &buf, 1) != 0) {
+		printf ("%s: Error reading Boco\n", __FUNCTION__);
+		return -1;
+	}
+	if ((buf & 0x40) == 0x40) {
+		ret = 1;
+	}
+#endif
+	return ret;
+}
+
+int misc_init_r(void)
+{
+	I2C_MUX_DEVICE	*i2cdev;
+	char *str;
+	int mach_type;
+
+	/* add I2C Bus for I/O Expander */
+	i2cdev = i2c_mux_ident_muxstring((uchar *)"pca9554a:70:a");
+	io_dev = i2cdev->busid;
+	puts("Piggy:");
+	if (ethernet_present() == 0)
+		puts (" not");
+	puts(" present\n");
+
+	str = getenv("mach_type");
+	if (str != NULL) {
+		mach_type = simple_strtoul(str, NULL, 10);
+		printf("Overwriting MACH_TYPE with %d!!!\n", mach_type);
+		gd->bd->bi_arch_number = mach_type;
+	}
+	return 0;
+}
+
+int board_init(void)
+{
+	u32 tmp;
+
+	kirkwood_mpp_conf(kwmpp_config);
+
+	tmp = readl(KW_GPIO0_BASE);
+	writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
+	tmp = readl(KW_GPIO0_BASE + 4);
+	writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE + 4);
+	printf("KM: setting NAND mode\n");
+
+	/*
+	 * arch number of board
+	 */
+	gd->bd->bi_arch_number = MACH_TYPE_SUEN3;
+
+	/* address of boot parameters */
+	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
+
+#if defined(CONFIG_KIRKWOOD_GPIO)
+	/* init the GPIO for I2C Bitbang driver */
+	kw_gpio_set_valid(SUEN3_SDA_PIN, 1);
+	kw_gpio_set_valid(SUEN3_SCL_PIN, 1);
+	kw_gpio_direction_output(SUEN3_SDA_PIN, 0);
+	kw_gpio_direction_output(SUEN3_SCL_PIN, 0);
+#endif
+	return 0;
+}
+
+#if defined(CONFIG_CMD_SF)
+int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	u32 tmp;
+	if (argc < 2) {
+		cmd_usage(cmdtp);
+		return 1;
+	}
+
+	if ((strcmp(argv[1], "off") == 0)) {
+		printf("SPI FLASH disabled, NAND enabled\n");
+		/* Multi-Purpose Pins Functionality configuration */
+		kwmpp_config[0] = MPP0_NF_IO2;
+		kwmpp_config[1] = MPP1_NF_IO3;
+		kwmpp_config[2] = MPP2_NF_IO4;
+		kwmpp_config[3] = MPP3_NF_IO5;
+
+		kirkwood_mpp_conf(kwmpp_config);
+		tmp = readl(KW_GPIO0_BASE);
+		writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
+
+		nand_init();
+	} else if ((strcmp(argv[1], "on") == 0)) {
+		printf("SPI FLASH enabled, NAND disabled\n");
+		/* Multi-Purpose Pins Functionality configuration */
+		kwmpp_config[0] = MPP0_SPI_SCn;
+		kwmpp_config[1] = MPP1_SPI_MOSI;
+		kwmpp_config[2] = MPP2_SPI_SCK;
+		kwmpp_config[3] = MPP3_SPI_MISO;
+
+		kirkwood_mpp_conf(kwmpp_config);
+		tmp = readl(KW_GPIO0_BASE);
+		writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
+
+		nand_init();
+	} else {
+		cmd_usage(cmdtp);
+		return 1;
+	}
+
+	return 0;
+}
+
+U_BOOT_CMD(
+	spitoggle,	2,	0,	do_spi_toggle,
+	"En-/disable SPI FLASH access",
+	"<on|off> - Enable (on) or disable (off) SPI FLASH access\n"
+	);
+#endif
+
+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 = get_ram_size((long *)kw_sdram_bar(i),
+						       kw_sdram_bs(i));
+	}
+	return 0;
+}
+
+/* Configure and enable MV88E1118 PHY */
+void reset_phy(void)
+{
+	char *name = "egiga0";
+
+	if (miiphy_set_current_dev(name))
+		return;
+
+	/* reset the phy */
+	miiphy_reset(name, CONFIG_PHY_BASE_ADR);
+}
+
+#if defined(CONFIG_HUSH_INIT_VAR)
+int hush_init_var (void)
+{
+	ivm_read_eeprom ();
+	return 0;
+}
+#endif
+
+#if defined(CONFIG_BOOTCOUNT_LIMIT)
+void bootcount_store (ulong a)
+{
+	volatile ulong *save_addr;
+	volatile ulong size = 0;
+	int i;
+	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+		size += gd->bd->bi_dram[i].size;
+	}
+	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
+	writel(a, save_addr);
+	writel(BOOTCOUNT_MAGIC, &save_addr[1]);
+}
+
+ulong bootcount_load (void)
+{
+	volatile ulong *save_addr;
+	volatile ulong size = 0;
+	int i;
+	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+		size += gd->bd->bi_dram[i].size;
+	}
+	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
+	if (readl(&save_addr[1]) != BOOTCOUNT_MAGIC)
+		return 0;
+	else
+		return readl(save_addr);
+}
+#endif
+
+#if defined(CONFIG_SYS_EEPROM_WREN)
+#define BOCOADDR	0x10
+#define DIRECT		0x04
+#define DIRECTMASK	0x04
+#define GPRT		0x08
+#define GPRTMASK	0x04
+int eeprom_reg_value (unsigned dev_addr, uchar reg, uchar reg_mask, int value)
+{
+	uchar buf;
+	if (i2c_read (dev_addr, reg, 1, &buf, 1) != 0)
+		return 1;
+	if (value)
+		buf |= reg_mask;
+	else
+		buf &= ~reg_mask;
+	if (i2c_write (dev_addr, reg, 1, &buf, 1) != 0)
+		return 1;
+	return 0;
+}
+
+int eeprom_write_enable (unsigned dev_addr, int state)
+{
+	uchar direction = state;
+	uchar gpio_value = !state;
+	uchar addr = BOCOADDR;
+	uchar direct = DIRECT;
+	uchar direct_mask = DIRECTMASK;
+	uchar gprt = GPRT;
+	uchar gprt_mask = GPRTMASK;
+
+	/* state 0: transition from write enabled to write disable */
+	/* state 1: transition from write disabled to write enable */
+
+	if (!state && eeprom_reg_value (addr, gprt, gprt_mask, gpio_value))
+		return 1;
+
+	if (eeprom_reg_value (addr, direct, direct_mask, direction))
+		return 1;
+
+	if (state && eeprom_reg_value (addr, gprt, gprt_mask, gpio_value))
+		return 1;
+
+	return 0;
+}
+#endif
diff --git a/board/keymile/km_arm/sdramregs.txt b/board/keymile/km_arm/sdramregs.txt
new file mode 100644
index 0000000..68c53a7
--- /dev/null
+++ b/board/keymile/km_arm/sdramregs.txt
@@ -0,0 +1,31 @@
+0xFFD10000 0x01112222
+0xFFD10008 0x00001100
+0xFFD100E0 0x1B1B1B1B
+0xFFD20134 0xFFFFFFFF
+0xFFD20138 0x009FFFFF
+0xFFD20154 0x00000000
+0xFFD2014C 0x00000000
+0xFFD20148 0x00000001
+0xFFD01400 0x43000400
+0xFFD01404 0x3a543000
+0xFFD01408 0x34136552
+0xFFD0140C 0x00000033
+0xFFD01410 0x0000000D
+0xFFD01414 0x00000000
+0xFFD01418 0x00000000
+0xFFD0141C 0x00000652
+0xFFD01420 0x00000044
+0xFFD01424 0x0000F07F
+0xFFD01428 0x00074510
+0xFFD0147c 0x00007451
+0xFFD01504 0x07FFFFF1
+0xFFD01508 0x00000000
+0xFFD0150C 0x00000000
+0xFFD01514 0x00000000
+0xFFD0151C 0x00000000
+0xFFD01494 0x00010001
+0xFFD01498 0x00000000
+0xFFD0149C 0x0000fc11
+0xFFD01480 0x00000001
+0x0 0x0
+
diff --git a/board/keymile/km_arm/sdramregs_v1.txt b/board/keymile/km_arm/sdramregs_v1.txt
new file mode 100644
index 0000000..6778a9b
--- /dev/null
+++ b/board/keymile/km_arm/sdramregs_v1.txt
@@ -0,0 +1,28 @@
+0xFFD10000 0x01111111
+0xFFD10008 0x00001100
+0xFFD100E0 0x1B1B1B1B
+0xFFD20134 0xBBBBBBBB
+0xFFD20138 0x00BBBBBB
+0xFFD20154 0x00000200
+0xFFD2014C 0x00001C00
+0xFFD20148 0x00000001
+0xFFD01400 0x43000400
+0xFFD01404 0x36343000
+0xFFD01408 0x2302544B
+0xFFD0140C 0x00000032
+0xFFD01410 0x0000000D
+0xFFD01414 0x00000000
+0xFFD01418 0x00000000
+0xFFD0141C 0x00000642
+0xFFD01420 0x00000040
+0xFFD01424 0x0000F07F
+0xFFD01504 0x07FFFFF1
+0xFFD01508 0x00000000
+0xFFD0150C 0x00000000
+0xFFD01514 0x00000000
+0xFFD0151C 0x00000000
+0xFFD01494 0x00000000
+0xFFD01498 0x00000000
+0xFFD0149C 0x0000E90F
+0xFFD01480 0x00000001
+0x0 0x0
diff --git a/include/configs/km-arm.h b/include/configs/km-arm.h
new file mode 100644
index 0000000..78b7041
--- /dev/null
+++ b/include/configs/km-arm.h
@@ -0,0 +1,189 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/* for linking errors see http://lists.denx.de/pipermail/u-boot/2009-July/057350.html */
+
+#ifndef _CONFIG_KM_ARM_H
+#define _CONFIG_KM_ARM_H
+
+/*
+ * High Level Configuration Options (easy to change)
+ */
+#define CONFIG_MARVELL
+#define CONFIG_ARM926EJS		/* Basic Architecture */
+#define CONFIG_FEROCEON_88FR131		/* CPU Core subversion */
+#define CONFIG_KIRKWOOD			/* SOC Family Name */
+#define CONFIG_KW88F6281		/* SOC Name */
+#define CONFIG_MACH_SUEN3		/* Machine type */
+
+/* include common defines/options for all Keymile boards */
+#include "keymile-common.h"
+
+#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 */
+#undef  CONFIG_KIRKWOOD_PCIE_INIT	/* Disable PCIE Port0 for kernel */
+#define CONFIG_KIRKWOOD_RGMII_PAD_1V8	/* Set RGMII Pad voltage to 1.8V */
+
+#define CONFIG_MISC_INIT_R
+
+/*
+ * 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 */
+
+/*
+ * 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_BOOTMAPSZ	(8 << 20)	/* Initial Memmap for Linux */
+#define CONFIG_CMDLINE_TAG		/* enable passing of ATAGs  */
+#define CONFIG_INITRD_TAG		/* enable INITRD tag */
+#define CONFIG_SETUP_MEMORY_TAGS 	/* enable memory tag */
+
+/*
+ * Commands configuration
+ */
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NFS
+
+/*
+ * Without NOR FLASH we need this
+ */
+#define CONFIG_SYS_NO_FLASH
+#undef CONFIG_CMD_FLASH
+#undef CONFIG_CMD_IMLS
+
+/*
+ * NAND Flash configuration
+ */
+#define CONFIG_SYS_MAX_NAND_DEVICE	1
+#define NAND_MAX_CHIPS			1
+#define CONFIG_NAND_KIRKWOOD
+#define CONFIG_SYS_NAND_BASE		0xd8000000
+
+#define BOOTFLASH_START		0x0
+
+#define CONFIG_KM_CONSOLE_TTY	"ttyS0"
+
+/* 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_RESET_ADDRESS 0xffff0000	/* Rst Vector Adr */
+
+/*
+ * Ethernet Driver configuration
+ */
+#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_SYS_FAULT_ECHO_LINK_DOWN	/* detect link using phy */
+#define CONFIG_KIRKWOOD_EGIGA_PORTS	{1,0}	/* enable port 0 only */
+#define CONFIG_PHY_BASE_ADR	0
+#define CONFIG_ENV_OVERWRITE	/* ethaddr can be reprogrammed */
+#define CONFIG_RESET_PHY_R	/* use reset_phy() to init 88E1118 PHY */
+
+/*
+ * UBI related stuff
+ */
+#define CONFIG_SYS_USE_UBI
+
+/*
+ * I2C related stuff
+ */
+#undef	CONFIG_HARD_I2C		/* I2C with hardware support */
+#define	CONFIG_SOFT_I2C		/* I2C bit-banged	*/
+
+#if defined(CONFIG_HARD_I2C)
+#define	CONFIG_I2C_KIRKWOOD
+#define	CONFIG_I2C_KW_REG_BASE		KW_TWSI_BASE
+#define	CONFIG_SYS_I2C_SLAVE		0x0
+#define	CONFIG_SYS_I2C_SPEED		100000
+#endif
+
+#if defined(CONFIG_SOFT_I2C)
+#define	CONFIG_KIRKWOOD_GPIO		/* Enable GPIO Support */
+#ifndef __ASSEMBLY__
+#include <asm/arch-kirkwood/gpio.h>
+extern void __set_direction(unsigned pin, int high);
+#define SUEN3_SDA_PIN	8
+#define SUEN3_SCL_PIN	9
+
+#define I2C_ACTIVE	__set_direction(SUEN3_SDA_PIN, 0)
+#define I2C_TRISTATE	__set_direction(SUEN3_SDA_PIN, 1)
+#define I2C_READ	(kw_gpio_get_value(SUEN3_SDA_PIN) ? 1 : 0)
+#define I2C_SDA(bit)	kw_gpio_set_value(SUEN3_SDA_PIN, bit);
+#define I2C_SCL(bit)	kw_gpio_set_value(SUEN3_SCL_PIN, bit);
+#endif
+
+#define I2C_DELAY	udelay(3)	/* 1/4 I2C clock duration */
+#define I2C_SOFT_DECLARATIONS
+
+#define	CONFIG_SYS_I2C_SLAVE		0x0
+#define	CONFIG_SYS_I2C_SPEED		100000
+#endif
+
+#define CONFIG_SYS_I2C_EEPROM_ADDR	0x50
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN	2
+
+#undef	CONFIG_CMD_DTT
+
+/* address for the bootcount (taken from end of RAM) */
+#define BOOTCOUNT_ADDR          0x801000
+
+#if defined(CONFIG_SYS_NO_FLASH)
+#define CONFIG_KM_UBI_PARTITION_NAME   "ubi0"
+#undef	CONFIG_FLASH_CFI_MTD
+#undef	CONFIG_JFFS2_CMDLINE
+#endif
+
+#endif /* _CONFIG_KM_ARM_H */
diff --git a/include/configs/mgcoge2_arm_p1a.h b/include/configs/mgcoge2_arm_p1a.h
new file mode 100644
index 0000000..253688b
--- /dev/null
+++ b/include/configs/mgcoge2_arm_p1a.h
@@ -0,0 +1,96 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * for linking errors see
+ * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
+ */
+
+#ifndef _CONFIG_MGCOGE2_ARM_P1A_H
+#define _CONFIG_MGCOGE2_ARM_P1A_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile mgcoge2"
+
+#define CONFIG_HOSTNAME			mgcoge2
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM	/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x40 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9544a:70:8\0"
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4\0"		\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
diff --git a/include/configs/suen3.h b/include/configs/suen3.h
new file mode 100644
index 0000000..c7a86e9
--- /dev/null
+++ b/include/configs/suen3.h
@@ -0,0 +1,103 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * for linking errors see
+ * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
+ */
+
+#ifndef _CONFIG_SUEN3_H
+#define _CONFIG_SUEN3_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3"
+
+#define CONFIG_HOSTNAME			suen3
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM		/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x0 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9547:70:d\0"
+
+/* offset redund: (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) */
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+#define CONFIG_ENV_OFFSET_REDUND	0x2000 /* no bracets! */
+#define CONFIG_ENV_SIZE_REDUND		(CONFIG_ENV_SIZE)
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4 && "		\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET_REDUND) " 4\0"	\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
diff --git a/include/configs/suen3_p1a.h b/include/configs/suen3_p1a.h
new file mode 100644
index 0000000..21489a8
--- /dev/null
+++ b/include/configs/suen3_p1a.h
@@ -0,0 +1,82 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * for linking errors see
+ * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
+ */
+
+#ifndef _CONFIG_SUEN3_P1A_H
+#define _CONFIG_SUEN3_P1A_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+#define CONFIG_SUEN_P1A
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3 V1"
+
+#define CONFIG_HOSTNAME			suen3_v1
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_NAND		/* use NAND for environment vars */
+#define CONFIG_ENV_OFFSET		(512 << 10)	/* Offset to env */
+#define CONFIG_ENV_OFFSET_REDUND	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
+
+#define FLASH_GPIO_PIN			0x00010000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"512k(u-boot),"						\
+		"128k(env),"						\
+		"128k(envred),"						\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"nand erase " xstr(BOOTFLASH_START) " 0x60000 && "	\
+		"nand write ${u-boot_addr_r} " xstr(BOOTFLASH_START) " "\
+		"0x60000\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=nand erase 0x80000 0x40000\0"				\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_P1A_H */
diff --git a/include/configs/suen3_p1b_p1c.h b/include/configs/suen3_p1b_p1c.h
new file mode 100644
index 0000000..cd8bf01
--- /dev/null
+++ b/include/configs/suen3_p1b_p1c.h
@@ -0,0 +1,110 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2009
+ * Stefan Roese, DENX Software Engineering, sr at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+/*
+ * for linking errors see
+ * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
+ */
+
+#ifndef _CONFIG_SUEN3_H
+#define _CONFIG_SUEN3_H
+
+/* include common defines/options for all arm based Keymile boards */
+#include "km-arm.h"
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING	"\nKeymile SUEN3"
+
+#define CONFIG_HOSTNAME			suen3
+
+/*
+ *  Environment variables configurations
+ */
+#define CONFIG_ENV_IS_IN_EEPROM		/* use EEPROM for environment vars */
+#define CONFIG_SYS_DEF_EEPROM_ADDR	0x50
+#define CONFIG_ENV_EEPROM_IS_ON_I2C	1
+#define CONFIG_SYS_EEPROM_WREN		1
+#define CONFIG_ENV_OFFSET		0x40 /* no bracets! */
+#undef	CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE			(0x2000 - CONFIG_ENV_OFFSET)
+#define CONFIG_I2C_ENV_EEPROM_BUS	"pca9544a:70:8\0"
+
+#if 0
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+/* offset redund: (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) */
+#define CONFIG_ENV_OFFSET_REDUND	0x2000 /* no bracets! */
+#define CONFIG_ENV_SIZE_REDUND		(CONFIG_ENV_SIZE)
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4 && "		\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET_REDUND) " 4\0"	\
+
+#endif
+
+#define CONFIG_CMD_SF
+
+#define CONFIG_SPI_FLASH
+#define CONFIG_HARD_SPI
+#define CONFIG_KIRKWOOD_SPI
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_ENV_SPI_BUS		0
+#define CONFIG_ENV_SPI_CS		0
+#define CONFIG_ENV_SPI_MAX_HZ		50000000	/* 50Mhz */
+
+#define FLASH_GPIO_PIN			0x00008000
+
+#define MTDIDS_DEFAULT		"nand0=orion_nand"
+/* test-only: partitioning needs some tuning, this is just for tests */
+#define MTDPARTS_DEFAULT	"mtdparts="				\
+	"orion_nand:"							\
+		"-(" CONFIG_KM_UBI_PARTITION_NAME ")"
+
+#define	CONFIG_KM_DEF_ENV_UPDATE					\
+	"update="							\
+		"spi on;sf probe 0;sf erase 0 50000;"			\
+		"sf write ${u-boot_addr_r} 0 ${filesize};"		\
+		"spi off\0"
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS					\
+	CONFIG_KM_DEF_ENV						\
+	"memsize=0x8000000\0"						\
+	"newenv=setenv addr 0x100000 && "				\
+		"i2c dev 1; mw.b ${addr} 0 4 && "			\
+		"eeprom write " xstr(CONFIG_SYS_DEF_EEPROM_ADDR)	\
+		" ${addr} " xstr(CONFIG_ENV_OFFSET) " 4\0"		\
+	"rootpath=/opt/eldk/arm\0"					\
+	"EEprom_ivm=pca9544a:70:9\0"					\
+	""
+
+#endif /* _CONFIG_SUEN3_H */
-- 
1.6.2.5


-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-01  7:37       ` [U-Boot] [PATCH 2/2 v3] " Heiko Schocher
@ 2010-02-02 18:07         ` Prafulla Wadaskar
  2010-02-03  6:42           ` Wolfgang Denk
  2010-02-03 15:52           ` Heiko Schocher
  0 siblings, 2 replies; 26+ messages in thread
From: Prafulla Wadaskar @ 2010-02-02 18:07 UTC (permalink / raw)
  To: u-boot

Hi Heiko

First of all sorry for delayed feedback


> -----Original Message-----
> From: Heiko Schocher [mailto:hs at denx.de] 
> Sent: Monday, February 01, 2010 1:07 PM
> To: U-Boot user list
> Cc: Wolfgang Denk; Prafulla Wadaskar; Tom
> Subject: [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
> 
> This patch adds support for the Keymile SUEN3 board variants which
> are based on the Marvell Kirkwood (88F6281) SoC. All variants
> uses common code stored in board/keymile/km_arm/km_arm.c
> 
> mgcoge2_arm_p1a board:
> This adds support for the ARM part of the mgcoge2. The suen3
> target was moved to the correct suen3 p1b version. There is a
> difference between the GPIO configuration between suen3 and mgcoge2.
> 
> Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
> Signed-off-by: Stefan Roese <sr@denx.de>
> Signed-off-by: Heiko Schocher <hs@denx.de>
> ---
> - changes since v1:
>   added comments from Wolfgang Denk:
>   get rid of flash_info_t define in board config
>   (to get this working patch 1/2 is introduced/needed)
> - changes since v2:
>   added comments from Wolfgang Denk
>   - rearranged if/else in do_spi_toggle()
>   - added I/O accessor functions for bootcounter
> 
>  MAINTAINERS                           |    2 +
>  MAKEALL                               |    4 +
>  Makefile                              |    8 +
>  board/keymile/common/common.c         |   23 ++-
>  board/keymile/km_arm/Makefile         |   51 +++++
>  board/keymile/km_arm/config.mk        |   25 +++
>  board/keymile/km_arm/km_arm.c         |  343 
> +++++++++++++++++++++++++++++++++
>  board/keymile/km_arm/sdramregs.txt    |   31 +++
>  board/keymile/km_arm/sdramregs_v1.txt |   28 +++
>  include/configs/km-arm.h              |  189 ++++++++++++++++++

The associated board name and c file is named as kw_arm, pls sync on this
This file name should be km_arm.h

>  include/configs/mgcoge2_arm_p1a.h     |   96 +++++++++
>  include/configs/suen3.h               |  103 ++++++++++
>  include/configs/suen3_p1a.h           |   82 ++++++++
>  include/configs/suen3_p1b_p1c.h       |  110 +++++++++++
...snip...

the include/config files indicates that there are five board supports.
Please provide one patch for each board, may be first will be master one.

...snip...
> diff --git a/board/keymile/common/common.c 
> b/board/keymile/common/common.c
> index ec27bda..33857c7 100644
> --- a/board/keymile/common/common.c
> +++ b/board/keymile/common/common.c
> @@ -35,6 +35,7 @@
>  #include <libfdt.h>
>  #endif
> 
> +#include "../common/common.h"
>  #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
>  #include <i2c.h>
> 
> @@ -395,7 +396,12 @@ static void setports (int gpio)
>  #endif
>  #endif
> 
> -#if defined(CONFIG_KM8XX)
> +#if (defined(CONFIG_MACH_SUEN3) && defined(CONFIG_HARD_I2C))
> +#error I2C bus resetsequence not implemented yet.
> +#endif
> +
> +#if defined(CONFIG_KM8XX) || \
> +	(defined(CONFIG_MACH_SUEN3) && defined(CONFIG_SOFT_I2C))
>  static void set_sda (int state)
>  {
>  	I2C_SDA(state);
> @@ -411,6 +417,12 @@ static int get_sda (void)
>  	return I2C_READ;
>  }
> 
> +#if defined(CONFIG_MACH_SUEN3)
> +static int get_scl (void)
> +{
> +	return (kw_gpio_get_value(SUEN3_SCL_PIN) ? 1 : 0);
> +}
> +#else
>  static int get_scl (void)
>  {
>  	int	val;
> @@ -421,10 +433,11 @@ static int get_scl (void)
> 
>  	return ((val & SCL_BIT) == SCL_BIT);
>  }
> +#endif
> 
>  #endif
> 
> -#if !defined(CONFIG_KMETER1)
> +#if !defined(CONFIG_KMETER1) && !defined(CONFIG_SUVD3)
>  static void writeStartSeq (void)
>  {
>  	set_sda (1);
> @@ -483,7 +496,7 @@ static int i2c_make_abort (void)
>   */
>  void i2c_init_board(void)
>  {
> -#if defined(CONFIG_KMETER1)
> +#if defined(CONFIG_KMETER1) || defined(CONFIG_SUVD3)
>  	struct fsl_i2c *dev;
>  	dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + 
> CONFIG_SYS_I2C_OFFSET);
>  	uchar	dummy;
> @@ -500,7 +513,7 @@ void i2c_init_board(void)
>  	out_8 (&dev->cr, (I2C_CR_MEN));
> 
>  #else
> -#if defined(CONFIG_HARD_I2C)
> +#if defined(CONFIG_HARD_I2C) && !defined(CONFIG_MACH_SUEN3)
>  	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ;
>  	volatile i2c8260_t *i2c	= (i2c8260_t *)&immap->im_i2c;
> 
> @@ -578,10 +591,12 @@ int fdt_get_node_and_value (void *blob,
>  }
>  #endif
> 
> +#if !defined(CONFIG_MACH_SUEN3)
>  int ethernet_present (void)
>  {
>  	return (in_8((u8 *)CONFIG_SYS_PIGGY_BASE + 
> CONFIG_SYS_SLOT_ID_OFF) & 0x80);
>  }
> +#endif
> 

In general common file should have code common to all, but the patch for this file looks like the code is ifdefed for specific boards. You can keep such code in km_arm.c

>  int board_eth_init (bd_t *bis)
>  {
> diff --git a/board/keymile/km_arm/km_arm.c 
> b/board/keymile/km_arm/km_arm.c
> new file mode 100644
> index 0000000..0edf3b2
> --- /dev/null
> +++ b/board/keymile/km_arm/km_arm.c
> @@ -0,0 +1,343 @@
> +/*
> + * (C) Copyright 2009
> + * Marvell Semiconductor <www.marvell.com>
> + * Prafulla Wadaskar <prafulla@marvell.com>
> + *
> + * (C) Copyright 2009
> + * Stefan Roese, DENX Software Engineering, sr at denx.de.
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> + * MA 02110-1301 USA
> + */
...snip...

> +
> +	str = getenv("mach_type");
> +	if (str != NULL) {
> +		mach_type = simple_strtoul(str, NULL, 10);
> +		printf("Overwriting MACH_TYPE with %d!!!\n", mach_type);
> +		gd->bd->bi_arch_number = mach_type;
> +	}
> +	return 0;

Pls avoid this, the machine types should be predefined and registered first for the board support that you are adding.
Why do you need this in environment?.

> +}
> +
> +int board_init(void)
> +{
> +	u32 tmp;
> +
> +	kirkwood_mpp_conf(kwmpp_config);
> +
> +	tmp = readl(KW_GPIO0_BASE);
> +	writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
> +	tmp = readl(KW_GPIO0_BASE + 4);
> +	writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE + 4);
> +	printf("KM: setting NAND mode\n");

Any explaination about what you are doing above? Any comments will help.

> +
> +	/*
> +	 * arch number of board
> +	 */
> +	gd->bd->bi_arch_number = MACH_TYPE_SUEN3;
> +
> +	/* address of boot parameters */
> +	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
> +
> +#if defined(CONFIG_KIRKWOOD_GPIO)
> +	/* init the GPIO for I2C Bitbang driver */
> +	kw_gpio_set_valid(SUEN3_SDA_PIN, 1);
> +	kw_gpio_set_valid(SUEN3_SCL_PIN, 1);
> +	kw_gpio_direction_output(SUEN3_SDA_PIN, 0);
> +	kw_gpio_direction_output(SUEN3_SCL_PIN, 0);
> +#endif
> +	return 0;
> +}
> +
> +#if defined(CONFIG_CMD_SF)
> +int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> +{
> +	u32 tmp;
> +	if (argc < 2) {
> +		cmd_usage(cmdtp);
> +		return 1;
> +	}
> +
> +	if ((strcmp(argv[1], "off") == 0)) {
> +		printf("SPI FLASH disabled, NAND enabled\n");
> +		/* Multi-Purpose Pins Functionality configuration */
> +		kwmpp_config[0] = MPP0_NF_IO2;
> +		kwmpp_config[1] = MPP1_NF_IO3;
> +		kwmpp_config[2] = MPP2_NF_IO4;
> +		kwmpp_config[3] = MPP3_NF_IO5;
> +
> +		kirkwood_mpp_conf(kwmpp_config);
> +		tmp = readl(KW_GPIO0_BASE);
> +		writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
> +
> +		nand_init();
> +	} else if ((strcmp(argv[1], "on") == 0)) {
> +		printf("SPI FLASH enabled, NAND disabled\n");
> +		/* Multi-Purpose Pins Functionality configuration */
> +		kwmpp_config[0] = MPP0_SPI_SCn;
> +		kwmpp_config[1] = MPP1_SPI_MOSI;
> +		kwmpp_config[2] = MPP2_SPI_SCK;
> +		kwmpp_config[3] = MPP3_SPI_MISO;
> +
> +		kirkwood_mpp_conf(kwmpp_config);
> +		tmp = readl(KW_GPIO0_BASE);
> +		writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
> +
> +		nand_init();

What do you need nand_init for disabled nand operation?

> +	} else {
> +		cmd_usage(cmdtp);
> +		return 1;
> +	}
> +
> +	return 0;
> +}
> +
> +U_BOOT_CMD(
> +	spitoggle,	2,	0,	do_spi_toggle,
> +	"En-/disable SPI FLASH access",
> +	"<on|off> - Enable (on) or disable (off) SPI FLASH access\n"
> +	);
> +#endif
> +
> +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 = get_ram_size((long 
> *)kw_sdram_bar(i),
> +						       kw_sdram_bs(i));
> +	}
> +	return 0;
> +}
> +
> +/* Configure and enable MV88E1118 PHY */
> +void reset_phy(void)
> +{
> +	char *name = "egiga0";
> +
> +	if (miiphy_set_current_dev(name))
> +		return;
> +
> +	/* reset the phy */
> +	miiphy_reset(name, CONFIG_PHY_BASE_ADR);
> +}
> +
> +#if defined(CONFIG_HUSH_INIT_VAR)
> +int hush_init_var (void)
> +{
> +	ivm_read_eeprom ();
> +	return 0;
> +}
> +#endif
> +
> +#if defined(CONFIG_BOOTCOUNT_LIMIT)
> +void bootcount_store (ulong a)
> +{
> +	volatile ulong *save_addr;
> +	volatile ulong size = 0;
> +	int i;
> +	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
> +		size += gd->bd->bi_dram[i].size;
> +	}
> +	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
> +	writel(a, save_addr);
> +	writel(BOOTCOUNT_MAGIC, &save_addr[1]);
> +}
> +
> +ulong bootcount_load (void)
> +{
> +	volatile ulong *save_addr;
> +	volatile ulong size = 0;
> +	int i;
> +	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
> +		size += gd->bd->bi_dram[i].size;
> +	}
> +	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
> +	if (readl(&save_addr[1]) != BOOTCOUNT_MAGIC)
> +		return 0;
> +	else
> +		return readl(save_addr);
> +}
> +#endif
> +
> +#if defined(CONFIG_SYS_EEPROM_WREN)
> +#define BOCOADDR	0x10
> +#define DIRECT		0x04
> +#define DIRECTMASK	0x04
> +#define GPRT		0x08
> +#define GPRTMASK	0x04

Better if you provide defination on the top or in header file

> +int eeprom_reg_value (unsigned dev_addr, uchar reg, uchar 
> reg_mask, int value)
> +{
> +	uchar buf;
> +	if (i2c_read (dev_addr, reg, 1, &buf, 1) != 0)
> +		return 1;
> +	if (value)
> +		buf |= reg_mask;
> +	else
> +		buf &= ~reg_mask;
> +	if (i2c_write (dev_addr, reg, 1, &buf, 1) != 0)
> +		return 1;
> +	return 0;
> +}
> +

It would be nice if you can abstract eeprom related code to separate driver or use existing eeprom driver 
Any way keep it out side of board files, that can be shared by others too

> +int eeprom_write_enable (unsigned dev_addr, int state)
> +{
> +	uchar direction = state;
> +	uchar gpio_value = !state;
> +	uchar addr = BOCOADDR;
> +	uchar direct = DIRECT;
> +	uchar direct_mask = DIRECTMASK;
> +	uchar gprt = GPRT;
> +	uchar gprt_mask = GPRTMASK;
> +
> +	/* state 0: transition from write enabled to write disable */
> +	/* state 1: transition from write disabled to write enable */
> +
> +	if (!state && eeprom_reg_value (addr, gprt, gprt_mask, 
> gpio_value))
> +		return 1;
> +
> +	if (eeprom_reg_value (addr, direct, direct_mask, direction))
> +		return 1;
> +
> +	if (state && eeprom_reg_value (addr, gprt, gprt_mask, 
> gpio_value))
> +		return 1;
> +
> +	return 0;
> +}
> +#endif
> diff --git a/board/keymile/km_arm/sdramregs.txt 
> b/board/keymile/km_arm/sdramregs.txt
> new file mode 100644
> index 0000000..68c53a7
> --- /dev/null
> +++ b/board/keymile/km_arm/sdramregs.txt
> @@ -0,0 +1,31 @@

What is this file?
Which license?
Who is using it?

> +0xFFD10000 0x01112222
> +0xFFD10008 0x00001100
> +0xFFD100E0 0x1B1B1B1B
> +0xFFD20134 0xFFFFFFFF
> +0xFFD20138 0x009FFFFF
...snip..
> +0x0 0x0
> +
> diff --git a/board/keymile/km_arm/sdramregs_v1.txt 
> b/board/keymile/km_arm/sdramregs_v1.txt
> new file mode 100644
> index 0000000..6778a9b
> --- /dev/null
> +++ b/board/keymile/km_arm/sdramregs_v1.txt
> @@ -0,0 +1,28 @@

Ditto...

> +0xFFD10000 0x01111111
> +0xFFD10008 0x00001100
..snip...
> +0x0 0x0
...snip...

> diff --git a/include/configs/suen3_p1b_p1c.h 
> b/include/configs/suen3_p1b_p1c.h
> new file mode 100644
> index 0000000..cd8bf01
> --- /dev/null
> +++ b/include/configs/suen3_p1b_p1c.h
> @@ -0,0 +1,110 @@
> +/*
> + * (C) Copyright 2009
> + * Marvell Semiconductor <www.marvell.com>
> + * Prafulla Wadaskar <prafulla@marvell.com>
> + *
> + * (C) Copyright 2009
> + * Stefan Roese, DENX Software Engineering, sr at denx.de.
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> + * MA 02110-1301 USA
> + */
> +
> +/*
> + * for linking errors see
> + * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
> + */
> +
> +#ifndef _CONFIG_SUEN3_H
> +#define _CONFIG_SUEN3_H
> +
> +/* include common defines/options for all arm based Keymile boards */
> +#include "km-arm.h"

Further includes are not allowed in board config header.
May be Wolfgang can comment on this..

Regards..
Prafulla . .

> 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-02 18:07         ` Prafulla Wadaskar
@ 2010-02-03  6:42           ` Wolfgang Denk
  2010-02-03 15:52           ` Heiko Schocher
  1 sibling, 0 replies; 26+ messages in thread
From: Wolfgang Denk @ 2010-02-03  6:42 UTC (permalink / raw)
  To: u-boot

Dear Prafulla Wadaskar,

In message <73173D32E9439E4ABB5151606C3E19E2030A5663DB@SC-VEXCH1.marvell.com> you wrote:
> 
...
> > +/* include common defines/options for all arm based Keymile boards */
> > +#include "km-arm.h"
> 
> Further includes are not allowed in board config header.
> May be Wolfgang can comment on this..

I am not aware of any such restriction. We actually do this on many
boards - and we intend to use this more frequently to factor out
common definitions.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Q:  How many DEC repairman does it take to fix a flat?
A:  Five; four to hold the car up and one to swap tires.
Q:  How long does it take?
A:  It's indeterminate.  It will depend upon how many flats they've
    brought with them.
Q:  What happens if you've got TWO flats?
A:  They replace your generator.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-02 18:07         ` Prafulla Wadaskar
  2010-02-03  6:42           ` Wolfgang Denk
@ 2010-02-03 15:52           ` Heiko Schocher
  2010-02-03 16:53             ` Stefan Roese
                               ` (2 more replies)
  1 sibling, 3 replies; 26+ messages in thread
From: Heiko Schocher @ 2010-02-03 15:52 UTC (permalink / raw)
  To: u-boot

Hello Prafulla,

Prafulla Wadaskar wrote:
> First of all sorry for delayed feedback

No problem, thanks for reviewing!

>> -----Original Message-----
>> From: Heiko Schocher [mailto:hs at denx.de] 
>> Sent: Monday, February 01, 2010 1:07 PM
>> To: U-Boot user list
>> Cc: Wolfgang Denk; Prafulla Wadaskar; Tom
>> Subject: [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
>>
>> This patch adds support for the Keymile SUEN3 board variants which
>> are based on the Marvell Kirkwood (88F6281) SoC. All variants
>> uses common code stored in board/keymile/km_arm/km_arm.c
>>
>> mgcoge2_arm_p1a board:
>> This adds support for the ARM part of the mgcoge2. The suen3
>> target was moved to the correct suen3 p1b version. There is a
>> difference between the GPIO configuration between suen3 and mgcoge2.
>>
>> Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
>> Signed-off-by: Stefan Roese <sr@denx.de>
>> Signed-off-by: Heiko Schocher <hs@denx.de>
>> ---
>> - changes since v1:
>>   added comments from Wolfgang Denk:
>>   get rid of flash_info_t define in board config
>>   (to get this working patch 1/2 is introduced/needed)
>> - changes since v2:
>>   added comments from Wolfgang Denk
>>   - rearranged if/else in do_spi_toggle()
>>   - added I/O accessor functions for bootcounter
>>
>>  MAINTAINERS                           |    2 +
>>  MAKEALL                               |    4 +
>>  Makefile                              |    8 +
>>  board/keymile/common/common.c         |   23 ++-
>>  board/keymile/km_arm/Makefile         |   51 +++++
>>  board/keymile/km_arm/config.mk        |   25 +++
>>  board/keymile/km_arm/km_arm.c         |  343 
>> +++++++++++++++++++++++++++++++++
>>  board/keymile/km_arm/sdramregs.txt    |   31 +++
>>  board/keymile/km_arm/sdramregs_v1.txt |   28 +++
>>  include/configs/km-arm.h              |  189 ++++++++++++++++++
> 
> The associated board name and c file is named as kw_arm, pls sync on this
> This file name should be km_arm.h

Yep, you are right! I fix this.

>>  include/configs/mgcoge2_arm_p1a.h     |   96 +++++++++
>>  include/configs/suen3.h               |  103 ++++++++++
>>  include/configs/suen3_p1a.h           |   82 ++++++++
>>  include/configs/suen3_p1b_p1c.h       |  110 +++++++++++
> ...snip...
> 
> the include/config files indicates that there are five board supports.
> Please provide one patch for each board, may be first will be master one.

This question also asked Tom, see:

http://lists.denx.de/pipermail/u-boot/2010-January/067182.html

But if you prefer to split this in 5 patches, I can do it.

> ...snip...
>> diff --git a/board/keymile/common/common.c 
>> b/board/keymile/common/common.c
>> index ec27bda..33857c7 100644
>> --- a/board/keymile/common/common.c
>> +++ b/board/keymile/common/common.c
>> @@ -35,6 +35,7 @@
>>  #include <libfdt.h>
>>  #endif
>>
>> +#include "../common/common.h"
>>  #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
>>  #include <i2c.h>
>>
>> @@ -395,7 +396,12 @@ static void setports (int gpio)
>>  #endif
>>  #endif
>>
>> -#if defined(CONFIG_KM8XX)
>> +#if (defined(CONFIG_MACH_SUEN3) && defined(CONFIG_HARD_I2C))
>> +#error I2C bus resetsequence not implemented yet.
>> +#endif
>> +
>> +#if defined(CONFIG_KM8XX) || \
>> +	(defined(CONFIG_MACH_SUEN3) && defined(CONFIG_SOFT_I2C))
>>  static void set_sda (int state)
>>  {
>>  	I2C_SDA(state);
>> @@ -411,6 +417,12 @@ static int get_sda (void)
>>  	return I2C_READ;
>>  }
>>
>> +#if defined(CONFIG_MACH_SUEN3)
>> +static int get_scl (void)
>> +{
>> +	return (kw_gpio_get_value(SUEN3_SCL_PIN) ? 1 : 0);
>> +}
>> +#else
>>  static int get_scl (void)
>>  {
>>  	int	val;
>> @@ -421,10 +433,11 @@ static int get_scl (void)
>>
>>  	return ((val & SCL_BIT) == SCL_BIT);
>>  }
>> +#endif
>>
>>  #endif
>>
>> -#if !defined(CONFIG_KMETER1)
>> +#if !defined(CONFIG_KMETER1) && !defined(CONFIG_SUVD3)
>>  static void writeStartSeq (void)
>>  {
>>  	set_sda (1);
>> @@ -483,7 +496,7 @@ static int i2c_make_abort (void)
>>   */
>>  void i2c_init_board(void)
>>  {
>> -#if defined(CONFIG_KMETER1)
>> +#if defined(CONFIG_KMETER1) || defined(CONFIG_SUVD3)
>>  	struct fsl_i2c *dev;
>>  	dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + 
>> CONFIG_SYS_I2C_OFFSET);
>>  	uchar	dummy;
>> @@ -500,7 +513,7 @@ void i2c_init_board(void)
>>  	out_8 (&dev->cr, (I2C_CR_MEN));
>>
>>  #else
>> -#if defined(CONFIG_HARD_I2C)
>> +#if defined(CONFIG_HARD_I2C) && !defined(CONFIG_MACH_SUEN3)
>>  	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ;
>>  	volatile i2c8260_t *i2c	= (i2c8260_t *)&immap->im_i2c;
>>
>> @@ -578,10 +591,12 @@ int fdt_get_node_and_value (void *blob,
>>  }
>>  #endif
>>
>> +#if !defined(CONFIG_MACH_SUEN3)
>>  int ethernet_present (void)
>>  {
>>  	return (in_8((u8 *)CONFIG_SYS_PIGGY_BASE + 
>> CONFIG_SYS_SLOT_ID_OFF) & 0x80);
>>  }
>> +#endif
>>
> 
> In general common file should have code common to all, but the patch for this file looks like the code is ifdefed for specific boards. You can keep such code in km_arm.c

Hmm.. this is common code for all keymile boards,
but some architecture specific ifdefs are needed.

I try to factor out the architecture specific
code, and move it to km_arm.c.

>>  int board_eth_init (bd_t *bis)
>>  {
>> diff --git a/board/keymile/km_arm/km_arm.c 
>> b/board/keymile/km_arm/km_arm.c
>> new file mode 100644
>> index 0000000..0edf3b2
>> --- /dev/null
>> +++ b/board/keymile/km_arm/km_arm.c
>> @@ -0,0 +1,343 @@
>> +/*
>> + * (C) Copyright 2009
>> + * Marvell Semiconductor <www.marvell.com>
>> + * Prafulla Wadaskar <prafulla@marvell.com>
>> + *
>> + * (C) Copyright 2009
>> + * Stefan Roese, DENX Software Engineering, sr at denx.de.
>> + *
>> + * See file CREDITS for list of people who contributed to this
>> + * project.
>> + *
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License as
>> + * published by the Free Software Foundation; either version 2 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program; if not, write to the Free Software
>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
>> + * MA 02110-1301 USA
>> + */
> ...snip...
> 
>> +
>> +	str = getenv("mach_type");
>> +	if (str != NULL) {
>> +		mach_type = simple_strtoul(str, NULL, 10);
>> +		printf("Overwriting MACH_TYPE with %d!!!\n", mach_type);
>> +		gd->bd->bi_arch_number = mach_type;
>> +	}
>> +	return 0;
> 
> Pls avoid this, the machine types should be predefined and registered first for the board support that you are adding.
> Why do you need this in environment?.

Stefan, can you answer this?

>> +}
>> +
>> +int board_init(void)
>> +{
>> +	u32 tmp;
>> +
>> +	kirkwood_mpp_conf(kwmpp_config);
>> +
>> +	tmp = readl(KW_GPIO0_BASE);
>> +	writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
>> +	tmp = readl(KW_GPIO0_BASE + 4);
>> +	writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE + 4);
>> +	printf("KM: setting NAND mode\n");
> 
> Any explaination about what you are doing above? Any comments will help.

OK, I add some comment.

>> +
>> +	/*
>> +	 * arch number of board
>> +	 */
>> +	gd->bd->bi_arch_number = MACH_TYPE_SUEN3;
>> +
>> +	/* address of boot parameters */
>> +	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
>> +
>> +#if defined(CONFIG_KIRKWOOD_GPIO)
>> +	/* init the GPIO for I2C Bitbang driver */
>> +	kw_gpio_set_valid(SUEN3_SDA_PIN, 1);
>> +	kw_gpio_set_valid(SUEN3_SCL_PIN, 1);
>> +	kw_gpio_direction_output(SUEN3_SDA_PIN, 0);
>> +	kw_gpio_direction_output(SUEN3_SCL_PIN, 0);
>> +#endif
>> +	return 0;
>> +}
>> +
>> +#if defined(CONFIG_CMD_SF)
>> +int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>> +{
>> +	u32 tmp;
>> +	if (argc < 2) {
>> +		cmd_usage(cmdtp);
>> +		return 1;
>> +	}
>> +
>> +	if ((strcmp(argv[1], "off") == 0)) {
>> +		printf("SPI FLASH disabled, NAND enabled\n");
>> +		/* Multi-Purpose Pins Functionality configuration */
>> +		kwmpp_config[0] = MPP0_NF_IO2;
>> +		kwmpp_config[1] = MPP1_NF_IO3;
>> +		kwmpp_config[2] = MPP2_NF_IO4;
>> +		kwmpp_config[3] = MPP3_NF_IO5;
>> +
>> +		kirkwood_mpp_conf(kwmpp_config);
>> +		tmp = readl(KW_GPIO0_BASE);
>> +		writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
>> +
>> +		nand_init();
>> +	} else if ((strcmp(argv[1], "on") == 0)) {
>> +		printf("SPI FLASH enabled, NAND disabled\n");
>> +		/* Multi-Purpose Pins Functionality configuration */
>> +		kwmpp_config[0] = MPP0_SPI_SCn;
>> +		kwmpp_config[1] = MPP1_SPI_MOSI;
>> +		kwmpp_config[2] = MPP2_SPI_SCK;
>> +		kwmpp_config[3] = MPP3_SPI_MISO;
>> +
>> +		kirkwood_mpp_conf(kwmpp_config);
>> +		tmp = readl(KW_GPIO0_BASE);
>> +		writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
>> +
>> +		nand_init();
> 
> What do you need nand_init for disabled nand operation?

With it, the nand subsystem knows, that there is no longer
the nand availiable.

>> +	} else {
>> +		cmd_usage(cmdtp);
>> +		return 1;
>> +	}
>> +
>> +	return 0;
>> +}
>> +
>> +U_BOOT_CMD(
>> +	spitoggle,	2,	0,	do_spi_toggle,
>> +	"En-/disable SPI FLASH access",
>> +	"<on|off> - Enable (on) or disable (off) SPI FLASH access\n"
>> +	);
>> +#endif
>> +
>> +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 = get_ram_size((long 
>> *)kw_sdram_bar(i),
>> +						       kw_sdram_bs(i));
>> +	}
>> +	return 0;
>> +}
>> +
>> +/* Configure and enable MV88E1118 PHY */
>> +void reset_phy(void)
>> +{
>> +	char *name = "egiga0";
>> +
>> +	if (miiphy_set_current_dev(name))
>> +		return;
>> +
>> +	/* reset the phy */
>> +	miiphy_reset(name, CONFIG_PHY_BASE_ADR);
>> +}
>> +
>> +#if defined(CONFIG_HUSH_INIT_VAR)
>> +int hush_init_var (void)
>> +{
>> +	ivm_read_eeprom ();
>> +	return 0;
>> +}
>> +#endif
>> +
>> +#if defined(CONFIG_BOOTCOUNT_LIMIT)
>> +void bootcount_store (ulong a)
>> +{
>> +	volatile ulong *save_addr;
>> +	volatile ulong size = 0;
>> +	int i;
>> +	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
>> +		size += gd->bd->bi_dram[i].size;
>> +	}
>> +	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
>> +	writel(a, save_addr);
>> +	writel(BOOTCOUNT_MAGIC, &save_addr[1]);
>> +}
>> +
>> +ulong bootcount_load (void)
>> +{
>> +	volatile ulong *save_addr;
>> +	volatile ulong size = 0;
>> +	int i;
>> +	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
>> +		size += gd->bd->bi_dram[i].size;
>> +	}
>> +	save_addr = (ulong*)(size - BOOTCOUNT_ADDR);
>> +	if (readl(&save_addr[1]) != BOOTCOUNT_MAGIC)
>> +		return 0;
>> +	else
>> +		return readl(save_addr);
>> +}
>> +#endif
>> +
>> +#if defined(CONFIG_SYS_EEPROM_WREN)
>> +#define BOCOADDR	0x10
>> +#define DIRECT		0x04
>> +#define DIRECTMASK	0x04
>> +#define GPRT		0x08
>> +#define GPRTMASK	0x04
> 
> Better if you provide defination on the top or in header file

OK, move it to the top of the file.

>> +int eeprom_reg_value (unsigned dev_addr, uchar reg, uchar 
>> reg_mask, int value)
>> +{
>> +	uchar buf;
>> +	if (i2c_read (dev_addr, reg, 1, &buf, 1) != 0)
>> +		return 1;
>> +	if (value)
>> +		buf |= reg_mask;
>> +	else
>> +		buf &= ~reg_mask;
>> +	if (i2c_write (dev_addr, reg, 1, &buf, 1) != 0)
>> +		return 1;
>> +	return 0;
>> +}
>> +
> 
> It would be nice if you can abstract eeprom related code to separate driver or use existing eeprom driver 
> Any way keep it out side of board files, that can be shared by others too

You are right, this could be interesting for others,
so the question is where to put this ... in common/cmd_eeprom.c?

>> +int eeprom_write_enable (unsigned dev_addr, int state)
>> +{
>> +	uchar direction = state;
>> +	uchar gpio_value = !state;
>> +	uchar addr = BOCOADDR;
>> +	uchar direct = DIRECT;
>> +	uchar direct_mask = DIRECTMASK;
>> +	uchar gprt = GPRT;
>> +	uchar gprt_mask = GPRTMASK;
>> +
>> +	/* state 0: transition from write enabled to write disable */
>> +	/* state 1: transition from write disabled to write enable */
>> +
>> +	if (!state && eeprom_reg_value (addr, gprt, gprt_mask, 
>> gpio_value))
>> +		return 1;
>> +
>> +	if (eeprom_reg_value (addr, direct, direct_mask, direction))
>> +		return 1;
>> +
>> +	if (state && eeprom_reg_value (addr, gprt, gprt_mask, 
>> gpio_value))
>> +		return 1;
>> +
>> +	return 0;
>> +}
>> +#endif
>> diff --git a/board/keymile/km_arm/sdramregs.txt 
>> b/board/keymile/km_arm/sdramregs.txt
>> new file mode 100644
>> index 0000000..68c53a7
>> --- /dev/null
>> +++ b/board/keymile/km_arm/sdramregs.txt
>> @@ -0,0 +1,31 @@
> 
> What is this file?
> Which license?
> Who is using it?

Ok, you are right, some comments are here necessary.

On this boards is a preloader, which initializes
the RAM. Therefore the preloader reads the RAM settings
from the image he should load, through an header. This
header is created with a tool doimage (I think it is
from marvell), and this tool needs this file ...

So, I have no idea where to put this files, and think
they are in the board directory on the right place ...

I found something similiar in current mainline:

board/Marvell/mv88f6281gtw_ge/dramregs_333h.txt

This file is also without comments, license info ...
Maybe this tool don;t accept comments?

>> +0xFFD10000 0x01112222
>> +0xFFD10008 0x00001100
>> +0xFFD100E0 0x1B1B1B1B
>> +0xFFD20134 0xFFFFFFFF
>> +0xFFD20138 0x009FFFFF
> ...snip..
>> +0x0 0x0
>> +
>> diff --git a/board/keymile/km_arm/sdramregs_v1.txt 
>> b/board/keymile/km_arm/sdramregs_v1.txt
>> new file mode 100644
>> index 0000000..6778a9b
>> --- /dev/null
>> +++ b/board/keymile/km_arm/sdramregs_v1.txt
>> @@ -0,0 +1,28 @@
> 
> Ditto...

see above ...

>> +0xFFD10000 0x01111111
>> +0xFFD10008 0x00001100
> ..snip...
>> +0x0 0x0
> ...snip...
> 
>> diff --git a/include/configs/suen3_p1b_p1c.h 
>> b/include/configs/suen3_p1b_p1c.h
>> new file mode 100644
>> index 0000000..cd8bf01
>> --- /dev/null
>> +++ b/include/configs/suen3_p1b_p1c.h
>> @@ -0,0 +1,110 @@
>> +/*
>> + * (C) Copyright 2009
>> + * Marvell Semiconductor <www.marvell.com>
>> + * Prafulla Wadaskar <prafulla@marvell.com>
>> + *
>> + * (C) Copyright 2009
>> + * Stefan Roese, DENX Software Engineering, sr at denx.de.
>> + *
>> + * See file CREDITS for list of people who contributed to this
>> + * project.
>> + *
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License as
>> + * published by the Free Software Foundation; either version 2 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program; if not, write to the Free Software
>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
>> + * MA 02110-1301 USA
>> + */
>> +
>> +/*
>> + * for linking errors see
>> + * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
>> + */
>> +
>> +#ifndef _CONFIG_SUEN3_H
>> +#define _CONFIG_SUEN3_H
>> +
>> +/* include common defines/options for all arm based Keymile boards */
>> +#include "km-arm.h"
> 
> Further includes are not allowed in board config header.
> May be Wolfgang can comment on this..

This should be Ok, as this file collect common config option ...

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-03 15:52           ` Heiko Schocher
@ 2010-02-03 16:53             ` Stefan Roese
  2010-02-03 22:32             ` Scott Wood
  2010-02-10  7:09             ` Heiko Schocher
  2 siblings, 0 replies; 26+ messages in thread
From: Stefan Roese @ 2010-02-03 16:53 UTC (permalink / raw)
  To: u-boot

On Wednesday 03 February 2010 16:52:05 Heiko Schocher wrote:
> >> +
> >> +	str = getenv("mach_type");
> >> +	if (str != NULL) {
> >> +		mach_type = simple_strtoul(str, NULL, 10);
> >> +		printf("Overwriting MACH_TYPE with %d!!!\n", mach_type);
> >> +		gd->bd->bi_arch_number = mach_type;
> >> +	}
> >> +	return 0;
> >
> > Pls avoid this, the machine types should be predefined and registered
> > first for the board support that you are adding. Why do you need this in
> > environment?.
> 
> Stefan, can you answer this?

Yes.

The SUEN3 mach-type is already registered. But we wanted to use one U-Boot 
image on this system (early suen3), and boot the "normal" mainline Linux 
kernel (with the registered mach-type) and a specific Linux kernel image from 
the Linux kernel distributed from Marvell (2.6.22 based). And this kernel 
image had a different MACH_TYPE number. So we added this method to dynamically 
change the mach-type passed to the Linux kernel.

I have no idea if this is still needed for Keymile. But I also think this 
doesn't "hurt". So I'm voting to keep it for now.

Cheers,
Stefan

--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-03 15:52           ` Heiko Schocher
  2010-02-03 16:53             ` Stefan Roese
@ 2010-02-03 22:32             ` Scott Wood
  2010-02-04  7:24               ` Heiko Schocher
  2010-02-10  7:09             ` Heiko Schocher
  2 siblings, 1 reply; 26+ messages in thread
From: Scott Wood @ 2010-02-03 22:32 UTC (permalink / raw)
  To: u-boot

On Wed, Feb 03, 2010 at 04:52:05PM +0100, Heiko Schocher wrote:
> >> +	if ((strcmp(argv[1], "off") == 0)) {
> >> +		printf("SPI FLASH disabled, NAND enabled\n");
> >> +		/* Multi-Purpose Pins Functionality configuration */
> >> +		kwmpp_config[0] = MPP0_NF_IO2;
> >> +		kwmpp_config[1] = MPP1_NF_IO3;
> >> +		kwmpp_config[2] = MPP2_NF_IO4;
> >> +		kwmpp_config[3] = MPP3_NF_IO5;
> >> +
> >> +		kirkwood_mpp_conf(kwmpp_config);
> >> +		tmp = readl(KW_GPIO0_BASE);
> >> +		writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
> >> +
> >> +		nand_init();
> >> +	} else if ((strcmp(argv[1], "on") == 0)) {
> >> +		printf("SPI FLASH enabled, NAND disabled\n");
> >> +		/* Multi-Purpose Pins Functionality configuration */
> >> +		kwmpp_config[0] = MPP0_SPI_SCn;
> >> +		kwmpp_config[1] = MPP1_SPI_MOSI;
> >> +		kwmpp_config[2] = MPP2_SPI_SCK;
> >> +		kwmpp_config[3] = MPP3_SPI_MISO;
> >> +
> >> +		kirkwood_mpp_conf(kwmpp_config);
> >> +		tmp = readl(KW_GPIO0_BASE);
> >> +		writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
> >> +
> >> +		nand_init();
> > 
> > What do you need nand_init for disabled nand operation?
> 
> With it, the nand subsystem knows, that there is no longer
> the nand availiable.

That's not how nand_init() is meant to be used.  It is meant to be called
once on system init.  There is probably at least a memory leak here, e.g.
chip->buffers.

Even as a hack, it looks like these boards use the kirkwood nand controller,
and its board_nand_init() will unconditionally return 0, telling
nand_init_chip that it does indeed have NAND available.  Or is there a patch
somewhere changing that?

-Scott

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-03 22:32             ` Scott Wood
@ 2010-02-04  7:24               ` Heiko Schocher
  2010-02-08 19:23                 ` Scott Wood
  0 siblings, 1 reply; 26+ messages in thread
From: Heiko Schocher @ 2010-02-04  7:24 UTC (permalink / raw)
  To: u-boot

Hello Scott,

Scott Wood wrote:
> On Wed, Feb 03, 2010 at 04:52:05PM +0100, Heiko Schocher wrote:
>>>> +	if ((strcmp(argv[1], "off") == 0)) {
>>>> +		printf("SPI FLASH disabled, NAND enabled\n");
>>>> +		/* Multi-Purpose Pins Functionality configuration */
>>>> +		kwmpp_config[0] = MPP0_NF_IO2;
>>>> +		kwmpp_config[1] = MPP1_NF_IO3;
>>>> +		kwmpp_config[2] = MPP2_NF_IO4;
>>>> +		kwmpp_config[3] = MPP3_NF_IO5;
>>>> +
>>>> +		kirkwood_mpp_conf(kwmpp_config);
>>>> +		tmp = readl(KW_GPIO0_BASE);
>>>> +		writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
>>>> +
>>>> +		nand_init();
>>>> +	} else if ((strcmp(argv[1], "on") == 0)) {
>>>> +		printf("SPI FLASH enabled, NAND disabled\n");
>>>> +		/* Multi-Purpose Pins Functionality configuration */
>>>> +		kwmpp_config[0] = MPP0_SPI_SCn;
>>>> +		kwmpp_config[1] = MPP1_SPI_MOSI;
>>>> +		kwmpp_config[2] = MPP2_SPI_SCK;
>>>> +		kwmpp_config[3] = MPP3_SPI_MISO;
>>>> +
>>>> +		kirkwood_mpp_conf(kwmpp_config);
>>>> +		tmp = readl(KW_GPIO0_BASE);
>>>> +		writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
>>>> +
>>>> +		nand_init();
>>> What do you need nand_init for disabled nand operation?
>> With it, the nand subsystem knows, that there is no longer
>> the nand availiable.
> 
> That's not how nand_init() is meant to be used.  It is meant to be called
> once on system init.  There is probably at least a memory leak here, e.g.
> chip->buffers.

Oh, Ok. How could/should this then be solved?

(Some weak function, maybe: int nand_available(void)?, that board specific
 code can overwrite, and this function is checked before a nand command
 is executed?)

In the First step, I don;t call nand_init() again, there is also a
 warning message, that NAND is disabled, so the user should know, that
 he don;t have longer access to it, is this Okay for you?

> Even as a hack, it looks like these boards use the kirkwood nand controller,
> and its board_nand_init() will unconditionally return 0, telling

Yep, but ...

> nand_init_chip that it does indeed have NAND available.  Or is there a patch
> somewhere changing that?

... nand_get_flash_type() returns -ENODEV, if no manufacturer or/and
id could be read from nand (And if using this u-boot command, the nand
is not longer visible, because the nand is disabled, and the pins are
used to access a SPI Flash) -> nand_scan_ident returns this error, and
so nand_scan ...

Actually, I get this message, when running this code:

No NAND device found!!!


Thanks for your comment.

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-04  7:24               ` Heiko Schocher
@ 2010-02-08 19:23                 ` Scott Wood
  0 siblings, 0 replies; 26+ messages in thread
From: Scott Wood @ 2010-02-08 19:23 UTC (permalink / raw)
  To: u-boot

Heiko Schocher wrote:
> Scott Wood wrote:
>> That's not how nand_init() is meant to be used.  It is meant to be called
>> once on system init.  There is probably at least a memory leak here, e.g.
>> chip->buffers.
> 
> Oh, Ok. How could/should this then be solved?

Well, for a hackish solution that avoids the leak on chip->buffers, see 
omap_nand_switch_ecc().

> (Some weak function, maybe: int nand_available(void)?, that board specific
>  code can overwrite, and this function is checked before a nand command
>  is executed?)

I'd rather make the callback specific to the driver -- you're not 
disabling any possible NAND controller that might be attached through 
whatever odd means, you're disabling the kirkwood NAND controller.

> In the First step, I don;t call nand_init() again, there is also a
>  warning message, that NAND is disabled, so the user should know, that
>  he don;t have longer access to it, is this Okay for you?
> 
>> Even as a hack, it looks like these boards use the kirkwood nand controller,
>> and its board_nand_init() will unconditionally return 0, telling
> 
> Yep, but ...
> 
>> nand_init_chip that it does indeed have NAND available.  Or is there a patch
>> somewhere changing that?
> 
> ... nand_get_flash_type() returns -ENODEV, if no manufacturer or/and
> id could be read from nand (And if using this u-boot command, the nand
> is not longer visible, because the nand is disabled, and the pins are
> used to access a SPI Flash) -> nand_scan_ident returns this error, and
> so nand_scan ...

Will the attempt to do a read ID command cause bad things to go on the 
SPI pins when configured as SPI?  Or will the NAND controller hardware 
know that it doesn't have access to the pins and just return dummy values?

-Scott

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-03 15:52           ` Heiko Schocher
  2010-02-03 16:53             ` Stefan Roese
  2010-02-03 22:32             ` Scott Wood
@ 2010-02-10  7:09             ` Heiko Schocher
  2010-02-10  7:41               ` Prafulla Wadaskar
  2 siblings, 1 reply; 26+ messages in thread
From: Heiko Schocher @ 2010-02-10  7:09 UTC (permalink / raw)
  To: u-boot

Hello Prafulla,

do you have some comments on the following 2 points?
(If they are clarified, I can post v4 of the patch ...)

Heiko Schocher wrote:
> Prafulla Wadaskar wrote:
>>> -----Original Message-----
>>> From: Heiko Schocher [mailto:hs at denx.de] 
>>> Sent: Monday, February 01, 2010 1:07 PM
>>> To: U-Boot user list
>>> Cc: Wolfgang Denk; Prafulla Wadaskar; Tom
>>> Subject: [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
>>>
>>> This patch adds support for the Keymile SUEN3 board variants which
>>> are based on the Marvell Kirkwood (88F6281) SoC. All variants
>>> uses common code stored in board/keymile/km_arm/km_arm.c
>>>
>>> mgcoge2_arm_p1a board:
>>> This adds support for the ARM part of the mgcoge2. The suen3
>>> target was moved to the correct suen3 p1b version. There is a
>>> difference between the GPIO configuration between suen3 and mgcoge2.
>>>
>>> Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
>>> Signed-off-by: Stefan Roese <sr@denx.de>
>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>> ---
>>> - changes since v1:
>>>   added comments from Wolfgang Denk:
>>>   get rid of flash_info_t define in board config
>>>   (to get this working patch 1/2 is introduced/needed)
>>> - changes since v2:
>>>   added comments from Wolfgang Denk
>>>   - rearranged if/else in do_spi_toggle()
>>>   - added I/O accessor functions for bootcounter
>>>
>>>  MAINTAINERS                           |    2 +
>>>  MAKEALL                               |    4 +
>>>  Makefile                              |    8 +
>>>  board/keymile/common/common.c         |   23 ++-
>>>  board/keymile/km_arm/Makefile         |   51 +++++
>>>  board/keymile/km_arm/config.mk        |   25 +++
>>>  board/keymile/km_arm/km_arm.c         |  343 
>>> +++++++++++++++++++++++++++++++++
>>>  board/keymile/km_arm/sdramregs.txt    |   31 +++
>>>  board/keymile/km_arm/sdramregs_v1.txt |   28 +++
>>>  include/configs/km-arm.h              |  189 ++++++++++++++++++
[...]
>>>  include/configs/mgcoge2_arm_p1a.h     |   96 +++++++++
>>>  include/configs/suen3.h               |  103 ++++++++++
>>>  include/configs/suen3_p1a.h           |   82 ++++++++
>>>  include/configs/suen3_p1b_p1c.h       |  110 +++++++++++
>> ...snip...
>>
>> the include/config files indicates that there are five board supports.
>> Please provide one patch for each board, may be first will be master one.
> 
> This question also asked Tom, see:
> 
> http://lists.denx.de/pipermail/u-boot/2010-January/067182.html
> 
> But if you prefer to split this in 5 patches, I can do it.

Is it OK in one patch, or should I split it in 4 patches?

[...]
>>> diff --git a/board/keymile/km_arm/sdramregs.txt 
>>> b/board/keymile/km_arm/sdramregs.txt
>>> new file mode 100644
>>> index 0000000..68c53a7
>>> --- /dev/null
>>> +++ b/board/keymile/km_arm/sdramregs.txt
>>> @@ -0,0 +1,31 @@
>> What is this file?
>> Which license?
>> Who is using it?
> 
> Ok, you are right, some comments are here necessary.
> 
> On this boards is a preloader, which initializes
> the RAM. Therefore the preloader reads the RAM settings
> from the image he should load, through an header. This
> header is created with a tool doimage (I think it is
> from marvell), and this tool needs this file ...
> 
> So, I have no idea where to put this files, and think
> they are in the board directory on the right place ...
> 
> I found something similiar in current mainline:
> 
> board/Marvell/mv88f6281gtw_ge/dramregs_333h.txt
> 
> This file is also without comments, license info ...
> Maybe this tool don;t accept comments?

What should I do with this file?

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-10  7:09             ` Heiko Schocher
@ 2010-02-10  7:41               ` Prafulla Wadaskar
  2010-02-10  9:27                 ` Heiko Schocher
  0 siblings, 1 reply; 26+ messages in thread
From: Prafulla Wadaskar @ 2010-02-10  7:41 UTC (permalink / raw)
  To: u-boot

 

> -----Original Message-----
> From: Heiko Schocher [mailto:hs at denx.de] 
> Sent: Wednesday, February 10, 2010 12:39 PM
> To: Prafulla Wadaskar
> Cc: U-Boot user list
> Subject: Re: [PATCH 2/2 v3] arm: suen3, suen3_v1, 
> mgcoge2_arm_p1a support
> 
> Hello Prafulla,
> 
> do you have some comments on the following 2 points?
> (If they are clarified, I can post v4 of the patch ...)
> 
> Heiko Schocher wrote:
> > Prafulla Wadaskar wrote:
> >>> -----Original Message-----
> >>> From: Heiko Schocher [mailto:hs at denx.de] 
> >>> Sent: Monday, February 01, 2010 1:07 PM
> >>> To: U-Boot user list
> >>> Cc: Wolfgang Denk; Prafulla Wadaskar; Tom
> >>> Subject: [PATCH 2/2 v3] arm: suen3, suen3_v1, 
> mgcoge2_arm_p1a support
...snip...
> >> the include/config files indicates that there are five 
> board supports.
> >> Please provide one patch for each board, may be first will 
> be master one.
> > 
> > This question also asked Tom, see:
> > 
> > http://lists.denx.de/pipermail/u-boot/2010-January/067182.html
> > 
> > But if you prefer to split this in 5 patches, I can do it.
> 
> Is it OK in one patch, or should I split it in 4 patches?

Dear Heiko

You should split it in patches as per boards supported, if you are supporting four board then there should be four different patches.

> 
> [...]
> >>> diff --git a/board/keymile/km_arm/sdramregs.txt 
> >>> b/board/keymile/km_arm/sdramregs.txt
> >>> new file mode 100644
> >>> index 0000000..68c53a7
> >>> --- /dev/null
> >>> +++ b/board/keymile/km_arm/sdramregs.txt
> >>> @@ -0,0 +1,31 @@
> >> What is this file?
> >> Which license?
> >> Who is using it?
> > 
> > Ok, you are right, some comments are here necessary.
> > 
> > On this boards is a preloader, which initializes
> > the RAM. Therefore the preloader reads the RAM settings
> > from the image he should load, through an hear. This
> > header is created with a tool doimage (I think it is
> > from marvell), and this tool needs this file ...

Marvell Kirkwood has internal bootROM and it may be active through h/w configuration on you board.
In such case bootROM tries to read Kirkwood boot image (i.e. kwbimage) from boot media (i.e. NAND/SPI/Sata etc).

So kwbimage.cfg (the above file that you have created) should be present in board folder and this will be used by mkimage tool if you create u-boot.kwb target.

> > 
> > So, I have no idea where to put this files, and think
> > they are in the board directory on the right place ...

Please refer docs/README.kwbimage

> > 
> > I found something similiar in current mainline:
> > 
> > board/Marvell/mv88f6281gtw_ge/dramregs_333h.txt

There is kwbimage.cfg and not dramregs_333h.txt, may be you are referring very early post

> > 
> > This file is also without comments, license info ...
> > Maybe this tool don;t accept comments?
> 
> What should I do with this file?

Please see sheevaplug implementation in latest release

Regards..
Prafulla . .

> 
> bye
> Heiko
> -- 
> DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [U-Boot] [PATCH 2/2 v3] arm: suen3, suen3_v1, mgcoge2_arm_p1a support
  2010-02-10  7:41               ` Prafulla Wadaskar
@ 2010-02-10  9:27                 ` Heiko Schocher
  0 siblings, 0 replies; 26+ messages in thread
From: Heiko Schocher @ 2010-02-10  9:27 UTC (permalink / raw)
  To: u-boot

Hello Prafulla,

tahnks for your quick response!

Prafulla Wadaskar wrote:
>> -----Original Message-----
>> From: Heiko Schocher [mailto:hs at denx.de] 
>> Sent: Wednesday, February 10, 2010 12:39 PM
>> To: Prafulla Wadaskar
>> Cc: U-Boot user list
>> Subject: Re: [PATCH 2/2 v3] arm: suen3, suen3_v1, 
>> mgcoge2_arm_p1a support
>>
>> Hello Prafulla,
>>
>> do you have some comments on the following 2 points?
>> (If they are clarified, I can post v4 of the patch ...)
>>
>> Heiko Schocher wrote:
>>> Prafulla Wadaskar wrote:
>>>>> -----Original Message-----
>>>>> From: Heiko Schocher [mailto:hs at denx.de] 
>>>>> Sent: Monday, February 01, 2010 1:07 PM
>>>>> To: U-Boot user list
>>>>> Cc: Wolfgang Denk; Prafulla Wadaskar; Tom
>>>>> Subject: [PATCH 2/2 v3] arm: suen3, suen3_v1, 
>> mgcoge2_arm_p1a support
> ...snip...
>>>> the include/config files indicates that there are five 
>> board supports.
>>>> Please provide one patch for each board, may be first will 
>> be master one.
>>> This question also asked Tom, see:
>>>
>>> http://lists.denx.de/pipermail/u-boot/2010-January/067182.html
>>>
>>> But if you prefer to split this in 5 patches, I can do it.
>> Is it OK in one patch, or should I split it in 4 patches?
> 
> Dear Heiko
> 
> You should split it in patches as per boards supported, if you are supporting four board then there should be four different patches.

OK.

>> [...]
>>>>> diff --git a/board/keymile/km_arm/sdramregs.txt 
>>>>> b/board/keymile/km_arm/sdramregs.txt
>>>>> new file mode 100644
>>>>> index 0000000..68c53a7
>>>>> --- /dev/null
>>>>> +++ b/board/keymile/km_arm/sdramregs.txt
>>>>> @@ -0,0 +1,31 @@
>>>> What is this file?
>>>> Which license?
>>>> Who is using it?
>>> Ok, you are right, some comments are here necessary.
>>>
>>> On this boards is a preloader, which initializes
>>> the RAM. Therefore the preloader reads the RAM settings
>>> from the image he should load, through an hear. This
>>> header is created with a tool doimage (I think it is
>>> from marvell), and this tool needs this file ...
> 
> Marvell Kirkwood has internal bootROM and it may be active through h/w configuration on you board.
> In such case bootROM tries to read Kirkwood boot image (i.e. kwbimage) from boot media (i.e. NAND/SPI/Sata etc).
> 
> So kwbimage.cfg (the above file that you have created) should be present in board folder and this will be used by mkimage tool if you create u-boot.kwb target.

Ah, OK!

>>> So, I have no idea where to put this files, and think
>>> they are in the board directory on the right place ...
> 
> Please refer docs/README.kwbimage

Ok, found it, thanks

>>> I found something similiar in current mainline:
>>>
>>> board/Marvell/mv88f6281gtw_ge/dramregs_333h.txt
> 
> There is kwbimage.cfg and not dramregs_333h.txt, may be you are referring very early post

Yep, sorry.

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2010-02-10  9:27 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-01-07  7:56 [U-Boot] arm: suen3, suen3_v1, mgcoge2_arm_p1a support Heiko Schocher
2010-01-17 23:51 ` Wolfgang Denk
2010-01-18  8:34   ` Heiko Schocher
2010-01-18  9:31     ` Stefan Roese
2010-01-27  7:23   ` Heiko Schocher
2010-01-27  7:30     ` [U-Boot] [PATCH 1/2 v2] cramfs: make cramfs usable on non NOR flash Heiko Schocher
2010-01-27 19:28       ` Wolfgang Denk
2010-01-28  7:30         ` Heiko Schocher
2010-01-28 10:15           ` Wolfgang Denk
2010-01-28 11:02             ` Heiko Schocher
2010-01-27  7:31     ` [U-Boot] [PATCH 2/2 v2] arm: suen3, suen3_v1, mgcoge2_arm_p1a support Heiko Schocher
2010-01-27 13:50       ` Tom
2010-01-27 14:43         ` Heiko Schocher
2010-01-28 13:54           ` Tom
2010-01-27 19:49       ` Wolfgang Denk
2010-02-01  7:37       ` [U-Boot] [PATCH 2/2 v3] " Heiko Schocher
2010-02-02 18:07         ` Prafulla Wadaskar
2010-02-03  6:42           ` Wolfgang Denk
2010-02-03 15:52           ` Heiko Schocher
2010-02-03 16:53             ` Stefan Roese
2010-02-03 22:32             ` Scott Wood
2010-02-04  7:24               ` Heiko Schocher
2010-02-08 19:23                 ` Scott Wood
2010-02-10  7:09             ` Heiko Schocher
2010-02-10  7:41               ` Prafulla Wadaskar
2010-02-10  9:27                 ` Heiko Schocher

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.