fsl_qspi.c 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209
  1. /*
  2. * Copyright 2013-2015 Freescale Semiconductor, Inc.
  3. *
  4. * Freescale Quad Serial Peripheral Interface (QSPI) driver
  5. *
  6. * SPDX-License-Identifier: GPL-2.0+
  7. */
  8. #include <common.h>
  9. #include <malloc.h>
  10. #include <spi.h>
  11. #include <asm/io.h>
  12. #include <linux/sizes.h>
  13. #include <dm.h>
  14. #include <errno.h>
  15. #include <watchdog.h>
  16. #include "fsl_qspi.h"
  17. DECLARE_GLOBAL_DATA_PTR;
  18. #define RX_BUFFER_SIZE 0x80
  19. #ifdef CONFIG_MX6SX
  20. #define TX_BUFFER_SIZE 0x200
  21. #else
  22. #define TX_BUFFER_SIZE 0x40
  23. #endif
  24. #define OFFSET_BITS_MASK GENMASK(23, 0)
  25. #define FLASH_STATUS_WEL 0x02
  26. /* SEQID */
  27. #define SEQID_WREN 1
  28. #define SEQID_FAST_READ 2
  29. #define SEQID_RDSR 3
  30. #define SEQID_SE 4
  31. #define SEQID_CHIP_ERASE 5
  32. #define SEQID_PP 6
  33. #define SEQID_RDID 7
  34. #define SEQID_BE_4K 8
  35. #ifdef CONFIG_SPI_FLASH_BAR
  36. #define SEQID_BRRD 9
  37. #define SEQID_BRWR 10
  38. #define SEQID_RDEAR 11
  39. #define SEQID_WREAR 12
  40. #endif
  41. #define SEQID_WRAR 13
  42. #define SEQID_RDAR 14
  43. /* QSPI CMD */
  44. #define QSPI_CMD_PP 0x02 /* Page program (up to 256 bytes) */
  45. #define QSPI_CMD_RDSR 0x05 /* Read status register */
  46. #define QSPI_CMD_WREN 0x06 /* Write enable */
  47. #define QSPI_CMD_FAST_READ 0x0b /* Read data bytes (high frequency) */
  48. #define QSPI_CMD_BE_4K 0x20 /* 4K erase */
  49. #define QSPI_CMD_CHIP_ERASE 0xc7 /* Erase whole flash chip */
  50. #define QSPI_CMD_SE 0xd8 /* Sector erase (usually 64KiB) */
  51. #define QSPI_CMD_RDID 0x9f /* Read JEDEC ID */
  52. /* Used for Micron, winbond and Macronix flashes */
  53. #define QSPI_CMD_WREAR 0xc5 /* EAR register write */
  54. #define QSPI_CMD_RDEAR 0xc8 /* EAR reigster read */
  55. /* Used for Spansion flashes only. */
  56. #define QSPI_CMD_BRRD 0x16 /* Bank register read */
  57. #define QSPI_CMD_BRWR 0x17 /* Bank register write */
  58. /* Used for Spansion S25FS-S family flash only. */
  59. #define QSPI_CMD_RDAR 0x65 /* Read any device register */
  60. #define QSPI_CMD_WRAR 0x71 /* Write any device register */
  61. /* 4-byte address QSPI CMD - used on Spansion and some Macronix flashes */
  62. #define QSPI_CMD_FAST_READ_4B 0x0c /* Read data bytes (high frequency) */
  63. #define QSPI_CMD_PP_4B 0x12 /* Page program (up to 256 bytes) */
  64. #define QSPI_CMD_SE_4B 0xdc /* Sector erase (usually 64KiB) */
  65. /* fsl_qspi_platdata flags */
  66. #define QSPI_FLAG_REGMAP_ENDIAN_BIG BIT(0)
  67. /* default SCK frequency, unit: HZ */
  68. #define FSL_QSPI_DEFAULT_SCK_FREQ 50000000
  69. /* QSPI max chipselect signals number */
  70. #define FSL_QSPI_MAX_CHIPSELECT_NUM 4
  71. #ifdef CONFIG_DM_SPI
  72. /**
  73. * struct fsl_qspi_platdata - platform data for Freescale QSPI
  74. *
  75. * @flags: Flags for QSPI QSPI_FLAG_...
  76. * @speed_hz: Default SCK frequency
  77. * @reg_base: Base address of QSPI registers
  78. * @amba_base: Base address of QSPI memory mapping
  79. * @amba_total_size: size of QSPI memory mapping
  80. * @flash_num: Number of active slave devices
  81. * @num_chipselect: Number of QSPI chipselect signals
  82. */
  83. struct fsl_qspi_platdata {
  84. u32 flags;
  85. u32 speed_hz;
  86. fdt_addr_t reg_base;
  87. fdt_addr_t amba_base;
  88. fdt_size_t amba_total_size;
  89. u32 flash_num;
  90. u32 num_chipselect;
  91. };
  92. #endif
  93. /**
  94. * struct fsl_qspi_priv - private data for Freescale QSPI
  95. *
  96. * @flags: Flags for QSPI QSPI_FLAG_...
  97. * @bus_clk: QSPI input clk frequency
  98. * @speed_hz: Default SCK frequency
  99. * @cur_seqid: current LUT table sequence id
  100. * @sf_addr: flash access offset
  101. * @amba_base: Base address of QSPI memory mapping of every CS
  102. * @amba_total_size: size of QSPI memory mapping
  103. * @cur_amba_base: Base address of QSPI memory mapping of current CS
  104. * @flash_num: Number of active slave devices
  105. * @num_chipselect: Number of QSPI chipselect signals
  106. * @regs: Point to QSPI register structure for I/O access
  107. */
  108. struct fsl_qspi_priv {
  109. u32 flags;
  110. u32 bus_clk;
  111. u32 speed_hz;
  112. u32 cur_seqid;
  113. u32 sf_addr;
  114. u32 amba_base[FSL_QSPI_MAX_CHIPSELECT_NUM];
  115. u32 amba_total_size;
  116. u32 cur_amba_base;
  117. u32 flash_num;
  118. u32 num_chipselect;
  119. struct fsl_qspi_regs *regs;
  120. };
  121. #ifndef CONFIG_DM_SPI
  122. struct fsl_qspi {
  123. struct spi_slave slave;
  124. struct fsl_qspi_priv priv;
  125. };
  126. #endif
  127. static u32 qspi_read32(u32 flags, u32 *addr)
  128. {
  129. return flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ?
  130. in_be32(addr) : in_le32(addr);
  131. }
  132. static void qspi_write32(u32 flags, u32 *addr, u32 val)
  133. {
  134. flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ?
  135. out_be32(addr, val) : out_le32(addr, val);
  136. }
  137. /* QSPI support swapping the flash read/write data
  138. * in hardware for LS102xA, but not for VF610 */
  139. static inline u32 qspi_endian_xchg(u32 data)
  140. {
  141. #ifdef CONFIG_VF610
  142. return swab32(data);
  143. #else
  144. return data;
  145. #endif
  146. }
  147. static void qspi_set_lut(struct fsl_qspi_priv *priv)
  148. {
  149. struct fsl_qspi_regs *regs = priv->regs;
  150. u32 lut_base;
  151. /* Unlock the LUT */
  152. qspi_write32(priv->flags, &regs->lutkey, LUT_KEY_VALUE);
  153. qspi_write32(priv->flags, &regs->lckcr, QSPI_LCKCR_UNLOCK);
  154. /* Write Enable */
  155. lut_base = SEQID_WREN * 4;
  156. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_WREN) |
  157. PAD0(LUT_PAD1) | INSTR0(LUT_CMD));
  158. qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
  159. qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
  160. qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
  161. /* Fast Read */
  162. lut_base = SEQID_FAST_READ * 4;
  163. #ifdef CONFIG_SPI_FLASH_BAR
  164. qspi_write32(priv->flags, &regs->lut[lut_base],
  165. OPRND0(QSPI_CMD_FAST_READ) | PAD0(LUT_PAD1) |
  166. INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  167. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  168. #else
  169. if (FSL_QSPI_FLASH_SIZE <= SZ_16M)
  170. qspi_write32(priv->flags, &regs->lut[lut_base],
  171. OPRND0(QSPI_CMD_FAST_READ) | PAD0(LUT_PAD1) |
  172. INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  173. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  174. else
  175. qspi_write32(priv->flags, &regs->lut[lut_base],
  176. OPRND0(QSPI_CMD_FAST_READ_4B) |
  177. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) |
  178. OPRND1(ADDR32BIT) | PAD1(LUT_PAD1) |
  179. INSTR1(LUT_ADDR));
  180. #endif
  181. qspi_write32(priv->flags, &regs->lut[lut_base + 1],
  182. OPRND0(8) | PAD0(LUT_PAD1) | INSTR0(LUT_DUMMY) |
  183. OPRND1(RX_BUFFER_SIZE) | PAD1(LUT_PAD1) |
  184. INSTR1(LUT_READ));
  185. qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
  186. qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
  187. /* Read Status */
  188. lut_base = SEQID_RDSR * 4;
  189. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_RDSR) |
  190. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
  191. PAD1(LUT_PAD1) | INSTR1(LUT_READ));
  192. qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
  193. qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
  194. qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
  195. /* Erase a sector */
  196. lut_base = SEQID_SE * 4;
  197. #ifdef CONFIG_SPI_FLASH_BAR
  198. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_SE) |
  199. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  200. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  201. #else
  202. if (FSL_QSPI_FLASH_SIZE <= SZ_16M)
  203. qspi_write32(priv->flags, &regs->lut[lut_base],
  204. OPRND0(QSPI_CMD_SE) | PAD0(LUT_PAD1) |
  205. INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  206. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  207. else
  208. qspi_write32(priv->flags, &regs->lut[lut_base],
  209. OPRND0(QSPI_CMD_SE_4B) | PAD0(LUT_PAD1) |
  210. INSTR0(LUT_CMD) | OPRND1(ADDR32BIT) |
  211. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  212. #endif
  213. qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
  214. qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
  215. qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
  216. /* Erase the whole chip */
  217. lut_base = SEQID_CHIP_ERASE * 4;
  218. qspi_write32(priv->flags, &regs->lut[lut_base],
  219. OPRND0(QSPI_CMD_CHIP_ERASE) |
  220. PAD0(LUT_PAD1) | INSTR0(LUT_CMD));
  221. qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
  222. qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
  223. qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
  224. /* Page Program */
  225. lut_base = SEQID_PP * 4;
  226. #ifdef CONFIG_SPI_FLASH_BAR
  227. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_PP) |
  228. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  229. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  230. #else
  231. if (FSL_QSPI_FLASH_SIZE <= SZ_16M)
  232. qspi_write32(priv->flags, &regs->lut[lut_base],
  233. OPRND0(QSPI_CMD_PP) | PAD0(LUT_PAD1) |
  234. INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  235. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  236. else
  237. qspi_write32(priv->flags, &regs->lut[lut_base],
  238. OPRND0(QSPI_CMD_PP_4B) | PAD0(LUT_PAD1) |
  239. INSTR0(LUT_CMD) | OPRND1(ADDR32BIT) |
  240. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  241. #endif
  242. #ifdef CONFIG_MX6SX
  243. /*
  244. * To MX6SX, OPRND0(TX_BUFFER_SIZE) can not work correctly.
  245. * So, Use IDATSZ in IPCR to determine the size and here set 0.
  246. */
  247. qspi_write32(priv->flags, &regs->lut[lut_base + 1], OPRND0(0) |
  248. PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
  249. #else
  250. qspi_write32(priv->flags, &regs->lut[lut_base + 1],
  251. OPRND0(TX_BUFFER_SIZE) |
  252. PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
  253. #endif
  254. qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
  255. qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
  256. /* READ ID */
  257. lut_base = SEQID_RDID * 4;
  258. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_RDID) |
  259. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(8) |
  260. PAD1(LUT_PAD1) | INSTR1(LUT_READ));
  261. qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
  262. qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
  263. qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
  264. /* SUB SECTOR 4K ERASE */
  265. lut_base = SEQID_BE_4K * 4;
  266. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_BE_4K) |
  267. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  268. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  269. #ifdef CONFIG_SPI_FLASH_BAR
  270. /*
  271. * BRRD BRWR RDEAR WREAR are all supported, because it is hard to
  272. * dynamically check whether to set BRRD BRWR or RDEAR WREAR during
  273. * initialization.
  274. */
  275. lut_base = SEQID_BRRD * 4;
  276. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_BRRD) |
  277. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
  278. PAD1(LUT_PAD1) | INSTR1(LUT_READ));
  279. lut_base = SEQID_BRWR * 4;
  280. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_BRWR) |
  281. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
  282. PAD1(LUT_PAD1) | INSTR1(LUT_WRITE));
  283. lut_base = SEQID_RDEAR * 4;
  284. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_RDEAR) |
  285. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
  286. PAD1(LUT_PAD1) | INSTR1(LUT_READ));
  287. lut_base = SEQID_WREAR * 4;
  288. qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_WREAR) |
  289. PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
  290. PAD1(LUT_PAD1) | INSTR1(LUT_WRITE));
  291. #endif
  292. /*
  293. * Read any device register.
  294. * Used for Spansion S25FS-S family flash only.
  295. */
  296. lut_base = SEQID_RDAR * 4;
  297. qspi_write32(priv->flags, &regs->lut[lut_base],
  298. OPRND0(QSPI_CMD_RDAR) | PAD0(LUT_PAD1) |
  299. INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  300. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  301. qspi_write32(priv->flags, &regs->lut[lut_base + 1],
  302. OPRND0(8) | PAD0(LUT_PAD1) | INSTR0(LUT_DUMMY) |
  303. OPRND1(1) | PAD1(LUT_PAD1) |
  304. INSTR1(LUT_READ));
  305. /*
  306. * Write any device register.
  307. * Used for Spansion S25FS-S family flash only.
  308. */
  309. lut_base = SEQID_WRAR * 4;
  310. qspi_write32(priv->flags, &regs->lut[lut_base],
  311. OPRND0(QSPI_CMD_WRAR) | PAD0(LUT_PAD1) |
  312. INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
  313. PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
  314. qspi_write32(priv->flags, &regs->lut[lut_base + 1],
  315. OPRND0(1) | PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
  316. /* Lock the LUT */
  317. qspi_write32(priv->flags, &regs->lutkey, LUT_KEY_VALUE);
  318. qspi_write32(priv->flags, &regs->lckcr, QSPI_LCKCR_LOCK);
  319. }
  320. #if defined(CONFIG_SYS_FSL_QSPI_AHB)
  321. /*
  322. * If we have changed the content of the flash by writing or erasing,
  323. * we need to invalidate the AHB buffer. If we do not do so, we may read out
  324. * the wrong data. The spec tells us reset the AHB domain and Serial Flash
  325. * domain at the same time.
  326. */
  327. static inline void qspi_ahb_invalid(struct fsl_qspi_priv *priv)
  328. {
  329. struct fsl_qspi_regs *regs = priv->regs;
  330. u32 reg;
  331. reg = qspi_read32(priv->flags, &regs->mcr);
  332. reg |= QSPI_MCR_SWRSTHD_MASK | QSPI_MCR_SWRSTSD_MASK;
  333. qspi_write32(priv->flags, &regs->mcr, reg);
  334. /*
  335. * The minimum delay : 1 AHB + 2 SFCK clocks.
  336. * Delay 1 us is enough.
  337. */
  338. udelay(1);
  339. reg &= ~(QSPI_MCR_SWRSTHD_MASK | QSPI_MCR_SWRSTSD_MASK);
  340. qspi_write32(priv->flags, &regs->mcr, reg);
  341. }
  342. /* Read out the data from the AHB buffer. */
  343. static inline void qspi_ahb_read(struct fsl_qspi_priv *priv, u8 *rxbuf, int len)
  344. {
  345. struct fsl_qspi_regs *regs = priv->regs;
  346. u32 mcr_reg;
  347. void *rx_addr = NULL;
  348. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  349. qspi_write32(priv->flags, &regs->mcr,
  350. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  351. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  352. rx_addr = (void *)(uintptr_t)(priv->cur_amba_base + priv->sf_addr);
  353. /* Read out the data directly from the AHB buffer. */
  354. memcpy(rxbuf, rx_addr, len);
  355. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  356. }
  357. static void qspi_enable_ddr_mode(struct fsl_qspi_priv *priv)
  358. {
  359. u32 reg, reg2;
  360. struct fsl_qspi_regs *regs = priv->regs;
  361. reg = qspi_read32(priv->flags, &regs->mcr);
  362. /* Disable the module */
  363. qspi_write32(priv->flags, &regs->mcr, reg | QSPI_MCR_MDIS_MASK);
  364. /* Set the Sampling Register for DDR */
  365. reg2 = qspi_read32(priv->flags, &regs->smpr);
  366. reg2 &= ~QSPI_SMPR_DDRSMP_MASK;
  367. reg2 |= (2 << QSPI_SMPR_DDRSMP_SHIFT);
  368. qspi_write32(priv->flags, &regs->smpr, reg2);
  369. /* Enable the module again (enable the DDR too) */
  370. reg |= QSPI_MCR_DDR_EN_MASK;
  371. /* Enable bit 29 for imx6sx */
  372. reg |= BIT(29);
  373. qspi_write32(priv->flags, &regs->mcr, reg);
  374. }
  375. /*
  376. * There are two different ways to read out the data from the flash:
  377. * the "IP Command Read" and the "AHB Command Read".
  378. *
  379. * The IC guy suggests we use the "AHB Command Read" which is faster
  380. * then the "IP Command Read". (What's more is that there is a bug in
  381. * the "IP Command Read" in the Vybrid.)
  382. *
  383. * After we set up the registers for the "AHB Command Read", we can use
  384. * the memcpy to read the data directly. A "missed" access to the buffer
  385. * causes the controller to clear the buffer, and use the sequence pointed
  386. * by the QUADSPI_BFGENCR[SEQID] to initiate a read from the flash.
  387. */
  388. static void qspi_init_ahb_read(struct fsl_qspi_priv *priv)
  389. {
  390. struct fsl_qspi_regs *regs = priv->regs;
  391. /* AHB configuration for access buffer 0/1/2 .*/
  392. qspi_write32(priv->flags, &regs->buf0cr, QSPI_BUFXCR_INVALID_MSTRID);
  393. qspi_write32(priv->flags, &regs->buf1cr, QSPI_BUFXCR_INVALID_MSTRID);
  394. qspi_write32(priv->flags, &regs->buf2cr, QSPI_BUFXCR_INVALID_MSTRID);
  395. qspi_write32(priv->flags, &regs->buf3cr, QSPI_BUF3CR_ALLMST_MASK |
  396. (0x80 << QSPI_BUF3CR_ADATSZ_SHIFT));
  397. /* We only use the buffer3 */
  398. qspi_write32(priv->flags, &regs->buf0ind, 0);
  399. qspi_write32(priv->flags, &regs->buf1ind, 0);
  400. qspi_write32(priv->flags, &regs->buf2ind, 0);
  401. /*
  402. * Set the default lut sequence for AHB Read.
  403. * Parallel mode is disabled.
  404. */
  405. qspi_write32(priv->flags, &regs->bfgencr,
  406. SEQID_FAST_READ << QSPI_BFGENCR_SEQID_SHIFT);
  407. /*Enable DDR Mode*/
  408. qspi_enable_ddr_mode(priv);
  409. }
  410. #endif
  411. #ifdef CONFIG_SPI_FLASH_BAR
  412. /* Bank register read/write, EAR register read/write */
  413. static void qspi_op_rdbank(struct fsl_qspi_priv *priv, u8 *rxbuf, u32 len)
  414. {
  415. struct fsl_qspi_regs *regs = priv->regs;
  416. u32 reg, mcr_reg, data, seqid;
  417. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  418. qspi_write32(priv->flags, &regs->mcr,
  419. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  420. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  421. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  422. qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
  423. if (priv->cur_seqid == QSPI_CMD_BRRD)
  424. seqid = SEQID_BRRD;
  425. else
  426. seqid = SEQID_RDEAR;
  427. qspi_write32(priv->flags, &regs->ipcr,
  428. (seqid << QSPI_IPCR_SEQID_SHIFT) | len);
  429. /* Wait previous command complete */
  430. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  431. ;
  432. while (1) {
  433. reg = qspi_read32(priv->flags, &regs->rbsr);
  434. if (reg & QSPI_RBSR_RDBFL_MASK) {
  435. data = qspi_read32(priv->flags, &regs->rbdr[0]);
  436. data = qspi_endian_xchg(data);
  437. memcpy(rxbuf, &data, len);
  438. qspi_write32(priv->flags, &regs->mcr,
  439. qspi_read32(priv->flags, &regs->mcr) |
  440. QSPI_MCR_CLR_RXF_MASK);
  441. break;
  442. }
  443. }
  444. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  445. }
  446. #endif
  447. static void qspi_op_rdid(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)
  448. {
  449. struct fsl_qspi_regs *regs = priv->regs;
  450. u32 mcr_reg, rbsr_reg, data, size;
  451. int i;
  452. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  453. qspi_write32(priv->flags, &regs->mcr,
  454. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  455. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  456. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  457. qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
  458. qspi_write32(priv->flags, &regs->ipcr,
  459. (SEQID_RDID << QSPI_IPCR_SEQID_SHIFT) | 0);
  460. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  461. ;
  462. i = 0;
  463. while ((RX_BUFFER_SIZE >= len) && (len > 0)) {
  464. rbsr_reg = qspi_read32(priv->flags, &regs->rbsr);
  465. if (rbsr_reg & QSPI_RBSR_RDBFL_MASK) {
  466. data = qspi_read32(priv->flags, &regs->rbdr[i]);
  467. data = qspi_endian_xchg(data);
  468. size = (len < 4) ? len : 4;
  469. memcpy(rxbuf, &data, size);
  470. len -= size;
  471. rxbuf++;
  472. i++;
  473. }
  474. }
  475. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  476. }
  477. /* If not use AHB read, read data from ip interface */
  478. static void qspi_op_read(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)
  479. {
  480. struct fsl_qspi_regs *regs = priv->regs;
  481. u32 mcr_reg, data;
  482. int i, size;
  483. u32 to_or_from;
  484. u32 seqid;
  485. if (priv->cur_seqid == QSPI_CMD_RDAR)
  486. seqid = SEQID_RDAR;
  487. else
  488. seqid = SEQID_FAST_READ;
  489. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  490. qspi_write32(priv->flags, &regs->mcr,
  491. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  492. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  493. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  494. to_or_from = priv->sf_addr + priv->cur_amba_base;
  495. while (len > 0) {
  496. WATCHDOG_RESET();
  497. qspi_write32(priv->flags, &regs->sfar, to_or_from);
  498. size = (len > RX_BUFFER_SIZE) ?
  499. RX_BUFFER_SIZE : len;
  500. qspi_write32(priv->flags, &regs->ipcr,
  501. (seqid << QSPI_IPCR_SEQID_SHIFT) |
  502. size);
  503. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  504. ;
  505. to_or_from += size;
  506. len -= size;
  507. i = 0;
  508. while ((RX_BUFFER_SIZE >= size) && (size > 0)) {
  509. data = qspi_read32(priv->flags, &regs->rbdr[i]);
  510. data = qspi_endian_xchg(data);
  511. if (size < 4)
  512. memcpy(rxbuf, &data, size);
  513. else
  514. memcpy(rxbuf, &data, 4);
  515. rxbuf++;
  516. size -= 4;
  517. i++;
  518. }
  519. qspi_write32(priv->flags, &regs->mcr,
  520. qspi_read32(priv->flags, &regs->mcr) |
  521. QSPI_MCR_CLR_RXF_MASK);
  522. }
  523. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  524. }
  525. static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len)
  526. {
  527. struct fsl_qspi_regs *regs = priv->regs;
  528. u32 mcr_reg, data, reg, status_reg, seqid;
  529. int i, size, tx_size;
  530. u32 to_or_from = 0;
  531. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  532. qspi_write32(priv->flags, &regs->mcr,
  533. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  534. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  535. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  536. status_reg = 0;
  537. while ((status_reg & FLASH_STATUS_WEL) != FLASH_STATUS_WEL) {
  538. WATCHDOG_RESET();
  539. qspi_write32(priv->flags, &regs->ipcr,
  540. (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);
  541. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  542. ;
  543. qspi_write32(priv->flags, &regs->ipcr,
  544. (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 1);
  545. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  546. ;
  547. reg = qspi_read32(priv->flags, &regs->rbsr);
  548. if (reg & QSPI_RBSR_RDBFL_MASK) {
  549. status_reg = qspi_read32(priv->flags, &regs->rbdr[0]);
  550. status_reg = qspi_endian_xchg(status_reg);
  551. }
  552. qspi_write32(priv->flags, &regs->mcr,
  553. qspi_read32(priv->flags, &regs->mcr) |
  554. QSPI_MCR_CLR_RXF_MASK);
  555. }
  556. /* Default is page programming */
  557. seqid = SEQID_PP;
  558. if (priv->cur_seqid == QSPI_CMD_WRAR)
  559. seqid = SEQID_WRAR;
  560. #ifdef CONFIG_SPI_FLASH_BAR
  561. if (priv->cur_seqid == QSPI_CMD_BRWR)
  562. seqid = SEQID_BRWR;
  563. else if (priv->cur_seqid == QSPI_CMD_WREAR)
  564. seqid = SEQID_WREAR;
  565. #endif
  566. to_or_from = priv->sf_addr + priv->cur_amba_base;
  567. qspi_write32(priv->flags, &regs->sfar, to_or_from);
  568. tx_size = (len > TX_BUFFER_SIZE) ?
  569. TX_BUFFER_SIZE : len;
  570. size = tx_size / 4;
  571. for (i = 0; i < size; i++) {
  572. memcpy(&data, txbuf, 4);
  573. data = qspi_endian_xchg(data);
  574. qspi_write32(priv->flags, &regs->tbdr, data);
  575. txbuf += 4;
  576. }
  577. size = tx_size % 4;
  578. if (size) {
  579. data = 0;
  580. memcpy(&data, txbuf, size);
  581. data = qspi_endian_xchg(data);
  582. qspi_write32(priv->flags, &regs->tbdr, data);
  583. }
  584. qspi_write32(priv->flags, &regs->ipcr,
  585. (seqid << QSPI_IPCR_SEQID_SHIFT) | tx_size);
  586. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  587. ;
  588. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  589. }
  590. static void qspi_op_rdsr(struct fsl_qspi_priv *priv, void *rxbuf, u32 len)
  591. {
  592. struct fsl_qspi_regs *regs = priv->regs;
  593. u32 mcr_reg, reg, data;
  594. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  595. qspi_write32(priv->flags, &regs->mcr,
  596. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  597. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  598. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  599. qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
  600. qspi_write32(priv->flags, &regs->ipcr,
  601. (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 0);
  602. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  603. ;
  604. while (1) {
  605. reg = qspi_read32(priv->flags, &regs->rbsr);
  606. if (reg & QSPI_RBSR_RDBFL_MASK) {
  607. data = qspi_read32(priv->flags, &regs->rbdr[0]);
  608. data = qspi_endian_xchg(data);
  609. memcpy(rxbuf, &data, len);
  610. qspi_write32(priv->flags, &regs->mcr,
  611. qspi_read32(priv->flags, &regs->mcr) |
  612. QSPI_MCR_CLR_RXF_MASK);
  613. break;
  614. }
  615. }
  616. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  617. }
  618. static void qspi_op_erase(struct fsl_qspi_priv *priv)
  619. {
  620. struct fsl_qspi_regs *regs = priv->regs;
  621. u32 mcr_reg;
  622. u32 to_or_from = 0;
  623. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  624. qspi_write32(priv->flags, &regs->mcr,
  625. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  626. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  627. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  628. to_or_from = priv->sf_addr + priv->cur_amba_base;
  629. qspi_write32(priv->flags, &regs->sfar, to_or_from);
  630. qspi_write32(priv->flags, &regs->ipcr,
  631. (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);
  632. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  633. ;
  634. if (priv->cur_seqid == QSPI_CMD_SE) {
  635. qspi_write32(priv->flags, &regs->ipcr,
  636. (SEQID_SE << QSPI_IPCR_SEQID_SHIFT) | 0);
  637. } else if (priv->cur_seqid == QSPI_CMD_BE_4K) {
  638. qspi_write32(priv->flags, &regs->ipcr,
  639. (SEQID_BE_4K << QSPI_IPCR_SEQID_SHIFT) | 0);
  640. }
  641. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  642. ;
  643. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  644. }
  645. int qspi_xfer(struct fsl_qspi_priv *priv, unsigned int bitlen,
  646. const void *dout, void *din, unsigned long flags)
  647. {
  648. u32 bytes = DIV_ROUND_UP(bitlen, 8);
  649. static u32 wr_sfaddr;
  650. u32 txbuf;
  651. if (dout) {
  652. if (flags & SPI_XFER_BEGIN) {
  653. priv->cur_seqid = *(u8 *)dout;
  654. memcpy(&txbuf, dout, 4);
  655. }
  656. if (flags == SPI_XFER_END) {
  657. priv->sf_addr = wr_sfaddr;
  658. qspi_op_write(priv, (u8 *)dout, bytes);
  659. return 0;
  660. }
  661. if (priv->cur_seqid == QSPI_CMD_FAST_READ ||
  662. priv->cur_seqid == QSPI_CMD_RDAR) {
  663. priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
  664. } else if ((priv->cur_seqid == QSPI_CMD_SE) ||
  665. (priv->cur_seqid == QSPI_CMD_BE_4K)) {
  666. priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
  667. qspi_op_erase(priv);
  668. } else if (priv->cur_seqid == QSPI_CMD_PP ||
  669. priv->cur_seqid == QSPI_CMD_WRAR) {
  670. wr_sfaddr = swab32(txbuf) & OFFSET_BITS_MASK;
  671. } else if ((priv->cur_seqid == QSPI_CMD_BRWR) ||
  672. (priv->cur_seqid == QSPI_CMD_WREAR)) {
  673. #ifdef CONFIG_SPI_FLASH_BAR
  674. wr_sfaddr = 0;
  675. #endif
  676. }
  677. }
  678. if (din) {
  679. if (priv->cur_seqid == QSPI_CMD_FAST_READ) {
  680. #ifdef CONFIG_SYS_FSL_QSPI_AHB
  681. qspi_ahb_read(priv, din, bytes);
  682. #else
  683. qspi_op_read(priv, din, bytes);
  684. #endif
  685. } else if (priv->cur_seqid == QSPI_CMD_RDAR) {
  686. qspi_op_read(priv, din, bytes);
  687. } else if (priv->cur_seqid == QSPI_CMD_RDID)
  688. qspi_op_rdid(priv, din, bytes);
  689. else if (priv->cur_seqid == QSPI_CMD_RDSR)
  690. qspi_op_rdsr(priv, din, bytes);
  691. #ifdef CONFIG_SPI_FLASH_BAR
  692. else if ((priv->cur_seqid == QSPI_CMD_BRRD) ||
  693. (priv->cur_seqid == QSPI_CMD_RDEAR)) {
  694. priv->sf_addr = 0;
  695. qspi_op_rdbank(priv, din, bytes);
  696. }
  697. #endif
  698. }
  699. #ifdef CONFIG_SYS_FSL_QSPI_AHB
  700. if ((priv->cur_seqid == QSPI_CMD_SE) ||
  701. (priv->cur_seqid == QSPI_CMD_PP) ||
  702. (priv->cur_seqid == QSPI_CMD_BE_4K) ||
  703. (priv->cur_seqid == QSPI_CMD_WREAR) ||
  704. (priv->cur_seqid == QSPI_CMD_BRWR))
  705. qspi_ahb_invalid(priv);
  706. #endif
  707. return 0;
  708. }
  709. void qspi_module_disable(struct fsl_qspi_priv *priv, u8 disable)
  710. {
  711. u32 mcr_val;
  712. mcr_val = qspi_read32(priv->flags, &priv->regs->mcr);
  713. if (disable)
  714. mcr_val |= QSPI_MCR_MDIS_MASK;
  715. else
  716. mcr_val &= ~QSPI_MCR_MDIS_MASK;
  717. qspi_write32(priv->flags, &priv->regs->mcr, mcr_val);
  718. }
  719. void qspi_cfg_smpr(struct fsl_qspi_priv *priv, u32 clear_bits, u32 set_bits)
  720. {
  721. u32 smpr_val;
  722. smpr_val = qspi_read32(priv->flags, &priv->regs->smpr);
  723. smpr_val &= ~clear_bits;
  724. smpr_val |= set_bits;
  725. qspi_write32(priv->flags, &priv->regs->smpr, smpr_val);
  726. }
  727. #ifndef CONFIG_DM_SPI
  728. static unsigned long spi_bases[] = {
  729. QSPI0_BASE_ADDR,
  730. #ifdef CONFIG_MX6SX
  731. QSPI1_BASE_ADDR,
  732. #endif
  733. };
  734. static unsigned long amba_bases[] = {
  735. QSPI0_AMBA_BASE,
  736. #ifdef CONFIG_MX6SX
  737. QSPI1_AMBA_BASE,
  738. #endif
  739. };
  740. static inline struct fsl_qspi *to_qspi_spi(struct spi_slave *slave)
  741. {
  742. return container_of(slave, struct fsl_qspi, slave);
  743. }
  744. struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
  745. unsigned int max_hz, unsigned int mode)
  746. {
  747. u32 mcr_val;
  748. struct fsl_qspi *qspi;
  749. struct fsl_qspi_regs *regs;
  750. u32 total_size;
  751. if (bus >= ARRAY_SIZE(spi_bases))
  752. return NULL;
  753. if (cs >= FSL_QSPI_FLASH_NUM)
  754. return NULL;
  755. qspi = spi_alloc_slave(struct fsl_qspi, bus, cs);
  756. if (!qspi)
  757. return NULL;
  758. #ifdef CONFIG_SYS_FSL_QSPI_BE
  759. qspi->priv.flags |= QSPI_FLAG_REGMAP_ENDIAN_BIG;
  760. #endif
  761. regs = (struct fsl_qspi_regs *)spi_bases[bus];
  762. qspi->priv.regs = regs;
  763. /*
  764. * According cs, use different amba_base to choose the
  765. * corresponding flash devices.
  766. *
  767. * If not, only one flash device is used even if passing
  768. * different cs using `sf probe`
  769. */
  770. qspi->priv.cur_amba_base = amba_bases[bus] + cs * FSL_QSPI_FLASH_SIZE;
  771. qspi->slave.max_write_size = TX_BUFFER_SIZE;
  772. mcr_val = qspi_read32(qspi->priv.flags, &regs->mcr);
  773. qspi_write32(qspi->priv.flags, &regs->mcr,
  774. QSPI_MCR_RESERVED_MASK | QSPI_MCR_MDIS_MASK |
  775. (mcr_val & QSPI_MCR_END_CFD_MASK));
  776. qspi_cfg_smpr(&qspi->priv,
  777. ~(QSPI_SMPR_FSDLY_MASK | QSPI_SMPR_DDRSMP_MASK |
  778. QSPI_SMPR_FSPHS_MASK | QSPI_SMPR_HSENA_MASK), 0);
  779. total_size = FSL_QSPI_FLASH_SIZE * FSL_QSPI_FLASH_NUM;
  780. /*
  781. * Any read access to non-implemented addresses will provide
  782. * undefined results.
  783. *
  784. * In case single die flash devices, TOP_ADDR_MEMA2 and
  785. * TOP_ADDR_MEMB2 should be initialized/programmed to
  786. * TOP_ADDR_MEMA1 and TOP_ADDR_MEMB1 respectively - in effect,
  787. * setting the size of these devices to 0. This would ensure
  788. * that the complete memory map is assigned to only one flash device.
  789. */
  790. qspi_write32(qspi->priv.flags, &regs->sfa1ad,
  791. FSL_QSPI_FLASH_SIZE | amba_bases[bus]);
  792. qspi_write32(qspi->priv.flags, &regs->sfa2ad,
  793. FSL_QSPI_FLASH_SIZE | amba_bases[bus]);
  794. qspi_write32(qspi->priv.flags, &regs->sfb1ad,
  795. total_size | amba_bases[bus]);
  796. qspi_write32(qspi->priv.flags, &regs->sfb2ad,
  797. total_size | amba_bases[bus]);
  798. qspi_set_lut(&qspi->priv);
  799. #ifdef CONFIG_SYS_FSL_QSPI_AHB
  800. qspi_init_ahb_read(&qspi->priv);
  801. #endif
  802. qspi_module_disable(&qspi->priv, 0);
  803. return &qspi->slave;
  804. }
  805. void spi_free_slave(struct spi_slave *slave)
  806. {
  807. struct fsl_qspi *qspi = to_qspi_spi(slave);
  808. free(qspi);
  809. }
  810. int spi_claim_bus(struct spi_slave *slave)
  811. {
  812. return 0;
  813. }
  814. void spi_release_bus(struct spi_slave *slave)
  815. {
  816. /* Nothing to do */
  817. }
  818. int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
  819. const void *dout, void *din, unsigned long flags)
  820. {
  821. struct fsl_qspi *qspi = to_qspi_spi(slave);
  822. return qspi_xfer(&qspi->priv, bitlen, dout, din, flags);
  823. }
  824. void spi_init(void)
  825. {
  826. /* Nothing to do */
  827. }
  828. #else
  829. static int fsl_qspi_child_pre_probe(struct udevice *dev)
  830. {
  831. struct spi_slave *slave = dev_get_parent_priv(dev);
  832. slave->max_write_size = TX_BUFFER_SIZE;
  833. return 0;
  834. }
  835. static int fsl_qspi_probe(struct udevice *bus)
  836. {
  837. u32 mcr_val;
  838. u32 amba_size_per_chip;
  839. struct fsl_qspi_platdata *plat = dev_get_platdata(bus);
  840. struct fsl_qspi_priv *priv = dev_get_priv(bus);
  841. struct dm_spi_bus *dm_spi_bus;
  842. int i;
  843. dm_spi_bus = bus->uclass_priv;
  844. dm_spi_bus->max_hz = plat->speed_hz;
  845. priv->regs = (struct fsl_qspi_regs *)(uintptr_t)plat->reg_base;
  846. priv->flags = plat->flags;
  847. priv->speed_hz = plat->speed_hz;
  848. /*
  849. * QSPI SFADR width is 32bits, the max dest addr is 4GB-1.
  850. * AMBA memory zone should be located on the 0~4GB space
  851. * even on a 64bits cpu.
  852. */
  853. priv->amba_base[0] = (u32)plat->amba_base;
  854. priv->amba_total_size = (u32)plat->amba_total_size;
  855. priv->flash_num = plat->flash_num;
  856. priv->num_chipselect = plat->num_chipselect;
  857. mcr_val = qspi_read32(priv->flags, &priv->regs->mcr);
  858. qspi_write32(priv->flags, &priv->regs->mcr,
  859. QSPI_MCR_RESERVED_MASK | QSPI_MCR_MDIS_MASK |
  860. (mcr_val & QSPI_MCR_END_CFD_MASK));
  861. qspi_cfg_smpr(priv, ~(QSPI_SMPR_FSDLY_MASK | QSPI_SMPR_DDRSMP_MASK |
  862. QSPI_SMPR_FSPHS_MASK | QSPI_SMPR_HSENA_MASK), 0);
  863. /*
  864. * Assign AMBA memory zone for every chipselect
  865. * QuadSPI has two channels, every channel has two chipselects.
  866. * If the property 'num-cs' in dts is 2, the AMBA memory will be divided
  867. * into two parts and assign to every channel. This indicate that every
  868. * channel only has one valid chipselect.
  869. * If the property 'num-cs' in dts is 4, the AMBA memory will be divided
  870. * into four parts and assign to every chipselect.
  871. * Every channel will has two valid chipselects.
  872. */
  873. amba_size_per_chip = priv->amba_total_size >>
  874. (priv->num_chipselect >> 1);
  875. for (i = 1 ; i < priv->num_chipselect ; i++)
  876. priv->amba_base[i] =
  877. amba_size_per_chip + priv->amba_base[i - 1];
  878. /*
  879. * Any read access to non-implemented addresses will provide
  880. * undefined results.
  881. *
  882. * In case single die flash devices, TOP_ADDR_MEMA2 and
  883. * TOP_ADDR_MEMB2 should be initialized/programmed to
  884. * TOP_ADDR_MEMA1 and TOP_ADDR_MEMB1 respectively - in effect,
  885. * setting the size of these devices to 0. This would ensure
  886. * that the complete memory map is assigned to only one flash device.
  887. */
  888. qspi_write32(priv->flags, &priv->regs->sfa1ad, priv->amba_base[1]);
  889. switch (priv->num_chipselect) {
  890. case 2:
  891. qspi_write32(priv->flags, &priv->regs->sfa2ad,
  892. priv->amba_base[1]);
  893. qspi_write32(priv->flags, &priv->regs->sfb1ad,
  894. priv->amba_base[1] + amba_size_per_chip);
  895. qspi_write32(priv->flags, &priv->regs->sfb2ad,
  896. priv->amba_base[1] + amba_size_per_chip);
  897. break;
  898. case 4:
  899. qspi_write32(priv->flags, &priv->regs->sfa2ad,
  900. priv->amba_base[2]);
  901. qspi_write32(priv->flags, &priv->regs->sfb1ad,
  902. priv->amba_base[3]);
  903. qspi_write32(priv->flags, &priv->regs->sfb2ad,
  904. priv->amba_base[3] + amba_size_per_chip);
  905. break;
  906. default:
  907. debug("Error: Unsupported chipselect number %u!\n",
  908. priv->num_chipselect);
  909. qspi_module_disable(priv, 1);
  910. return -EINVAL;
  911. }
  912. qspi_set_lut(priv);
  913. #ifdef CONFIG_SYS_FSL_QSPI_AHB
  914. qspi_init_ahb_read(priv);
  915. #endif
  916. qspi_module_disable(priv, 0);
  917. return 0;
  918. }
  919. static int fsl_qspi_ofdata_to_platdata(struct udevice *bus)
  920. {
  921. struct fdt_resource res_regs, res_mem;
  922. struct fsl_qspi_platdata *plat = bus->platdata;
  923. const void *blob = gd->fdt_blob;
  924. int node = bus->of_offset;
  925. int ret, flash_num = 0, subnode;
  926. if (fdtdec_get_bool(blob, node, "big-endian"))
  927. plat->flags |= QSPI_FLAG_REGMAP_ENDIAN_BIG;
  928. ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
  929. "QuadSPI", &res_regs);
  930. if (ret) {
  931. debug("Error: can't get regs base addresses(ret = %d)!\n", ret);
  932. return -ENOMEM;
  933. }
  934. ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
  935. "QuadSPI-memory", &res_mem);
  936. if (ret) {
  937. debug("Error: can't get AMBA base addresses(ret = %d)!\n", ret);
  938. return -ENOMEM;
  939. }
  940. /* Count flash numbers */
  941. fdt_for_each_subnode(subnode, blob, node)
  942. ++flash_num;
  943. if (flash_num == 0) {
  944. debug("Error: Missing flashes!\n");
  945. return -ENODEV;
  946. }
  947. plat->speed_hz = fdtdec_get_int(blob, node, "spi-max-frequency",
  948. FSL_QSPI_DEFAULT_SCK_FREQ);
  949. plat->num_chipselect = fdtdec_get_int(blob, node, "num-cs",
  950. FSL_QSPI_MAX_CHIPSELECT_NUM);
  951. plat->reg_base = res_regs.start;
  952. plat->amba_base = res_mem.start;
  953. plat->amba_total_size = res_mem.end - res_mem.start + 1;
  954. plat->flash_num = flash_num;
  955. debug("%s: regs=<0x%llx> <0x%llx, 0x%llx>, max-frequency=%d, endianess=%s\n",
  956. __func__,
  957. (u64)plat->reg_base,
  958. (u64)plat->amba_base,
  959. (u64)plat->amba_total_size,
  960. plat->speed_hz,
  961. plat->flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ? "be" : "le"
  962. );
  963. return 0;
  964. }
  965. static int fsl_qspi_xfer(struct udevice *dev, unsigned int bitlen,
  966. const void *dout, void *din, unsigned long flags)
  967. {
  968. struct fsl_qspi_priv *priv;
  969. struct udevice *bus;
  970. bus = dev->parent;
  971. priv = dev_get_priv(bus);
  972. return qspi_xfer(priv, bitlen, dout, din, flags);
  973. }
  974. static int fsl_qspi_claim_bus(struct udevice *dev)
  975. {
  976. struct fsl_qspi_priv *priv;
  977. struct udevice *bus;
  978. struct dm_spi_slave_platdata *slave_plat = dev_get_parent_platdata(dev);
  979. bus = dev->parent;
  980. priv = dev_get_priv(bus);
  981. priv->cur_amba_base = priv->amba_base[slave_plat->cs];
  982. qspi_module_disable(priv, 0);
  983. return 0;
  984. }
  985. static int fsl_qspi_release_bus(struct udevice *dev)
  986. {
  987. struct fsl_qspi_priv *priv;
  988. struct udevice *bus;
  989. bus = dev->parent;
  990. priv = dev_get_priv(bus);
  991. qspi_module_disable(priv, 1);
  992. return 0;
  993. }
  994. static int fsl_qspi_set_speed(struct udevice *bus, uint speed)
  995. {
  996. /* Nothing to do */
  997. return 0;
  998. }
  999. static int fsl_qspi_set_mode(struct udevice *bus, uint mode)
  1000. {
  1001. /* Nothing to do */
  1002. return 0;
  1003. }
  1004. static const struct dm_spi_ops fsl_qspi_ops = {
  1005. .claim_bus = fsl_qspi_claim_bus,
  1006. .release_bus = fsl_qspi_release_bus,
  1007. .xfer = fsl_qspi_xfer,
  1008. .set_speed = fsl_qspi_set_speed,
  1009. .set_mode = fsl_qspi_set_mode,
  1010. };
  1011. static const struct udevice_id fsl_qspi_ids[] = {
  1012. { .compatible = "fsl,vf610-qspi" },
  1013. { .compatible = "fsl,imx6sx-qspi" },
  1014. { }
  1015. };
  1016. U_BOOT_DRIVER(fsl_qspi) = {
  1017. .name = "fsl_qspi",
  1018. .id = UCLASS_SPI,
  1019. .of_match = fsl_qspi_ids,
  1020. .ops = &fsl_qspi_ops,
  1021. .ofdata_to_platdata = fsl_qspi_ofdata_to_platdata,
  1022. .platdata_auto_alloc_size = sizeof(struct fsl_qspi_platdata),
  1023. .priv_auto_alloc_size = sizeof(struct fsl_qspi_priv),
  1024. .probe = fsl_qspi_probe,
  1025. .child_pre_probe = fsl_qspi_child_pre_probe,
  1026. };
  1027. #endif