You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
3.0KB

  1. /***************************************************************************
  2. * Copyright (C) 2007, 2008 by Ben Dooks *
  3. * ben@fluff.org *
  4. * *
  5. * This program is free software; you can redistribute it and/or modify *
  6. * it under the terms of the GNU General Public License as published by *
  7. * the Free Software Foundation; either version 2 of the License, or *
  8. * (at your option) any later version. *
  9. * *
  10. * This program is distributed in the hope that it will be useful, *
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  13. * GNU General Public License for more details. *
  14. * *
  15. * You should have received a copy of the GNU General Public License *
  16. * along with this program; if not, write to the *
  17. * Free Software Foundation, Inc., *
  18. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
  19. ***************************************************************************/
  20. #ifndef S3C24xx_NAND_H
  21. #define S3C24xx_NAND_H
  22. /*
  23. * S3C24XX Series OpenOCD NAND Flash controller support.
  24. *
  25. * Many thanks to Simtec Electronics for sponsoring this work.
  26. */
  27. #include "imp.h"
  28. #include "s3c24xx_regs.h"
  29. #include <target/target.h>
  30. struct s3c24xx_nand_controller {
  31. /* register addresses */
  32. uint32_t cmd;
  33. uint32_t addr;
  34. uint32_t data;
  35. uint32_t nfstat;
  36. };
  37. /* Default to using the un-translated NAND register based address */
  38. #undef S3C2410_NFREG
  39. #define S3C2410_NFREG(x) ((x) + 0x4e000000)
  40. #define S3C24XX_DEVICE_COMMAND() \
  41. COMMAND_HELPER(s3c24xx_nand_device_command, \
  42. struct nand_device *nand, \
  43. struct s3c24xx_nand_controller **info)
  44. S3C24XX_DEVICE_COMMAND();
  45. #define CALL_S3C24XX_DEVICE_COMMAND(d, i) \
  46. do { \
  47. int retval = CALL_COMMAND_HANDLER(s3c24xx_nand_device_command, d, i); \
  48. if (ERROR_OK != retval) \
  49. return retval; \
  50. } while (0)
  51. int s3c24xx_reset(struct nand_device *nand);
  52. int s3c24xx_command(struct nand_device *nand, uint8_t command);
  53. int s3c24xx_address(struct nand_device *nand, uint8_t address);
  54. int s3c24xx_write_data(struct nand_device *nand, uint16_t data);
  55. int s3c24xx_read_data(struct nand_device *nand, void *data);
  56. #define s3c24xx_write_page NULL
  57. #define s3c24xx_read_page NULL
  58. /* code shared between different controllers */
  59. int s3c2440_nand_ready(struct nand_device *nand, int timeout);
  60. int s3c2440_read_block_data(struct nand_device *nand,
  61. uint8_t *data, int data_size);
  62. int s3c2440_write_block_data(struct nand_device *nand,
  63. uint8_t *data, int data_size);
  64. #endif /* S3C24xx_NAND_H */