Identical to the existing 2412/2443 support except for the base address and NFCONF value (bit 2 is reserved and should be written as 1 ref UM).
Tested on a s3c6410 board, but controller is identical in 6400/6410 except for 8bit MLC ECC support in 6410 which isn't supported by the driver. Signed-off-by: Peter Korsgaard <jac...@sunsite.dk> --- doc/openocd.texi | 3 ++- src/flash/nand/Makefile.am | 1 + src/flash/nand/driver.c | 2 ++ src/flash/nand/{s3c2443.c => s3c6400.c} | 28 ++++++++++++---------------- 4 files changed, 17 insertions(+), 17 deletions(-) copy src/flash/nand/{s3c2443.c => s3c6400.c} (81%) diff --git a/doc/openocd.texi b/doc/openocd.texi index 0eb40b1..7d2c0a6 100644 --- a/doc/openocd.texi +++ b/doc/openocd.texi @@ -5005,7 +5005,8 @@ change any behavior. @deffnx {NAND Driver} s3c2412 @deffnx {NAND Driver} s3c2440 @deffnx {NAND Driver} s3c2443 -These S3C24xx family controllers don't have any special +...@deffnx {NAND Driver} s3c6400 +These S3C family controllers don't have any special @command{nand device} options, and don't define any specialized commands. At this writing, their drivers don't include @code{write_page} diff --git a/src/flash/nand/Makefile.am b/src/flash/nand/Makefile.am index 2ffa4c4..a495dfd 100644 --- a/src/flash/nand/Makefile.am +++ b/src/flash/nand/Makefile.am @@ -25,6 +25,7 @@ NAND_DRIVERS = \ s3c2412.c \ s3c2440.c \ s3c2443.c \ + s3c6400.c \ at91sam9.c noinst_HEADERS = \ diff --git a/src/flash/nand/driver.c b/src/flash/nand/driver.c index 0e174b2..1c28dbc 100644 --- a/src/flash/nand/driver.c +++ b/src/flash/nand/driver.c @@ -36,6 +36,7 @@ extern struct nand_flash_controller s3c2410_nand_controller; extern struct nand_flash_controller s3c2412_nand_controller; extern struct nand_flash_controller s3c2440_nand_controller; extern struct nand_flash_controller s3c2443_nand_controller; +extern struct nand_flash_controller s3c6400_nand_controller; extern struct nand_flash_controller imx31_nand_flash_controller; extern struct nand_flash_controller at91sam9_nand_controller; @@ -51,6 +52,7 @@ static struct nand_flash_controller *nand_flash_controllers[] = &s3c2412_nand_controller, &s3c2440_nand_controller, &s3c2443_nand_controller, + &s3c6400_nand_controller, &imx31_nand_flash_controller, &at91sam9_nand_controller, /* &boundary_scan_nand_controller, */ diff --git a/src/flash/nand/s3c2443.c b/src/flash/nand/s3c6400.c similarity index 81% copy from src/flash/nand/s3c2443.c copy to src/flash/nand/s3c6400.c index d341477..20b6cc1 100644 --- a/src/flash/nand/s3c2443.c +++ b/src/flash/nand/s3c6400.c @@ -1,6 +1,6 @@ /*************************************************************************** - * Copyright (C) 2007, 2008 by Ben Dooks * - * b...@fluff.org * + * Copyright (C) 2010 by Peter Korsgaard <jac...@sunsite.dk> * + * Heavily based on s3c2412.c by Ben Dooks <b...@fluff.org> * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -18,20 +18,16 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -/* - * S3C2443 OpenOCD NAND Flash controller support. - * - * Many thanks to Simtec Electronics for sponsoring this work. - */ - #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "s3c24xx.h" +/* s3c64xx uses another base address for the nand controller than 24xx */ +#undef S3C2410_NFREG +#define S3C2410_NFREG(x) ((x) + 0x70200000) - -NAND_DEVICE_COMMAND_HANDLER(s3c2443_nand_device_command) +NAND_DEVICE_COMMAND_HANDLER(s3c6400_nand_device_command) { struct s3c24xx_nand_controller *info; CALL_S3C24XX_DEVICE_COMMAND(nand, &info); @@ -45,7 +41,7 @@ NAND_DEVICE_COMMAND_HANDLER(s3c2443_nand_device_command) return ERROR_OK; } -static int s3c2443_init(struct nand_device *nand) +static int s3c6400_init(struct nand_device *nand) { struct s3c24xx_nand_controller *s3c24xx_info = nand->controller_priv; struct target *target = s3c24xx_info->target; @@ -53,7 +49,7 @@ static int s3c2443_init(struct nand_device *nand) target_write_u32(target, S3C2410_NFCONF, S3C2440_NFCONF_TACLS(3) | S3C2440_NFCONF_TWRPH0(7) | - S3C2440_NFCONF_TWRPH1(7)); + S3C2440_NFCONF_TWRPH1(7) | 4); target_write_u32(target, S3C2440_NFCONT, S3C2412_NFCONT_INIT_MAIN_ECC | @@ -62,10 +58,10 @@ static int s3c2443_init(struct nand_device *nand) return ERROR_OK; } -struct nand_flash_controller s3c2443_nand_controller = { - .name = "s3c2443", - .nand_device_command = &s3c2443_nand_device_command, - .init = &s3c2443_init, +struct nand_flash_controller s3c6400_nand_controller = { + .name = "s3c6400", + .nand_device_command = &s3c6400_nand_device_command, + .init = &s3c6400_init, .reset = &s3c24xx_reset, .command = &s3c24xx_command, .address = &s3c24xx_address, -- 1.6.5 _______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development