arm: suen3, suen3_v1, mgcoge2_arm_p1a support
Subsystems (2)
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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
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_p1aboard:
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]>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_p1aboard:
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 256Please 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_tas 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
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 256Please 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 sectorstart 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_tas 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
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_p1aboard:
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 256Please 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_tas 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
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
@@ -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
@@ -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
PATCH v2 1/2 cramfs: make cramfs usable on non NOR flash
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.
PATCH v2 1/2 cramfs: make cramfs usable on non NOR flash
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
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 ...
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
PATCH v2 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support
In reply to Heiko SchocherThis 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
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_p1aboard:
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
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_p1aboard:
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
PATCH v2 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support
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_p1aboard:
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_p1awas just the first version of this Hardware, and the second and subsequent versions are renamed insuen3_x...
Ok.
Thanks
Tom
Quoted 2 lines
bye
Heiko
PATCH v2 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support
In reply to Heiko SchocherDear 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_p1aboard:
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_
PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support
In reply to Heiko SchocherThis 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
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_p1asupportThis 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_p1aboard:
This adds support for the ARM part of the mgcoge2. The suen3 target was moved to the correct suen3 p1b version. There is a difference between the GPIO configuration between suen3 and mgcoge2.Signed-off-by Holger Brunck <[email protected]>Signed-off-by Stefan Roese <[email protected]>Signed-off-by Heiko Schocher <[email protected]>---
- changes since v1:
added comments from Wolfgang Denk:
get rid offlash_info_tdefine in board config (to get this working patch 1/2 is introduced/needed)
- changes since v2:
added comments from Wolfgang Denk
- rearranged if/else indo_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@@ -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
-1uchar 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
-0int board_eth_init (bd_t *bis){
board/keymile/km_arm/km_arm.c new file +26
-0@@ -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(unsigneddev_addr, uchar reg, ucharreg_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@@ -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
0x0board/keymile/km_arm/sdramregs.txt new file +1
-0+board/keymile/km_arm/sdramregs_v1.txt new file +0
-0@@ -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@@ -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
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.PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support
In reply to Prafulla WadaskarHello 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_p1asupportThis 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_p1aboard:
This adds support for the ARM part of the mgcoge2. The suen3 target was moved to the correct suen3 p1b version. There is a difference between the GPIO configuration between suen3 and mgcoge2.Signed-off-by Holger Brunck <[email protected]>Signed-off-by Stefan Roese <[email protected]>Signed-off-by Heiko Schocher <[email protected]>---
- changes since v1:
added comments from Wolfgang Denk:
get rid offlash_info_tdefine in board config (to get this working patch 1/2 is introduced/needed)
- changes since v2:
added comments from Wolfgang Denk
- rearranged if/else indo_spi_toggle()
- added I/O accessor functions for bootcounterQuoted 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 bekm_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/configfiles 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@@ -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
-1uchar 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
-0int board_eth_init (bd_t *bis){
board/keymile/km_arm/km_arm.c new file +26
-0@@ -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_initfor 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 0x04Better 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(unsigneddev_addr, uchar reg, ucharreg_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
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
0x0board/keymile/km_arm/sdramregs.txt new file +1
-0+board/keymile/km_arm/sdramregs_v1.txt new file +0
-0@@ -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@@ -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
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
PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support
In reply to Heiko SchocherQuoted 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_initfor 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
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_initfor 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_chipthat 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
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, tellingYep, but ...
Quoted 8 lines
Quoted 2 lines
nand_init_chipthat 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_identreturns this error, and sonand_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
PATCH v3 2/2 arm: suen3, suen3_v1, mgcoge2_arm_p1a support
In reply to Heiko SchocherHello 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_p1asupportThis 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_p1aboard:
This adds support for the ARM part of the mgcoge2. The suen3 target was moved to the correct suen3 p1b version. There is a difference between the GPIO configuration between suen3 and mgcoge2.Signed-off-by Holger Brunck <[email protected]>Signed-off-by Stefan Roese <[email protected]>Signed-off-by Heiko Schocher <[email protected]>---
- changes since v1:
added comments from Wolfgang Denk:
get rid offlash_info_tdefine in board config (to get this working patch 1/2 is introduced/needed)
- changes since v2:
added comments from Wolfgang Denk
- rearranged if/else indo_spi_toggle()
- added I/O accessor functions for bootcounterMAINTAINERS | 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/configfiles 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@@ -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.txtThis 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
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_p1asupportHello 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_p1asupport
...snip...
Quoted 5 lines
Quoted 1 line
Quoted 1 line
the
include/configfiles indicates that there are fiveboard 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@@ -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
HeikoSignature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
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_p1asupportHello 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_p1asupport...snip...
Quoted 6 lines
Quoted 1 line
Quoted 1 line
the
include/configfiles indicates that there are fiveboard 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@@ -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.txtThere 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