atmel_qspi.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /*
  2. * Copyright (C) 2016
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #ifndef __ATMEL_QSPI_H__
  7. #define __ATMEL_QSPI_H__
  8. /*
  9. * Register Definitions
  10. */
  11. #define QSPI_CR 0x00 /* Control Register */
  12. #define QSPI_MR 0x04 /* Mode Register */
  13. #define QSPI_RDR 0x08 /* Receive Data Register */
  14. #define QSPI_TDR 0x0c /* Transmit Data Register */
  15. #define QSPI_SR 0x10 /* Status Register */
  16. #define QSPI_IER 0x14 /* Interrupt Enable Register */
  17. #define QSPI_IDR 0x18 /* Interrupt Disable Register */
  18. #define QSPI_IMR 0x1c /* Interrupt Mask Register */
  19. #define QSPI_SCR 0x20 /* Serial Clock Register */
  20. #define QSPI_IAR 0x30 /* Instruction Address Register */
  21. #define QSPI_ICR 0x34 /* Instruction Code Register */
  22. #define QSPI_IFR 0x38 /* Instruction Frame Register */
  23. /* 0x3c Reserved */
  24. #define QSPI_SMR 0x40 /* Scrambling Mode Register */
  25. #define QSPI_SKR 0x44 /* Scrambling Key Register */
  26. /* 0x48 ~ 0xe0 */
  27. #define QSPI_WPMR 0xe4 /* Write Protection Mode Register */
  28. #define QSPI_WPSR 0xe8 /* Write Protection Status Register */
  29. /* 0xec ~ 0xf8 Reserved */
  30. /* 0xfc Reserved */
  31. /*
  32. * Register Field Definitions
  33. */
  34. /* QSPI_CR */
  35. #define QSPI_CR_QSPIEN BIT(0) /* QSPI Enable */
  36. #define QSPI_CR_QSPIDIS BIT(1) /* QSPI Disable */
  37. #define QSPI_CR_SWRST BIT(7) /* QSPI Software Reset */
  38. #define QSPI_CR_LASTXFER BIT(24) /* Last Transfer */
  39. /* QSPI_MR */
  40. #define QSPI_MR_SMM BIT(0) /* Serial Memort Mode */
  41. #define QSPI_MR_SMM_SPI 0
  42. #define QSPI_MR_SMM_MEMORY QSPI_MR_SMM
  43. #define QSPI_MR_LLB BIT(1) /* Local Localback Enable */
  44. #define QSPI_MR_LLB_DISABLED 0
  45. #define QSPI_MR_LLB_ENABLED QSPI_MR_LLB
  46. #define QSPI_MR_WDRBT BIT(2) /* Wait Data Read Before Transfer */
  47. #define QSPI_MR_WDRBT_DISABLED 0
  48. #define QSPI_MR_WDRBT_ENABLED QSPI_MR_WDRBT
  49. #define QSPI_MR_SMRM BIT(3) /* Serial Memory Register Mode */
  50. #define QSPI_MR_SMRM_AHB 0
  51. #define QSPI_MR_SMRM_APB QSPI_MR_SMRM
  52. #define QSPI_MR_CSMODE GENMASK(5, 4) /* Chip Select Mode */
  53. #define QSPI_MR_CSMODE_NOT_RELOADED (0x0u << 4)
  54. #define QSPI_MR_CSMODE_LASTXFER (0x1u << 4)
  55. #define QSPI_MR_CSMODE_SYSTEMATICALLY (0x2u << 4)
  56. #define QSPI_MR_NBBITS GENMASK(11, 8) /*
  57. * Number of Bits Per
  58. * Transfer
  59. */
  60. #define QSPI_MR_NBBITS_8_BIT (0x0u << 8)
  61. #define QSPI_MR_NBBITS_16_BIT (0x8u << 8)
  62. #define QSPI_MR_DLYBCT GENMASK(23, 16) /*
  63. * Delay Between Consecutive
  64. * Transfers
  65. */
  66. #define QSPI_MR_DLYCS GENMASK(31, 24) /* Minimum Inactive QCS Delay */
  67. /* QSPI_SR */
  68. #define QSPI_SR_RDRF BIT(0) /* Receive Data Register Full */
  69. #define QSPI_SR_TDRE BIT(1) /* Transmit Data Register Empty */
  70. #define QSPI_SR_TXEMPTY BIT(2) /* Transmission Registers Empty */
  71. #define QSPI_SR_OVRES BIT(3) /* Overrun Error Status */
  72. #define QSPI_SR_CSR BIT(8) /* Chip Select Rise */
  73. #define QSPI_SR_CSS BIT(9) /* Chip Select Status */
  74. #define QSPI_SR_INSTRE BIT(10) /* Instruction End Status */
  75. #define QSPI_SR_QSPIENS BIT(24) /* QSPI Enable Status */
  76. /* QSPI_SCR */
  77. #define QSPI_SCR_CPOL BIT(0) /* Clock Polarity */
  78. #define QSPI_SCR_CPOL_(x) ((x) << 0)
  79. #define QSPI_SCR_CPHA BIT(1) /* Clock Phase */
  80. #define QSPI_SCR_CPHA_(x) ((x) << 1)
  81. #define QSPI_SCR_SCBR GENMASK(15, 8) /* Serial Clock Baud Rate */
  82. #define QSPI_SCR_SCBR_(x) (((x) << 8) & QSPI_SCR_SCBR)
  83. #define QSPI_SCR_DLYBS GENMASK(23, 16)
  84. #define QSPI_SCR_DLYBS_(x) (((x) << 16) & QSPI_SCR_DLYBS) /*
  85. * Delay Before
  86. * QSCK
  87. */
  88. /* QSPI_ICR */
  89. #define QSPI_ICR_INST GENMASK(7, 0)
  90. #define QSPI_ICR_INST_(x) (((x) << 0) & QSPI_ICR_INST) /*
  91. * Instruction
  92. * Code
  93. */
  94. #define QSPI_ICR_OPT GENMASK(23, 16)
  95. #define QSPI_ICR_OPT_(x) (((x) << 16) & QSPI_ICR_OPT) /*
  96. * Option
  97. * Code
  98. */
  99. /* QSPI_IFR */
  100. #define QSPI_IFR_WIDTH GENMASK(2, 0) /*
  101. * Width of Instruction Code,
  102. * Address, Option Code and Data
  103. */
  104. #define QSPI_IFR_WIDTH_SINGLE_BIT_SPI (0x0u << 0)
  105. #define QSPI_IFR_WIDTH_DUAL_OUTPUT (0x1u << 0)
  106. #define QSPI_IFR_WIDTH_QUAD_OUTPUT (0x2u << 0)
  107. #define QSPI_IFR_WIDTH_DUAL_IO (0x3u << 0)
  108. #define QSPI_IFR_WIDTH_QUAD_IO (0x4u << 0)
  109. #define QSPI_IFR_WIDTH_DUAL_CMD (0x5u << 0)
  110. #define QSPI_IFR_WIDTH_QUAD_CMD (0x6u << 0)
  111. #define QSPI_IFR_WIDTH_(x) (((x) << 0) & QSPI_IFR_WIDTH)
  112. #define QSPI_IFR_INSTEN BIT(4) /* Instruction Enable*/
  113. #define QSPI_IFR_ADDREN BIT(5) /* Address Enable*/
  114. #define QSPI_IFR_OPTEN BIT(6) /* Option Enable*/
  115. #define QSPI_IFR_DATAEN BIT(7) /* Data Enable*/
  116. #define QSPI_IFR_OPTL GENMASK(9, 8) /* Option Code Length */
  117. #define QSPI_IFR_OPTL_1BIT (0x0u << 8)
  118. #define QSPI_IFR_OPTL_2BIT (0x1u << 8)
  119. #define QSPI_IFR_OPTL_4BIT (0x2u << 8)
  120. #define QSPI_IFR_OPTL_8BIT (0x3u << 8)
  121. #define QSPI_IFR_ADDRL BIT(10) /* Address Length */
  122. #define QSPI_IFR_ADDRL_24_BIT 0
  123. #define QSPI_IFR_ADDRL_32_BIT QSPI_IFR_ADDRL
  124. #define QSPI_IFR_TFRTYPE GENMASK(13, 12) /* Data Transfer Type */
  125. #define QSPI_IFR_TFRTYPE_READ (0x0u << 12)
  126. #define QSPI_IFR_TFRTYPE_READ_MEMORY (0x1u << 12)
  127. #define QSPI_IFR_TFRTYPE_WRITE (0x2u << 12)
  128. #define QSPI_IFR_TFRTYPE_WRITE_MEMORY (0x3u << 12)
  129. #define QSPI_IFR_TFRTYPE_(x) (((x) << 12) & QSPI_IFR_TFRTYPE)
  130. #define QSPI_IFR_CRM BIT(14) /* Continuous Read Mode */
  131. #define QSPI_IFR_NBDUM GENMASK(20, 16)
  132. #define QSPI_IFR_NBDUM_(x) (((x) << 16) & QSPI_IFR_NBDUM) /*
  133. * Number Of
  134. * Dummy Cycles
  135. */
  136. struct atmel_qspi_platdata {
  137. void *regbase;
  138. void *membase;
  139. };
  140. struct atmel_qspi_priv {
  141. ulong bus_clk_rate;
  142. void *regbase;
  143. void *membase;
  144. };
  145. #include <asm/io.h>
  146. static inline u32 qspi_readl(struct atmel_qspi_priv *aq, u32 reg)
  147. {
  148. return readl(aq->regbase + reg);
  149. }
  150. static inline void qspi_writel(struct atmel_qspi_priv *aq, u32 reg, u32 value)
  151. {
  152. writel(value, aq->regbase + reg);
  153. }
  154. #endif /* __ATMEL_QSPI_H__ */