fsl_qspi.c 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201
  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. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  348. qspi_write32(priv->flags, &regs->mcr,
  349. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  350. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  351. /* Read out the data directly from the AHB buffer. */
  352. memcpy(rxbuf, (u8 *)(priv->cur_amba_base + priv->sf_addr), len);
  353. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  354. }
  355. static void qspi_enable_ddr_mode(struct fsl_qspi_priv *priv)
  356. {
  357. u32 reg, reg2;
  358. struct fsl_qspi_regs *regs = priv->regs;
  359. reg = qspi_read32(priv->flags, &regs->mcr);
  360. /* Disable the module */
  361. qspi_write32(priv->flags, &regs->mcr, reg | QSPI_MCR_MDIS_MASK);
  362. /* Set the Sampling Register for DDR */
  363. reg2 = qspi_read32(priv->flags, &regs->smpr);
  364. reg2 &= ~QSPI_SMPR_DDRSMP_MASK;
  365. reg2 |= (2 << QSPI_SMPR_DDRSMP_SHIFT);
  366. qspi_write32(priv->flags, &regs->smpr, reg2);
  367. /* Enable the module again (enable the DDR too) */
  368. reg |= QSPI_MCR_DDR_EN_MASK;
  369. /* Enable bit 29 for imx6sx */
  370. reg |= BIT(29);
  371. qspi_write32(priv->flags, &regs->mcr, reg);
  372. }
  373. /*
  374. * There are two different ways to read out the data from the flash:
  375. * the "IP Command Read" and the "AHB Command Read".
  376. *
  377. * The IC guy suggests we use the "AHB Command Read" which is faster
  378. * then the "IP Command Read". (What's more is that there is a bug in
  379. * the "IP Command Read" in the Vybrid.)
  380. *
  381. * After we set up the registers for the "AHB Command Read", we can use
  382. * the memcpy to read the data directly. A "missed" access to the buffer
  383. * causes the controller to clear the buffer, and use the sequence pointed
  384. * by the QUADSPI_BFGENCR[SEQID] to initiate a read from the flash.
  385. */
  386. static void qspi_init_ahb_read(struct fsl_qspi_priv *priv)
  387. {
  388. struct fsl_qspi_regs *regs = priv->regs;
  389. /* AHB configuration for access buffer 0/1/2 .*/
  390. qspi_write32(priv->flags, &regs->buf0cr, QSPI_BUFXCR_INVALID_MSTRID);
  391. qspi_write32(priv->flags, &regs->buf1cr, QSPI_BUFXCR_INVALID_MSTRID);
  392. qspi_write32(priv->flags, &regs->buf2cr, QSPI_BUFXCR_INVALID_MSTRID);
  393. qspi_write32(priv->flags, &regs->buf3cr, QSPI_BUF3CR_ALLMST_MASK |
  394. (0x80 << QSPI_BUF3CR_ADATSZ_SHIFT));
  395. /* We only use the buffer3 */
  396. qspi_write32(priv->flags, &regs->buf0ind, 0);
  397. qspi_write32(priv->flags, &regs->buf1ind, 0);
  398. qspi_write32(priv->flags, &regs->buf2ind, 0);
  399. /*
  400. * Set the default lut sequence for AHB Read.
  401. * Parallel mode is disabled.
  402. */
  403. qspi_write32(priv->flags, &regs->bfgencr,
  404. SEQID_FAST_READ << QSPI_BFGENCR_SEQID_SHIFT);
  405. /*Enable DDR Mode*/
  406. qspi_enable_ddr_mode(priv);
  407. }
  408. #endif
  409. #ifdef CONFIG_SPI_FLASH_BAR
  410. /* Bank register read/write, EAR register read/write */
  411. static void qspi_op_rdbank(struct fsl_qspi_priv *priv, u8 *rxbuf, u32 len)
  412. {
  413. struct fsl_qspi_regs *regs = priv->regs;
  414. u32 reg, mcr_reg, data, seqid;
  415. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  416. qspi_write32(priv->flags, &regs->mcr,
  417. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  418. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  419. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  420. qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
  421. if (priv->cur_seqid == QSPI_CMD_BRRD)
  422. seqid = SEQID_BRRD;
  423. else
  424. seqid = SEQID_RDEAR;
  425. qspi_write32(priv->flags, &regs->ipcr,
  426. (seqid << QSPI_IPCR_SEQID_SHIFT) | len);
  427. /* Wait previous command complete */
  428. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  429. ;
  430. while (1) {
  431. reg = qspi_read32(priv->flags, &regs->rbsr);
  432. if (reg & QSPI_RBSR_RDBFL_MASK) {
  433. data = qspi_read32(priv->flags, &regs->rbdr[0]);
  434. data = qspi_endian_xchg(data);
  435. memcpy(rxbuf, &data, len);
  436. qspi_write32(priv->flags, &regs->mcr,
  437. qspi_read32(priv->flags, &regs->mcr) |
  438. QSPI_MCR_CLR_RXF_MASK);
  439. break;
  440. }
  441. }
  442. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  443. }
  444. #endif
  445. static void qspi_op_rdid(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)
  446. {
  447. struct fsl_qspi_regs *regs = priv->regs;
  448. u32 mcr_reg, rbsr_reg, data, size;
  449. int i;
  450. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  451. qspi_write32(priv->flags, &regs->mcr,
  452. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  453. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  454. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  455. qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
  456. qspi_write32(priv->flags, &regs->ipcr,
  457. (SEQID_RDID << QSPI_IPCR_SEQID_SHIFT) | 0);
  458. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  459. ;
  460. i = 0;
  461. while ((RX_BUFFER_SIZE >= len) && (len > 0)) {
  462. rbsr_reg = qspi_read32(priv->flags, &regs->rbsr);
  463. if (rbsr_reg & QSPI_RBSR_RDBFL_MASK) {
  464. data = qspi_read32(priv->flags, &regs->rbdr[i]);
  465. data = qspi_endian_xchg(data);
  466. size = (len < 4) ? len : 4;
  467. memcpy(rxbuf, &data, size);
  468. len -= size;
  469. rxbuf++;
  470. i++;
  471. }
  472. }
  473. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  474. }
  475. /* If not use AHB read, read data from ip interface */
  476. static void qspi_op_read(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)
  477. {
  478. struct fsl_qspi_regs *regs = priv->regs;
  479. u32 mcr_reg, data;
  480. int i, size;
  481. u32 to_or_from;
  482. u32 seqid;
  483. if (priv->cur_seqid == QSPI_CMD_RDAR)
  484. seqid = SEQID_RDAR;
  485. else
  486. seqid = SEQID_FAST_READ;
  487. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  488. qspi_write32(priv->flags, &regs->mcr,
  489. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  490. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  491. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  492. to_or_from = priv->sf_addr + priv->cur_amba_base;
  493. while (len > 0) {
  494. WATCHDOG_RESET();
  495. qspi_write32(priv->flags, &regs->sfar, to_or_from);
  496. size = (len > RX_BUFFER_SIZE) ?
  497. RX_BUFFER_SIZE : len;
  498. qspi_write32(priv->flags, &regs->ipcr,
  499. (seqid << QSPI_IPCR_SEQID_SHIFT) |
  500. size);
  501. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  502. ;
  503. to_or_from += size;
  504. len -= size;
  505. i = 0;
  506. while ((RX_BUFFER_SIZE >= size) && (size > 0)) {
  507. data = qspi_read32(priv->flags, &regs->rbdr[i]);
  508. data = qspi_endian_xchg(data);
  509. if (size < 4)
  510. memcpy(rxbuf, &data, size);
  511. else
  512. memcpy(rxbuf, &data, 4);
  513. rxbuf++;
  514. size -= 4;
  515. i++;
  516. }
  517. qspi_write32(priv->flags, &regs->mcr,
  518. qspi_read32(priv->flags, &regs->mcr) |
  519. QSPI_MCR_CLR_RXF_MASK);
  520. }
  521. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  522. }
  523. static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len)
  524. {
  525. struct fsl_qspi_regs *regs = priv->regs;
  526. u32 mcr_reg, data, reg, status_reg, seqid;
  527. int i, size, tx_size;
  528. u32 to_or_from = 0;
  529. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  530. qspi_write32(priv->flags, &regs->mcr,
  531. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  532. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  533. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  534. status_reg = 0;
  535. while ((status_reg & FLASH_STATUS_WEL) != FLASH_STATUS_WEL) {
  536. WATCHDOG_RESET();
  537. qspi_write32(priv->flags, &regs->ipcr,
  538. (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);
  539. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  540. ;
  541. qspi_write32(priv->flags, &regs->ipcr,
  542. (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 1);
  543. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  544. ;
  545. reg = qspi_read32(priv->flags, &regs->rbsr);
  546. if (reg & QSPI_RBSR_RDBFL_MASK) {
  547. status_reg = qspi_read32(priv->flags, &regs->rbdr[0]);
  548. status_reg = qspi_endian_xchg(status_reg);
  549. }
  550. qspi_write32(priv->flags, &regs->mcr,
  551. qspi_read32(priv->flags, &regs->mcr) |
  552. QSPI_MCR_CLR_RXF_MASK);
  553. }
  554. /* Default is page programming */
  555. seqid = SEQID_PP;
  556. if (priv->cur_seqid == QSPI_CMD_WRAR)
  557. seqid = SEQID_WRAR;
  558. #ifdef CONFIG_SPI_FLASH_BAR
  559. if (priv->cur_seqid == QSPI_CMD_BRWR)
  560. seqid = SEQID_BRWR;
  561. else if (priv->cur_seqid == QSPI_CMD_WREAR)
  562. seqid = SEQID_WREAR;
  563. #endif
  564. to_or_from = priv->sf_addr + priv->cur_amba_base;
  565. qspi_write32(priv->flags, &regs->sfar, to_or_from);
  566. tx_size = (len > TX_BUFFER_SIZE) ?
  567. TX_BUFFER_SIZE : len;
  568. size = tx_size / 4;
  569. for (i = 0; i < size; i++) {
  570. memcpy(&data, txbuf, 4);
  571. data = qspi_endian_xchg(data);
  572. qspi_write32(priv->flags, &regs->tbdr, data);
  573. txbuf += 4;
  574. }
  575. size = tx_size % 4;
  576. if (size) {
  577. data = 0;
  578. memcpy(&data, txbuf, size);
  579. data = qspi_endian_xchg(data);
  580. qspi_write32(priv->flags, &regs->tbdr, data);
  581. }
  582. qspi_write32(priv->flags, &regs->ipcr,
  583. (seqid << QSPI_IPCR_SEQID_SHIFT) | tx_size);
  584. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  585. ;
  586. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  587. }
  588. static void qspi_op_rdsr(struct fsl_qspi_priv *priv, void *rxbuf, u32 len)
  589. {
  590. struct fsl_qspi_regs *regs = priv->regs;
  591. u32 mcr_reg, reg, data;
  592. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  593. qspi_write32(priv->flags, &regs->mcr,
  594. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  595. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  596. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  597. qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
  598. qspi_write32(priv->flags, &regs->ipcr,
  599. (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 0);
  600. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  601. ;
  602. while (1) {
  603. reg = qspi_read32(priv->flags, &regs->rbsr);
  604. if (reg & QSPI_RBSR_RDBFL_MASK) {
  605. data = qspi_read32(priv->flags, &regs->rbdr[0]);
  606. data = qspi_endian_xchg(data);
  607. memcpy(rxbuf, &data, len);
  608. qspi_write32(priv->flags, &regs->mcr,
  609. qspi_read32(priv->flags, &regs->mcr) |
  610. QSPI_MCR_CLR_RXF_MASK);
  611. break;
  612. }
  613. }
  614. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  615. }
  616. static void qspi_op_erase(struct fsl_qspi_priv *priv)
  617. {
  618. struct fsl_qspi_regs *regs = priv->regs;
  619. u32 mcr_reg;
  620. u32 to_or_from = 0;
  621. mcr_reg = qspi_read32(priv->flags, &regs->mcr);
  622. qspi_write32(priv->flags, &regs->mcr,
  623. QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
  624. QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
  625. qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
  626. to_or_from = priv->sf_addr + priv->cur_amba_base;
  627. qspi_write32(priv->flags, &regs->sfar, to_or_from);
  628. qspi_write32(priv->flags, &regs->ipcr,
  629. (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);
  630. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  631. ;
  632. if (priv->cur_seqid == QSPI_CMD_SE) {
  633. qspi_write32(priv->flags, &regs->ipcr,
  634. (SEQID_SE << QSPI_IPCR_SEQID_SHIFT) | 0);
  635. } else if (priv->cur_seqid == QSPI_CMD_BE_4K) {
  636. qspi_write32(priv->flags, &regs->ipcr,
  637. (SEQID_BE_4K << QSPI_IPCR_SEQID_SHIFT) | 0);
  638. }
  639. while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
  640. ;
  641. qspi_write32(priv->flags, &regs->mcr, mcr_reg);
  642. }
  643. int qspi_xfer(struct fsl_qspi_priv *priv, unsigned int bitlen,
  644. const void *dout, void *din, unsigned long flags)
  645. {
  646. u32 bytes = DIV_ROUND_UP(bitlen, 8);
  647. static u32 wr_sfaddr;
  648. u32 txbuf;
  649. if (dout) {
  650. if (flags & SPI_XFER_BEGIN) {
  651. priv->cur_seqid = *(u8 *)dout;
  652. memcpy(&txbuf, dout, 4);
  653. }
  654. if (flags == SPI_XFER_END) {
  655. priv->sf_addr = wr_sfaddr;
  656. qspi_op_write(priv, (u8 *)dout, bytes);
  657. return 0;
  658. }
  659. if (priv->cur_seqid == QSPI_CMD_FAST_READ ||
  660. priv->cur_seqid == QSPI_CMD_RDAR) {
  661. priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
  662. } else if ((priv->cur_seqid == QSPI_CMD_SE) ||
  663. (priv->cur_seqid == QSPI_CMD_BE_4K)) {
  664. priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
  665. qspi_op_erase(priv);
  666. } else if (priv->cur_seqid == QSPI_CMD_PP ||
  667. priv->cur_seqid == QSPI_CMD_WRAR) {
  668. wr_sfaddr = swab32(txbuf) & OFFSET_BITS_MASK;
  669. } else if ((priv->cur_seqid == QSPI_CMD_BRWR) ||
  670. (priv->cur_seqid == QSPI_CMD_WREAR)) {
  671. #ifdef CONFIG_SPI_FLASH_BAR
  672. wr_sfaddr = 0;
  673. #endif
  674. }
  675. }
  676. if (din) {
  677. if (priv->cur_seqid == QSPI_CMD_FAST_READ) {
  678. #ifdef CONFIG_SYS_FSL_QSPI_AHB
  679. qspi_ahb_read(priv, din, bytes);
  680. #else
  681. qspi_op_read(priv, din, bytes);
  682. #endif
  683. } else if (priv->cur_seqid == QSPI_CMD_RDAR) {
  684. qspi_op_read(priv, din, bytes);
  685. } else if (priv->cur_seqid == QSPI_CMD_RDID)
  686. qspi_op_rdid(priv, din, bytes);
  687. else if (priv->cur_seqid == QSPI_CMD_RDSR)
  688. qspi_op_rdsr(priv, din, bytes);
  689. #ifdef CONFIG_SPI_FLASH_BAR
  690. else if ((priv->cur_seqid == QSPI_CMD_BRRD) ||
  691. (priv->cur_seqid == QSPI_CMD_RDEAR)) {
  692. priv->sf_addr = 0;
  693. qspi_op_rdbank(priv, din, bytes);
  694. }
  695. #endif
  696. }
  697. #ifdef CONFIG_SYS_FSL_QSPI_AHB
  698. if ((priv->cur_seqid == QSPI_CMD_SE) ||
  699. (priv->cur_seqid == QSPI_CMD_PP) ||
  700. (priv->cur_seqid == QSPI_CMD_BE_4K) ||
  701. (priv->cur_seqid == QSPI_CMD_WREAR) ||
  702. (priv->cur_seqid == QSPI_CMD_BRWR))
  703. qspi_ahb_invalid(priv);
  704. #endif
  705. return 0;
  706. }
  707. void qspi_module_disable(struct fsl_qspi_priv *priv, u8 disable)
  708. {
  709. u32 mcr_val;
  710. mcr_val = qspi_read32(priv->flags, &priv->regs->mcr);
  711. if (disable)
  712. mcr_val |= QSPI_MCR_MDIS_MASK;
  713. else
  714. mcr_val &= ~QSPI_MCR_MDIS_MASK;
  715. qspi_write32(priv->flags, &priv->regs->mcr, mcr_val);
  716. }
  717. void qspi_cfg_smpr(struct fsl_qspi_priv *priv, u32 clear_bits, u32 set_bits)
  718. {
  719. u32 smpr_val;
  720. smpr_val = qspi_read32(priv->flags, &priv->regs->smpr);
  721. smpr_val &= ~clear_bits;
  722. smpr_val |= set_bits;
  723. qspi_write32(priv->flags, &priv->regs->smpr, smpr_val);
  724. }
  725. #ifndef CONFIG_DM_SPI
  726. static unsigned long spi_bases[] = {
  727. QSPI0_BASE_ADDR,
  728. #ifdef CONFIG_MX6SX
  729. QSPI1_BASE_ADDR,
  730. #endif
  731. };
  732. static unsigned long amba_bases[] = {
  733. QSPI0_AMBA_BASE,
  734. #ifdef CONFIG_MX6SX
  735. QSPI1_AMBA_BASE,
  736. #endif
  737. };
  738. static inline struct fsl_qspi *to_qspi_spi(struct spi_slave *slave)
  739. {
  740. return container_of(slave, struct fsl_qspi, slave);
  741. }
  742. struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
  743. unsigned int max_hz, unsigned int mode)
  744. {
  745. struct fsl_qspi *qspi;
  746. struct fsl_qspi_regs *regs;
  747. u32 total_size;
  748. if (bus >= ARRAY_SIZE(spi_bases))
  749. return NULL;
  750. if (cs >= FSL_QSPI_FLASH_NUM)
  751. return NULL;
  752. qspi = spi_alloc_slave(struct fsl_qspi, bus, cs);
  753. if (!qspi)
  754. return NULL;
  755. #ifdef CONFIG_SYS_FSL_QSPI_BE
  756. qspi->priv.flags |= QSPI_FLAG_REGMAP_ENDIAN_BIG;
  757. #endif
  758. regs = (struct fsl_qspi_regs *)spi_bases[bus];
  759. qspi->priv.regs = regs;
  760. /*
  761. * According cs, use different amba_base to choose the
  762. * corresponding flash devices.
  763. *
  764. * If not, only one flash device is used even if passing
  765. * different cs using `sf probe`
  766. */
  767. qspi->priv.cur_amba_base = amba_bases[bus] + cs * FSL_QSPI_FLASH_SIZE;
  768. qspi->slave.max_write_size = TX_BUFFER_SIZE;
  769. qspi_write32(qspi->priv.flags, &regs->mcr,
  770. QSPI_MCR_RESERVED_MASK | QSPI_MCR_MDIS_MASK);
  771. qspi_cfg_smpr(&qspi->priv,
  772. ~(QSPI_SMPR_FSDLY_MASK | QSPI_SMPR_DDRSMP_MASK |
  773. QSPI_SMPR_FSPHS_MASK | QSPI_SMPR_HSENA_MASK), 0);
  774. total_size = FSL_QSPI_FLASH_SIZE * FSL_QSPI_FLASH_NUM;
  775. /*
  776. * Any read access to non-implemented addresses will provide
  777. * undefined results.
  778. *
  779. * In case single die flash devices, TOP_ADDR_MEMA2 and
  780. * TOP_ADDR_MEMB2 should be initialized/programmed to
  781. * TOP_ADDR_MEMA1 and TOP_ADDR_MEMB1 respectively - in effect,
  782. * setting the size of these devices to 0. This would ensure
  783. * that the complete memory map is assigned to only one flash device.
  784. */
  785. qspi_write32(qspi->priv.flags, &regs->sfa1ad,
  786. FSL_QSPI_FLASH_SIZE | amba_bases[bus]);
  787. qspi_write32(qspi->priv.flags, &regs->sfa2ad,
  788. FSL_QSPI_FLASH_SIZE | amba_bases[bus]);
  789. qspi_write32(qspi->priv.flags, &regs->sfb1ad,
  790. total_size | amba_bases[bus]);
  791. qspi_write32(qspi->priv.flags, &regs->sfb2ad,
  792. total_size | amba_bases[bus]);
  793. qspi_set_lut(&qspi->priv);
  794. #ifdef CONFIG_SYS_FSL_QSPI_AHB
  795. qspi_init_ahb_read(&qspi->priv);
  796. #endif
  797. qspi_module_disable(&qspi->priv, 0);
  798. return &qspi->slave;
  799. }
  800. void spi_free_slave(struct spi_slave *slave)
  801. {
  802. struct fsl_qspi *qspi = to_qspi_spi(slave);
  803. free(qspi);
  804. }
  805. int spi_claim_bus(struct spi_slave *slave)
  806. {
  807. return 0;
  808. }
  809. void spi_release_bus(struct spi_slave *slave)
  810. {
  811. /* Nothing to do */
  812. }
  813. int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
  814. const void *dout, void *din, unsigned long flags)
  815. {
  816. struct fsl_qspi *qspi = to_qspi_spi(slave);
  817. return qspi_xfer(&qspi->priv, bitlen, dout, din, flags);
  818. }
  819. void spi_init(void)
  820. {
  821. /* Nothing to do */
  822. }
  823. #else
  824. static int fsl_qspi_child_pre_probe(struct udevice *dev)
  825. {
  826. struct spi_slave *slave = dev_get_parent_priv(dev);
  827. slave->max_write_size = TX_BUFFER_SIZE;
  828. return 0;
  829. }
  830. static int fsl_qspi_probe(struct udevice *bus)
  831. {
  832. u32 amba_size_per_chip;
  833. struct fsl_qspi_platdata *plat = dev_get_platdata(bus);
  834. struct fsl_qspi_priv *priv = dev_get_priv(bus);
  835. struct dm_spi_bus *dm_spi_bus;
  836. int i;
  837. dm_spi_bus = bus->uclass_priv;
  838. dm_spi_bus->max_hz = plat->speed_hz;
  839. priv->regs = (struct fsl_qspi_regs *)(uintptr_t)plat->reg_base;
  840. priv->flags = plat->flags;
  841. priv->speed_hz = plat->speed_hz;
  842. /*
  843. * QSPI SFADR width is 32bits, the max dest addr is 4GB-1.
  844. * AMBA memory zone should be located on the 0~4GB space
  845. * even on a 64bits cpu.
  846. */
  847. priv->amba_base[0] = (u32)plat->amba_base;
  848. priv->amba_total_size = (u32)plat->amba_total_size;
  849. priv->flash_num = plat->flash_num;
  850. priv->num_chipselect = plat->num_chipselect;
  851. qspi_write32(priv->flags, &priv->regs->mcr,
  852. QSPI_MCR_RESERVED_MASK | QSPI_MCR_MDIS_MASK);
  853. qspi_cfg_smpr(priv, ~(QSPI_SMPR_FSDLY_MASK | QSPI_SMPR_DDRSMP_MASK |
  854. QSPI_SMPR_FSPHS_MASK | QSPI_SMPR_HSENA_MASK), 0);
  855. /*
  856. * Assign AMBA memory zone for every chipselect
  857. * QuadSPI has two channels, every channel has two chipselects.
  858. * If the property 'num-cs' in dts is 2, the AMBA memory will be divided
  859. * into two parts and assign to every channel. This indicate that every
  860. * channel only has one valid chipselect.
  861. * If the property 'num-cs' in dts is 4, the AMBA memory will be divided
  862. * into four parts and assign to every chipselect.
  863. * Every channel will has two valid chipselects.
  864. */
  865. amba_size_per_chip = priv->amba_total_size >>
  866. (priv->num_chipselect >> 1);
  867. for (i = 1 ; i < priv->num_chipselect ; i++)
  868. priv->amba_base[i] =
  869. amba_size_per_chip + priv->amba_base[i - 1];
  870. /*
  871. * Any read access to non-implemented addresses will provide
  872. * undefined results.
  873. *
  874. * In case single die flash devices, TOP_ADDR_MEMA2 and
  875. * TOP_ADDR_MEMB2 should be initialized/programmed to
  876. * TOP_ADDR_MEMA1 and TOP_ADDR_MEMB1 respectively - in effect,
  877. * setting the size of these devices to 0. This would ensure
  878. * that the complete memory map is assigned to only one flash device.
  879. */
  880. qspi_write32(priv->flags, &priv->regs->sfa1ad, priv->amba_base[1]);
  881. switch (priv->num_chipselect) {
  882. case 2:
  883. qspi_write32(priv->flags, &priv->regs->sfa2ad,
  884. priv->amba_base[1]);
  885. qspi_write32(priv->flags, &priv->regs->sfb1ad,
  886. priv->amba_base[1] + amba_size_per_chip);
  887. qspi_write32(priv->flags, &priv->regs->sfb2ad,
  888. priv->amba_base[1] + amba_size_per_chip);
  889. break;
  890. case 4:
  891. qspi_write32(priv->flags, &priv->regs->sfa2ad,
  892. priv->amba_base[2]);
  893. qspi_write32(priv->flags, &priv->regs->sfb1ad,
  894. priv->amba_base[3]);
  895. qspi_write32(priv->flags, &priv->regs->sfb2ad,
  896. priv->amba_base[3] + amba_size_per_chip);
  897. break;
  898. default:
  899. debug("Error: Unsupported chipselect number %u!\n",
  900. priv->num_chipselect);
  901. qspi_module_disable(priv, 1);
  902. return -EINVAL;
  903. }
  904. qspi_set_lut(priv);
  905. #ifdef CONFIG_SYS_FSL_QSPI_AHB
  906. qspi_init_ahb_read(priv);
  907. #endif
  908. qspi_module_disable(priv, 0);
  909. return 0;
  910. }
  911. static int fsl_qspi_ofdata_to_platdata(struct udevice *bus)
  912. {
  913. struct fdt_resource res_regs, res_mem;
  914. struct fsl_qspi_platdata *plat = bus->platdata;
  915. const void *blob = gd->fdt_blob;
  916. int node = bus->of_offset;
  917. int ret, flash_num = 0, subnode;
  918. if (fdtdec_get_bool(blob, node, "big-endian"))
  919. plat->flags |= QSPI_FLAG_REGMAP_ENDIAN_BIG;
  920. ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
  921. "QuadSPI", &res_regs);
  922. if (ret) {
  923. debug("Error: can't get regs base addresses(ret = %d)!\n", ret);
  924. return -ENOMEM;
  925. }
  926. ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
  927. "QuadSPI-memory", &res_mem);
  928. if (ret) {
  929. debug("Error: can't get AMBA base addresses(ret = %d)!\n", ret);
  930. return -ENOMEM;
  931. }
  932. /* Count flash numbers */
  933. fdt_for_each_subnode(blob, subnode, node)
  934. ++flash_num;
  935. if (flash_num == 0) {
  936. debug("Error: Missing flashes!\n");
  937. return -ENODEV;
  938. }
  939. plat->speed_hz = fdtdec_get_int(blob, node, "spi-max-frequency",
  940. FSL_QSPI_DEFAULT_SCK_FREQ);
  941. plat->num_chipselect = fdtdec_get_int(blob, node, "num-cs",
  942. FSL_QSPI_MAX_CHIPSELECT_NUM);
  943. plat->reg_base = res_regs.start;
  944. plat->amba_base = res_mem.start;
  945. plat->amba_total_size = res_mem.end - res_mem.start + 1;
  946. plat->flash_num = flash_num;
  947. debug("%s: regs=<0x%llx> <0x%llx, 0x%llx>, max-frequency=%d, endianess=%s\n",
  948. __func__,
  949. (u64)plat->reg_base,
  950. (u64)plat->amba_base,
  951. (u64)plat->amba_total_size,
  952. plat->speed_hz,
  953. plat->flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ? "be" : "le"
  954. );
  955. return 0;
  956. }
  957. static int fsl_qspi_xfer(struct udevice *dev, unsigned int bitlen,
  958. const void *dout, void *din, unsigned long flags)
  959. {
  960. struct fsl_qspi_priv *priv;
  961. struct udevice *bus;
  962. bus = dev->parent;
  963. priv = dev_get_priv(bus);
  964. return qspi_xfer(priv, bitlen, dout, din, flags);
  965. }
  966. static int fsl_qspi_claim_bus(struct udevice *dev)
  967. {
  968. struct fsl_qspi_priv *priv;
  969. struct udevice *bus;
  970. struct dm_spi_slave_platdata *slave_plat = dev_get_parent_platdata(dev);
  971. bus = dev->parent;
  972. priv = dev_get_priv(bus);
  973. priv->cur_amba_base = priv->amba_base[slave_plat->cs];
  974. qspi_module_disable(priv, 0);
  975. return 0;
  976. }
  977. static int fsl_qspi_release_bus(struct udevice *dev)
  978. {
  979. struct fsl_qspi_priv *priv;
  980. struct udevice *bus;
  981. bus = dev->parent;
  982. priv = dev_get_priv(bus);
  983. qspi_module_disable(priv, 1);
  984. return 0;
  985. }
  986. static int fsl_qspi_set_speed(struct udevice *bus, uint speed)
  987. {
  988. /* Nothing to do */
  989. return 0;
  990. }
  991. static int fsl_qspi_set_mode(struct udevice *bus, uint mode)
  992. {
  993. /* Nothing to do */
  994. return 0;
  995. }
  996. static const struct dm_spi_ops fsl_qspi_ops = {
  997. .claim_bus = fsl_qspi_claim_bus,
  998. .release_bus = fsl_qspi_release_bus,
  999. .xfer = fsl_qspi_xfer,
  1000. .set_speed = fsl_qspi_set_speed,
  1001. .set_mode = fsl_qspi_set_mode,
  1002. };
  1003. static const struct udevice_id fsl_qspi_ids[] = {
  1004. { .compatible = "fsl,vf610-qspi" },
  1005. { .compatible = "fsl,imx6sx-qspi" },
  1006. { }
  1007. };
  1008. U_BOOT_DRIVER(fsl_qspi) = {
  1009. .name = "fsl_qspi",
  1010. .id = UCLASS_SPI,
  1011. .of_match = fsl_qspi_ids,
  1012. .ops = &fsl_qspi_ops,
  1013. .ofdata_to_platdata = fsl_qspi_ofdata_to_platdata,
  1014. .platdata_auto_alloc_size = sizeof(struct fsl_qspi_platdata),
  1015. .priv_auto_alloc_size = sizeof(struct fsl_qspi_priv),
  1016. .probe = fsl_qspi_probe,
  1017. .child_pre_probe = fsl_qspi_child_pre_probe,
  1018. };
  1019. #endif