diff --git a/src/flash/lpc3180_nand_controller.c b/src/flash/lpc3180_nand_controller.c index ac079c67e..309890cb4 100644 --- a/src/flash/lpc3180_nand_controller.c +++ b/src/flash/lpc3180_nand_controller.c @@ -24,37 +24,8 @@ #include "lpc3180_nand_controller.h" #include "nand.h" -static int lpc3180_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device); -static int lpc3180_register_commands(struct command_context_s *cmd_ctx); -static int lpc3180_init(struct nand_device_s *device); static int lpc3180_reset(struct nand_device_s *device); -static int lpc3180_command(struct nand_device_s *device, uint8_t command); -static int lpc3180_address(struct nand_device_s *device, uint8_t address); -static int lpc3180_write_data(struct nand_device_s *device, uint16_t data); -static int lpc3180_read_data(struct nand_device_s *device, void *data); -static int lpc3180_write_page(struct nand_device_s *device, uint32_t page, uint8_t *data, uint32_t data_size, uint8_t *oob, uint32_t oob_size); -static int lpc3180_read_page(struct nand_device_s *device, uint32_t page, uint8_t *data, uint32_t data_size, uint8_t *oob, uint32_t oob_size); static int lpc3180_controller_ready(struct nand_device_s *device, int timeout); -static int lpc3180_nand_ready(struct nand_device_s *device, int timeout); - -static int handle_lpc3180_select_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); - -nand_flash_controller_t lpc3180_nand_controller = -{ - .name = "lpc3180", - .nand_device_command = lpc3180_nand_device_command, - .register_commands = lpc3180_register_commands, - .init = lpc3180_init, - .reset = lpc3180_reset, - .command = lpc3180_command, - .address = lpc3180_address, - .write_data = lpc3180_write_data, - .read_data = lpc3180_read_data, - .write_page = lpc3180_write_page, - .read_page = lpc3180_read_page, - .controller_ready = lpc3180_controller_ready, - .nand_ready = lpc3180_nand_ready, -}; /* nand device lpc3180 */ @@ -95,15 +66,6 @@ static int lpc3180_nand_device_command(struct command_context_s *cmd_ctx, char * return ERROR_OK; } -static int lpc3180_register_commands(struct command_context_s *cmd_ctx) -{ - command_t *lpc3180_cmd = register_command(cmd_ctx, NULL, "lpc3180", NULL, COMMAND_ANY, "commands specific to the LPC3180 NAND flash controllers"); - - register_command(cmd_ctx, lpc3180_cmd, "select", handle_lpc3180_select_command, COMMAND_EXEC, "select <'mlc'|'slc'> controller (default is mlc)"); - - return ERROR_OK; -} - static int lpc3180_pll(int fclkin, uint32_t pll_ctrl) { int bypass = (pll_ctrl & 0x8000) >> 15; @@ -910,3 +872,28 @@ static int handle_lpc3180_select_command(struct command_context_s *cmd_ctx, char return ERROR_OK; } + +static int lpc3180_register_commands(struct command_context_s *cmd_ctx) +{ + command_t *lpc3180_cmd = register_command(cmd_ctx, NULL, "lpc3180", NULL, COMMAND_ANY, "commands specific to the LPC3180 NAND flash controllers"); + + register_command(cmd_ctx, lpc3180_cmd, "select", handle_lpc3180_select_command, COMMAND_EXEC, "select <'mlc'|'slc'> controller (default is mlc)"); + + return ERROR_OK; +} + +nand_flash_controller_t lpc3180_nand_controller = { + .name = "lpc3180", + .nand_device_command = lpc3180_nand_device_command, + .register_commands = lpc3180_register_commands, + .init = lpc3180_init, + .reset = lpc3180_reset, + .command = lpc3180_command, + .address = lpc3180_address, + .write_data = lpc3180_write_data, + .read_data = lpc3180_read_data, + .write_page = lpc3180_write_page, + .read_page = lpc3180_read_page, + .controller_ready = lpc3180_controller_ready, + .nand_ready = lpc3180_nand_ready, + }; diff --git a/src/flash/nand.c b/src/flash/nand.c index 8f67624db..ea1cb9e69 100644 --- a/src/flash/nand.c +++ b/src/flash/nand.c @@ -28,16 +28,6 @@ #include "time_support.h" #include "fileio.h" -static int handle_nand_list_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_probe_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_check_bad_blocks_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); - -static int handle_nand_raw_access_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); - static int nand_read_page(struct nand_device_s *device, uint32_t page, uint8_t *data, uint32_t data_size, uint8_t *oob, uint32_t oob_size); //static int nand_read_plain(struct nand_device_s *device, uint32_t address, uint8_t *data, uint32_t data_size); @@ -297,33 +287,6 @@ int nand_register_commands(struct command_context_s *cmd_ctx) return ERROR_OK; } -int nand_init(struct command_context_s *cmd_ctx) -{ - if (nand_devices) - { - register_command(cmd_ctx, nand_cmd, "list", handle_nand_list_command, COMMAND_EXEC, - "list configured NAND flash devices"); - register_command(cmd_ctx, nand_cmd, "info", handle_nand_info_command, COMMAND_EXEC, - "print info about NAND flash device "); - register_command(cmd_ctx, nand_cmd, "probe", handle_nand_probe_command, COMMAND_EXEC, - "identify NAND flash device "); - register_command(cmd_ctx, nand_cmd, "check_bad_blocks", handle_nand_check_bad_blocks_command, COMMAND_EXEC, - "check NAND flash device for bad blocks [ ]"); - register_command(cmd_ctx, nand_cmd, "erase", - handle_nand_erase_command, COMMAND_EXEC, - "erase blocks on NAND flash device [ ]"); - register_command(cmd_ctx, nand_cmd, "dump", handle_nand_dump_command, COMMAND_EXEC, - "dump from NAND flash device " - " [oob_raw | oob_only]"); - register_command(cmd_ctx, nand_cmd, "write", handle_nand_write_command, COMMAND_EXEC, - "write to NAND flash device [oob_raw | oob_only | oob_softecc | oob_softecc_kw]"); - register_command(cmd_ctx, nand_cmd, "raw_access", handle_nand_raw_access_command, COMMAND_EXEC, - "raw access to NAND flash device ['enable'|'disable']"); - } - - return ERROR_OK; -} - nand_device_t *get_nand_device_by_num(int num) { nand_device_t *p; @@ -1639,3 +1602,40 @@ static int handle_nand_raw_access_command(struct command_context_s *cmd_ctx, cha return ERROR_OK; } + +int nand_init(struct command_context_s *cmd_ctx) +{ + if (!nand_devices) + return ERROR_OK; + + register_command(cmd_ctx, nand_cmd, "list", + handle_nand_list_command, COMMAND_EXEC, + "list configured NAND flash devices"); + register_command(cmd_ctx, nand_cmd, "info", + handle_nand_info_command, COMMAND_EXEC, + "print info about NAND flash device "); + register_command(cmd_ctx, nand_cmd, "probe", + handle_nand_probe_command, COMMAND_EXEC, + "identify NAND flash device "); + + register_command(cmd_ctx, nand_cmd, "check_bad_blocks", + handle_nand_check_bad_blocks_command, COMMAND_EXEC, + "check NAND flash device for bad blocks [ ]"); + register_command(cmd_ctx, nand_cmd, "erase", + handle_nand_erase_command, COMMAND_EXEC, + "erase blocks on NAND flash device [ ]"); + register_command(cmd_ctx, nand_cmd, "dump", + handle_nand_dump_command, COMMAND_EXEC, + "dump from NAND flash device " + " [oob_raw | oob_only]"); + register_command(cmd_ctx, nand_cmd, "write", + handle_nand_write_command, COMMAND_EXEC, + "write to NAND flash device " + "[oob_raw | oob_only | oob_softecc | oob_softecc_kw]"); + + register_command(cmd_ctx, nand_cmd, "raw_access", + handle_nand_raw_access_command, COMMAND_EXEC, + "raw access to NAND flash device ['enable'|'disable']"); + + return ERROR_OK; +} diff --git a/src/flash/s3c2410_nand.c b/src/flash/s3c2410_nand.c index 263069768..4ec4f23a2 100644 --- a/src/flash/s3c2410_nand.c +++ b/src/flash/s3c2410_nand.c @@ -30,30 +30,6 @@ #include "s3c24xx_nand.h" - -static int s3c2410_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device); -static int s3c2410_init(struct nand_device_s *device); -static int s3c2410_read_data(struct nand_device_s *device, void *data); -static int s3c2410_write_data(struct nand_device_s *device, uint16_t data); -static int s3c2410_nand_ready(struct nand_device_s *device, int timeout); - -nand_flash_controller_t s3c2410_nand_controller = -{ - .name = "s3c2410", - .nand_device_command = s3c2410_nand_device_command, - .register_commands = s3c24xx_register_commands, - .init = s3c2410_init, - .reset = s3c24xx_reset, - .command = s3c24xx_command, - .address = s3c24xx_address, - .write_data = s3c2410_write_data, - .read_data = s3c2410_read_data, - .write_page = s3c24xx_write_page, - .read_page = s3c24xx_read_page, - .controller_ready = s3c24xx_controller_ready, - .nand_ready = s3c2410_nand_ready, -}; - static int s3c2410_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device) @@ -136,3 +112,19 @@ static int s3c2410_nand_ready(struct nand_device_s *device, int timeout) return 0; } + +nand_flash_controller_t s3c2410_nand_controller = { + .name = "s3c2410", + .nand_device_command = &s3c2410_nand_device_command, + .register_commands = &s3c24xx_register_commands, + .init = &s3c2410_init, + .reset = &s3c24xx_reset, + .command = &s3c24xx_command, + .address = &s3c24xx_address, + .write_data = &s3c2410_write_data, + .read_data = &s3c2410_read_data, + .write_page = s3c24xx_write_page, + .read_page = s3c24xx_read_page, + .controller_ready = &s3c24xx_controller_ready, + .nand_ready = &s3c2410_nand_ready, + }; diff --git a/src/flash/s3c2412_nand.c b/src/flash/s3c2412_nand.c index a7b137193..a995acc7e 100644 --- a/src/flash/s3c2412_nand.c +++ b/src/flash/s3c2412_nand.c @@ -30,29 +30,6 @@ #include "s3c24xx_nand.h" - -static int s3c2412_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device); -static int s3c2412_init(struct nand_device_s *device); - -nand_flash_controller_t s3c2412_nand_controller = -{ - .name = "s3c2412", - .nand_device_command = s3c2412_nand_device_command, - .register_commands = s3c24xx_register_commands, - .init = s3c2412_init, - .reset = s3c24xx_reset, - .command = s3c24xx_command, - .address = s3c24xx_address, - .write_data = s3c24xx_write_data, - .read_data = s3c24xx_read_data, - .write_page = s3c24xx_write_page, - .read_page = s3c24xx_read_page, - .write_block_data = s3c2440_write_block_data, - .read_block_data = s3c2440_read_block_data, - .controller_ready = s3c24xx_controller_ready, - .nand_ready = s3c2440_nand_ready, -}; - static int s3c2412_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device) @@ -89,3 +66,21 @@ static int s3c2412_init(struct nand_device_s *device) return ERROR_OK; } + +nand_flash_controller_t s3c2412_nand_controller = { + .name = "s3c2412", + .nand_device_command = &s3c2412_nand_device_command, + .register_commands = &s3c24xx_register_commands, + .init = &s3c2412_init, + .reset = &s3c24xx_reset, + .command = &s3c24xx_command, + .address = &s3c24xx_address, + .write_data = &s3c24xx_write_data, + .read_data = &s3c24xx_read_data, + .write_page = s3c24xx_write_page, + .read_page = s3c24xx_read_page, + .write_block_data = &s3c2440_write_block_data, + .read_block_data = &s3c2440_read_block_data, + .controller_ready = &s3c24xx_controller_ready, + .nand_ready = &s3c2440_nand_ready, + }; diff --git a/src/flash/s3c2440_nand.c b/src/flash/s3c2440_nand.c index 54875da56..2321382cb 100644 --- a/src/flash/s3c2440_nand.c +++ b/src/flash/s3c2440_nand.c @@ -31,29 +31,6 @@ #include "s3c24xx_nand.h" -static int s3c2440_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device); -static int s3c2440_init(struct nand_device_s *device); -//static int s3c2440_nand_ready(struct nand_device_s *device, int timeout); - -nand_flash_controller_t s3c2440_nand_controller = -{ - .name = "s3c2440", - .nand_device_command = s3c2440_nand_device_command, - .register_commands = s3c24xx_register_commands, - .init = s3c2440_init, - .reset = s3c24xx_reset, - .command = s3c24xx_command, - .address = s3c24xx_address, - .write_data = s3c24xx_write_data, - .read_data = s3c24xx_read_data, - .write_page = s3c24xx_write_page, - .read_page = s3c24xx_read_page, - .write_block_data = s3c2440_write_block_data, - .read_block_data = s3c2440_read_block_data, - .controller_ready = s3c24xx_controller_ready, - .nand_ready = s3c2440_nand_ready, -}; - static int s3c2440_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device) @@ -181,3 +158,21 @@ int s3c2440_write_block_data(struct nand_device_s *device, uint8_t *data, int da return ERROR_OK; } + +nand_flash_controller_t s3c2440_nand_controller = { + .name = "s3c2440", + .nand_device_command = &s3c2440_nand_device_command, + .register_commands = &s3c24xx_register_commands, + .init = &s3c2440_init, + .reset = &s3c24xx_reset, + .command = &s3c24xx_command, + .address = &s3c24xx_address, + .write_data = &s3c24xx_write_data, + .read_data = &s3c24xx_read_data, + .write_page = s3c24xx_write_page, + .read_page = s3c24xx_read_page, + .write_block_data = &s3c2440_write_block_data, + .read_block_data = &s3c2440_read_block_data, + .controller_ready = &s3c24xx_controller_ready, + .nand_ready = &s3c2440_nand_ready, + }; diff --git a/src/flash/s3c2443_nand.c b/src/flash/s3c2443_nand.c index a50689d59..c6effdf8a 100644 --- a/src/flash/s3c2443_nand.c +++ b/src/flash/s3c2443_nand.c @@ -31,28 +31,6 @@ #include "s3c24xx_nand.h" -static int s3c2443_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device); -static int s3c2443_init(struct nand_device_s *device); - -nand_flash_controller_t s3c2443_nand_controller = -{ - .name = "s3c2443", - .nand_device_command = s3c2443_nand_device_command, - .register_commands = s3c24xx_register_commands, - .init = s3c2443_init, - .reset = s3c24xx_reset, - .command = s3c24xx_command, - .address = s3c24xx_address, - .write_data = s3c24xx_write_data, - .read_data = s3c24xx_read_data, - .write_page = s3c24xx_write_page, - .read_page = s3c24xx_read_page, - .write_block_data = s3c2440_write_block_data, - .read_block_data = s3c2440_read_block_data, - .controller_ready = s3c24xx_controller_ready, - .nand_ready = s3c2440_nand_ready, -}; - static int s3c2443_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device) @@ -89,3 +67,21 @@ static int s3c2443_init(struct nand_device_s *device) return ERROR_OK; } + +nand_flash_controller_t s3c2443_nand_controller = { + .name = "s3c2443", + .nand_device_command = &s3c2443_nand_device_command, + .register_commands = &s3c24xx_register_commands, + .init = &s3c2443_init, + .reset = &s3c24xx_reset, + .command = &s3c24xx_command, + .address = &s3c24xx_address, + .write_data = &s3c24xx_write_data, + .read_data = &s3c24xx_read_data, + .write_page = s3c24xx_write_page, + .read_page = s3c24xx_read_page, + .write_block_data = &s3c2440_write_block_data, + .read_block_data = &s3c2440_read_block_data, + .controller_ready = &s3c24xx_controller_ready, + .nand_ready = &s3c2440_nand_ready, + };