fsl_qspi.c 36 KB

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