1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2007, 2008 by Ben Dooks *
6 ***************************************************************************/
9 * S3C24XX Series OpenOCD NAND Flash controller support.
11 * Many thanks to Simtec Electronics for sponsoring this work.
20 S3C24XX_DEVICE_COMMAND()
24 struct s3c24xx_nand_controller *s3c24xx_info;
25 s3c24xx_info = malloc(sizeof(struct s3c24xx_nand_controller));
27 LOG_ERROR("no memory for nand controller");
31 nand->controller_priv = s3c24xx_info;
37 int s3c24xx_reset(struct nand_device *nand)
39 struct s3c24xx_nand_controller *s3c24xx_info = nand->controller_priv;
40 struct target *target = nand->target;
42 if (target->state != TARGET_HALTED) {
43 LOG_ERROR("target must be halted to use S3C24XX NAND flash controller");
44 return ERROR_NAND_OPERATION_FAILED;
47 target_write_u32(target, s3c24xx_info->cmd, 0xff);
52 int s3c24xx_command(struct nand_device *nand, uint8_t command)
54 struct s3c24xx_nand_controller *s3c24xx_info = nand->controller_priv;
55 struct target *target = nand->target;
57 if (target->state != TARGET_HALTED) {
58 LOG_ERROR("target must be halted to use S3C24XX NAND flash controller");
59 return ERROR_NAND_OPERATION_FAILED;
62 target_write_u16(target, s3c24xx_info->cmd, command);
66 int s3c24xx_address(struct nand_device *nand, uint8_t address)
68 struct s3c24xx_nand_controller *s3c24xx_info = nand->controller_priv;
69 struct target *target = nand->target;
71 if (target->state != TARGET_HALTED) {
72 LOG_ERROR("target must be halted to use S3C24XX NAND flash controller");
73 return ERROR_NAND_OPERATION_FAILED;
76 target_write_u16(target, s3c24xx_info->addr, address);
80 int s3c24xx_write_data(struct nand_device *nand, uint16_t data)
82 struct s3c24xx_nand_controller *s3c24xx_info = nand->controller_priv;
83 struct target *target = nand->target;
85 if (target->state != TARGET_HALTED) {
86 LOG_ERROR("target must be halted to use S3C24XX NAND flash controller");
87 return ERROR_NAND_OPERATION_FAILED;
90 target_write_u8(target, s3c24xx_info->data, data);
94 int s3c24xx_read_data(struct nand_device *nand, void *data)
96 struct s3c24xx_nand_controller *s3c24xx_info = nand->controller_priv;
97 struct target *target = nand->target;
99 if (target->state != TARGET_HALTED) {
100 LOG_ERROR("target must be halted to use S3C24XX NAND flash controller");
101 return ERROR_NAND_OPERATION_FAILED;
104 target_read_u8(target, s3c24xx_info->data, data);