Skip to contentSkip to conversation

arm: suen3, suen3_v1, mgcoge2_arm_p1a support

U-Boot New Heiko Schocher 6 participants 26 messages Jan 7, 2010 – Feb 10, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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.

---
 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
MAINTAINERS +2 -0
index 9734b1d..6ca5a21 100644
@@ -385,6 +385,8 @@ Stefan Roese <[email protected]>
 
 	P3M750		PPC750FX/GX/GL
 
+	suen3		ARM926EJS (Kirkwood SoC)
+
 Yusdi Santoso <[email protected]>
 
 	HIDDEN_DRAGON	MPC8241/MPC8245
MAKEALL +4 -0
index ab1bb6f..17f277b 100755
@@ -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		\
Makefile +8 -0
index ed6156f..968d8a9 100644
@@ -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
board/keymile/common/common.c +19 -4
index ec27bda..33857c7 100644
@@ -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)
 {
board/keymile/km_arm/Makefile new file +51 -0

51 lines not on this page · raw message

board/keymile/km_arm/config.mk new file +25 -0
new file mode 100644
index 0000000..fe7b0ef
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Prafulla Wadaskar <[email protected]>
+#
+# 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
board/keymile/km_arm/km_arm.c new file +345 -0

345 lines not on this page · raw message

board/keymile/km_arm/sdramregs.txt new file +31 -0
new file mode 100644
index 0000000..68c53a7
@@ -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
+
board/keymile/km_arm/sdramregs_v1.txt new file +28 -0
new file mode 100644
index 0000000..6778a9b
@@ -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
include/configs/km-arm.h new file +192 -0

192 lines not on this page · raw message

include/configs/mgcoge2_arm_p1a.h new file +93 -0

93 lines not on this page · raw message

include/configs/suen3.h new file +100 -0

100 lines not on this page · raw message

include/configs/suen3_p1a.h new file +79 -0

79 lines not on this page · raw message

include/configs/suen3_p1b_p1c.h new file +107 -0

107 lines not on this page · raw message

Signature · 5 lines
1.6.2.5

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

Dear Heiko Schocher,

Quoted 8 lines · In message <[email protected]> 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.

...

Quoted 2 lines
include/configs/km-arm.h new file +0 -0

...

include/configs/km-arm.h line 179

Quoted 2 lines
include/configs/km-arm.h new file +2 -0
+#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).

include/configs/km-arm.h line 188

Quoted 8 lines
include/configs/km-arm.h new file +8 -0
+#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

Signature · 8 lines
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 <[email protected]>
#2 lore raw

Hello Wolfgang,

Quoted 12 lines · Wolfgang Denk
Quoted 8 lines · In message <[email protected]> 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.

...

Quoted 8 lines
Quoted 2 lines
include/configs/km-arm.h new file +0 -0

...

include/configs/km-arm.h line 179

Quoted 2 lines
include/configs/km-arm.h new file +2 -0
+#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.

Quoted 11 lines

include/configs/km-arm.h line 188

Quoted 8 lines
include/configs/km-arm.h new file +8 -0
+#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.

Quoted 2 lines

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

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#3 lore raw

Hi Heiko,

Quoted 11 lines · On Monday 18 January 2010 09:34:08 Heiko Schocher wrote:
Quoted 5 lines

include/configs/km-arm.h line 179

Quoted 2 lines
include/configs/km-arm.h new file +2 -0
+#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.

Quoted 3 lines

include/configs/km-arm.h

Quoted 3 lines
include/configs/km-arm.h new file +3 -0
+#ifndef __ASSEMBLY__
+typedef struct {
+	unsigned long size;			/* total bank size in bytes		

*/

Quoted 1 line
Quoted 1 line

Review

Quoted 1 line
(quoted diff) +1 -0
+	unsigned short sector_count;		/* number of erase units		

*/

Quoted 1 line
Quoted 1 line

Review

Quoted 1 line
(quoted diff) +1 -0
+	unsigned long flash_id;			/* combined device & manufacturer 

code */

Quoted 11 lines
Quoted 8 lines
Quoted 3 lines
(quoted diff) +1 -0
+	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

#4 lore raw
In reply to Wolfgang Denk

Hello Wolfgang,

Quoted 12 lines · Wolfgang Denk
Quoted 8 lines · In message <[email protected]> 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.

...

Quoted 8 lines
Quoted 2 lines
include/configs/km-arm.h new file +0 -0

...

include/configs/km-arm.h line 179

Quoted 2 lines
include/configs/km-arm.h new file +2 -0
+#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.

Quoted 11 lines

include/configs/km-arm.h line 188

Quoted 8 lines
include/configs/km-arm.h new file +8 -0
+#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.

Quoted 2 lines

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

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#5 lore raw

PATCH v2 1/2 cramfs: make cramfs usable on non NOR flash

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

---

- 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(-)
common/cmd_cramfs.c +11 -1
index 55e2d36..9e92163 100644
@@ -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];
fs/cramfs/cramfs.c +4 -0
index 2956d39..910955d 100644
@@ -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)
 {
Signature · 4 lines
1.6.2.5
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#10 lore raw

PATCH v2 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

In reply to Heiko Schocher

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.

---

- 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
MAINTAINERS +2 -0
index 9734b1d..6ca5a21 100644
@@ -385,6 +385,8 @@ Stefan Roese <[email protected]>
 
 	P3M750		PPC750FX/GX/GL
 
+	suen3		ARM926EJS (Kirkwood SoC)
+
 Yusdi Santoso <[email protected]>
 
 	HIDDEN_DRAGON	MPC8241/MPC8245
MAKEALL +4 -0
index ab1bb6f..17f277b 100755
@@ -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		\
Makefile +8 -0
index ed6156f..968d8a9 100644
@@ -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
board/keymile/common/common.c +19 -4
index ec27bda..33857c7 100644
@@ -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)
 {
board/keymile/km_arm/Makefile new file +51 -0

51 lines not on this page · raw message

board/keymile/km_arm/config.mk new file +25 -0
new file mode 100644
index 0000000..fe7b0ef
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Prafulla Wadaskar <[email protected]>
+#
+# 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
board/keymile/km_arm/km_arm.c new file +345 -0

345 lines not on this page · raw message

board/keymile/km_arm/sdramregs.txt new file +31 -0
new file mode 100644
index 0000000..68c53a7
@@ -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
+
board/keymile/km_arm/sdramregs_v1.txt new file +28 -0
new file mode 100644
index 0000000..6778a9b
@@ -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
include/configs/km-arm.h new file +189 -0

189 lines not on this page · raw message

include/configs/mgcoge2_arm_p1a.h new file +96 -0

96 lines not on this page · raw message

include/configs/suen3.h new file +103 -0

103 lines not on this page · raw message

include/configs/suen3_p1a.h new file +82 -0

82 lines not on this page · raw message

include/configs/suen3_p1b_p1c.h new file +110 -0

110 lines not on this page · raw message

Signature · 6 lines
1.6.2.5


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

PATCH v2 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Quoted 9 lines · Heiko Schocher

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

#12 lore raw

PATCH v2 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Hello Tom,

Quoted 5 lines · Tom
Quoted 4 lines · Heiko Schocher

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

Quoted 7 lines
Quoted 5 lines

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

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#6 lore raw

PATCH v2 1/2 cramfs: make cramfs usable on non NOR flash

In reply to Heiko Schocher

Dear Heiko Schocher,

Quoted 1 line · In message <[email protected]> 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?

common/cmd_cramfs.c int do_cramfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) · line 128

