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.
 
 
 
 
 
 

118 lines
4.3 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2009 by Alexei Babich *
  3. * Rezonans plc., Chelyabinsk, Russia *
  4. * impatt@mail.ru *
  5. * *
  6. * This program is free software; you can redistribute it and/or modify *
  7. * it under the terms of the GNU General Public License as published by *
  8. * the Free Software Foundation; either version 2 of the License, or *
  9. * (at your option) any later version. *
  10. * *
  11. * This program is distributed in the hope that it will be useful, *
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  14. * GNU General Public License for more details. *
  15. * *
  16. * You should have received a copy of the GNU General Public License *
  17. * along with this program; if not, write to the *
  18. * Free Software Foundation, Inc., *
  19. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  20. ***************************************************************************/
  21. /*
  22. * Freescale iMX3* OpenOCD NAND Flash controller support.
  23. *
  24. * Many thanks to Ben Dooks for writing s3c24xx driver.
  25. */
  26. #include <nand.h>
  27. #define MX3_NF_BASE_ADDR 0xb8000000
  28. #define MX3_NF_BUFSIZ (MX3_NF_BASE_ADDR + 0xe00)
  29. #define MX3_NF_BUFADDR (MX3_NF_BASE_ADDR + 0xe04)
  30. #define MX3_NF_FADDR (MX3_NF_BASE_ADDR + 0xe06)
  31. #define MX3_NF_FCMD (MX3_NF_BASE_ADDR + 0xe08)
  32. #define MX3_NF_BUFCFG (MX3_NF_BASE_ADDR + 0xe0a)
  33. #define MX3_NF_ECCSTATUS (MX3_NF_BASE_ADDR + 0xe0c)
  34. #define MX3_NF_ECCMAINPOS (MX3_NF_BASE_ADDR + 0xe0e)
  35. #define MX3_NF_ECCSPAREPOS (MX3_NF_BASE_ADDR + 0xe10)
  36. #define MX3_NF_FWP (MX3_NF_BASE_ADDR + 0xe12)
  37. #define MX3_NF_LOCKSTART (MX3_NF_BASE_ADDR + 0xe14)
  38. #define MX3_NF_LOCKEND (MX3_NF_BASE_ADDR + 0xe16)
  39. #define MX3_NF_FWPSTATUS (MX3_NF_BASE_ADDR + 0xe18)
  40. /*
  41. * all bits not marked as self-clearing bit
  42. */
  43. #define MX3_NF_CFG1 (MX3_NF_BASE_ADDR + 0xe1a)
  44. #define MX3_NF_CFG2 (MX3_NF_BASE_ADDR + 0xe1c)
  45. #define MX3_NF_MAIN_BUFFER0 (MX3_NF_BASE_ADDR + 0x0000)
  46. #define MX3_NF_MAIN_BUFFER1 (MX3_NF_BASE_ADDR + 0x0200)
  47. #define MX3_NF_MAIN_BUFFER2 (MX3_NF_BASE_ADDR + 0x0400)
  48. #define MX3_NF_MAIN_BUFFER3 (MX3_NF_BASE_ADDR + 0x0600)
  49. #define MX3_NF_SPARE_BUFFER0 (MX3_NF_BASE_ADDR + 0x0800)
  50. #define MX3_NF_SPARE_BUFFER1 (MX3_NF_BASE_ADDR + 0x0810)
  51. #define MX3_NF_SPARE_BUFFER2 (MX3_NF_BASE_ADDR + 0x0820)
  52. #define MX3_NF_SPARE_BUFFER3 (MX3_NF_BASE_ADDR + 0x0830)
  53. #define MX3_NF_MAIN_BUFFER_LEN 512
  54. #define MX3_NF_SPARE_BUFFER_LEN 16
  55. #define MX3_NF_LAST_BUFFER_ADDR ((MX3_NF_SPARE_BUFFER3) + MX3_NF_SPARE_BUFFER_LEN - 2)
  56. /* bits in MX3_NF_CFG1 register */
  57. #define MX3_NF_BIT_SPARE_ONLY_EN (1<<2)
  58. #define MX3_NF_BIT_ECC_EN (1<<3)
  59. #define MX3_NF_BIT_INT_DIS (1<<4)
  60. #define MX3_NF_BIT_BE_EN (1<<5)
  61. #define MX3_NF_BIT_RESET_EN (1<<6)
  62. #define MX3_NF_BIT_FORCE_CE (1<<7)
  63. /* bits in MX3_NF_CFG2 register */
  64. /*Flash Command Input*/
  65. #define MX3_NF_BIT_OP_FCI (1<<0)
  66. /*
  67. * Flash Address Input
  68. */
  69. #define MX3_NF_BIT_OP_FAI (1<<1)
  70. /*
  71. * Flash Data Input
  72. */
  73. #define MX3_NF_BIT_OP_FDI (1<<2)
  74. /* see "enum mx_dataout_type" below */
  75. #define MX3_NF_BIT_DATAOUT_TYPE(x) ((x)<<3)
  76. #define MX3_NF_BIT_OP_DONE (1<<15)
  77. #define MX3_CCM_CGR2 0x53f80028
  78. #define MX3_GPR 0x43fac008
  79. #define MX3_PCSR 0x53f8000c
  80. enum mx_dataout_type
  81. {
  82. MX3_NF_DATAOUT_PAGE = 1,
  83. MX3_NF_DATAOUT_NANDID = 2,
  84. MX3_NF_DATAOUT_NANDSTATUS = 4,
  85. };
  86. enum mx_nf_finalize_action
  87. {
  88. MX3_NF_FIN_NONE,
  89. MX3_NF_FIN_DATAOUT,
  90. };
  91. struct mx3_nf_flags
  92. {
  93. unsigned host_little_endian:1;
  94. unsigned target_little_endian:1;
  95. unsigned nand_readonly:1;
  96. unsigned one_kb_sram:1;
  97. unsigned hw_ecc_enabled:1;
  98. };
  99. typedef struct mx3_nf_controller_s
  100. {
  101. struct target_s *target;
  102. enum mx_dataout_type optype;
  103. enum mx_nf_finalize_action fin;
  104. struct mx3_nf_flags flags;
  105. } mx3_nf_controller_t;