fsl_qspi.c 31 KB

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