Quoted 9 lines
common/cmd_cramfs.c +4 -0
@@ -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

Signature · 5 lines
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.
#14 lore raw

PATCH v2 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

In reply to Heiko Schocher

Dear Heiko Schocher,

Quoted 8 lines · In message <[email protected]> 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.

...

Quoted 4 lines
board/keymile/km_arm/km_arm.c new file +4 -0
+#if defined(CONFIG_CMD_SF)
+int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	u32 tmp;

board/keymile/km_arm/km_arm.c line 199

Quoted 10 lines
board/keymile/km_arm/km_arm.c new file +10 -0
+	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...

Quoted 4 lines
board/keymile/km_arm/km_arm.c new file +4 -0
+	if ((strcmp(argv[1], "off") == 0)) {
+		printf("SPI FLASH disabled, NAND enabled\n");
+		/* Multi-Purpose Pins Functionality configuration */
+		kwmpp_config[0] = MPP0_NF_IO2;

board/keymile/km_arm/km_arm.c line 214

Quoted 10 lines
board/keymile/km_arm/km_arm.c new file +10 -0
+		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) {

board/keymile/km_arm/km_arm.c line 227

Quoted 13 lines
board/keymile/km_arm/km_arm.c new file +13 -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.

...

board/keymile/km_arm/km_arm.c line 282

Quoted 12 lines
board/keymile/km_arm/km_arm.c new file +12 -0
+#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.

Quoted 6 lines
board/keymile/km_arm/km_arm.c new file +6 -0
+
+ulong bootcount_load (void)
+{
+	volatile ulong *save_addr;
+	volatile ulong size = 0;
+	int i;

board/keymile/km_arm/km_arm.c line 299

Quoted 10 lines
board/keymile/km_arm/km_arm.c new file +10 -0
+	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

Signature · 9 lines
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_
#7 lore raw

PATCH v2 1/2 cramfs: make cramfs usable on non NOR flash

In reply to Wolfgang Denk

Hello Wolfgang,

Quoted 7 lines · Wolfgang Denk
Quoted 1 line · In message <[email protected]> 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 ...

Quoted 4 lines
Quoted 4 lines
common/cmd_cramfs.c +0 -0
@@ -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 */
Quoted 8 lines

common/cmd_cramfs.c int do_cramfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) · line 128

Quoted 5 lines
common/cmd_cramfs.c +4 -0
+#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.

Quoted 1 line

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

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#8 lore raw

PATCH v2 1/2 cramfs: make cramfs usable on non NOR flash

Dear Heiko Schocher,

Quoted 4 lines · In message <[email protected]> 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.

Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
common/cmd_cramfs.c +4 -0
+#if !defined(CONFIG_SYS_NO_FLASH)
 	part.offset = addr - flash_info[id.num].start[0];
+#else
+	part.offset = addr;
+#endif

...

Quoted 1 line

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

OK.

Quoted 4 lines
Quoted 1 line

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

Signature · 7 lines
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 ...
#9 lore raw

PATCH v2 1/2 cramfs: make cramfs usable on non NOR flash

Hello Wolfgang,

Quoted 1 line · Wolfgang Denk

In message <[email protected]> you wrote:

[...]

Quoted 10 lines
Quoted 3 lines
Quoted 1 line

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.

Quoted 3 lines

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.

Quoted 5 lines

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.

Quoted 7 lines

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

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#13 lore raw

PATCH v2 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

In reply to Heiko Schocher
Quoted 13 lines · Heiko Schocher

Hello Tom,

Quoted 10 lines · Tom
Quoted 9 lines · Heiko Schocher

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.

Quoted 6 lines
Quoted 2 lines

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

Quoted 2 lines

bye
Heiko

#15 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

In reply to Heiko Schocher

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.

---
- 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
MAINTAINERS +2 -0
index 9734b1d..6ca5a21 100644
@@ -385,6 +385,8 @@ Stefan Roese <[email protected]>
 
 	P3M750		PPC750FX/GX/GL
 
+	suen3		ARM926EJS (Kirkwood SoC)
+
 Yusdi Santoso <[email protected]>
 
 	HIDDEN_DRAGON	MPC8241/MPC8245
MAKEALL +4 -0
index ab1bb6f..17f277b 100755
@@ -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		\
Makefile +8 -0
index ed6156f..968d8a9 100644
@@ -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
board/keymile/common/common.c +19 -4
index ec27bda..33857c7 100644
@@ -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)
 {
board/keymile/km_arm/Makefile new file +51 -0

51 lines not on this page · raw message

board/keymile/km_arm/config.mk new file +25 -0
new file mode 100644
index 0000000..fe7b0ef
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Prafulla Wadaskar <[email protected]>
+#
+# 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
board/keymile/km_arm/km_arm.c new file +343 -0

343 lines not on this page · raw message

board/keymile/km_arm/sdramregs.txt new file +31 -0
new file mode 100644
index 0000000..68c53a7
@@ -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
+
board/keymile/km_arm/sdramregs_v1.txt new file +28 -0
new file mode 100644
index 0000000..6778a9b
@@ -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
include/configs/km-arm.h new file +189 -0

189 lines not on this page · raw message

include/configs/mgcoge2_arm_p1a.h new file +96 -0

96 lines not on this page · raw message

include/configs/suen3.h new file +103 -0

103 lines not on this page · raw message

include/configs/suen3_p1a.h new file +82 -0

82 lines not on this page · raw message

include/configs/suen3_p1b_p1c.h new file +110 -0

110 lines not on this page · raw message

Signature · 6 lines
1.6.2.5


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

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Hi Heiko

First of all sorry for delayed feedback

Quoted 29 lines

-----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.

---
- 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

Quoted 11 lines
 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

Quoted 4 lines
 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...

Quoted 74 lines
board/keymile/common/common.c +16 -3
index ec27bda..33857c7 100644
@@ -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);
board/keymile/common/common.c +1 -1
 	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,
 }

