fsl_elbc_nand.c 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244
  1. /* Freescale Enhanced Local Bus Controller NAND driver
  2. *
  3. * Copyright (c) 2006-2007 Freescale Semiconductor
  4. *
  5. * Authors: Nick Spence <nick.spence@freescale.com>,
  6. * Scott Wood <scottwood@freescale.com>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21. */
  22. #include <linux/module.h>
  23. #include <linux/types.h>
  24. #include <linux/init.h>
  25. #include <linux/kernel.h>
  26. #include <linux/string.h>
  27. #include <linux/ioport.h>
  28. #include <linux/of_platform.h>
  29. #include <linux/slab.h>
  30. #include <linux/interrupt.h>
  31. #include <linux/mtd/mtd.h>
  32. #include <linux/mtd/nand.h>
  33. #include <linux/mtd/nand_ecc.h>
  34. #include <linux/mtd/partitions.h>
  35. #include <asm/io.h>
  36. #define MAX_BANKS 8
  37. #define ERR_BYTE 0xFF /* Value returned for read bytes when read failed */
  38. #define FCM_TIMEOUT_MSECS 500 /* Maximum number of mSecs to wait for FCM */
  39. struct elbc_bank {
  40. __be32 br; /**< Base Register */
  41. #define BR_BA 0xFFFF8000
  42. #define BR_BA_SHIFT 15
  43. #define BR_PS 0x00001800
  44. #define BR_PS_SHIFT 11
  45. #define BR_PS_8 0x00000800 /* Port Size 8 bit */
  46. #define BR_PS_16 0x00001000 /* Port Size 16 bit */
  47. #define BR_PS_32 0x00001800 /* Port Size 32 bit */
  48. #define BR_DECC 0x00000600
  49. #define BR_DECC_SHIFT 9
  50. #define BR_DECC_OFF 0x00000000 /* HW ECC checking and generation off */
  51. #define BR_DECC_CHK 0x00000200 /* HW ECC checking on, generation off */
  52. #define BR_DECC_CHK_GEN 0x00000400 /* HW ECC checking and generation on */
  53. #define BR_WP 0x00000100
  54. #define BR_WP_SHIFT 8
  55. #define BR_MSEL 0x000000E0
  56. #define BR_MSEL_SHIFT 5
  57. #define BR_MS_GPCM 0x00000000 /* GPCM */
  58. #define BR_MS_FCM 0x00000020 /* FCM */
  59. #define BR_MS_SDRAM 0x00000060 /* SDRAM */
  60. #define BR_MS_UPMA 0x00000080 /* UPMA */
  61. #define BR_MS_UPMB 0x000000A0 /* UPMB */
  62. #define BR_MS_UPMC 0x000000C0 /* UPMC */
  63. #define BR_V 0x00000001
  64. #define BR_V_SHIFT 0
  65. #define BR_RES ~(BR_BA|BR_PS|BR_DECC|BR_WP|BR_MSEL|BR_V)
  66. __be32 or; /**< Base Register */
  67. #define OR0 0x5004
  68. #define OR1 0x500C
  69. #define OR2 0x5014
  70. #define OR3 0x501C
  71. #define OR4 0x5024
  72. #define OR5 0x502C
  73. #define OR6 0x5034
  74. #define OR7 0x503C
  75. #define OR_FCM_AM 0xFFFF8000
  76. #define OR_FCM_AM_SHIFT 15
  77. #define OR_FCM_BCTLD 0x00001000
  78. #define OR_FCM_BCTLD_SHIFT 12
  79. #define OR_FCM_PGS 0x00000400
  80. #define OR_FCM_PGS_SHIFT 10
  81. #define OR_FCM_CSCT 0x00000200
  82. #define OR_FCM_CSCT_SHIFT 9
  83. #define OR_FCM_CST 0x00000100
  84. #define OR_FCM_CST_SHIFT 8
  85. #define OR_FCM_CHT 0x00000080
  86. #define OR_FCM_CHT_SHIFT 7
  87. #define OR_FCM_SCY 0x00000070
  88. #define OR_FCM_SCY_SHIFT 4
  89. #define OR_FCM_SCY_1 0x00000010
  90. #define OR_FCM_SCY_2 0x00000020
  91. #define OR_FCM_SCY_3 0x00000030
  92. #define OR_FCM_SCY_4 0x00000040
  93. #define OR_FCM_SCY_5 0x00000050
  94. #define OR_FCM_SCY_6 0x00000060
  95. #define OR_FCM_SCY_7 0x00000070
  96. #define OR_FCM_RST 0x00000008
  97. #define OR_FCM_RST_SHIFT 3
  98. #define OR_FCM_TRLX 0x00000004
  99. #define OR_FCM_TRLX_SHIFT 2
  100. #define OR_FCM_EHTR 0x00000002
  101. #define OR_FCM_EHTR_SHIFT 1
  102. };
  103. struct elbc_regs {
  104. struct elbc_bank bank[8];
  105. u8 res0[0x28];
  106. __be32 mar; /**< UPM Address Register */
  107. u8 res1[0x4];
  108. __be32 mamr; /**< UPMA Mode Register */
  109. __be32 mbmr; /**< UPMB Mode Register */
  110. __be32 mcmr; /**< UPMC Mode Register */
  111. u8 res2[0x8];
  112. __be32 mrtpr; /**< Memory Refresh Timer Prescaler Register */
  113. __be32 mdr; /**< UPM Data Register */
  114. u8 res3[0x4];
  115. __be32 lsor; /**< Special Operation Initiation Register */
  116. __be32 lsdmr; /**< SDRAM Mode Register */
  117. u8 res4[0x8];
  118. __be32 lurt; /**< UPM Refresh Timer */
  119. __be32 lsrt; /**< SDRAM Refresh Timer */
  120. u8 res5[0x8];
  121. __be32 ltesr; /**< Transfer Error Status Register */
  122. #define LTESR_BM 0x80000000
  123. #define LTESR_FCT 0x40000000
  124. #define LTESR_PAR 0x20000000
  125. #define LTESR_WP 0x04000000
  126. #define LTESR_ATMW 0x00800000
  127. #define LTESR_ATMR 0x00400000
  128. #define LTESR_CS 0x00080000
  129. #define LTESR_CC 0x00000001
  130. #define LTESR_NAND_MASK (LTESR_FCT | LTESR_PAR | LTESR_CC)
  131. __be32 ltedr; /**< Transfer Error Disable Register */
  132. __be32 lteir; /**< Transfer Error Interrupt Register */
  133. __be32 lteatr; /**< Transfer Error Attributes Register */
  134. __be32 ltear; /**< Transfer Error Address Register */
  135. u8 res6[0xC];
  136. __be32 lbcr; /**< Configuration Register */
  137. #define LBCR_LDIS 0x80000000
  138. #define LBCR_LDIS_SHIFT 31
  139. #define LBCR_BCTLC 0x00C00000
  140. #define LBCR_BCTLC_SHIFT 22
  141. #define LBCR_AHD 0x00200000
  142. #define LBCR_LPBSE 0x00020000
  143. #define LBCR_LPBSE_SHIFT 17
  144. #define LBCR_EPAR 0x00010000
  145. #define LBCR_EPAR_SHIFT 16
  146. #define LBCR_BMT 0x0000FF00
  147. #define LBCR_BMT_SHIFT 8
  148. #define LBCR_INIT 0x00040000
  149. __be32 lcrr; /**< Clock Ratio Register */
  150. #define LCRR_DBYP 0x80000000
  151. #define LCRR_DBYP_SHIFT 31
  152. #define LCRR_BUFCMDC 0x30000000
  153. #define LCRR_BUFCMDC_SHIFT 28
  154. #define LCRR_ECL 0x03000000
  155. #define LCRR_ECL_SHIFT 24
  156. #define LCRR_EADC 0x00030000
  157. #define LCRR_EADC_SHIFT 16
  158. #define LCRR_CLKDIV 0x0000000F
  159. #define LCRR_CLKDIV_SHIFT 0
  160. u8 res7[0x8];
  161. __be32 fmr; /**< Flash Mode Register */
  162. #define FMR_CWTO 0x0000F000
  163. #define FMR_CWTO_SHIFT 12
  164. #define FMR_BOOT 0x00000800
  165. #define FMR_ECCM 0x00000100
  166. #define FMR_AL 0x00000030
  167. #define FMR_AL_SHIFT 4
  168. #define FMR_OP 0x00000003
  169. #define FMR_OP_SHIFT 0
  170. __be32 fir; /**< Flash Instruction Register */
  171. #define FIR_OP0 0xF0000000
  172. #define FIR_OP0_SHIFT 28
  173. #define FIR_OP1 0x0F000000
  174. #define FIR_OP1_SHIFT 24
  175. #define FIR_OP2 0x00F00000
  176. #define FIR_OP2_SHIFT 20
  177. #define FIR_OP3 0x000F0000
  178. #define FIR_OP3_SHIFT 16
  179. #define FIR_OP4 0x0000F000
  180. #define FIR_OP4_SHIFT 12
  181. #define FIR_OP5 0x00000F00
  182. #define FIR_OP5_SHIFT 8
  183. #define FIR_OP6 0x000000F0
  184. #define FIR_OP6_SHIFT 4
  185. #define FIR_OP7 0x0000000F
  186. #define FIR_OP7_SHIFT 0
  187. #define FIR_OP_NOP 0x0 /* No operation and end of sequence */
  188. #define FIR_OP_CA 0x1 /* Issue current column address */
  189. #define FIR_OP_PA 0x2 /* Issue current block+page address */
  190. #define FIR_OP_UA 0x3 /* Issue user defined address */
  191. #define FIR_OP_CM0 0x4 /* Issue command from FCR[CMD0] */
  192. #define FIR_OP_CM1 0x5 /* Issue command from FCR[CMD1] */
  193. #define FIR_OP_CM2 0x6 /* Issue command from FCR[CMD2] */
  194. #define FIR_OP_CM3 0x7 /* Issue command from FCR[CMD3] */
  195. #define FIR_OP_WB 0x8 /* Write FBCR bytes from FCM buffer */
  196. #define FIR_OP_WS 0x9 /* Write 1 or 2 bytes from MDR[AS] */
  197. #define FIR_OP_RB 0xA /* Read FBCR bytes to FCM buffer */
  198. #define FIR_OP_RS 0xB /* Read 1 or 2 bytes to MDR[AS] */
  199. #define FIR_OP_CW0 0xC /* Wait then issue FCR[CMD0] */
  200. #define FIR_OP_CW1 0xD /* Wait then issue FCR[CMD1] */
  201. #define FIR_OP_RBW 0xE /* Wait then read FBCR bytes */
  202. #define FIR_OP_RSW 0xE /* Wait then read 1 or 2 bytes */
  203. __be32 fcr; /**< Flash Command Register */
  204. #define FCR_CMD0 0xFF000000
  205. #define FCR_CMD0_SHIFT 24
  206. #define FCR_CMD1 0x00FF0000
  207. #define FCR_CMD1_SHIFT 16
  208. #define FCR_CMD2 0x0000FF00
  209. #define FCR_CMD2_SHIFT 8
  210. #define FCR_CMD3 0x000000FF
  211. #define FCR_CMD3_SHIFT 0
  212. __be32 fbar; /**< Flash Block Address Register */
  213. #define FBAR_BLK 0x00FFFFFF
  214. __be32 fpar; /**< Flash Page Address Register */
  215. #define FPAR_SP_PI 0x00007C00
  216. #define FPAR_SP_PI_SHIFT 10
  217. #define FPAR_SP_MS 0x00000200
  218. #define FPAR_SP_CI 0x000001FF
  219. #define FPAR_SP_CI_SHIFT 0
  220. #define FPAR_LP_PI 0x0003F000
  221. #define FPAR_LP_PI_SHIFT 12
  222. #define FPAR_LP_MS 0x00000800
  223. #define FPAR_LP_CI 0x000007FF
  224. #define FPAR_LP_CI_SHIFT 0
  225. __be32 fbcr; /**< Flash Byte Count Register */
  226. #define FBCR_BC 0x00000FFF
  227. u8 res11[0x8];
  228. u8 res8[0xF00];
  229. };
  230. struct fsl_elbc_ctrl;
  231. /* mtd information per set */
  232. struct fsl_elbc_mtd {
  233. struct mtd_info mtd;
  234. struct nand_chip chip;
  235. struct fsl_elbc_ctrl *ctrl;
  236. struct device *dev;
  237. int bank; /* Chip select bank number */
  238. u8 __iomem *vbase; /* Chip select base virtual address */
  239. int page_size; /* NAND page size (0=512, 1=2048) */
  240. unsigned int fmr; /* FCM Flash Mode Register value */
  241. };
  242. /* overview of the fsl elbc controller */
  243. struct fsl_elbc_ctrl {
  244. struct nand_hw_control controller;
  245. struct fsl_elbc_mtd *chips[MAX_BANKS];
  246. /* device info */
  247. struct device *dev;
  248. struct elbc_regs __iomem *regs;
  249. int irq;
  250. wait_queue_head_t irq_wait;
  251. unsigned int irq_status; /* status read from LTESR by irq handler */
  252. u8 __iomem *addr; /* Address of assigned FCM buffer */
  253. unsigned int page; /* Last page written to / read from */
  254. unsigned int read_bytes; /* Number of bytes read during command */
  255. unsigned int column; /* Saved column from SEQIN */
  256. unsigned int index; /* Pointer to next byte to 'read' */
  257. unsigned int status; /* status read from LTESR after last op */
  258. unsigned int mdr; /* UPM/FCM Data Register value */
  259. unsigned int use_mdr; /* Non zero if the MDR is to be set */
  260. unsigned int oob; /* Non zero if operating on OOB data */
  261. char *oob_poi; /* Place to write ECC after read back */
  262. };
  263. /* These map to the positions used by the FCM hardware ECC generator */
  264. /* Small Page FLASH with FMR[ECCM] = 0 */
  265. static struct nand_ecclayout fsl_elbc_oob_sp_eccm0 = {
  266. .eccbytes = 3,
  267. .eccpos = {6, 7, 8},
  268. .oobfree = { {0, 5}, {9, 7} },
  269. .oobavail = 12,
  270. };
  271. /* Small Page FLASH with FMR[ECCM] = 1 */
  272. static struct nand_ecclayout fsl_elbc_oob_sp_eccm1 = {
  273. .eccbytes = 3,
  274. .eccpos = {8, 9, 10},
  275. .oobfree = { {0, 5}, {6, 2}, {11, 5} },
  276. .oobavail = 12,
  277. };
  278. /* Large Page FLASH with FMR[ECCM] = 0 */
  279. static struct nand_ecclayout fsl_elbc_oob_lp_eccm0 = {
  280. .eccbytes = 12,
  281. .eccpos = {6, 7, 8, 22, 23, 24, 38, 39, 40, 54, 55, 56},
  282. .oobfree = { {1, 5}, {9, 13}, {25, 13}, {41, 13}, {57, 7} },
  283. .oobavail = 48,
  284. };
  285. /* Large Page FLASH with FMR[ECCM] = 1 */
  286. static struct nand_ecclayout fsl_elbc_oob_lp_eccm1 = {
  287. .eccbytes = 12,
  288. .eccpos = {8, 9, 10, 24, 25, 26, 40, 41, 42, 56, 57, 58},
  289. .oobfree = { {1, 7}, {11, 13}, {27, 13}, {43, 13}, {59, 5} },
  290. .oobavail = 48,
  291. };
  292. /*=================================*/
  293. /*
  294. * Set up the FCM hardware block and page address fields, and the fcm
  295. * structure addr field to point to the correct FCM buffer in memory
  296. */
  297. static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob)
  298. {
  299. struct nand_chip *chip = mtd->priv;
  300. struct fsl_elbc_mtd *priv = chip->priv;
  301. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  302. struct elbc_regs __iomem *lbc = ctrl->regs;
  303. int buf_num;
  304. ctrl->page = page_addr;
  305. out_be32(&lbc->fbar,
  306. page_addr >> (chip->phys_erase_shift - chip->page_shift));
  307. if (priv->page_size) {
  308. out_be32(&lbc->fpar,
  309. ((page_addr << FPAR_LP_PI_SHIFT) & FPAR_LP_PI) |
  310. (oob ? FPAR_LP_MS : 0) | column);
  311. buf_num = (page_addr & 1) << 2;
  312. } else {
  313. out_be32(&lbc->fpar,
  314. ((page_addr << FPAR_SP_PI_SHIFT) & FPAR_SP_PI) |
  315. (oob ? FPAR_SP_MS : 0) | column);
  316. buf_num = page_addr & 7;
  317. }
  318. ctrl->addr = priv->vbase + buf_num * 1024;
  319. ctrl->index = column;
  320. /* for OOB data point to the second half of the buffer */
  321. if (oob)
  322. ctrl->index += priv->page_size ? 2048 : 512;
  323. dev_vdbg(ctrl->dev, "set_addr: bank=%d, ctrl->addr=0x%p (0x%p), "
  324. "index %x, pes %d ps %d\n",
  325. buf_num, ctrl->addr, priv->vbase, ctrl->index,
  326. chip->phys_erase_shift, chip->page_shift);
  327. }
  328. /*
  329. * execute FCM command and wait for it to complete
  330. */
  331. static int fsl_elbc_run_command(struct mtd_info *mtd)
  332. {
  333. struct nand_chip *chip = mtd->priv;
  334. struct fsl_elbc_mtd *priv = chip->priv;
  335. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  336. struct elbc_regs __iomem *lbc = ctrl->regs;
  337. /* Setup the FMR[OP] to execute without write protection */
  338. out_be32(&lbc->fmr, priv->fmr | 3);
  339. if (ctrl->use_mdr)
  340. out_be32(&lbc->mdr, ctrl->mdr);
  341. dev_vdbg(ctrl->dev,
  342. "fsl_elbc_run_command: fmr=%08x fir=%08x fcr=%08x\n",
  343. in_be32(&lbc->fmr), in_be32(&lbc->fir), in_be32(&lbc->fcr));
  344. dev_vdbg(ctrl->dev,
  345. "fsl_elbc_run_command: fbar=%08x fpar=%08x "
  346. "fbcr=%08x bank=%d\n",
  347. in_be32(&lbc->fbar), in_be32(&lbc->fpar),
  348. in_be32(&lbc->fbcr), priv->bank);
  349. /* execute special operation */
  350. out_be32(&lbc->lsor, priv->bank);
  351. /* wait for FCM complete flag or timeout */
  352. ctrl->irq_status = 0;
  353. wait_event_timeout(ctrl->irq_wait, ctrl->irq_status,
  354. FCM_TIMEOUT_MSECS * HZ/1000);
  355. ctrl->status = ctrl->irq_status;
  356. /* store mdr value in case it was needed */
  357. if (ctrl->use_mdr)
  358. ctrl->mdr = in_be32(&lbc->mdr);
  359. ctrl->use_mdr = 0;
  360. dev_vdbg(ctrl->dev,
  361. "fsl_elbc_run_command: stat=%08x mdr=%08x fmr=%08x\n",
  362. ctrl->status, ctrl->mdr, in_be32(&lbc->fmr));
  363. /* returns 0 on success otherwise non-zero) */
  364. return ctrl->status == LTESR_CC ? 0 : -EIO;
  365. }
  366. static void fsl_elbc_do_read(struct nand_chip *chip, int oob)
  367. {
  368. struct fsl_elbc_mtd *priv = chip->priv;
  369. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  370. struct elbc_regs __iomem *lbc = ctrl->regs;
  371. if (priv->page_size) {
  372. out_be32(&lbc->fir,
  373. (FIR_OP_CW0 << FIR_OP0_SHIFT) |
  374. (FIR_OP_CA << FIR_OP1_SHIFT) |
  375. (FIR_OP_PA << FIR_OP2_SHIFT) |
  376. (FIR_OP_CW1 << FIR_OP3_SHIFT) |
  377. (FIR_OP_RBW << FIR_OP4_SHIFT));
  378. out_be32(&lbc->fcr, (NAND_CMD_READ0 << FCR_CMD0_SHIFT) |
  379. (NAND_CMD_READSTART << FCR_CMD1_SHIFT));
  380. } else {
  381. out_be32(&lbc->fir,
  382. (FIR_OP_CW0 << FIR_OP0_SHIFT) |
  383. (FIR_OP_CA << FIR_OP1_SHIFT) |
  384. (FIR_OP_PA << FIR_OP2_SHIFT) |
  385. (FIR_OP_RBW << FIR_OP3_SHIFT));
  386. if (oob)
  387. out_be32(&lbc->fcr, NAND_CMD_READOOB << FCR_CMD0_SHIFT);
  388. else
  389. out_be32(&lbc->fcr, NAND_CMD_READ0 << FCR_CMD0_SHIFT);
  390. }
  391. }
  392. /* cmdfunc send commands to the FCM */
  393. static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
  394. int column, int page_addr)
  395. {
  396. struct nand_chip *chip = mtd->priv;
  397. struct fsl_elbc_mtd *priv = chip->priv;
  398. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  399. struct elbc_regs __iomem *lbc = ctrl->regs;
  400. ctrl->use_mdr = 0;
  401. /* clear the read buffer */
  402. ctrl->read_bytes = 0;
  403. if (command != NAND_CMD_PAGEPROG)
  404. ctrl->index = 0;
  405. switch (command) {
  406. /* READ0 and READ1 read the entire buffer to use hardware ECC. */
  407. case NAND_CMD_READ1:
  408. column += 256;
  409. /* fall-through */
  410. case NAND_CMD_READ0:
  411. dev_dbg(ctrl->dev,
  412. "fsl_elbc_cmdfunc: NAND_CMD_READ0, page_addr:"
  413. " 0x%x, column: 0x%x.\n", page_addr, column);
  414. out_be32(&lbc->fbcr, 0); /* read entire page to enable ECC */
  415. set_addr(mtd, 0, page_addr, 0);
  416. ctrl->read_bytes = mtd->writesize + mtd->oobsize;
  417. ctrl->index += column;
  418. fsl_elbc_do_read(chip, 0);
  419. fsl_elbc_run_command(mtd);
  420. return;
  421. /* READOOB reads only the OOB because no ECC is performed. */
  422. case NAND_CMD_READOOB:
  423. dev_vdbg(ctrl->dev,
  424. "fsl_elbc_cmdfunc: NAND_CMD_READOOB, page_addr:"
  425. " 0x%x, column: 0x%x.\n", page_addr, column);
  426. out_be32(&lbc->fbcr, mtd->oobsize - column);
  427. set_addr(mtd, column, page_addr, 1);
  428. ctrl->read_bytes = mtd->writesize + mtd->oobsize;
  429. fsl_elbc_do_read(chip, 1);
  430. fsl_elbc_run_command(mtd);
  431. return;
  432. /* READID must read all 5 possible bytes while CEB is active */
  433. case NAND_CMD_READID:
  434. dev_vdbg(ctrl->dev, "fsl_elbc_cmdfunc: NAND_CMD_READID.\n");
  435. out_be32(&lbc->fir, (FIR_OP_CW0 << FIR_OP0_SHIFT) |
  436. (FIR_OP_UA << FIR_OP1_SHIFT) |
  437. (FIR_OP_RBW << FIR_OP2_SHIFT));
  438. out_be32(&lbc->fcr, NAND_CMD_READID << FCR_CMD0_SHIFT);
  439. /* 5 bytes for manuf, device and exts */
  440. out_be32(&lbc->fbcr, 5);
  441. ctrl->read_bytes = 5;
  442. ctrl->use_mdr = 1;
  443. ctrl->mdr = 0;
  444. set_addr(mtd, 0, 0, 0);
  445. fsl_elbc_run_command(mtd);
  446. return;
  447. /* ERASE1 stores the block and page address */
  448. case NAND_CMD_ERASE1:
  449. dev_vdbg(ctrl->dev,
  450. "fsl_elbc_cmdfunc: NAND_CMD_ERASE1, "
  451. "page_addr: 0x%x.\n", page_addr);
  452. set_addr(mtd, 0, page_addr, 0);
  453. return;
  454. /* ERASE2 uses the block and page address from ERASE1 */
  455. case NAND_CMD_ERASE2:
  456. dev_vdbg(ctrl->dev, "fsl_elbc_cmdfunc: NAND_CMD_ERASE2.\n");
  457. out_be32(&lbc->fir,
  458. (FIR_OP_CW0 << FIR_OP0_SHIFT) |
  459. (FIR_OP_PA << FIR_OP1_SHIFT) |
  460. (FIR_OP_CM1 << FIR_OP2_SHIFT));
  461. out_be32(&lbc->fcr,
  462. (NAND_CMD_ERASE1 << FCR_CMD0_SHIFT) |
  463. (NAND_CMD_ERASE2 << FCR_CMD1_SHIFT));
  464. out_be32(&lbc->fbcr, 0);
  465. ctrl->read_bytes = 0;
  466. fsl_elbc_run_command(mtd);
  467. return;
  468. /* SEQIN sets up the addr buffer and all registers except the length */
  469. case NAND_CMD_SEQIN: {
  470. __be32 fcr;
  471. dev_vdbg(ctrl->dev,
  472. "fsl_elbc_cmdfunc: NAND_CMD_SEQIN/PAGE_PROG, "
  473. "page_addr: 0x%x, column: 0x%x.\n",
  474. page_addr, column);
  475. ctrl->column = column;
  476. ctrl->oob = 0;
  477. fcr = (NAND_CMD_PAGEPROG << FCR_CMD1_SHIFT) |
  478. (NAND_CMD_SEQIN << FCR_CMD2_SHIFT);
  479. if (priv->page_size) {
  480. out_be32(&lbc->fir,
  481. (FIR_OP_CW0 << FIR_OP0_SHIFT) |
  482. (FIR_OP_CA << FIR_OP1_SHIFT) |
  483. (FIR_OP_PA << FIR_OP2_SHIFT) |
  484. (FIR_OP_WB << FIR_OP3_SHIFT) |
  485. (FIR_OP_CW1 << FIR_OP4_SHIFT));
  486. fcr |= NAND_CMD_READ0 << FCR_CMD0_SHIFT;
  487. } else {
  488. out_be32(&lbc->fir,
  489. (FIR_OP_CW0 << FIR_OP0_SHIFT) |
  490. (FIR_OP_CM2 << FIR_OP1_SHIFT) |
  491. (FIR_OP_CA << FIR_OP2_SHIFT) |
  492. (FIR_OP_PA << FIR_OP3_SHIFT) |
  493. (FIR_OP_WB << FIR_OP4_SHIFT) |
  494. (FIR_OP_CW1 << FIR_OP5_SHIFT));
  495. if (column >= mtd->writesize) {
  496. /* OOB area --> READOOB */
  497. column -= mtd->writesize;
  498. fcr |= NAND_CMD_READOOB << FCR_CMD0_SHIFT;
  499. ctrl->oob = 1;
  500. } else if (column < 256) {
  501. /* First 256 bytes --> READ0 */
  502. fcr |= NAND_CMD_READ0 << FCR_CMD0_SHIFT;
  503. } else {
  504. /* Second 256 bytes --> READ1 */
  505. fcr |= NAND_CMD_READ1 << FCR_CMD0_SHIFT;
  506. }
  507. }
  508. out_be32(&lbc->fcr, fcr);
  509. set_addr(mtd, column, page_addr, ctrl->oob);
  510. return;
  511. }
  512. /* PAGEPROG reuses all of the setup from SEQIN and adds the length */
  513. case NAND_CMD_PAGEPROG: {
  514. int full_page;
  515. dev_vdbg(ctrl->dev,
  516. "fsl_elbc_cmdfunc: NAND_CMD_PAGEPROG "
  517. "writing %d bytes.\n", ctrl->index);
  518. /* if the write did not start at 0 or is not a full page
  519. * then set the exact length, otherwise use a full page
  520. * write so the HW generates the ECC.
  521. */
  522. if (ctrl->oob || ctrl->column != 0 ||
  523. ctrl->index != mtd->writesize + mtd->oobsize) {
  524. out_be32(&lbc->fbcr, ctrl->index);
  525. full_page = 0;
  526. } else {
  527. out_be32(&lbc->fbcr, 0);
  528. full_page = 1;
  529. }
  530. fsl_elbc_run_command(mtd);
  531. /* Read back the page in order to fill in the ECC for the
  532. * caller. Is this really needed?
  533. */
  534. if (full_page && ctrl->oob_poi) {
  535. out_be32(&lbc->fbcr, 3);
  536. set_addr(mtd, 6, page_addr, 1);
  537. ctrl->read_bytes = mtd->writesize + 9;
  538. fsl_elbc_do_read(chip, 1);
  539. fsl_elbc_run_command(mtd);
  540. memcpy_fromio(ctrl->oob_poi + 6,
  541. &ctrl->addr[ctrl->index], 3);
  542. ctrl->index += 3;
  543. }
  544. ctrl->oob_poi = NULL;
  545. return;
  546. }
  547. /* CMD_STATUS must read the status byte while CEB is active */
  548. /* Note - it does not wait for the ready line */
  549. case NAND_CMD_STATUS:
  550. out_be32(&lbc->fir,
  551. (FIR_OP_CM0 << FIR_OP0_SHIFT) |
  552. (FIR_OP_RBW << FIR_OP1_SHIFT));
  553. out_be32(&lbc->fcr, NAND_CMD_STATUS << FCR_CMD0_SHIFT);
  554. out_be32(&lbc->fbcr, 1);
  555. set_addr(mtd, 0, 0, 0);
  556. ctrl->read_bytes = 1;
  557. fsl_elbc_run_command(mtd);
  558. /* The chip always seems to report that it is
  559. * write-protected, even when it is not.
  560. */
  561. setbits8(ctrl->addr, NAND_STATUS_WP);
  562. return;
  563. /* RESET without waiting for the ready line */
  564. case NAND_CMD_RESET:
  565. dev_dbg(ctrl->dev, "fsl_elbc_cmdfunc: NAND_CMD_RESET.\n");
  566. out_be32(&lbc->fir, FIR_OP_CM0 << FIR_OP0_SHIFT);
  567. out_be32(&lbc->fcr, NAND_CMD_RESET << FCR_CMD0_SHIFT);
  568. fsl_elbc_run_command(mtd);
  569. return;
  570. default:
  571. dev_err(ctrl->dev,
  572. "fsl_elbc_cmdfunc: error, unsupported command 0x%x.\n",
  573. command);
  574. }
  575. }
  576. static void fsl_elbc_select_chip(struct mtd_info *mtd, int chip)
  577. {
  578. /* The hardware does not seem to support multiple
  579. * chips per bank.
  580. */
  581. }
  582. /*
  583. * Write buf to the FCM Controller Data Buffer
  584. */
  585. static void fsl_elbc_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
  586. {
  587. struct nand_chip *chip = mtd->priv;
  588. struct fsl_elbc_mtd *priv = chip->priv;
  589. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  590. unsigned int bufsize = mtd->writesize + mtd->oobsize;
  591. if (len < 0) {
  592. dev_err(ctrl->dev, "write_buf of %d bytes", len);
  593. ctrl->status = 0;
  594. return;
  595. }
  596. if ((unsigned int)len > bufsize - ctrl->index) {
  597. dev_err(ctrl->dev,
  598. "write_buf beyond end of buffer "
  599. "(%d requested, %u available)\n",
  600. len, bufsize - ctrl->index);
  601. len = bufsize - ctrl->index;
  602. }
  603. memcpy_toio(&ctrl->addr[ctrl->index], buf, len);
  604. ctrl->index += len;
  605. }
  606. /*
  607. * read a byte from either the FCM hardware buffer if it has any data left
  608. * otherwise issue a command to read a single byte.
  609. */
  610. static u8 fsl_elbc_read_byte(struct mtd_info *mtd)
  611. {
  612. struct nand_chip *chip = mtd->priv;
  613. struct fsl_elbc_mtd *priv = chip->priv;
  614. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  615. /* If there are still bytes in the FCM, then use the next byte. */
  616. if (ctrl->index < ctrl->read_bytes)
  617. return in_8(&ctrl->addr[ctrl->index++]);
  618. dev_err(ctrl->dev, "read_byte beyond end of buffer\n");
  619. return ERR_BYTE;
  620. }
  621. /*
  622. * Read from the FCM Controller Data Buffer
  623. */
  624. static void fsl_elbc_read_buf(struct mtd_info *mtd, u8 *buf, int len)
  625. {
  626. struct nand_chip *chip = mtd->priv;
  627. struct fsl_elbc_mtd *priv = chip->priv;
  628. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  629. int avail;
  630. if (len < 0)
  631. return;
  632. avail = min((unsigned int)len, ctrl->read_bytes - ctrl->index);
  633. memcpy_fromio(buf, &ctrl->addr[ctrl->index], avail);
  634. ctrl->index += avail;
  635. if (len > avail)
  636. dev_err(ctrl->dev,
  637. "read_buf beyond end of buffer "
  638. "(%d requested, %d available)\n",
  639. len, avail);
  640. }
  641. /*
  642. * Verify buffer against the FCM Controller Data Buffer
  643. */
  644. static int fsl_elbc_verify_buf(struct mtd_info *mtd, const u_char *buf, int len)
  645. {
  646. struct nand_chip *chip = mtd->priv;
  647. struct fsl_elbc_mtd *priv = chip->priv;
  648. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  649. int i;
  650. if (len < 0) {
  651. dev_err(ctrl->dev, "write_buf of %d bytes", len);
  652. return -EINVAL;
  653. }
  654. if ((unsigned int)len > ctrl->read_bytes - ctrl->index) {
  655. dev_err(ctrl->dev,
  656. "verify_buf beyond end of buffer "
  657. "(%d requested, %u available)\n",
  658. len, ctrl->read_bytes - ctrl->index);
  659. ctrl->index = ctrl->read_bytes;
  660. return -EINVAL;
  661. }
  662. for (i = 0; i < len; i++)
  663. if (in_8(&ctrl->addr[ctrl->index + i]) != buf[i])
  664. break;
  665. ctrl->index += len;
  666. return i == len && ctrl->status == LTESR_CC ? 0 : -EIO;
  667. }
  668. /* This function is called after Program and Erase Operations to
  669. * check for success or failure.
  670. */
  671. static int fsl_elbc_wait(struct mtd_info *mtd, struct nand_chip *chip)
  672. {
  673. struct fsl_elbc_mtd *priv = chip->priv;
  674. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  675. struct elbc_regs __iomem *lbc = ctrl->regs;
  676. if (ctrl->status != LTESR_CC)
  677. return NAND_STATUS_FAIL;
  678. /* Use READ_STATUS command, but wait for the device to be ready */
  679. ctrl->use_mdr = 0;
  680. out_be32(&lbc->fir,
  681. (FIR_OP_CW0 << FIR_OP0_SHIFT) |
  682. (FIR_OP_RBW << FIR_OP1_SHIFT));
  683. out_be32(&lbc->fcr, NAND_CMD_STATUS << FCR_CMD0_SHIFT);
  684. out_be32(&lbc->fbcr, 1);
  685. set_addr(mtd, 0, 0, 0);
  686. ctrl->read_bytes = 1;
  687. fsl_elbc_run_command(mtd);
  688. if (ctrl->status != LTESR_CC)
  689. return NAND_STATUS_FAIL;
  690. /* The chip always seems to report that it is
  691. * write-protected, even when it is not.
  692. */
  693. setbits8(ctrl->addr, NAND_STATUS_WP);
  694. return fsl_elbc_read_byte(mtd);
  695. }
  696. static int fsl_elbc_chip_init_tail(struct mtd_info *mtd)
  697. {
  698. struct nand_chip *chip = mtd->priv;
  699. struct fsl_elbc_mtd *priv = chip->priv;
  700. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  701. struct elbc_regs __iomem *lbc = ctrl->regs;
  702. unsigned int al;
  703. /* calculate FMR Address Length field */
  704. al = 0;
  705. if (chip->pagemask & 0xffff0000)
  706. al++;
  707. if (chip->pagemask & 0xff000000)
  708. al++;
  709. /* add to ECCM mode set in fsl_elbc_init */
  710. priv->fmr |= (12 << FMR_CWTO_SHIFT) | /* Timeout > 12 ms */
  711. (al << FMR_AL_SHIFT);
  712. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->numchips = %d\n",
  713. chip->numchips);
  714. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->chipsize = %ld\n",
  715. chip->chipsize);
  716. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->pagemask = %8x\n",
  717. chip->pagemask);
  718. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->chip_delay = %d\n",
  719. chip->chip_delay);
  720. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->badblockpos = %d\n",
  721. chip->badblockpos);
  722. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->chip_shift = %d\n",
  723. chip->chip_shift);
  724. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->page_shift = %d\n",
  725. chip->page_shift);
  726. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->phys_erase_shift = %d\n",
  727. chip->phys_erase_shift);
  728. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->ecclayout = %p\n",
  729. chip->ecclayout);
  730. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->ecc.mode = %d\n",
  731. chip->ecc.mode);
  732. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->ecc.steps = %d\n",
  733. chip->ecc.steps);
  734. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->ecc.bytes = %d\n",
  735. chip->ecc.bytes);
  736. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->ecc.total = %d\n",
  737. chip->ecc.total);
  738. dev_dbg(ctrl->dev, "fsl_elbc_init: nand->ecc.layout = %p\n",
  739. chip->ecc.layout);
  740. dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->flags = %08x\n", mtd->flags);
  741. dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->size = %d\n", mtd->size);
  742. dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->erasesize = %d\n",
  743. mtd->erasesize);
  744. dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->writesize = %d\n",
  745. mtd->writesize);
  746. dev_dbg(ctrl->dev, "fsl_elbc_init: mtd->oobsize = %d\n",
  747. mtd->oobsize);
  748. /* adjust Option Register and ECC to match Flash page size */
  749. if (mtd->writesize == 512) {
  750. priv->page_size = 0;
  751. clrbits32(&lbc->bank[priv->bank].or, ~OR_FCM_PGS);
  752. } else if (mtd->writesize == 2048) {
  753. priv->page_size = 1;
  754. setbits32(&lbc->bank[priv->bank].or, OR_FCM_PGS);
  755. /* adjust ecc setup if needed */
  756. if ((in_be32(&lbc->bank[priv->bank].br) & BR_DECC) ==
  757. BR_DECC_CHK_GEN) {
  758. chip->ecc.size = 512;
  759. chip->ecc.layout = (priv->fmr & FMR_ECCM) ?
  760. &fsl_elbc_oob_lp_eccm1 :
  761. &fsl_elbc_oob_lp_eccm0;
  762. mtd->ecclayout = chip->ecc.layout;
  763. mtd->oobavail = chip->ecc.layout->oobavail;
  764. }
  765. } else {
  766. dev_err(ctrl->dev,
  767. "fsl_elbc_init: page size %d is not supported\n",
  768. mtd->writesize);
  769. return -1;
  770. }
  771. /* The default u-boot configuration on MPC8313ERDB causes errors;
  772. * more delay is needed. This should be safe for other boards
  773. * as well.
  774. */
  775. setbits32(&lbc->bank[priv->bank].or, 0x70);
  776. return 0;
  777. }
  778. static int fsl_elbc_read_page(struct mtd_info *mtd,
  779. struct nand_chip *chip,
  780. uint8_t *buf)
  781. {
  782. fsl_elbc_read_buf(mtd, buf, mtd->writesize);
  783. fsl_elbc_read_buf(mtd, chip->oob_poi, mtd->oobsize);
  784. if (fsl_elbc_wait(mtd, chip) & NAND_STATUS_FAIL)
  785. mtd->ecc_stats.failed++;
  786. return 0;
  787. }
  788. /* ECC will be calculated automatically, and errors will be detected in
  789. * waitfunc.
  790. */
  791. static void fsl_elbc_write_page(struct mtd_info *mtd,
  792. struct nand_chip *chip,
  793. const uint8_t *buf)
  794. {
  795. struct fsl_elbc_mtd *priv = chip->priv;
  796. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  797. fsl_elbc_write_buf(mtd, buf, mtd->writesize);
  798. fsl_elbc_write_buf(mtd, chip->oob_poi, mtd->oobsize);
  799. ctrl->oob_poi = chip->oob_poi;
  800. }
  801. static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
  802. {
  803. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  804. struct elbc_regs __iomem *lbc = ctrl->regs;
  805. struct nand_chip *chip = &priv->chip;
  806. dev_dbg(priv->dev, "eLBC Set Information for bank %d\n", priv->bank);
  807. /* Fill in fsl_elbc_mtd structure */
  808. priv->mtd.priv = chip;
  809. priv->mtd.owner = THIS_MODULE;
  810. priv->fmr = 0; /* rest filled in later */
  811. /* fill in nand_chip structure */
  812. /* set up function call table */
  813. chip->read_byte = fsl_elbc_read_byte;
  814. chip->write_buf = fsl_elbc_write_buf;
  815. chip->read_buf = fsl_elbc_read_buf;
  816. chip->verify_buf = fsl_elbc_verify_buf;
  817. chip->select_chip = fsl_elbc_select_chip;
  818. chip->cmdfunc = fsl_elbc_cmdfunc;
  819. chip->waitfunc = fsl_elbc_wait;
  820. /* set up nand options */
  821. chip->options = NAND_NO_READRDY | NAND_NO_AUTOINCR;
  822. chip->controller = &ctrl->controller;
  823. chip->priv = priv;
  824. chip->ecc.read_page = fsl_elbc_read_page;
  825. chip->ecc.write_page = fsl_elbc_write_page;
  826. /* If CS Base Register selects full hardware ECC then use it */
  827. if ((in_be32(&lbc->bank[priv->bank].br) & BR_DECC) ==
  828. BR_DECC_CHK_GEN) {
  829. chip->ecc.mode = NAND_ECC_HW;
  830. /* put in small page settings and adjust later if needed */
  831. chip->ecc.layout = (priv->fmr & FMR_ECCM) ?
  832. &fsl_elbc_oob_sp_eccm1 : &fsl_elbc_oob_sp_eccm0;
  833. chip->ecc.size = 512;
  834. chip->ecc.bytes = 3;
  835. } else {
  836. /* otherwise fall back to default software ECC */
  837. chip->ecc.mode = NAND_ECC_SOFT;
  838. }
  839. return 0;
  840. }
  841. static int fsl_elbc_chip_remove(struct fsl_elbc_mtd *priv)
  842. {
  843. struct fsl_elbc_ctrl *ctrl = priv->ctrl;
  844. nand_release(&priv->mtd);
  845. if (priv->vbase)
  846. iounmap(priv->vbase);
  847. ctrl->chips[priv->bank] = NULL;
  848. kfree(priv);
  849. return 0;
  850. }
  851. static int fsl_elbc_chip_probe(struct fsl_elbc_ctrl *ctrl,
  852. struct device_node *node)
  853. {
  854. struct elbc_regs __iomem *lbc = ctrl->regs;
  855. struct fsl_elbc_mtd *priv;
  856. struct resource res;
  857. #ifdef CONFIG_MTD_PARTITIONS
  858. static const char *part_probe_types[]
  859. = { "cmdlinepart", "RedBoot", NULL };
  860. struct mtd_partition *parts;
  861. #endif
  862. int ret;
  863. int bank;
  864. /* get, allocate and map the memory resource */
  865. ret = of_address_to_resource(node, 0, &res);
  866. if (ret) {
  867. dev_err(ctrl->dev, "failed to get resource\n");
  868. return ret;
  869. }
  870. /* find which chip select it is connected to */
  871. for (bank = 0; bank < MAX_BANKS; bank++)
  872. if ((in_be32(&lbc->bank[bank].br) & BR_V) &&
  873. (in_be32(&lbc->bank[bank].br) & BR_MSEL) == BR_MS_FCM &&
  874. (in_be32(&lbc->bank[bank].br) &
  875. in_be32(&lbc->bank[bank].or) & BR_BA)
  876. == res.start)
  877. break;
  878. if (bank >= MAX_BANKS) {
  879. dev_err(ctrl->dev, "address did not match any chip selects\n");
  880. return -ENODEV;
  881. }
  882. priv = kzalloc(sizeof(*priv), GFP_KERNEL);
  883. if (!priv)
  884. return -ENOMEM;
  885. ctrl->chips[bank] = priv;
  886. priv->bank = bank;
  887. priv->ctrl = ctrl;
  888. priv->dev = ctrl->dev;
  889. priv->vbase = ioremap(res.start, res.end - res.start + 1);
  890. if (!priv->vbase) {
  891. dev_err(ctrl->dev, "failed to map chip region\n");
  892. ret = -ENOMEM;
  893. goto err;
  894. }
  895. ret = fsl_elbc_chip_init(priv);
  896. if (ret)
  897. goto err;
  898. ret = nand_scan_ident(&priv->mtd, 1);
  899. if (ret)
  900. goto err;
  901. ret = fsl_elbc_chip_init_tail(&priv->mtd);
  902. if (ret)
  903. goto err;
  904. ret = nand_scan_tail(&priv->mtd);
  905. if (ret)
  906. goto err;
  907. #ifdef CONFIG_MTD_PARTITIONS
  908. /* First look for RedBoot table or partitions on the command
  909. * line, these take precedence over device tree information */
  910. ret = parse_mtd_partitions(&priv->mtd, part_probe_types, &parts, 0);
  911. if (ret < 0)
  912. goto err;
  913. #ifdef CONFIG_MTD_OF_PARTS
  914. if (ret == 0) {
  915. ret = of_mtd_parse_partitions(priv->dev, &priv->mtd,
  916. node, &parts);
  917. if (ret < 0)
  918. goto err;
  919. }
  920. #endif
  921. if (ret > 0)
  922. add_mtd_partitions(&priv->mtd, parts, ret);
  923. else
  924. #endif
  925. add_mtd_device(&priv->mtd);
  926. printk(KERN_INFO "eLBC NAND device at 0x%zx, bank %d\n",
  927. res.start, priv->bank);
  928. return 0;
  929. err:
  930. fsl_elbc_chip_remove(priv);
  931. return ret;
  932. }
  933. static int __devinit fsl_elbc_ctrl_init(struct fsl_elbc_ctrl *ctrl)
  934. {
  935. struct elbc_regs __iomem *lbc = ctrl->regs;
  936. /* clear event registers */
  937. setbits32(&lbc->ltesr, LTESR_NAND_MASK);
  938. out_be32(&lbc->lteatr, 0);
  939. /* Enable interrupts for any detected events */
  940. out_be32(&lbc->lteir, LTESR_NAND_MASK);
  941. ctrl->read_bytes = 0;
  942. ctrl->index = 0;
  943. ctrl->addr = NULL;
  944. return 0;
  945. }
  946. static int __devexit fsl_elbc_ctrl_remove(struct of_device *ofdev)
  947. {
  948. struct fsl_elbc_ctrl *ctrl = dev_get_drvdata(&ofdev->dev);
  949. int i;
  950. for (i = 0; i < MAX_BANKS; i++)
  951. if (ctrl->chips[i])
  952. fsl_elbc_chip_remove(ctrl->chips[i]);
  953. if (ctrl->irq)
  954. free_irq(ctrl->irq, ctrl);
  955. if (ctrl->regs)
  956. iounmap(ctrl->regs);
  957. dev_set_drvdata(&ofdev->dev, NULL);
  958. kfree(ctrl);
  959. return 0;
  960. }
  961. /* NOTE: This interrupt is also used to report other localbus events,
  962. * such as transaction errors on other chipselects. If we want to
  963. * capture those, we'll need to move the IRQ code into a shared
  964. * LBC driver.
  965. */
  966. static irqreturn_t fsl_elbc_ctrl_irq(int irqno, void *data)
  967. {
  968. struct fsl_elbc_ctrl *ctrl = data;
  969. struct elbc_regs __iomem *lbc = ctrl->regs;
  970. __be32 status = in_be32(&lbc->ltesr) & LTESR_NAND_MASK;
  971. if (status) {
  972. out_be32(&lbc->ltesr, status);
  973. out_be32(&lbc->lteatr, 0);
  974. ctrl->irq_status = status;
  975. smp_wmb();
  976. wake_up(&ctrl->irq_wait);
  977. return IRQ_HANDLED;
  978. }
  979. return IRQ_NONE;
  980. }
  981. /* fsl_elbc_ctrl_probe
  982. *
  983. * called by device layer when it finds a device matching
  984. * one our driver can handled. This code allocates all of
  985. * the resources needed for the controller only. The
  986. * resources for the NAND banks themselves are allocated
  987. * in the chip probe function.
  988. */
  989. static int __devinit fsl_elbc_ctrl_probe(struct of_device *ofdev,
  990. const struct of_device_id *match)
  991. {
  992. struct device_node *child;
  993. struct fsl_elbc_ctrl *ctrl;
  994. int ret;
  995. ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
  996. if (!ctrl)
  997. return -ENOMEM;
  998. dev_set_drvdata(&ofdev->dev, ctrl);
  999. spin_lock_init(&ctrl->controller.lock);
  1000. init_waitqueue_head(&ctrl->controller.wq);
  1001. init_waitqueue_head(&ctrl->irq_wait);
  1002. ctrl->regs = of_iomap(ofdev->node, 0);
  1003. if (!ctrl->regs) {
  1004. dev_err(&ofdev->dev, "failed to get memory region\n");
  1005. ret = -ENODEV;
  1006. goto err;
  1007. }
  1008. ctrl->irq = of_irq_to_resource(ofdev->node, 0, NULL);
  1009. if (ctrl->irq == NO_IRQ) {
  1010. dev_err(&ofdev->dev, "failed to get irq resource\n");
  1011. ret = -ENODEV;
  1012. goto err;
  1013. }
  1014. ctrl->dev = &ofdev->dev;
  1015. ret = fsl_elbc_ctrl_init(ctrl);
  1016. if (ret < 0)
  1017. goto err;
  1018. ret = request_irq(ctrl->irq, fsl_elbc_ctrl_irq, 0, "fsl-elbc", ctrl);
  1019. if (ret != 0) {
  1020. dev_err(&ofdev->dev, "failed to install irq (%d)\n",
  1021. ctrl->irq);
  1022. ret = ctrl->irq;
  1023. goto err;
  1024. }
  1025. for_each_child_of_node(ofdev->node, child)
  1026. if (of_device_is_compatible(child, "fsl,elbc-fcm-nand"))
  1027. fsl_elbc_chip_probe(ctrl, child);
  1028. return 0;
  1029. err:
  1030. fsl_elbc_ctrl_remove(ofdev);
  1031. return ret;
  1032. }
  1033. static const struct of_device_id fsl_elbc_match[] = {
  1034. {
  1035. .compatible = "fsl,elbc",
  1036. },
  1037. {}
  1038. };
  1039. static struct of_platform_driver fsl_elbc_ctrl_driver = {
  1040. .driver = {
  1041. .name = "fsl-elbc",
  1042. },
  1043. .match_table = fsl_elbc_match,
  1044. .probe = fsl_elbc_ctrl_probe,
  1045. .remove = __devexit_p(fsl_elbc_ctrl_remove),
  1046. };
  1047. static int __init fsl_elbc_init(void)
  1048. {
  1049. return of_register_platform_driver(&fsl_elbc_ctrl_driver);
  1050. }
  1051. static void __exit fsl_elbc_exit(void)
  1052. {
  1053. of_unregister_platform_driver(&fsl_elbc_ctrl_driver);
  1054. }
  1055. module_init(fsl_elbc_init);
  1056. module_exit(fsl_elbc_exit);
  1057. MODULE_LICENSE("GPL");
  1058. MODULE_AUTHOR("Freescale");
  1059. MODULE_DESCRIPTION("Freescale Enhanced Local Bus Controller MTD NAND driver");