board/keymile/common/common.c int fdt_get_node_and_value (void *blob, · line 601

Quoted 10 lines
board/keymile/common/common.c +2 -0
 #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

Quoted 35 lines
board/keymile/common/common.c +0 -0
 int board_eth_init (bd_t *bis)

{

board/keymile/km_arm/km_arm.c new file +26 -0
new file mode 100644
index 0000000..0edf3b2
@@ -0,0 +1,343 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <[email protected]>
+ *
+ * (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...

board/keymile/km_arm/km_arm.c line 154

Quoted 8 lines
board/keymile/km_arm/km_arm.c new file +8 -0
+
+	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?.

board/keymile/km_arm/km_arm.c line 167

Quoted 13 lines
board/keymile/km_arm/km_arm.c new file +13 -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");

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

Quoted 44 lines
board/keymile/km_arm/km_arm.c new file +44 -0
+
+	/*
+	 * 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 */

board/keymile/km_arm/km_arm.c line 221

Quoted 10 lines
board/keymile/km_arm/km_arm.c new file +10 -0
+		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?

Quoted 74 lines
board/keymile/km_arm/km_arm.c new file +22 -0
+	} 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),

board/keymile/km_arm/km_arm.c new file +51 -0
+						       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

board/keymile/km_arm/km_arm.c line 304

Quoted 10 lines
board/keymile/km_arm/km_arm.c new file +10 -0
+		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

Quoted 5 lines

+int eeprom_reg_value (unsigned dev_addr, uchar reg, uchar reg_mask, int value)

board/keymile/km_arm/km_arm.c new file +3 -0
+{
+	uchar buf;
+	if (i2c_read (dev_addr, reg, 1, &buf, 1) != 0)

board/keymile/km_arm/km_arm.c line 318

Quoted 10 lines
board/keymile/km_arm/km_arm.c new file +10 -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

board/keymile/km_arm/sdramregs.txt

Quoted 34 lines
board/keymile/km_arm/km_arm.c new file +14 -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))

board/keymile/km_arm/km_arm.c new file +6 -0
+		return 1;
+
+	if (eeprom_reg_value (addr, direct, direct_mask, direction))
+		return 1;
+
+	if (state && eeprom_reg_value (addr, gprt, gprt_mask, 

gpio_value))

board/keymile/km_arm/km_arm.c new file +5 -0
+		return 1;
+
+	return 0;
+}
+#endif
board/keymile/km_arm/sdramregs.txt new file +0 -0
new file mode 100644
index 0000000..68c53a7
@@ -0,0 +1,31 @@

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

Quoted 5 lines
board/keymile/km_arm/sdramregs.txt new file +5 -0
+0xFFD10000 0x01112222
+0xFFD10008 0x00001100
+0xFFD100E0 0x1B1B1B1B
+0xFFD20134 0xFFFFFFFF
+0xFFD20138 0x009FFFFF

...snip..

board/keymile/km_arm/sdramregs_v1.txt

Quoted 9 lines

+0x0 0x0

board/keymile/km_arm/sdramregs.txt new file +1 -0
+
board/keymile/km_arm/sdramregs_v1.txt new file +0 -0
new file mode 100644
index 0000000..6778a9b
@@ -0,0 +1,28 @@

Ditto...

Quoted 2 lines
board/keymile/km_arm/sdramregs_v1.txt new file +2 -0
+0xFFD10000 0x01111111
+0xFFD10008 0x00001100

..snip...

Quoted 1 line

+0x0 0x0

...snip...

Quoted 34 lines
include/configs/suen3_p1b_p1c.h new file +27 -0
new file mode 100644
index 0000000..cd8bf01
@@ -0,0 +1,110 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <[email protected]>
+ *
+ * (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/configs/suen3_p1b_p1c.h line 37

Quoted 10 lines
include/configs/suen3_p1b_p1c.h new file +10 -0
+/*
+ * 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 . .

Quoted 1 line
#17 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Dear Prafulla Wadaskar,

Quoted 1 line · In message <[email protected]>…

...

Quoted 5 lines

Review

Quoted 2 lines
(quoted diff) +2 -0
+/* 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

Signature · 10 lines
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.
#18 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

In reply to Prafulla Wadaskar

Hello Prafulla,

Quoted 1 line · Prafulla Wadaskar

First of all sorry for delayed feedback

No problem, thanks for reviewing!

Quoted 41 lines
Quoted 29 lines

-----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.

---
- 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

Quoted 11 lines
 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 ++++++++++++++++++
Quoted 2 lines

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.

Quoted 8 lines
Quoted 4 lines
 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.

Quoted 77 lines

...snip...

Quoted 76 lines
board/keymile/common/common.c +16 -3
index ec27bda..33857c7 100644
@@ -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);
board/keymile/common/common.c +1 -1
 	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
 
Quoted 10 lines

board/keymile/common/common.c int fdt_get_node_and_value (void *blob, · line 600

Quoted 8 lines
board/keymile/common/common.c +2 -0
+#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.

Quoted 37 lines
Quoted 35 lines
board/keymile/common/common.c +0 -0
 int board_eth_init (bd_t *bis)

{

board/keymile/km_arm/km_arm.c new file +26 -0
new file mode 100644
index 0000000..0edf3b2
@@ -0,0 +1,343 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <[email protected]>
+ *
+ * (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...

Quoted 11 lines

board/keymile/km_arm/km_arm.c line 154

Quoted 8 lines
board/keymile/km_arm/km_arm.c new file +8 -0
+
+	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?

Quoted 7 lines
Quoted 7 lines
board/keymile/km_arm/km_arm.c new file +7 -0
+}
+
+int board_init(void)
+{
+	u32 tmp;
+
+	kirkwood_mpp_conf(kwmpp_config);
Quoted 8 lines

board/keymile/km_arm/km_arm.c line 167

Quoted 6 lines
board/keymile/km_arm/km_arm.c new file +6 -0
+
+	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.

Quoted 48 lines
Quoted 48 lines
board/keymile/km_arm/km_arm.c new file +48 -0
+
+	/*
+	 * 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;
Quoted 8 lines

board/keymile/km_arm/km_arm.c line 221

Quoted 6 lines
board/keymile/km_arm/km_arm.c new file +6 -0
+
+		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.

Quoted 78 lines
Quoted 78 lines
board/keymile/km_arm/km_arm.c new file +22 -0
+	} 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),

board/keymile/km_arm/km_arm.c new file +55 -0
+						       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
+
Quoted 8 lines

board/keymile/km_arm/km_arm.c line 304

Quoted 6 lines
board/keymile/km_arm/km_arm.c new file +6 -0
+#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.

Quoted 10 lines
Quoted 10 lines

+int eeprom_reg_value (unsigned dev_addr, uchar reg, uchar reg_mask, int value)

board/keymile/km_arm/km_arm.c new file +8 -0
+{
+	uchar buf;
+	if (i2c_read (dev_addr, reg, 1, &buf, 1) != 0)
+		return 1;
+	if (value)
+		buf |= reg_mask;
+	else
+		buf &= ~reg_mask;
Quoted 8 lines

board/keymile/km_arm/km_arm.c line 318

Quoted 5 lines
board/keymile/km_arm/km_arm.c new file +5 -0
+	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?

Quoted 30 lines
Quoted 30 lines
board/keymile/km_arm/km_arm.c new file +14 -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))

board/keymile/km_arm/km_arm.c new file +6 -0
+		return 1;
+
+	if (eeprom_reg_value (addr, direct, direct_mask, direction))
+		return 1;
+
+	if (state && eeprom_reg_value (addr, gprt, gprt_mask, 

gpio_value))

board/keymile/km_arm/km_arm.c new file +5 -0
+		return 1;
+
+	return 0;
+}
+#endif
board/keymile/km_arm/sdramregs.txt new file +0 -0
new file mode 100644
Quoted 8 lines

board/keymile/km_arm/sdramregs.txt

Quoted 4 lines

index 0000000..68c53a7

board/keymile/km_arm/sdramregs.txt new file +0 -0
@@ -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?

Quoted 6 lines
Quoted 5 lines
board/keymile/km_arm/sdramregs.txt new file +5 -0
+0xFFD10000 0x01112222
+0xFFD10008 0x00001100
+0xFFD100E0 0x1B1B1B1B
+0xFFD20134 0xFFFFFFFF
+0xFFD20138 0x009FFFFF

...snip..

Quoted 11 lines

board/keymile/km_arm/sdramregs_v1.txt

Quoted 9 lines

+0x0 0x0

board/keymile/km_arm/sdramregs.txt new file +1 -0
+
board/keymile/km_arm/sdramregs_v1.txt new file +0 -0
new file mode 100644
index 0000000..6778a9b
@@ -0,0 +1,28 @@

Ditto...

see above ...

Quoted 45 lines
Quoted 2 lines
board/keymile/km_arm/sdramregs_v1.txt new file +2 -0
+0xFFD10000 0x01111111
+0xFFD10008 0x00001100

..snip...

Quoted 1 line

+0x0 0x0

...snip...

Quoted 39 lines
include/configs/suen3_p1b_p1c.h new file +32 -0
new file mode 100644
index 0000000..cd8bf01
@@ -0,0 +1,110 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Prafulla Wadaskar <[email protected]>
+ *
+ * (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
+ */
+
Quoted 8 lines

include/configs/suen3_p1b_p1c.h line 37

Quoted 5 lines
include/configs/suen3_p1b_p1c.h new file +5 -0
+#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

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#19 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Quoted 13 lines · On Wednesday 03 February 2010 16:52:05 Heiko Schocher wrote:
Quoted 4 lines
Quoted 4 lines
board/keymile/km_arm/km_arm.c new file +4 -0
+
+	str = getenv("mach_type");
+	if (str != NULL) {
+		mach_type = simple_strtoul(str, NULL, 10);
Quoted 8 lines

board/keymile/km_arm/km_arm.c line 154

Quoted 4 lines
board/keymile/km_arm/km_arm.c new file +4 -0
+		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?.

Quoted 1 line

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

#20 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

In reply to Heiko Schocher
Quoted 29 lines · Heiko Schocher
Quoted 20 lines
Quoted 20 lines
board/keymile/km_arm/km_arm.c new file +20 -0
+	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;
Quoted 8 lines

board/keymile/km_arm/km_arm.c line 221

Quoted 6 lines
board/keymile/km_arm/km_arm.c new file +6 -0
+
+		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?

Quoted 2 lines

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

#21 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Hello Scott,

Quoted 28 lines · Scott Wood
Quoted 27 lines · Heiko Schocher
Quoted 27 lines
Quoted 16 lines
board/keymile/km_arm/km_arm.c new file +16 -0
+	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 */

board/keymile/km_arm/km_arm.c line 221

Quoted 10 lines
board/keymile/km_arm/km_arm.c new file +10 -0
+		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?

Quoted 6 lines
Quoted 2 lines

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?

Quoted 2 lines

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 ...

Quoted 2 lines

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

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#22 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Quoted 6 lines · Heiko Schocher
Quoted 3 lines · Scott Wood

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().

Quoted 3 lines

(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.

Quoted 9 lines

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?

Quoted 2 lines

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 ...

Quoted 8 lines
Quoted 2 lines

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

#23 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

In reply to Heiko Schocher

Hello Prafulla,

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

Quoted 41 lines · Heiko Schocher
Quoted 40 lines · Prafulla Wadaskar
Quoted 40 lines

-----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.

---
- 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 ++++++++++++++++++

[...]

Quoted 6 lines
Quoted 6 lines
Quoted 4 lines
 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...

Quoted 8 lines
Quoted 2 lines

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?

[...]

Quoted 22 lines
Quoted 10 lines

board/keymile/km_arm/sdramregs.txt

Quoted 7 lines
board/keymile/km_arm/sdramregs.txt new file +0 -0
new file mode 100644
index 0000000..68c53a7
@@ -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 ...

Quoted 6 lines

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

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#24 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Quoted 24 lines

-----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 ...)

Quoted 7 lines · Heiko Schocher
Quoted 6 lines · Prafulla Wadaskar
Quoted 6 lines

-----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...

Quoted 5 lines
Quoted 1 line
Quoted 1 line

the include/config files indicates that there are five

board supports.

Quoted 1 line
Quoted 1 line

Please provide one patch for each board, may be first will

be master one.

Quoted 1 line
Quoted 7 lines
Quoted 5 lines

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.

Quoted 13 lines

[...]

Quoted 11 lines
Quoted 10 lines

board/keymile/km_arm/sdramregs.txt

Quoted 7 lines
board/keymile/km_arm/sdramregs.txt new file +0 -0
new file mode 100644
index 0000000..68c53a7
@@ -0,0 +1,31 @@

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

Quoted 7 lines
Quoted 7 lines

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.

Quoted 3 lines
Quoted 3 lines

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

Quoted 4 lines
Quoted 4 lines

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

Quoted 5 lines
Quoted 3 lines

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 . .

Quoted 7 lines

bye
Heiko

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#25 lore raw

PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support

Hello Prafulla,

tahnks for your quick response!

Quoted 29 lines · Prafulla Wadaskar
Quoted 22 lines

-----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 ...)

Quoted 7 lines · Heiko Schocher
Quoted 6 lines · Prafulla Wadaskar
Quoted 6 lines

-----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...

Quoted 6 lines
Quoted 1 line
Quoted 1 line

the include/config files indicates that there are five

board supports.

Quoted 1 line
Quoted 1 line

Please provide one patch for each board, may be first will

be master one.

Quoted 2 lines

This question also asked Tom, see:

Quoted 8 lines
Quoted 4 lines
Quoted 3 lines

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.

Quoted 19 lines
Quoted 11 lines

[...]

Quoted 10 lines
Quoted 10 lines

board/keymile/km_arm/sdramregs.txt

Quoted 7 lines
board/keymile/km_arm/sdramregs.txt new file +0 -0
new file mode 100644
index 0000000..68c53a7
@@ -0,0 +1,31 @@

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

Quoted 7 lines
Quoted 7 lines

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 ...

Quoted 4 lines

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!

Quoted 4 lines
Quoted 2 lines
Quoted 2 lines

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

Quoted 5 lines
Quoted 3 lines
Quoted 3 lines

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

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