nand-controller.c 62 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543
  1. /*
  2. * Copyright 2017 ATMEL
  3. * Copyright 2017 Free Electrons
  4. *
  5. * Author: Boris Brezillon <boris.brezillon@free-electrons.com>
  6. *
  7. * Derived from the atmel_nand.c driver which contained the following
  8. * copyrights:
  9. *
  10. * Copyright 2003 Rick Bronson
  11. *
  12. * Derived from drivers/mtd/nand/autcpu12.c
  13. * Copyright 2001 Thomas Gleixner (gleixner@autronix.de)
  14. *
  15. * Derived from drivers/mtd/spia.c
  16. * Copyright 2000 Steven J. Hill (sjhill@cotw.com)
  17. *
  18. *
  19. * Add Hardware ECC support for AT91SAM9260 / AT91SAM9263
  20. * Richard Genoud (richard.genoud@gmail.com), Adeneo Copyright 2007
  21. *
  22. * Derived from Das U-Boot source code
  23. * (u-boot-1.1.5/board/atmel/at91sam9263ek/nand.c)
  24. * Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
  25. *
  26. * Add Programmable Multibit ECC support for various AT91 SoC
  27. * Copyright 2012 ATMEL, Hong Xu
  28. *
  29. * Add Nand Flash Controller support for SAMA5 SoC
  30. * Copyright 2013 ATMEL, Josh Wu (josh.wu@atmel.com)
  31. *
  32. * This program is free software; you can redistribute it and/or modify
  33. * it under the terms of the GNU General Public License version 2 as
  34. * published by the Free Software Foundation.
  35. *
  36. * A few words about the naming convention in this file. This convention
  37. * applies to structure and function names.
  38. *
  39. * Prefixes:
  40. *
  41. * - atmel_nand_: all generic structures/functions
  42. * - atmel_smc_nand_: all structures/functions specific to the SMC interface
  43. * (at91sam9 and avr32 SoCs)
  44. * - atmel_hsmc_nand_: all structures/functions specific to the HSMC interface
  45. * (sama5 SoCs and later)
  46. * - atmel_nfc_: all structures/functions used to manipulate the NFC sub-block
  47. * that is available in the HSMC block
  48. * - <soc>_nand_: all SoC specific structures/functions
  49. */
  50. #include <linux/clk.h>
  51. #include <linux/dma-mapping.h>
  52. #include <linux/dmaengine.h>
  53. #include <linux/genalloc.h>
  54. #include <linux/gpio.h>
  55. #include <linux/gpio/consumer.h>
  56. #include <linux/interrupt.h>
  57. #include <linux/mfd/syscon.h>
  58. #include <linux/mfd/syscon/atmel-matrix.h>
  59. #include <linux/mfd/syscon/atmel-smc.h>
  60. #include <linux/module.h>
  61. #include <linux/mtd/rawnand.h>
  62. #include <linux/of_address.h>
  63. #include <linux/of_irq.h>
  64. #include <linux/of_platform.h>
  65. #include <linux/iopoll.h>
  66. #include <linux/platform_device.h>
  67. #include <linux/regmap.h>
  68. #include "pmecc.h"
  69. #define ATMEL_HSMC_NFC_CFG 0x0
  70. #define ATMEL_HSMC_NFC_CFG_SPARESIZE(x) (((x) / 4) << 24)
  71. #define ATMEL_HSMC_NFC_CFG_SPARESIZE_MASK GENMASK(30, 24)
  72. #define ATMEL_HSMC_NFC_CFG_DTO(cyc, mul) (((cyc) << 16) | ((mul) << 20))
  73. #define ATMEL_HSMC_NFC_CFG_DTO_MAX GENMASK(22, 16)
  74. #define ATMEL_HSMC_NFC_CFG_RBEDGE BIT(13)
  75. #define ATMEL_HSMC_NFC_CFG_FALLING_EDGE BIT(12)
  76. #define ATMEL_HSMC_NFC_CFG_RSPARE BIT(9)
  77. #define ATMEL_HSMC_NFC_CFG_WSPARE BIT(8)
  78. #define ATMEL_HSMC_NFC_CFG_PAGESIZE_MASK GENMASK(2, 0)
  79. #define ATMEL_HSMC_NFC_CFG_PAGESIZE(x) (fls((x) / 512) - 1)
  80. #define ATMEL_HSMC_NFC_CTRL 0x4
  81. #define ATMEL_HSMC_NFC_CTRL_EN BIT(0)
  82. #define ATMEL_HSMC_NFC_CTRL_DIS BIT(1)
  83. #define ATMEL_HSMC_NFC_SR 0x8
  84. #define ATMEL_HSMC_NFC_IER 0xc
  85. #define ATMEL_HSMC_NFC_IDR 0x10
  86. #define ATMEL_HSMC_NFC_IMR 0x14
  87. #define ATMEL_HSMC_NFC_SR_ENABLED BIT(1)
  88. #define ATMEL_HSMC_NFC_SR_RB_RISE BIT(4)
  89. #define ATMEL_HSMC_NFC_SR_RB_FALL BIT(5)
  90. #define ATMEL_HSMC_NFC_SR_BUSY BIT(8)
  91. #define ATMEL_HSMC_NFC_SR_WR BIT(11)
  92. #define ATMEL_HSMC_NFC_SR_CSID GENMASK(14, 12)
  93. #define ATMEL_HSMC_NFC_SR_XFRDONE BIT(16)
  94. #define ATMEL_HSMC_NFC_SR_CMDDONE BIT(17)
  95. #define ATMEL_HSMC_NFC_SR_DTOE BIT(20)
  96. #define ATMEL_HSMC_NFC_SR_UNDEF BIT(21)
  97. #define ATMEL_HSMC_NFC_SR_AWB BIT(22)
  98. #define ATMEL_HSMC_NFC_SR_NFCASE BIT(23)
  99. #define ATMEL_HSMC_NFC_SR_ERRORS (ATMEL_HSMC_NFC_SR_DTOE | \
  100. ATMEL_HSMC_NFC_SR_UNDEF | \
  101. ATMEL_HSMC_NFC_SR_AWB | \
  102. ATMEL_HSMC_NFC_SR_NFCASE)
  103. #define ATMEL_HSMC_NFC_SR_RBEDGE(x) BIT((x) + 24)
  104. #define ATMEL_HSMC_NFC_ADDR 0x18
  105. #define ATMEL_HSMC_NFC_BANK 0x1c
  106. #define ATMEL_NFC_MAX_RB_ID 7
  107. #define ATMEL_NFC_SRAM_SIZE 0x2400
  108. #define ATMEL_NFC_CMD(pos, cmd) ((cmd) << (((pos) * 8) + 2))
  109. #define ATMEL_NFC_VCMD2 BIT(18)
  110. #define ATMEL_NFC_ACYCLE(naddrs) ((naddrs) << 19)
  111. #define ATMEL_NFC_CSID(cs) ((cs) << 22)
  112. #define ATMEL_NFC_DATAEN BIT(25)
  113. #define ATMEL_NFC_NFCWR BIT(26)
  114. #define ATMEL_NFC_MAX_ADDR_CYCLES 5
  115. #define ATMEL_NAND_ALE_OFFSET BIT(21)
  116. #define ATMEL_NAND_CLE_OFFSET BIT(22)
  117. #define DEFAULT_TIMEOUT_MS 1000
  118. #define MIN_DMA_LEN 128
  119. enum atmel_nand_rb_type {
  120. ATMEL_NAND_NO_RB,
  121. ATMEL_NAND_NATIVE_RB,
  122. ATMEL_NAND_GPIO_RB,
  123. };
  124. struct atmel_nand_rb {
  125. enum atmel_nand_rb_type type;
  126. union {
  127. struct gpio_desc *gpio;
  128. int id;
  129. };
  130. };
  131. struct atmel_nand_cs {
  132. int id;
  133. struct atmel_nand_rb rb;
  134. struct gpio_desc *csgpio;
  135. struct {
  136. void __iomem *virt;
  137. dma_addr_t dma;
  138. } io;
  139. struct atmel_smc_cs_conf smcconf;
  140. };
  141. struct atmel_nand {
  142. struct list_head node;
  143. struct device *dev;
  144. struct nand_chip base;
  145. struct atmel_nand_cs *activecs;
  146. struct atmel_pmecc_user *pmecc;
  147. struct gpio_desc *cdgpio;
  148. int numcs;
  149. struct atmel_nand_cs cs[];
  150. };
  151. static inline struct atmel_nand *to_atmel_nand(struct nand_chip *chip)
  152. {
  153. return container_of(chip, struct atmel_nand, base);
  154. }
  155. enum atmel_nfc_data_xfer {
  156. ATMEL_NFC_NO_DATA,
  157. ATMEL_NFC_READ_DATA,
  158. ATMEL_NFC_WRITE_DATA,
  159. };
  160. struct atmel_nfc_op {
  161. u8 cs;
  162. u8 ncmds;
  163. u8 cmds[2];
  164. u8 naddrs;
  165. u8 addrs[5];
  166. enum atmel_nfc_data_xfer data;
  167. u32 wait;
  168. u32 errors;
  169. };
  170. struct atmel_nand_controller;
  171. struct atmel_nand_controller_caps;
  172. struct atmel_nand_controller_ops {
  173. int (*probe)(struct platform_device *pdev,
  174. const struct atmel_nand_controller_caps *caps);
  175. int (*remove)(struct atmel_nand_controller *nc);
  176. void (*nand_init)(struct atmel_nand_controller *nc,
  177. struct atmel_nand *nand);
  178. int (*ecc_init)(struct atmel_nand *nand);
  179. int (*setup_data_interface)(struct atmel_nand *nand, int csline,
  180. const struct nand_data_interface *conf);
  181. };
  182. struct atmel_nand_controller_caps {
  183. bool has_dma;
  184. bool legacy_of_bindings;
  185. u32 ale_offs;
  186. u32 cle_offs;
  187. const struct atmel_nand_controller_ops *ops;
  188. };
  189. struct atmel_nand_controller {
  190. struct nand_hw_control base;
  191. const struct atmel_nand_controller_caps *caps;
  192. struct device *dev;
  193. struct regmap *smc;
  194. struct dma_chan *dmac;
  195. struct atmel_pmecc *pmecc;
  196. struct list_head chips;
  197. struct clk *mck;
  198. };
  199. static inline struct atmel_nand_controller *
  200. to_nand_controller(struct nand_hw_control *ctl)
  201. {
  202. return container_of(ctl, struct atmel_nand_controller, base);
  203. }
  204. struct atmel_smc_nand_controller {
  205. struct atmel_nand_controller base;
  206. struct regmap *matrix;
  207. unsigned int ebi_csa_offs;
  208. };
  209. static inline struct atmel_smc_nand_controller *
  210. to_smc_nand_controller(struct nand_hw_control *ctl)
  211. {
  212. return container_of(to_nand_controller(ctl),
  213. struct atmel_smc_nand_controller, base);
  214. }
  215. struct atmel_hsmc_nand_controller {
  216. struct atmel_nand_controller base;
  217. struct {
  218. struct gen_pool *pool;
  219. void __iomem *virt;
  220. dma_addr_t dma;
  221. } sram;
  222. struct regmap *io;
  223. struct atmel_nfc_op op;
  224. struct completion complete;
  225. int irq;
  226. /* Only used when instantiating from legacy DT bindings. */
  227. struct clk *clk;
  228. };
  229. static inline struct atmel_hsmc_nand_controller *
  230. to_hsmc_nand_controller(struct nand_hw_control *ctl)
  231. {
  232. return container_of(to_nand_controller(ctl),
  233. struct atmel_hsmc_nand_controller, base);
  234. }
  235. static bool atmel_nfc_op_done(struct atmel_nfc_op *op, u32 status)
  236. {
  237. op->errors |= status & ATMEL_HSMC_NFC_SR_ERRORS;
  238. op->wait ^= status & op->wait;
  239. return !op->wait || op->errors;
  240. }
  241. static irqreturn_t atmel_nfc_interrupt(int irq, void *data)
  242. {
  243. struct atmel_hsmc_nand_controller *nc = data;
  244. u32 sr, rcvd;
  245. bool done;
  246. regmap_read(nc->base.smc, ATMEL_HSMC_NFC_SR, &sr);
  247. rcvd = sr & (nc->op.wait | ATMEL_HSMC_NFC_SR_ERRORS);
  248. done = atmel_nfc_op_done(&nc->op, sr);
  249. if (rcvd)
  250. regmap_write(nc->base.smc, ATMEL_HSMC_NFC_IDR, rcvd);
  251. if (done)
  252. complete(&nc->complete);
  253. return rcvd ? IRQ_HANDLED : IRQ_NONE;
  254. }
  255. static int atmel_nfc_wait(struct atmel_hsmc_nand_controller *nc, bool poll,
  256. unsigned int timeout_ms)
  257. {
  258. int ret;
  259. if (!timeout_ms)
  260. timeout_ms = DEFAULT_TIMEOUT_MS;
  261. if (poll) {
  262. u32 status;
  263. ret = regmap_read_poll_timeout(nc->base.smc,
  264. ATMEL_HSMC_NFC_SR, status,
  265. atmel_nfc_op_done(&nc->op,
  266. status),
  267. 0, timeout_ms * 1000);
  268. } else {
  269. init_completion(&nc->complete);
  270. regmap_write(nc->base.smc, ATMEL_HSMC_NFC_IER,
  271. nc->op.wait | ATMEL_HSMC_NFC_SR_ERRORS);
  272. ret = wait_for_completion_timeout(&nc->complete,
  273. msecs_to_jiffies(timeout_ms));
  274. if (!ret)
  275. ret = -ETIMEDOUT;
  276. else
  277. ret = 0;
  278. regmap_write(nc->base.smc, ATMEL_HSMC_NFC_IDR, 0xffffffff);
  279. }
  280. if (nc->op.errors & ATMEL_HSMC_NFC_SR_DTOE) {
  281. dev_err(nc->base.dev, "Waiting NAND R/B Timeout\n");
  282. ret = -ETIMEDOUT;
  283. }
  284. if (nc->op.errors & ATMEL_HSMC_NFC_SR_UNDEF) {
  285. dev_err(nc->base.dev, "Access to an undefined area\n");
  286. ret = -EIO;
  287. }
  288. if (nc->op.errors & ATMEL_HSMC_NFC_SR_AWB) {
  289. dev_err(nc->base.dev, "Access while busy\n");
  290. ret = -EIO;
  291. }
  292. if (nc->op.errors & ATMEL_HSMC_NFC_SR_NFCASE) {
  293. dev_err(nc->base.dev, "Wrong access size\n");
  294. ret = -EIO;
  295. }
  296. return ret;
  297. }
  298. static void atmel_nand_dma_transfer_finished(void *data)
  299. {
  300. struct completion *finished = data;
  301. complete(finished);
  302. }
  303. static int atmel_nand_dma_transfer(struct atmel_nand_controller *nc,
  304. void *buf, dma_addr_t dev_dma, size_t len,
  305. enum dma_data_direction dir)
  306. {
  307. DECLARE_COMPLETION_ONSTACK(finished);
  308. dma_addr_t src_dma, dst_dma, buf_dma;
  309. struct dma_async_tx_descriptor *tx;
  310. dma_cookie_t cookie;
  311. buf_dma = dma_map_single(nc->dev, buf, len, dir);
  312. if (dma_mapping_error(nc->dev, dev_dma)) {
  313. dev_err(nc->dev,
  314. "Failed to prepare a buffer for DMA access\n");
  315. goto err;
  316. }
  317. if (dir == DMA_FROM_DEVICE) {
  318. src_dma = dev_dma;
  319. dst_dma = buf_dma;
  320. } else {
  321. src_dma = buf_dma;
  322. dst_dma = dev_dma;
  323. }
  324. tx = dmaengine_prep_dma_memcpy(nc->dmac, dst_dma, src_dma, len,
  325. DMA_CTRL_ACK | DMA_PREP_INTERRUPT);
  326. if (!tx) {
  327. dev_err(nc->dev, "Failed to prepare DMA memcpy\n");
  328. goto err_unmap;
  329. }
  330. tx->callback = atmel_nand_dma_transfer_finished;
  331. tx->callback_param = &finished;
  332. cookie = dmaengine_submit(tx);
  333. if (dma_submit_error(cookie)) {
  334. dev_err(nc->dev, "Failed to do DMA tx_submit\n");
  335. goto err_unmap;
  336. }
  337. dma_async_issue_pending(nc->dmac);
  338. wait_for_completion(&finished);
  339. return 0;
  340. err_unmap:
  341. dma_unmap_single(nc->dev, buf_dma, len, dir);
  342. err:
  343. dev_dbg(nc->dev, "Fall back to CPU I/O\n");
  344. return -EIO;
  345. }
  346. static u8 atmel_nand_read_byte(struct mtd_info *mtd)
  347. {
  348. struct nand_chip *chip = mtd_to_nand(mtd);
  349. struct atmel_nand *nand = to_atmel_nand(chip);
  350. return ioread8(nand->activecs->io.virt);
  351. }
  352. static u16 atmel_nand_read_word(struct mtd_info *mtd)
  353. {
  354. struct nand_chip *chip = mtd_to_nand(mtd);
  355. struct atmel_nand *nand = to_atmel_nand(chip);
  356. return ioread16(nand->activecs->io.virt);
  357. }
  358. static void atmel_nand_write_byte(struct mtd_info *mtd, u8 byte)
  359. {
  360. struct nand_chip *chip = mtd_to_nand(mtd);
  361. struct atmel_nand *nand = to_atmel_nand(chip);
  362. if (chip->options & NAND_BUSWIDTH_16)
  363. iowrite16(byte | (byte << 8), nand->activecs->io.virt);
  364. else
  365. iowrite8(byte, nand->activecs->io.virt);
  366. }
  367. static void atmel_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
  368. {
  369. struct nand_chip *chip = mtd_to_nand(mtd);
  370. struct atmel_nand *nand = to_atmel_nand(chip);
  371. struct atmel_nand_controller *nc;
  372. nc = to_nand_controller(chip->controller);
  373. /*
  374. * If the controller supports DMA, the buffer address is DMA-able and
  375. * len is long enough to make DMA transfers profitable, let's trigger
  376. * a DMA transfer. If it fails, fallback to PIO mode.
  377. */
  378. if (nc->dmac && virt_addr_valid(buf) &&
  379. len >= MIN_DMA_LEN &&
  380. !atmel_nand_dma_transfer(nc, buf, nand->activecs->io.dma, len,
  381. DMA_FROM_DEVICE))
  382. return;
  383. if (chip->options & NAND_BUSWIDTH_16)
  384. ioread16_rep(nand->activecs->io.virt, buf, len / 2);
  385. else
  386. ioread8_rep(nand->activecs->io.virt, buf, len);
  387. }
  388. static void atmel_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
  389. {
  390. struct nand_chip *chip = mtd_to_nand(mtd);
  391. struct atmel_nand *nand = to_atmel_nand(chip);
  392. struct atmel_nand_controller *nc;
  393. nc = to_nand_controller(chip->controller);
  394. /*
  395. * If the controller supports DMA, the buffer address is DMA-able and
  396. * len is long enough to make DMA transfers profitable, let's trigger
  397. * a DMA transfer. If it fails, fallback to PIO mode.
  398. */
  399. if (nc->dmac && virt_addr_valid(buf) &&
  400. len >= MIN_DMA_LEN &&
  401. !atmel_nand_dma_transfer(nc, (void *)buf, nand->activecs->io.dma,
  402. len, DMA_TO_DEVICE))
  403. return;
  404. if (chip->options & NAND_BUSWIDTH_16)
  405. iowrite16_rep(nand->activecs->io.virt, buf, len / 2);
  406. else
  407. iowrite8_rep(nand->activecs->io.virt, buf, len);
  408. }
  409. static int atmel_nand_dev_ready(struct mtd_info *mtd)
  410. {
  411. struct nand_chip *chip = mtd_to_nand(mtd);
  412. struct atmel_nand *nand = to_atmel_nand(chip);
  413. return gpiod_get_value(nand->activecs->rb.gpio);
  414. }
  415. static void atmel_nand_select_chip(struct mtd_info *mtd, int cs)
  416. {
  417. struct nand_chip *chip = mtd_to_nand(mtd);
  418. struct atmel_nand *nand = to_atmel_nand(chip);
  419. if (cs < 0 || cs >= nand->numcs) {
  420. nand->activecs = NULL;
  421. chip->dev_ready = NULL;
  422. return;
  423. }
  424. nand->activecs = &nand->cs[cs];
  425. if (nand->activecs->rb.type == ATMEL_NAND_GPIO_RB)
  426. chip->dev_ready = atmel_nand_dev_ready;
  427. }
  428. static int atmel_hsmc_nand_dev_ready(struct mtd_info *mtd)
  429. {
  430. struct nand_chip *chip = mtd_to_nand(mtd);
  431. struct atmel_nand *nand = to_atmel_nand(chip);
  432. struct atmel_hsmc_nand_controller *nc;
  433. u32 status;
  434. nc = to_hsmc_nand_controller(chip->controller);
  435. regmap_read(nc->base.smc, ATMEL_HSMC_NFC_SR, &status);
  436. return status & ATMEL_HSMC_NFC_SR_RBEDGE(nand->activecs->rb.id);
  437. }
  438. static void atmel_hsmc_nand_select_chip(struct mtd_info *mtd, int cs)
  439. {
  440. struct nand_chip *chip = mtd_to_nand(mtd);
  441. struct atmel_nand *nand = to_atmel_nand(chip);
  442. struct atmel_hsmc_nand_controller *nc;
  443. nc = to_hsmc_nand_controller(chip->controller);
  444. atmel_nand_select_chip(mtd, cs);
  445. if (!nand->activecs) {
  446. regmap_write(nc->base.smc, ATMEL_HSMC_NFC_CTRL,
  447. ATMEL_HSMC_NFC_CTRL_DIS);
  448. return;
  449. }
  450. if (nand->activecs->rb.type == ATMEL_NAND_NATIVE_RB)
  451. chip->dev_ready = atmel_hsmc_nand_dev_ready;
  452. regmap_update_bits(nc->base.smc, ATMEL_HSMC_NFC_CFG,
  453. ATMEL_HSMC_NFC_CFG_PAGESIZE_MASK |
  454. ATMEL_HSMC_NFC_CFG_SPARESIZE_MASK |
  455. ATMEL_HSMC_NFC_CFG_RSPARE |
  456. ATMEL_HSMC_NFC_CFG_WSPARE,
  457. ATMEL_HSMC_NFC_CFG_PAGESIZE(mtd->writesize) |
  458. ATMEL_HSMC_NFC_CFG_SPARESIZE(mtd->oobsize) |
  459. ATMEL_HSMC_NFC_CFG_RSPARE);
  460. regmap_write(nc->base.smc, ATMEL_HSMC_NFC_CTRL,
  461. ATMEL_HSMC_NFC_CTRL_EN);
  462. }
  463. static int atmel_nfc_exec_op(struct atmel_hsmc_nand_controller *nc, bool poll)
  464. {
  465. u8 *addrs = nc->op.addrs;
  466. unsigned int op = 0;
  467. u32 addr, val;
  468. int i, ret;
  469. nc->op.wait = ATMEL_HSMC_NFC_SR_CMDDONE;
  470. for (i = 0; i < nc->op.ncmds; i++)
  471. op |= ATMEL_NFC_CMD(i, nc->op.cmds[i]);
  472. if (nc->op.naddrs == ATMEL_NFC_MAX_ADDR_CYCLES)
  473. regmap_write(nc->base.smc, ATMEL_HSMC_NFC_ADDR, *addrs++);
  474. op |= ATMEL_NFC_CSID(nc->op.cs) |
  475. ATMEL_NFC_ACYCLE(nc->op.naddrs);
  476. if (nc->op.ncmds > 1)
  477. op |= ATMEL_NFC_VCMD2;
  478. addr = addrs[0] | (addrs[1] << 8) | (addrs[2] << 16) |
  479. (addrs[3] << 24);
  480. if (nc->op.data != ATMEL_NFC_NO_DATA) {
  481. op |= ATMEL_NFC_DATAEN;
  482. nc->op.wait |= ATMEL_HSMC_NFC_SR_XFRDONE;
  483. if (nc->op.data == ATMEL_NFC_WRITE_DATA)
  484. op |= ATMEL_NFC_NFCWR;
  485. }
  486. /* Clear all flags. */
  487. regmap_read(nc->base.smc, ATMEL_HSMC_NFC_SR, &val);
  488. /* Send the command. */
  489. regmap_write(nc->io, op, addr);
  490. ret = atmel_nfc_wait(nc, poll, 0);
  491. if (ret)
  492. dev_err(nc->base.dev,
  493. "Failed to send NAND command (err = %d)!",
  494. ret);
  495. /* Reset the op state. */
  496. memset(&nc->op, 0, sizeof(nc->op));
  497. return ret;
  498. }
  499. static void atmel_hsmc_nand_cmd_ctrl(struct mtd_info *mtd, int dat,
  500. unsigned int ctrl)
  501. {
  502. struct nand_chip *chip = mtd_to_nand(mtd);
  503. struct atmel_nand *nand = to_atmel_nand(chip);
  504. struct atmel_hsmc_nand_controller *nc;
  505. nc = to_hsmc_nand_controller(chip->controller);
  506. if (ctrl & NAND_ALE) {
  507. if (nc->op.naddrs == ATMEL_NFC_MAX_ADDR_CYCLES)
  508. return;
  509. nc->op.addrs[nc->op.naddrs++] = dat;
  510. } else if (ctrl & NAND_CLE) {
  511. if (nc->op.ncmds > 1)
  512. return;
  513. nc->op.cmds[nc->op.ncmds++] = dat;
  514. }
  515. if (dat == NAND_CMD_NONE) {
  516. nc->op.cs = nand->activecs->id;
  517. atmel_nfc_exec_op(nc, true);
  518. }
  519. }
  520. static void atmel_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
  521. unsigned int ctrl)
  522. {
  523. struct nand_chip *chip = mtd_to_nand(mtd);
  524. struct atmel_nand *nand = to_atmel_nand(chip);
  525. struct atmel_nand_controller *nc;
  526. nc = to_nand_controller(chip->controller);
  527. if ((ctrl & NAND_CTRL_CHANGE) && nand->activecs->csgpio) {
  528. if (ctrl & NAND_NCE)
  529. gpiod_set_value(nand->activecs->csgpio, 0);
  530. else
  531. gpiod_set_value(nand->activecs->csgpio, 1);
  532. }
  533. if (ctrl & NAND_ALE)
  534. writeb(cmd, nand->activecs->io.virt + nc->caps->ale_offs);
  535. else if (ctrl & NAND_CLE)
  536. writeb(cmd, nand->activecs->io.virt + nc->caps->cle_offs);
  537. }
  538. static void atmel_nfc_copy_to_sram(struct nand_chip *chip, const u8 *buf,
  539. bool oob_required)
  540. {
  541. struct mtd_info *mtd = nand_to_mtd(chip);
  542. struct atmel_hsmc_nand_controller *nc;
  543. int ret = -EIO;
  544. nc = to_hsmc_nand_controller(chip->controller);
  545. if (nc->base.dmac)
  546. ret = atmel_nand_dma_transfer(&nc->base, (void *)buf,
  547. nc->sram.dma, mtd->writesize,
  548. DMA_TO_DEVICE);
  549. /* Falling back to CPU copy. */
  550. if (ret)
  551. memcpy_toio(nc->sram.virt, buf, mtd->writesize);
  552. if (oob_required)
  553. memcpy_toio(nc->sram.virt + mtd->writesize, chip->oob_poi,
  554. mtd->oobsize);
  555. }
  556. static void atmel_nfc_copy_from_sram(struct nand_chip *chip, u8 *buf,
  557. bool oob_required)
  558. {
  559. struct mtd_info *mtd = nand_to_mtd(chip);
  560. struct atmel_hsmc_nand_controller *nc;
  561. int ret = -EIO;
  562. nc = to_hsmc_nand_controller(chip->controller);
  563. if (nc->base.dmac)
  564. ret = atmel_nand_dma_transfer(&nc->base, buf, nc->sram.dma,
  565. mtd->writesize, DMA_FROM_DEVICE);
  566. /* Falling back to CPU copy. */
  567. if (ret)
  568. memcpy_fromio(buf, nc->sram.virt, mtd->writesize);
  569. if (oob_required)
  570. memcpy_fromio(chip->oob_poi, nc->sram.virt + mtd->writesize,
  571. mtd->oobsize);
  572. }
  573. static void atmel_nfc_set_op_addr(struct nand_chip *chip, int page, int column)
  574. {
  575. struct mtd_info *mtd = nand_to_mtd(chip);
  576. struct atmel_hsmc_nand_controller *nc;
  577. nc = to_hsmc_nand_controller(chip->controller);
  578. if (column >= 0) {
  579. nc->op.addrs[nc->op.naddrs++] = column;
  580. /*
  581. * 2 address cycles for the column offset on large page NANDs.
  582. */
  583. if (mtd->writesize > 512)
  584. nc->op.addrs[nc->op.naddrs++] = column >> 8;
  585. }
  586. if (page >= 0) {
  587. nc->op.addrs[nc->op.naddrs++] = page;
  588. nc->op.addrs[nc->op.naddrs++] = page >> 8;
  589. if ((mtd->writesize > 512 && chip->chipsize > SZ_128M) ||
  590. (mtd->writesize <= 512 && chip->chipsize > SZ_32M))
  591. nc->op.addrs[nc->op.naddrs++] = page >> 16;
  592. }
  593. }
  594. static int atmel_nand_pmecc_enable(struct nand_chip *chip, int op, bool raw)
  595. {
  596. struct atmel_nand *nand = to_atmel_nand(chip);
  597. struct atmel_nand_controller *nc;
  598. int ret;
  599. nc = to_nand_controller(chip->controller);
  600. if (raw)
  601. return 0;
  602. ret = atmel_pmecc_enable(nand->pmecc, op);
  603. if (ret)
  604. dev_err(nc->dev,
  605. "Failed to enable ECC engine (err = %d)\n", ret);
  606. return ret;
  607. }
  608. static void atmel_nand_pmecc_disable(struct nand_chip *chip, bool raw)
  609. {
  610. struct atmel_nand *nand = to_atmel_nand(chip);
  611. if (!raw)
  612. atmel_pmecc_disable(nand->pmecc);
  613. }
  614. static int atmel_nand_pmecc_generate_eccbytes(struct nand_chip *chip, bool raw)
  615. {
  616. struct atmel_nand *nand = to_atmel_nand(chip);
  617. struct mtd_info *mtd = nand_to_mtd(chip);
  618. struct atmel_nand_controller *nc;
  619. struct mtd_oob_region oobregion;
  620. void *eccbuf;
  621. int ret, i;
  622. nc = to_nand_controller(chip->controller);
  623. if (raw)
  624. return 0;
  625. ret = atmel_pmecc_wait_rdy(nand->pmecc);
  626. if (ret) {
  627. dev_err(nc->dev,
  628. "Failed to transfer NAND page data (err = %d)\n",
  629. ret);
  630. return ret;
  631. }
  632. mtd_ooblayout_ecc(mtd, 0, &oobregion);
  633. eccbuf = chip->oob_poi + oobregion.offset;
  634. for (i = 0; i < chip->ecc.steps; i++) {
  635. atmel_pmecc_get_generated_eccbytes(nand->pmecc, i,
  636. eccbuf);
  637. eccbuf += chip->ecc.bytes;
  638. }
  639. return 0;
  640. }
  641. static int atmel_nand_pmecc_correct_data(struct nand_chip *chip, void *buf,
  642. bool raw)
  643. {
  644. struct atmel_nand *nand = to_atmel_nand(chip);
  645. struct mtd_info *mtd = nand_to_mtd(chip);
  646. struct atmel_nand_controller *nc;
  647. struct mtd_oob_region oobregion;
  648. int ret, i, max_bitflips = 0;
  649. void *databuf, *eccbuf;
  650. nc = to_nand_controller(chip->controller);
  651. if (raw)
  652. return 0;
  653. ret = atmel_pmecc_wait_rdy(nand->pmecc);
  654. if (ret) {
  655. dev_err(nc->dev,
  656. "Failed to read NAND page data (err = %d)\n",
  657. ret);
  658. return ret;
  659. }
  660. mtd_ooblayout_ecc(mtd, 0, &oobregion);
  661. eccbuf = chip->oob_poi + oobregion.offset;
  662. databuf = buf;
  663. for (i = 0; i < chip->ecc.steps; i++) {
  664. ret = atmel_pmecc_correct_sector(nand->pmecc, i, databuf,
  665. eccbuf);
  666. if (ret < 0 && !atmel_pmecc_correct_erased_chunks(nand->pmecc))
  667. ret = nand_check_erased_ecc_chunk(databuf,
  668. chip->ecc.size,
  669. eccbuf,
  670. chip->ecc.bytes,
  671. NULL, 0,
  672. chip->ecc.strength);
  673. if (ret >= 0)
  674. max_bitflips = max(ret, max_bitflips);
  675. else
  676. mtd->ecc_stats.failed++;
  677. databuf += chip->ecc.size;
  678. eccbuf += chip->ecc.bytes;
  679. }
  680. return max_bitflips;
  681. }
  682. static int atmel_nand_pmecc_write_pg(struct nand_chip *chip, const u8 *buf,
  683. bool oob_required, int page, bool raw)
  684. {
  685. struct mtd_info *mtd = nand_to_mtd(chip);
  686. struct atmel_nand *nand = to_atmel_nand(chip);
  687. int ret;
  688. ret = atmel_nand_pmecc_enable(chip, NAND_ECC_WRITE, raw);
  689. if (ret)
  690. return ret;
  691. atmel_nand_write_buf(mtd, buf, mtd->writesize);
  692. ret = atmel_nand_pmecc_generate_eccbytes(chip, raw);
  693. if (ret) {
  694. atmel_pmecc_disable(nand->pmecc);
  695. return ret;
  696. }
  697. atmel_nand_pmecc_disable(chip, raw);
  698. atmel_nand_write_buf(mtd, chip->oob_poi, mtd->oobsize);
  699. return 0;
  700. }
  701. static int atmel_nand_pmecc_write_page(struct mtd_info *mtd,
  702. struct nand_chip *chip, const u8 *buf,
  703. int oob_required, int page)
  704. {
  705. return atmel_nand_pmecc_write_pg(chip, buf, oob_required, page, false);
  706. }
  707. static int atmel_nand_pmecc_write_page_raw(struct mtd_info *mtd,
  708. struct nand_chip *chip,
  709. const u8 *buf, int oob_required,
  710. int page)
  711. {
  712. return atmel_nand_pmecc_write_pg(chip, buf, oob_required, page, true);
  713. }
  714. static int atmel_nand_pmecc_read_pg(struct nand_chip *chip, u8 *buf,
  715. bool oob_required, int page, bool raw)
  716. {
  717. struct mtd_info *mtd = nand_to_mtd(chip);
  718. int ret;
  719. ret = atmel_nand_pmecc_enable(chip, NAND_ECC_READ, raw);
  720. if (ret)
  721. return ret;
  722. atmel_nand_read_buf(mtd, buf, mtd->writesize);
  723. atmel_nand_read_buf(mtd, chip->oob_poi, mtd->oobsize);
  724. ret = atmel_nand_pmecc_correct_data(chip, buf, raw);
  725. atmel_nand_pmecc_disable(chip, raw);
  726. return ret;
  727. }
  728. static int atmel_nand_pmecc_read_page(struct mtd_info *mtd,
  729. struct nand_chip *chip, u8 *buf,
  730. int oob_required, int page)
  731. {
  732. return atmel_nand_pmecc_read_pg(chip, buf, oob_required, page, false);
  733. }
  734. static int atmel_nand_pmecc_read_page_raw(struct mtd_info *mtd,
  735. struct nand_chip *chip, u8 *buf,
  736. int oob_required, int page)
  737. {
  738. return atmel_nand_pmecc_read_pg(chip, buf, oob_required, page, true);
  739. }
  740. static int atmel_hsmc_nand_pmecc_write_pg(struct nand_chip *chip,
  741. const u8 *buf, bool oob_required,
  742. int page, bool raw)
  743. {
  744. struct mtd_info *mtd = nand_to_mtd(chip);
  745. struct atmel_nand *nand = to_atmel_nand(chip);
  746. struct atmel_hsmc_nand_controller *nc;
  747. int ret, status;
  748. nc = to_hsmc_nand_controller(chip->controller);
  749. atmel_nfc_copy_to_sram(chip, buf, false);
  750. nc->op.cmds[0] = NAND_CMD_SEQIN;
  751. nc->op.ncmds = 1;
  752. atmel_nfc_set_op_addr(chip, page, 0x0);
  753. nc->op.cs = nand->activecs->id;
  754. nc->op.data = ATMEL_NFC_WRITE_DATA;
  755. ret = atmel_nand_pmecc_enable(chip, NAND_ECC_WRITE, raw);
  756. if (ret)
  757. return ret;
  758. ret = atmel_nfc_exec_op(nc, false);
  759. if (ret) {
  760. atmel_nand_pmecc_disable(chip, raw);
  761. dev_err(nc->base.dev,
  762. "Failed to transfer NAND page data (err = %d)\n",
  763. ret);
  764. return ret;
  765. }
  766. ret = atmel_nand_pmecc_generate_eccbytes(chip, raw);
  767. atmel_nand_pmecc_disable(chip, raw);
  768. if (ret)
  769. return ret;
  770. atmel_nand_write_buf(mtd, chip->oob_poi, mtd->oobsize);
  771. nc->op.cmds[0] = NAND_CMD_PAGEPROG;
  772. nc->op.ncmds = 1;
  773. nc->op.cs = nand->activecs->id;
  774. ret = atmel_nfc_exec_op(nc, false);
  775. if (ret)
  776. dev_err(nc->base.dev, "Failed to program NAND page (err = %d)\n",
  777. ret);
  778. status = chip->waitfunc(mtd, chip);
  779. if (status & NAND_STATUS_FAIL)
  780. return -EIO;
  781. return ret;
  782. }
  783. static int atmel_hsmc_nand_pmecc_write_page(struct mtd_info *mtd,
  784. struct nand_chip *chip,
  785. const u8 *buf, int oob_required,
  786. int page)
  787. {
  788. return atmel_hsmc_nand_pmecc_write_pg(chip, buf, oob_required, page,
  789. false);
  790. }
  791. static int atmel_hsmc_nand_pmecc_write_page_raw(struct mtd_info *mtd,
  792. struct nand_chip *chip,
  793. const u8 *buf,
  794. int oob_required, int page)
  795. {
  796. return atmel_hsmc_nand_pmecc_write_pg(chip, buf, oob_required, page,
  797. true);
  798. }
  799. static int atmel_hsmc_nand_pmecc_read_pg(struct nand_chip *chip, u8 *buf,
  800. bool oob_required, int page,
  801. bool raw)
  802. {
  803. struct mtd_info *mtd = nand_to_mtd(chip);
  804. struct atmel_nand *nand = to_atmel_nand(chip);
  805. struct atmel_hsmc_nand_controller *nc;
  806. int ret;
  807. nc = to_hsmc_nand_controller(chip->controller);
  808. /*
  809. * Optimized read page accessors only work when the NAND R/B pin is
  810. * connected to a native SoC R/B pin. If that's not the case, fallback
  811. * to the non-optimized one.
  812. */
  813. if (nand->activecs->rb.type != ATMEL_NAND_NATIVE_RB) {
  814. chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
  815. return atmel_nand_pmecc_read_pg(chip, buf, oob_required, page,
  816. raw);
  817. }
  818. nc->op.cmds[nc->op.ncmds++] = NAND_CMD_READ0;
  819. if (mtd->writesize > 512)
  820. nc->op.cmds[nc->op.ncmds++] = NAND_CMD_READSTART;
  821. atmel_nfc_set_op_addr(chip, page, 0x0);
  822. nc->op.cs = nand->activecs->id;
  823. nc->op.data = ATMEL_NFC_READ_DATA;
  824. ret = atmel_nand_pmecc_enable(chip, NAND_ECC_READ, raw);
  825. if (ret)
  826. return ret;
  827. ret = atmel_nfc_exec_op(nc, false);
  828. if (ret) {
  829. atmel_nand_pmecc_disable(chip, raw);
  830. dev_err(nc->base.dev,
  831. "Failed to load NAND page data (err = %d)\n",
  832. ret);
  833. return ret;
  834. }
  835. atmel_nfc_copy_from_sram(chip, buf, true);
  836. ret = atmel_nand_pmecc_correct_data(chip, buf, raw);
  837. atmel_nand_pmecc_disable(chip, raw);
  838. return ret;
  839. }
  840. static int atmel_hsmc_nand_pmecc_read_page(struct mtd_info *mtd,
  841. struct nand_chip *chip, u8 *buf,
  842. int oob_required, int page)
  843. {
  844. return atmel_hsmc_nand_pmecc_read_pg(chip, buf, oob_required, page,
  845. false);
  846. }
  847. static int atmel_hsmc_nand_pmecc_read_page_raw(struct mtd_info *mtd,
  848. struct nand_chip *chip,
  849. u8 *buf, int oob_required,
  850. int page)
  851. {
  852. return atmel_hsmc_nand_pmecc_read_pg(chip, buf, oob_required, page,
  853. true);
  854. }
  855. static int atmel_nand_pmecc_init(struct nand_chip *chip)
  856. {
  857. struct mtd_info *mtd = nand_to_mtd(chip);
  858. struct atmel_nand *nand = to_atmel_nand(chip);
  859. struct atmel_nand_controller *nc;
  860. struct atmel_pmecc_user_req req;
  861. nc = to_nand_controller(chip->controller);
  862. if (!nc->pmecc) {
  863. dev_err(nc->dev, "HW ECC not supported\n");
  864. return -ENOTSUPP;
  865. }
  866. if (nc->caps->legacy_of_bindings) {
  867. u32 val;
  868. if (!of_property_read_u32(nc->dev->of_node, "atmel,pmecc-cap",
  869. &val))
  870. chip->ecc.strength = val;
  871. if (!of_property_read_u32(nc->dev->of_node,
  872. "atmel,pmecc-sector-size",
  873. &val))
  874. chip->ecc.size = val;
  875. }
  876. if (chip->ecc.options & NAND_ECC_MAXIMIZE)
  877. req.ecc.strength = ATMEL_PMECC_MAXIMIZE_ECC_STRENGTH;
  878. else if (chip->ecc.strength)
  879. req.ecc.strength = chip->ecc.strength;
  880. else if (chip->ecc_strength_ds)
  881. req.ecc.strength = chip->ecc_strength_ds;
  882. else
  883. req.ecc.strength = ATMEL_PMECC_MAXIMIZE_ECC_STRENGTH;
  884. if (chip->ecc.size)
  885. req.ecc.sectorsize = chip->ecc.size;
  886. else if (chip->ecc_step_ds)
  887. req.ecc.sectorsize = chip->ecc_step_ds;
  888. else
  889. req.ecc.sectorsize = ATMEL_PMECC_SECTOR_SIZE_AUTO;
  890. req.pagesize = mtd->writesize;
  891. req.oobsize = mtd->oobsize;
  892. if (mtd->writesize <= 512) {
  893. req.ecc.bytes = 4;
  894. req.ecc.ooboffset = 0;
  895. } else {
  896. req.ecc.bytes = mtd->oobsize - 2;
  897. req.ecc.ooboffset = ATMEL_PMECC_OOBOFFSET_AUTO;
  898. }
  899. nand->pmecc = atmel_pmecc_create_user(nc->pmecc, &req);
  900. if (IS_ERR(nand->pmecc))
  901. return PTR_ERR(nand->pmecc);
  902. chip->ecc.algo = NAND_ECC_BCH;
  903. chip->ecc.size = req.ecc.sectorsize;
  904. chip->ecc.bytes = req.ecc.bytes / req.ecc.nsectors;
  905. chip->ecc.strength = req.ecc.strength;
  906. chip->options |= NAND_NO_SUBPAGE_WRITE;
  907. mtd_set_ooblayout(mtd, &nand_ooblayout_lp_ops);
  908. return 0;
  909. }
  910. static int atmel_nand_ecc_init(struct atmel_nand *nand)
  911. {
  912. struct nand_chip *chip = &nand->base;
  913. struct atmel_nand_controller *nc;
  914. int ret;
  915. nc = to_nand_controller(chip->controller);
  916. switch (chip->ecc.mode) {
  917. case NAND_ECC_NONE:
  918. case NAND_ECC_SOFT:
  919. /*
  920. * Nothing to do, the core will initialize everything for us.
  921. */
  922. break;
  923. case NAND_ECC_HW:
  924. ret = atmel_nand_pmecc_init(chip);
  925. if (ret)
  926. return ret;
  927. chip->ecc.read_page = atmel_nand_pmecc_read_page;
  928. chip->ecc.write_page = atmel_nand_pmecc_write_page;
  929. chip->ecc.read_page_raw = atmel_nand_pmecc_read_page_raw;
  930. chip->ecc.write_page_raw = atmel_nand_pmecc_write_page_raw;
  931. break;
  932. default:
  933. /* Other modes are not supported. */
  934. dev_err(nc->dev, "Unsupported ECC mode: %d\n",
  935. chip->ecc.mode);
  936. return -ENOTSUPP;
  937. }
  938. return 0;
  939. }
  940. static int atmel_hsmc_nand_ecc_init(struct atmel_nand *nand)
  941. {
  942. struct nand_chip *chip = &nand->base;
  943. int ret;
  944. ret = atmel_nand_ecc_init(nand);
  945. if (ret)
  946. return ret;
  947. if (chip->ecc.mode != NAND_ECC_HW)
  948. return 0;
  949. /* Adjust the ECC operations for the HSMC IP. */
  950. chip->ecc.read_page = atmel_hsmc_nand_pmecc_read_page;
  951. chip->ecc.write_page = atmel_hsmc_nand_pmecc_write_page;
  952. chip->ecc.read_page_raw = atmel_hsmc_nand_pmecc_read_page_raw;
  953. chip->ecc.write_page_raw = atmel_hsmc_nand_pmecc_write_page_raw;
  954. chip->ecc.options |= NAND_ECC_CUSTOM_PAGE_ACCESS;
  955. return 0;
  956. }
  957. static int atmel_smc_nand_prepare_smcconf(struct atmel_nand *nand,
  958. const struct nand_data_interface *conf,
  959. struct atmel_smc_cs_conf *smcconf)
  960. {
  961. u32 ncycles, totalcycles, timeps, mckperiodps;
  962. struct atmel_nand_controller *nc;
  963. int ret;
  964. nc = to_nand_controller(nand->base.controller);
  965. /* DDR interface not supported. */
  966. if (conf->type != NAND_SDR_IFACE)
  967. return -ENOTSUPP;
  968. /*
  969. * tRC < 30ns implies EDO mode. This controller does not support this
  970. * mode.
  971. */
  972. if (conf->timings.sdr.tRC_min < 30)
  973. return -ENOTSUPP;
  974. atmel_smc_cs_conf_init(smcconf);
  975. mckperiodps = NSEC_PER_SEC / clk_get_rate(nc->mck);
  976. mckperiodps *= 1000;
  977. /*
  978. * Set write pulse timing. This one is easy to extract:
  979. *
  980. * NWE_PULSE = tWP
  981. */
  982. ncycles = DIV_ROUND_UP(conf->timings.sdr.tWP_min, mckperiodps);
  983. totalcycles = ncycles;
  984. ret = atmel_smc_cs_conf_set_pulse(smcconf, ATMEL_SMC_NWE_SHIFT,
  985. ncycles);
  986. if (ret)
  987. return ret;
  988. /*
  989. * The write setup timing depends on the operation done on the NAND.
  990. * All operations goes through the same data bus, but the operation
  991. * type depends on the address we are writing to (ALE/CLE address
  992. * lines).
  993. * Since we have no way to differentiate the different operations at
  994. * the SMC level, we must consider the worst case (the biggest setup
  995. * time among all operation types):
  996. *
  997. * NWE_SETUP = max(tCLS, tCS, tALS, tDS) - NWE_PULSE
  998. */
  999. timeps = max3(conf->timings.sdr.tCLS_min, conf->timings.sdr.tCS_min,
  1000. conf->timings.sdr.tALS_min);
  1001. timeps = max(timeps, conf->timings.sdr.tDS_min);
  1002. ncycles = DIV_ROUND_UP(timeps, mckperiodps);
  1003. ncycles = ncycles > totalcycles ? ncycles - totalcycles : 0;
  1004. totalcycles += ncycles;
  1005. ret = atmel_smc_cs_conf_set_setup(smcconf, ATMEL_SMC_NWE_SHIFT,
  1006. ncycles);
  1007. if (ret)
  1008. return ret;
  1009. /*
  1010. * As for the write setup timing, the write hold timing depends on the
  1011. * operation done on the NAND:
  1012. *
  1013. * NWE_HOLD = max(tCLH, tCH, tALH, tDH, tWH)
  1014. */
  1015. timeps = max3(conf->timings.sdr.tCLH_min, conf->timings.sdr.tCH_min,
  1016. conf->timings.sdr.tALH_min);
  1017. timeps = max3(timeps, conf->timings.sdr.tDH_min,
  1018. conf->timings.sdr.tWH_min);
  1019. ncycles = DIV_ROUND_UP(timeps, mckperiodps);
  1020. totalcycles += ncycles;
  1021. /*
  1022. * The write cycle timing is directly matching tWC, but is also
  1023. * dependent on the other timings on the setup and hold timings we
  1024. * calculated earlier, which gives:
  1025. *
  1026. * NWE_CYCLE = max(tWC, NWE_SETUP + NWE_PULSE + NWE_HOLD)
  1027. */
  1028. ncycles = DIV_ROUND_UP(conf->timings.sdr.tWC_min, mckperiodps);
  1029. ncycles = max(totalcycles, ncycles);
  1030. ret = atmel_smc_cs_conf_set_cycle(smcconf, ATMEL_SMC_NWE_SHIFT,
  1031. ncycles);
  1032. if (ret)
  1033. return ret;
  1034. /*
  1035. * We don't want the CS line to be toggled between each byte/word
  1036. * transfer to the NAND. The only way to guarantee that is to have the
  1037. * NCS_{WR,RD}_{SETUP,HOLD} timings set to 0, which in turn means:
  1038. *
  1039. * NCS_WR_PULSE = NWE_CYCLE
  1040. */
  1041. ret = atmel_smc_cs_conf_set_pulse(smcconf, ATMEL_SMC_NCS_WR_SHIFT,
  1042. ncycles);
  1043. if (ret)
  1044. return ret;
  1045. /*
  1046. * As for the write setup timing, the read hold timing depends on the
  1047. * operation done on the NAND:
  1048. *
  1049. * NRD_HOLD = max(tREH, tRHOH)
  1050. */
  1051. timeps = max(conf->timings.sdr.tREH_min, conf->timings.sdr.tRHOH_min);
  1052. ncycles = DIV_ROUND_UP(timeps, mckperiodps);
  1053. totalcycles = ncycles;
  1054. /*
  1055. * TDF = tRHZ - NRD_HOLD
  1056. */
  1057. ncycles = DIV_ROUND_UP(conf->timings.sdr.tRHZ_max, mckperiodps);
  1058. ncycles -= totalcycles;
  1059. /*
  1060. * In ONFI 4.0 specs, tRHZ has been increased to support EDO NANDs and
  1061. * we might end up with a config that does not fit in the TDF field.
  1062. * Just take the max value in this case and hope that the NAND is more
  1063. * tolerant than advertised.
  1064. */
  1065. if (ncycles > ATMEL_SMC_MODE_TDF_MAX)
  1066. ncycles = ATMEL_SMC_MODE_TDF_MAX;
  1067. else if (ncycles < ATMEL_SMC_MODE_TDF_MIN)
  1068. ncycles = ATMEL_SMC_MODE_TDF_MIN;
  1069. smcconf->mode |= ATMEL_SMC_MODE_TDF(ncycles) |
  1070. ATMEL_SMC_MODE_TDFMODE_OPTIMIZED;
  1071. /*
  1072. * Read pulse timing directly matches tRP:
  1073. *
  1074. * NRD_PULSE = tRP
  1075. */
  1076. ncycles = DIV_ROUND_UP(conf->timings.sdr.tRP_min, mckperiodps);
  1077. totalcycles += ncycles;
  1078. ret = atmel_smc_cs_conf_set_pulse(smcconf, ATMEL_SMC_NRD_SHIFT,
  1079. ncycles);
  1080. if (ret)
  1081. return ret;
  1082. /*
  1083. * The write cycle timing is directly matching tWC, but is also
  1084. * dependent on the setup and hold timings we calculated earlier,
  1085. * which gives:
  1086. *
  1087. * NRD_CYCLE = max(tRC, NRD_PULSE + NRD_HOLD)
  1088. *
  1089. * NRD_SETUP is always 0.
  1090. */
  1091. ncycles = DIV_ROUND_UP(conf->timings.sdr.tRC_min, mckperiodps);
  1092. ncycles = max(totalcycles, ncycles);
  1093. ret = atmel_smc_cs_conf_set_cycle(smcconf, ATMEL_SMC_NRD_SHIFT,
  1094. ncycles);
  1095. if (ret)
  1096. return ret;
  1097. /*
  1098. * We don't want the CS line to be toggled between each byte/word
  1099. * transfer from the NAND. The only way to guarantee that is to have
  1100. * the NCS_{WR,RD}_{SETUP,HOLD} timings set to 0, which in turn means:
  1101. *
  1102. * NCS_RD_PULSE = NRD_CYCLE
  1103. */
  1104. ret = atmel_smc_cs_conf_set_pulse(smcconf, ATMEL_SMC_NCS_RD_SHIFT,
  1105. ncycles);
  1106. if (ret)
  1107. return ret;
  1108. /* Txxx timings are directly matching tXXX ones. */
  1109. ncycles = DIV_ROUND_UP(conf->timings.sdr.tCLR_min, mckperiodps);
  1110. ret = atmel_smc_cs_conf_set_timing(smcconf,
  1111. ATMEL_HSMC_TIMINGS_TCLR_SHIFT,
  1112. ncycles);
  1113. if (ret)
  1114. return ret;
  1115. ncycles = DIV_ROUND_UP(conf->timings.sdr.tADL_min, mckperiodps);
  1116. ret = atmel_smc_cs_conf_set_timing(smcconf,
  1117. ATMEL_HSMC_TIMINGS_TADL_SHIFT,
  1118. ncycles);
  1119. if (ret)
  1120. return ret;
  1121. ncycles = DIV_ROUND_UP(conf->timings.sdr.tAR_min, mckperiodps);
  1122. ret = atmel_smc_cs_conf_set_timing(smcconf,
  1123. ATMEL_HSMC_TIMINGS_TAR_SHIFT,
  1124. ncycles);
  1125. if (ret)
  1126. return ret;
  1127. ncycles = DIV_ROUND_UP(conf->timings.sdr.tRR_min, mckperiodps);
  1128. ret = atmel_smc_cs_conf_set_timing(smcconf,
  1129. ATMEL_HSMC_TIMINGS_TRR_SHIFT,
  1130. ncycles);
  1131. if (ret)
  1132. return ret;
  1133. ncycles = DIV_ROUND_UP(conf->timings.sdr.tWB_max, mckperiodps);
  1134. ret = atmel_smc_cs_conf_set_timing(smcconf,
  1135. ATMEL_HSMC_TIMINGS_TWB_SHIFT,
  1136. ncycles);
  1137. if (ret)
  1138. return ret;
  1139. /* Attach the CS line to the NFC logic. */
  1140. smcconf->timings |= ATMEL_HSMC_TIMINGS_NFSEL;
  1141. /* Set the appropriate data bus width. */
  1142. if (nand->base.options & NAND_BUSWIDTH_16)
  1143. smcconf->mode |= ATMEL_SMC_MODE_DBW_16;
  1144. /* Operate in NRD/NWE READ/WRITEMODE. */
  1145. smcconf->mode |= ATMEL_SMC_MODE_READMODE_NRD |
  1146. ATMEL_SMC_MODE_WRITEMODE_NWE;
  1147. return 0;
  1148. }
  1149. static int atmel_smc_nand_setup_data_interface(struct atmel_nand *nand,
  1150. int csline,
  1151. const struct nand_data_interface *conf)
  1152. {
  1153. struct atmel_nand_controller *nc;
  1154. struct atmel_smc_cs_conf smcconf;
  1155. struct atmel_nand_cs *cs;
  1156. int ret;
  1157. nc = to_nand_controller(nand->base.controller);
  1158. ret = atmel_smc_nand_prepare_smcconf(nand, conf, &smcconf);
  1159. if (ret)
  1160. return ret;
  1161. if (csline == NAND_DATA_IFACE_CHECK_ONLY)
  1162. return 0;
  1163. cs = &nand->cs[csline];
  1164. cs->smcconf = smcconf;
  1165. atmel_smc_cs_conf_apply(nc->smc, cs->id, &cs->smcconf);
  1166. return 0;
  1167. }
  1168. static int atmel_hsmc_nand_setup_data_interface(struct atmel_nand *nand,
  1169. int csline,
  1170. const struct nand_data_interface *conf)
  1171. {
  1172. struct atmel_nand_controller *nc;
  1173. struct atmel_smc_cs_conf smcconf;
  1174. struct atmel_nand_cs *cs;
  1175. int ret;
  1176. nc = to_nand_controller(nand->base.controller);
  1177. ret = atmel_smc_nand_prepare_smcconf(nand, conf, &smcconf);
  1178. if (ret)
  1179. return ret;
  1180. if (csline == NAND_DATA_IFACE_CHECK_ONLY)
  1181. return 0;
  1182. cs = &nand->cs[csline];
  1183. cs->smcconf = smcconf;
  1184. if (cs->rb.type == ATMEL_NAND_NATIVE_RB)
  1185. cs->smcconf.timings |= ATMEL_HSMC_TIMINGS_RBNSEL(cs->rb.id);
  1186. atmel_hsmc_cs_conf_apply(nc->smc, cs->id, &cs->smcconf);
  1187. return 0;
  1188. }
  1189. static int atmel_nand_setup_data_interface(struct mtd_info *mtd, int csline,
  1190. const struct nand_data_interface *conf)
  1191. {
  1192. struct nand_chip *chip = mtd_to_nand(mtd);
  1193. struct atmel_nand *nand = to_atmel_nand(chip);
  1194. struct atmel_nand_controller *nc;
  1195. nc = to_nand_controller(nand->base.controller);
  1196. if (csline >= nand->numcs ||
  1197. (csline < 0 && csline != NAND_DATA_IFACE_CHECK_ONLY))
  1198. return -EINVAL;
  1199. return nc->caps->ops->setup_data_interface(nand, csline, conf);
  1200. }
  1201. static void atmel_nand_init(struct atmel_nand_controller *nc,
  1202. struct atmel_nand *nand)
  1203. {
  1204. struct nand_chip *chip = &nand->base;
  1205. struct mtd_info *mtd = nand_to_mtd(chip);
  1206. mtd->dev.parent = nc->dev;
  1207. nand->base.controller = &nc->base;
  1208. chip->cmd_ctrl = atmel_nand_cmd_ctrl;
  1209. chip->read_byte = atmel_nand_read_byte;
  1210. chip->read_word = atmel_nand_read_word;
  1211. chip->write_byte = atmel_nand_write_byte;
  1212. chip->read_buf = atmel_nand_read_buf;
  1213. chip->write_buf = atmel_nand_write_buf;
  1214. chip->select_chip = atmel_nand_select_chip;
  1215. if (nc->mck && nc->caps->ops->setup_data_interface)
  1216. chip->setup_data_interface = atmel_nand_setup_data_interface;
  1217. /* Some NANDs require a longer delay than the default one (20us). */
  1218. chip->chip_delay = 40;
  1219. /*
  1220. * Use a bounce buffer when the buffer passed by the MTD user is not
  1221. * suitable for DMA.
  1222. */
  1223. if (nc->dmac)
  1224. chip->options |= NAND_USE_BOUNCE_BUFFER;
  1225. /* Default to HW ECC if pmecc is available. */
  1226. if (nc->pmecc)
  1227. chip->ecc.mode = NAND_ECC_HW;
  1228. }
  1229. static void atmel_smc_nand_init(struct atmel_nand_controller *nc,
  1230. struct atmel_nand *nand)
  1231. {
  1232. struct nand_chip *chip = &nand->base;
  1233. struct atmel_smc_nand_controller *smc_nc;
  1234. int i;
  1235. atmel_nand_init(nc, nand);
  1236. smc_nc = to_smc_nand_controller(chip->controller);
  1237. if (!smc_nc->matrix)
  1238. return;
  1239. /* Attach the CS to the NAND Flash logic. */
  1240. for (i = 0; i < nand->numcs; i++)
  1241. regmap_update_bits(smc_nc->matrix, smc_nc->ebi_csa_offs,
  1242. BIT(nand->cs[i].id), BIT(nand->cs[i].id));
  1243. }
  1244. static void atmel_hsmc_nand_init(struct atmel_nand_controller *nc,
  1245. struct atmel_nand *nand)
  1246. {
  1247. struct nand_chip *chip = &nand->base;
  1248. atmel_nand_init(nc, nand);
  1249. /* Overload some methods for the HSMC controller. */
  1250. chip->cmd_ctrl = atmel_hsmc_nand_cmd_ctrl;
  1251. chip->select_chip = atmel_hsmc_nand_select_chip;
  1252. }
  1253. static int atmel_nand_detect(struct atmel_nand *nand)
  1254. {
  1255. struct nand_chip *chip = &nand->base;
  1256. struct mtd_info *mtd = nand_to_mtd(chip);
  1257. struct atmel_nand_controller *nc;
  1258. int ret;
  1259. nc = to_nand_controller(chip->controller);
  1260. ret = nand_scan_ident(mtd, nand->numcs, NULL);
  1261. if (ret)
  1262. dev_err(nc->dev, "nand_scan_ident() failed: %d\n", ret);
  1263. return ret;
  1264. }
  1265. static int atmel_nand_unregister(struct atmel_nand *nand)
  1266. {
  1267. struct nand_chip *chip = &nand->base;
  1268. struct mtd_info *mtd = nand_to_mtd(chip);
  1269. int ret;
  1270. ret = mtd_device_unregister(mtd);
  1271. if (ret)
  1272. return ret;
  1273. nand_cleanup(chip);
  1274. list_del(&nand->node);
  1275. return 0;
  1276. }
  1277. static int atmel_nand_register(struct atmel_nand *nand)
  1278. {
  1279. struct nand_chip *chip = &nand->base;
  1280. struct mtd_info *mtd = nand_to_mtd(chip);
  1281. struct atmel_nand_controller *nc;
  1282. int ret;
  1283. nc = to_nand_controller(chip->controller);
  1284. if (nc->caps->legacy_of_bindings || !nc->dev->of_node) {
  1285. /*
  1286. * We keep the MTD name unchanged to avoid breaking platforms
  1287. * where the MTD cmdline parser is used and the bootloader
  1288. * has not been updated to use the new naming scheme.
  1289. */
  1290. mtd->name = "atmel_nand";
  1291. } else if (!mtd->name) {
  1292. /*
  1293. * If the new bindings are used and the bootloader has not been
  1294. * updated to pass a new mtdparts parameter on the cmdline, you
  1295. * should define the following property in your nand node:
  1296. *
  1297. * label = "atmel_nand";
  1298. *
  1299. * This way, mtd->name will be set by the core when
  1300. * nand_set_flash_node() is called.
  1301. */
  1302. mtd->name = devm_kasprintf(nc->dev, GFP_KERNEL,
  1303. "%s:nand.%d", dev_name(nc->dev),
  1304. nand->cs[0].id);
  1305. if (!mtd->name) {
  1306. dev_err(nc->dev, "Failed to allocate mtd->name\n");
  1307. return -ENOMEM;
  1308. }
  1309. }
  1310. ret = nand_scan_tail(mtd);
  1311. if (ret) {
  1312. dev_err(nc->dev, "nand_scan_tail() failed: %d\n", ret);
  1313. return ret;
  1314. }
  1315. ret = mtd_device_register(mtd, NULL, 0);
  1316. if (ret) {
  1317. dev_err(nc->dev, "Failed to register mtd device: %d\n", ret);
  1318. nand_cleanup(chip);
  1319. return ret;
  1320. }
  1321. list_add_tail(&nand->node, &nc->chips);
  1322. return 0;
  1323. }
  1324. static struct atmel_nand *atmel_nand_create(struct atmel_nand_controller *nc,
  1325. struct device_node *np,
  1326. int reg_cells)
  1327. {
  1328. struct atmel_nand *nand;
  1329. struct gpio_desc *gpio;
  1330. int numcs, ret, i;
  1331. numcs = of_property_count_elems_of_size(np, "reg",
  1332. reg_cells * sizeof(u32));
  1333. if (numcs < 1) {
  1334. dev_err(nc->dev, "Missing or invalid reg property\n");
  1335. return ERR_PTR(-EINVAL);
  1336. }
  1337. nand = devm_kzalloc(nc->dev,
  1338. sizeof(*nand) + (numcs * sizeof(*nand->cs)),
  1339. GFP_KERNEL);
  1340. if (!nand) {
  1341. dev_err(nc->dev, "Failed to allocate NAND object\n");
  1342. return ERR_PTR(-ENOMEM);
  1343. }
  1344. nand->numcs = numcs;
  1345. gpio = devm_fwnode_get_index_gpiod_from_child(nc->dev, "det", 0,
  1346. &np->fwnode, GPIOD_IN,
  1347. "nand-det");
  1348. if (IS_ERR(gpio) && PTR_ERR(gpio) != -ENOENT) {
  1349. dev_err(nc->dev,
  1350. "Failed to get detect gpio (err = %ld)\n",
  1351. PTR_ERR(gpio));
  1352. return ERR_CAST(gpio);
  1353. }
  1354. if (!IS_ERR(gpio))
  1355. nand->cdgpio = gpio;
  1356. for (i = 0; i < numcs; i++) {
  1357. struct resource res;
  1358. u32 val;
  1359. ret = of_address_to_resource(np, 0, &res);
  1360. if (ret) {
  1361. dev_err(nc->dev, "Invalid reg property (err = %d)\n",
  1362. ret);
  1363. return ERR_PTR(ret);
  1364. }
  1365. ret = of_property_read_u32_index(np, "reg", i * reg_cells,
  1366. &val);
  1367. if (ret) {
  1368. dev_err(nc->dev, "Invalid reg property (err = %d)\n",
  1369. ret);
  1370. return ERR_PTR(ret);
  1371. }
  1372. nand->cs[i].id = val;
  1373. nand->cs[i].io.dma = res.start;
  1374. nand->cs[i].io.virt = devm_ioremap_resource(nc->dev, &res);
  1375. if (IS_ERR(nand->cs[i].io.virt))
  1376. return ERR_CAST(nand->cs[i].io.virt);
  1377. if (!of_property_read_u32(np, "atmel,rb", &val)) {
  1378. if (val > ATMEL_NFC_MAX_RB_ID)
  1379. return ERR_PTR(-EINVAL);
  1380. nand->cs[i].rb.type = ATMEL_NAND_NATIVE_RB;
  1381. nand->cs[i].rb.id = val;
  1382. } else {
  1383. gpio = devm_fwnode_get_index_gpiod_from_child(nc->dev,
  1384. "rb", i, &np->fwnode,
  1385. GPIOD_IN, "nand-rb");
  1386. if (IS_ERR(gpio) && PTR_ERR(gpio) != -ENOENT) {
  1387. dev_err(nc->dev,
  1388. "Failed to get R/B gpio (err = %ld)\n",
  1389. PTR_ERR(gpio));
  1390. return ERR_CAST(gpio);
  1391. }
  1392. if (!IS_ERR(gpio)) {
  1393. nand->cs[i].rb.type = ATMEL_NAND_GPIO_RB;
  1394. nand->cs[i].rb.gpio = gpio;
  1395. }
  1396. }
  1397. gpio = devm_fwnode_get_index_gpiod_from_child(nc->dev, "cs",
  1398. i, &np->fwnode,
  1399. GPIOD_OUT_HIGH,
  1400. "nand-cs");
  1401. if (IS_ERR(gpio) && PTR_ERR(gpio) != -ENOENT) {
  1402. dev_err(nc->dev,
  1403. "Failed to get CS gpio (err = %ld)\n",
  1404. PTR_ERR(gpio));
  1405. return ERR_CAST(gpio);
  1406. }
  1407. if (!IS_ERR(gpio))
  1408. nand->cs[i].csgpio = gpio;
  1409. }
  1410. nand_set_flash_node(&nand->base, np);
  1411. return nand;
  1412. }
  1413. static int
  1414. atmel_nand_controller_add_nand(struct atmel_nand_controller *nc,
  1415. struct atmel_nand *nand)
  1416. {
  1417. int ret;
  1418. /* No card inserted, skip this NAND. */
  1419. if (nand->cdgpio && gpiod_get_value(nand->cdgpio)) {
  1420. dev_info(nc->dev, "No SmartMedia card inserted.\n");
  1421. return 0;
  1422. }
  1423. nc->caps->ops->nand_init(nc, nand);
  1424. ret = atmel_nand_detect(nand);
  1425. if (ret)
  1426. return ret;
  1427. ret = nc->caps->ops->ecc_init(nand);
  1428. if (ret)
  1429. return ret;
  1430. return atmel_nand_register(nand);
  1431. }
  1432. static int
  1433. atmel_nand_controller_remove_nands(struct atmel_nand_controller *nc)
  1434. {
  1435. struct atmel_nand *nand, *tmp;
  1436. int ret;
  1437. list_for_each_entry_safe(nand, tmp, &nc->chips, node) {
  1438. ret = atmel_nand_unregister(nand);
  1439. if (ret)
  1440. return ret;
  1441. }
  1442. return 0;
  1443. }
  1444. static int
  1445. atmel_nand_controller_legacy_add_nands(struct atmel_nand_controller *nc)
  1446. {
  1447. struct device *dev = nc->dev;
  1448. struct platform_device *pdev = to_platform_device(dev);
  1449. struct atmel_nand *nand;
  1450. struct gpio_desc *gpio;
  1451. struct resource *res;
  1452. /*
  1453. * Legacy bindings only allow connecting a single NAND with a unique CS
  1454. * line to the controller.
  1455. */
  1456. nand = devm_kzalloc(nc->dev, sizeof(*nand) + sizeof(*nand->cs),
  1457. GFP_KERNEL);
  1458. if (!nand)
  1459. return -ENOMEM;
  1460. nand->numcs = 1;
  1461. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1462. nand->cs[0].io.virt = devm_ioremap_resource(dev, res);
  1463. if (IS_ERR(nand->cs[0].io.virt))
  1464. return PTR_ERR(nand->cs[0].io.virt);
  1465. nand->cs[0].io.dma = res->start;
  1466. /*
  1467. * The old driver was hardcoding the CS id to 3 for all sama5
  1468. * controllers. Since this id is only meaningful for the sama5
  1469. * controller we can safely assign this id to 3 no matter the
  1470. * controller.
  1471. * If one wants to connect a NAND to a different CS line, he will
  1472. * have to use the new bindings.
  1473. */
  1474. nand->cs[0].id = 3;
  1475. /* R/B GPIO. */
  1476. gpio = devm_gpiod_get_index_optional(dev, NULL, 0, GPIOD_IN);
  1477. if (IS_ERR(gpio)) {
  1478. dev_err(dev, "Failed to get R/B gpio (err = %ld)\n",
  1479. PTR_ERR(gpio));
  1480. return PTR_ERR(gpio);
  1481. }
  1482. if (gpio) {
  1483. nand->cs[0].rb.type = ATMEL_NAND_GPIO_RB;
  1484. nand->cs[0].rb.gpio = gpio;
  1485. }
  1486. /* CS GPIO. */
  1487. gpio = devm_gpiod_get_index_optional(dev, NULL, 1, GPIOD_OUT_HIGH);
  1488. if (IS_ERR(gpio)) {
  1489. dev_err(dev, "Failed to get CS gpio (err = %ld)\n",
  1490. PTR_ERR(gpio));
  1491. return PTR_ERR(gpio);
  1492. }
  1493. nand->cs[0].csgpio = gpio;
  1494. /* Card detect GPIO. */
  1495. gpio = devm_gpiod_get_index_optional(nc->dev, NULL, 2, GPIOD_IN);
  1496. if (IS_ERR(gpio)) {
  1497. dev_err(dev,
  1498. "Failed to get detect gpio (err = %ld)\n",
  1499. PTR_ERR(gpio));
  1500. return PTR_ERR(gpio);
  1501. }
  1502. nand->cdgpio = gpio;
  1503. nand_set_flash_node(&nand->base, nc->dev->of_node);
  1504. return atmel_nand_controller_add_nand(nc, nand);
  1505. }
  1506. static int atmel_nand_controller_add_nands(struct atmel_nand_controller *nc)
  1507. {
  1508. struct device_node *np, *nand_np;
  1509. struct device *dev = nc->dev;
  1510. int ret, reg_cells;
  1511. u32 val;
  1512. /* We do not retrieve the SMC syscon when parsing old DTs. */
  1513. if (nc->caps->legacy_of_bindings)
  1514. return atmel_nand_controller_legacy_add_nands(nc);
  1515. np = dev->of_node;
  1516. ret = of_property_read_u32(np, "#address-cells", &val);
  1517. if (ret) {
  1518. dev_err(dev, "missing #address-cells property\n");
  1519. return ret;
  1520. }
  1521. reg_cells = val;
  1522. ret = of_property_read_u32(np, "#size-cells", &val);
  1523. if (ret) {
  1524. dev_err(dev, "missing #address-cells property\n");
  1525. return ret;
  1526. }
  1527. reg_cells += val;
  1528. for_each_child_of_node(np, nand_np) {
  1529. struct atmel_nand *nand;
  1530. nand = atmel_nand_create(nc, nand_np, reg_cells);
  1531. if (IS_ERR(nand)) {
  1532. ret = PTR_ERR(nand);
  1533. goto err;
  1534. }
  1535. ret = atmel_nand_controller_add_nand(nc, nand);
  1536. if (ret)
  1537. goto err;
  1538. }
  1539. return 0;
  1540. err:
  1541. atmel_nand_controller_remove_nands(nc);
  1542. return ret;
  1543. }
  1544. static void atmel_nand_controller_cleanup(struct atmel_nand_controller *nc)
  1545. {
  1546. if (nc->dmac)
  1547. dma_release_channel(nc->dmac);
  1548. clk_put(nc->mck);
  1549. }
  1550. static const struct of_device_id atmel_matrix_of_ids[] = {
  1551. {
  1552. .compatible = "atmel,at91sam9260-matrix",
  1553. .data = (void *)AT91SAM9260_MATRIX_EBICSA,
  1554. },
  1555. {
  1556. .compatible = "atmel,at91sam9261-matrix",
  1557. .data = (void *)AT91SAM9261_MATRIX_EBICSA,
  1558. },
  1559. {
  1560. .compatible = "atmel,at91sam9263-matrix",
  1561. .data = (void *)AT91SAM9263_MATRIX_EBI0CSA,
  1562. },
  1563. {
  1564. .compatible = "atmel,at91sam9rl-matrix",
  1565. .data = (void *)AT91SAM9RL_MATRIX_EBICSA,
  1566. },
  1567. {
  1568. .compatible = "atmel,at91sam9g45-matrix",
  1569. .data = (void *)AT91SAM9G45_MATRIX_EBICSA,
  1570. },
  1571. {
  1572. .compatible = "atmel,at91sam9n12-matrix",
  1573. .data = (void *)AT91SAM9N12_MATRIX_EBICSA,
  1574. },
  1575. {
  1576. .compatible = "atmel,at91sam9x5-matrix",
  1577. .data = (void *)AT91SAM9X5_MATRIX_EBICSA,
  1578. },
  1579. { /* sentinel */ },
  1580. };
  1581. static int atmel_nand_controller_init(struct atmel_nand_controller *nc,
  1582. struct platform_device *pdev,
  1583. const struct atmel_nand_controller_caps *caps)
  1584. {
  1585. struct device *dev = &pdev->dev;
  1586. struct device_node *np = dev->of_node;
  1587. int ret;
  1588. nand_hw_control_init(&nc->base);
  1589. INIT_LIST_HEAD(&nc->chips);
  1590. nc->dev = dev;
  1591. nc->caps = caps;
  1592. platform_set_drvdata(pdev, nc);
  1593. nc->pmecc = devm_atmel_pmecc_get(dev);
  1594. if (IS_ERR(nc->pmecc)) {
  1595. ret = PTR_ERR(nc->pmecc);
  1596. if (ret != -EPROBE_DEFER)
  1597. dev_err(dev, "Could not get PMECC object (err = %d)\n",
  1598. ret);
  1599. return ret;
  1600. }
  1601. if (nc->caps->has_dma) {
  1602. dma_cap_mask_t mask;
  1603. dma_cap_zero(mask);
  1604. dma_cap_set(DMA_MEMCPY, mask);
  1605. nc->dmac = dma_request_channel(mask, NULL, NULL);
  1606. if (!nc->dmac)
  1607. dev_err(nc->dev, "Failed to request DMA channel\n");
  1608. }
  1609. /* We do not retrieve the SMC syscon when parsing old DTs. */
  1610. if (nc->caps->legacy_of_bindings)
  1611. return 0;
  1612. nc->mck = of_clk_get(dev->parent->of_node, 0);
  1613. if (IS_ERR(nc->mck)) {
  1614. dev_err(dev, "Failed to retrieve MCK clk\n");
  1615. return PTR_ERR(nc->mck);
  1616. }
  1617. np = of_parse_phandle(dev->parent->of_node, "atmel,smc", 0);
  1618. if (!np) {
  1619. dev_err(dev, "Missing or invalid atmel,smc property\n");
  1620. return -EINVAL;
  1621. }
  1622. nc->smc = syscon_node_to_regmap(np);
  1623. of_node_put(np);
  1624. if (IS_ERR(nc->smc)) {
  1625. ret = PTR_ERR(nc->smc);
  1626. dev_err(dev, "Could not get SMC regmap (err = %d)\n", ret);
  1627. return ret;
  1628. }
  1629. return 0;
  1630. }
  1631. static int
  1632. atmel_smc_nand_controller_init(struct atmel_smc_nand_controller *nc)
  1633. {
  1634. struct device *dev = nc->base.dev;
  1635. const struct of_device_id *match;
  1636. struct device_node *np;
  1637. int ret;
  1638. /* We do not retrieve the matrix syscon when parsing old DTs. */
  1639. if (nc->base.caps->legacy_of_bindings)
  1640. return 0;
  1641. np = of_parse_phandle(dev->parent->of_node, "atmel,matrix", 0);
  1642. if (!np)
  1643. return 0;
  1644. match = of_match_node(atmel_matrix_of_ids, np);
  1645. if (!match) {
  1646. of_node_put(np);
  1647. return 0;
  1648. }
  1649. nc->matrix = syscon_node_to_regmap(np);
  1650. of_node_put(np);
  1651. if (IS_ERR(nc->matrix)) {
  1652. ret = PTR_ERR(nc->matrix);
  1653. dev_err(dev, "Could not get Matrix regmap (err = %d)\n", ret);
  1654. return ret;
  1655. }
  1656. nc->ebi_csa_offs = (unsigned int)match->data;
  1657. /*
  1658. * The at91sam9263 has 2 EBIs, if the NAND controller is under EBI1
  1659. * add 4 to ->ebi_csa_offs.
  1660. */
  1661. if (of_device_is_compatible(dev->parent->of_node,
  1662. "atmel,at91sam9263-ebi1"))
  1663. nc->ebi_csa_offs += 4;
  1664. return 0;
  1665. }
  1666. static int
  1667. atmel_hsmc_nand_controller_legacy_init(struct atmel_hsmc_nand_controller *nc)
  1668. {
  1669. struct regmap_config regmap_conf = {
  1670. .reg_bits = 32,
  1671. .val_bits = 32,
  1672. .reg_stride = 4,
  1673. };
  1674. struct device *dev = nc->base.dev;
  1675. struct device_node *nand_np, *nfc_np;
  1676. void __iomem *iomem;
  1677. struct resource res;
  1678. int ret;
  1679. nand_np = dev->of_node;
  1680. nfc_np = of_find_compatible_node(dev->of_node, NULL,
  1681. "atmel,sama5d3-nfc");
  1682. nc->clk = of_clk_get(nfc_np, 0);
  1683. if (IS_ERR(nc->clk)) {
  1684. ret = PTR_ERR(nc->clk);
  1685. dev_err(dev, "Failed to retrieve HSMC clock (err = %d)\n",
  1686. ret);
  1687. goto out;
  1688. }
  1689. ret = clk_prepare_enable(nc->clk);
  1690. if (ret) {
  1691. dev_err(dev, "Failed to enable the HSMC clock (err = %d)\n",
  1692. ret);
  1693. goto out;
  1694. }
  1695. nc->irq = of_irq_get(nand_np, 0);
  1696. if (nc->irq < 0) {
  1697. ret = nc->irq;
  1698. if (ret != -EPROBE_DEFER)
  1699. dev_err(dev, "Failed to get IRQ number (err = %d)\n",
  1700. ret);
  1701. goto out;
  1702. }
  1703. ret = of_address_to_resource(nfc_np, 0, &res);
  1704. if (ret) {
  1705. dev_err(dev, "Invalid or missing NFC IO resource (err = %d)\n",
  1706. ret);
  1707. goto out;
  1708. }
  1709. iomem = devm_ioremap_resource(dev, &res);
  1710. if (IS_ERR(iomem)) {
  1711. ret = PTR_ERR(iomem);
  1712. goto out;
  1713. }
  1714. regmap_conf.name = "nfc-io";
  1715. regmap_conf.max_register = resource_size(&res) - 4;
  1716. nc->io = devm_regmap_init_mmio(dev, iomem, &regmap_conf);
  1717. if (IS_ERR(nc->io)) {
  1718. ret = PTR_ERR(nc->io);
  1719. dev_err(dev, "Could not create NFC IO regmap (err = %d)\n",
  1720. ret);
  1721. goto out;
  1722. }
  1723. ret = of_address_to_resource(nfc_np, 1, &res);
  1724. if (ret) {
  1725. dev_err(dev, "Invalid or missing HSMC resource (err = %d)\n",
  1726. ret);
  1727. goto out;
  1728. }
  1729. iomem = devm_ioremap_resource(dev, &res);
  1730. if (IS_ERR(iomem)) {
  1731. ret = PTR_ERR(iomem);
  1732. goto out;
  1733. }
  1734. regmap_conf.name = "smc";
  1735. regmap_conf.max_register = resource_size(&res) - 4;
  1736. nc->base.smc = devm_regmap_init_mmio(dev, iomem, &regmap_conf);
  1737. if (IS_ERR(nc->base.smc)) {
  1738. ret = PTR_ERR(nc->base.smc);
  1739. dev_err(dev, "Could not create NFC IO regmap (err = %d)\n",
  1740. ret);
  1741. goto out;
  1742. }
  1743. ret = of_address_to_resource(nfc_np, 2, &res);
  1744. if (ret) {
  1745. dev_err(dev, "Invalid or missing SRAM resource (err = %d)\n",
  1746. ret);
  1747. goto out;
  1748. }
  1749. nc->sram.virt = devm_ioremap_resource(dev, &res);
  1750. if (IS_ERR(nc->sram.virt)) {
  1751. ret = PTR_ERR(nc->sram.virt);
  1752. goto out;
  1753. }
  1754. nc->sram.dma = res.start;
  1755. out:
  1756. of_node_put(nfc_np);
  1757. return ret;
  1758. }
  1759. static int
  1760. atmel_hsmc_nand_controller_init(struct atmel_hsmc_nand_controller *nc)
  1761. {
  1762. struct device *dev = nc->base.dev;
  1763. struct device_node *np;
  1764. int ret;
  1765. np = of_parse_phandle(dev->parent->of_node, "atmel,smc", 0);
  1766. if (!np) {
  1767. dev_err(dev, "Missing or invalid atmel,smc property\n");
  1768. return -EINVAL;
  1769. }
  1770. nc->irq = of_irq_get(np, 0);
  1771. of_node_put(np);
  1772. if (nc->irq < 0) {
  1773. if (nc->irq != -EPROBE_DEFER)
  1774. dev_err(dev, "Failed to get IRQ number (err = %d)\n",
  1775. nc->irq);
  1776. return nc->irq;
  1777. }
  1778. np = of_parse_phandle(dev->of_node, "atmel,nfc-io", 0);
  1779. if (!np) {
  1780. dev_err(dev, "Missing or invalid atmel,nfc-io property\n");
  1781. return -EINVAL;
  1782. }
  1783. nc->io = syscon_node_to_regmap(np);
  1784. of_node_put(np);
  1785. if (IS_ERR(nc->io)) {
  1786. ret = PTR_ERR(nc->io);
  1787. dev_err(dev, "Could not get NFC IO regmap (err = %d)\n", ret);
  1788. return ret;
  1789. }
  1790. nc->sram.pool = of_gen_pool_get(nc->base.dev->of_node,
  1791. "atmel,nfc-sram", 0);
  1792. if (!nc->sram.pool) {
  1793. dev_err(nc->base.dev, "Missing SRAM\n");
  1794. return -ENOMEM;
  1795. }
  1796. nc->sram.virt = gen_pool_dma_alloc(nc->sram.pool,
  1797. ATMEL_NFC_SRAM_SIZE,
  1798. &nc->sram.dma);
  1799. if (!nc->sram.virt) {
  1800. dev_err(nc->base.dev,
  1801. "Could not allocate memory from the NFC SRAM pool\n");
  1802. return -ENOMEM;
  1803. }
  1804. return 0;
  1805. }
  1806. static int
  1807. atmel_hsmc_nand_controller_remove(struct atmel_nand_controller *nc)
  1808. {
  1809. struct atmel_hsmc_nand_controller *hsmc_nc;
  1810. int ret;
  1811. ret = atmel_nand_controller_remove_nands(nc);
  1812. if (ret)
  1813. return ret;
  1814. hsmc_nc = container_of(nc, struct atmel_hsmc_nand_controller, base);
  1815. if (hsmc_nc->sram.pool)
  1816. gen_pool_free(hsmc_nc->sram.pool,
  1817. (unsigned long)hsmc_nc->sram.virt,
  1818. ATMEL_NFC_SRAM_SIZE);
  1819. if (hsmc_nc->clk) {
  1820. clk_disable_unprepare(hsmc_nc->clk);
  1821. clk_put(hsmc_nc->clk);
  1822. }
  1823. atmel_nand_controller_cleanup(nc);
  1824. return 0;
  1825. }
  1826. static int atmel_hsmc_nand_controller_probe(struct platform_device *pdev,
  1827. const struct atmel_nand_controller_caps *caps)
  1828. {
  1829. struct device *dev = &pdev->dev;
  1830. struct atmel_hsmc_nand_controller *nc;
  1831. int ret;
  1832. nc = devm_kzalloc(dev, sizeof(*nc), GFP_KERNEL);
  1833. if (!nc)
  1834. return -ENOMEM;
  1835. ret = atmel_nand_controller_init(&nc->base, pdev, caps);
  1836. if (ret)
  1837. return ret;
  1838. if (caps->legacy_of_bindings)
  1839. ret = atmel_hsmc_nand_controller_legacy_init(nc);
  1840. else
  1841. ret = atmel_hsmc_nand_controller_init(nc);
  1842. if (ret)
  1843. return ret;
  1844. /* Make sure all irqs are masked before registering our IRQ handler. */
  1845. regmap_write(nc->base.smc, ATMEL_HSMC_NFC_IDR, 0xffffffff);
  1846. ret = devm_request_irq(dev, nc->irq, atmel_nfc_interrupt,
  1847. IRQF_SHARED, "nfc", nc);
  1848. if (ret) {
  1849. dev_err(dev,
  1850. "Could not get register NFC interrupt handler (err = %d)\n",
  1851. ret);
  1852. goto err;
  1853. }
  1854. /* Initial NFC configuration. */
  1855. regmap_write(nc->base.smc, ATMEL_HSMC_NFC_CFG,
  1856. ATMEL_HSMC_NFC_CFG_DTO_MAX);
  1857. ret = atmel_nand_controller_add_nands(&nc->base);
  1858. if (ret)
  1859. goto err;
  1860. return 0;
  1861. err:
  1862. atmel_hsmc_nand_controller_remove(&nc->base);
  1863. return ret;
  1864. }
  1865. static const struct atmel_nand_controller_ops atmel_hsmc_nc_ops = {
  1866. .probe = atmel_hsmc_nand_controller_probe,
  1867. .remove = atmel_hsmc_nand_controller_remove,
  1868. .ecc_init = atmel_hsmc_nand_ecc_init,
  1869. .nand_init = atmel_hsmc_nand_init,
  1870. .setup_data_interface = atmel_hsmc_nand_setup_data_interface,
  1871. };
  1872. static const struct atmel_nand_controller_caps atmel_sama5_nc_caps = {
  1873. .has_dma = true,
  1874. .ale_offs = BIT(21),
  1875. .cle_offs = BIT(22),
  1876. .ops = &atmel_hsmc_nc_ops,
  1877. };
  1878. /* Only used to parse old bindings. */
  1879. static const struct atmel_nand_controller_caps atmel_sama5_nand_caps = {
  1880. .has_dma = true,
  1881. .ale_offs = BIT(21),
  1882. .cle_offs = BIT(22),
  1883. .ops = &atmel_hsmc_nc_ops,
  1884. .legacy_of_bindings = true,
  1885. };
  1886. static int atmel_smc_nand_controller_probe(struct platform_device *pdev,
  1887. const struct atmel_nand_controller_caps *caps)
  1888. {
  1889. struct device *dev = &pdev->dev;
  1890. struct atmel_smc_nand_controller *nc;
  1891. int ret;
  1892. nc = devm_kzalloc(dev, sizeof(*nc), GFP_KERNEL);
  1893. if (!nc)
  1894. return -ENOMEM;
  1895. ret = atmel_nand_controller_init(&nc->base, pdev, caps);
  1896. if (ret)
  1897. return ret;
  1898. ret = atmel_smc_nand_controller_init(nc);
  1899. if (ret)
  1900. return ret;
  1901. return atmel_nand_controller_add_nands(&nc->base);
  1902. }
  1903. static int
  1904. atmel_smc_nand_controller_remove(struct atmel_nand_controller *nc)
  1905. {
  1906. int ret;
  1907. ret = atmel_nand_controller_remove_nands(nc);
  1908. if (ret)
  1909. return ret;
  1910. atmel_nand_controller_cleanup(nc);
  1911. return 0;
  1912. }
  1913. /*
  1914. * The SMC reg layout of at91rm9200 is completely different which prevents us
  1915. * from re-using atmel_smc_nand_setup_data_interface() for the
  1916. * ->setup_data_interface() hook.
  1917. * At this point, there's no support for the at91rm9200 SMC IP, so we leave
  1918. * ->setup_data_interface() unassigned.
  1919. */
  1920. static const struct atmel_nand_controller_ops at91rm9200_nc_ops = {
  1921. .probe = atmel_smc_nand_controller_probe,
  1922. .remove = atmel_smc_nand_controller_remove,
  1923. .ecc_init = atmel_nand_ecc_init,
  1924. .nand_init = atmel_smc_nand_init,
  1925. };
  1926. static const struct atmel_nand_controller_caps atmel_rm9200_nc_caps = {
  1927. .ale_offs = BIT(21),
  1928. .cle_offs = BIT(22),
  1929. .ops = &at91rm9200_nc_ops,
  1930. };
  1931. static const struct atmel_nand_controller_ops atmel_smc_nc_ops = {
  1932. .probe = atmel_smc_nand_controller_probe,
  1933. .remove = atmel_smc_nand_controller_remove,
  1934. .ecc_init = atmel_nand_ecc_init,
  1935. .nand_init = atmel_smc_nand_init,
  1936. .setup_data_interface = atmel_smc_nand_setup_data_interface,
  1937. };
  1938. static const struct atmel_nand_controller_caps atmel_sam9260_nc_caps = {
  1939. .ale_offs = BIT(21),
  1940. .cle_offs = BIT(22),
  1941. .ops = &atmel_smc_nc_ops,
  1942. };
  1943. static const struct atmel_nand_controller_caps atmel_sam9261_nc_caps = {
  1944. .ale_offs = BIT(22),
  1945. .cle_offs = BIT(21),
  1946. .ops = &atmel_smc_nc_ops,
  1947. };
  1948. static const struct atmel_nand_controller_caps atmel_sam9g45_nc_caps = {
  1949. .has_dma = true,
  1950. .ale_offs = BIT(21),
  1951. .cle_offs = BIT(22),
  1952. .ops = &atmel_smc_nc_ops,
  1953. };
  1954. /* Only used to parse old bindings. */
  1955. static const struct atmel_nand_controller_caps atmel_rm9200_nand_caps = {
  1956. .ale_offs = BIT(21),
  1957. .cle_offs = BIT(22),
  1958. .ops = &atmel_smc_nc_ops,
  1959. .legacy_of_bindings = true,
  1960. };
  1961. static const struct atmel_nand_controller_caps atmel_sam9261_nand_caps = {
  1962. .ale_offs = BIT(22),
  1963. .cle_offs = BIT(21),
  1964. .ops = &atmel_smc_nc_ops,
  1965. .legacy_of_bindings = true,
  1966. };
  1967. static const struct atmel_nand_controller_caps atmel_sam9g45_nand_caps = {
  1968. .has_dma = true,
  1969. .ale_offs = BIT(21),
  1970. .cle_offs = BIT(22),
  1971. .ops = &atmel_smc_nc_ops,
  1972. .legacy_of_bindings = true,
  1973. };
  1974. static const struct of_device_id atmel_nand_controller_of_ids[] = {
  1975. {
  1976. .compatible = "atmel,at91rm9200-nand-controller",
  1977. .data = &atmel_rm9200_nc_caps,
  1978. },
  1979. {
  1980. .compatible = "atmel,at91sam9260-nand-controller",
  1981. .data = &atmel_sam9260_nc_caps,
  1982. },
  1983. {
  1984. .compatible = "atmel,at91sam9261-nand-controller",
  1985. .data = &atmel_sam9261_nc_caps,
  1986. },
  1987. {
  1988. .compatible = "atmel,at91sam9g45-nand-controller",
  1989. .data = &atmel_sam9g45_nc_caps,
  1990. },
  1991. {
  1992. .compatible = "atmel,sama5d3-nand-controller",
  1993. .data = &atmel_sama5_nc_caps,
  1994. },
  1995. /* Support for old/deprecated bindings: */
  1996. {
  1997. .compatible = "atmel,at91rm9200-nand",
  1998. .data = &atmel_rm9200_nand_caps,
  1999. },
  2000. {
  2001. .compatible = "atmel,sama5d4-nand",
  2002. .data = &atmel_rm9200_nand_caps,
  2003. },
  2004. {
  2005. .compatible = "atmel,sama5d2-nand",
  2006. .data = &atmel_rm9200_nand_caps,
  2007. },
  2008. { /* sentinel */ },
  2009. };
  2010. MODULE_DEVICE_TABLE(of, atmel_nand_controller_of_ids);
  2011. static int atmel_nand_controller_probe(struct platform_device *pdev)
  2012. {
  2013. const struct atmel_nand_controller_caps *caps;
  2014. if (pdev->id_entry)
  2015. caps = (void *)pdev->id_entry->driver_data;
  2016. else
  2017. caps = of_device_get_match_data(&pdev->dev);
  2018. if (!caps) {
  2019. dev_err(&pdev->dev, "Could not retrieve NFC caps\n");
  2020. return -EINVAL;
  2021. }
  2022. if (caps->legacy_of_bindings) {
  2023. u32 ale_offs = 21;
  2024. /*
  2025. * If we are parsing legacy DT props and the DT contains a
  2026. * valid NFC node, forward the request to the sama5 logic.
  2027. */
  2028. if (of_find_compatible_node(pdev->dev.of_node, NULL,
  2029. "atmel,sama5d3-nfc"))
  2030. caps = &atmel_sama5_nand_caps;
  2031. /*
  2032. * Even if the compatible says we are dealing with an
  2033. * at91rm9200 controller, the atmel,nand-has-dma specify that
  2034. * this controller supports DMA, which means we are in fact
  2035. * dealing with an at91sam9g45+ controller.
  2036. */
  2037. if (!caps->has_dma &&
  2038. of_property_read_bool(pdev->dev.of_node,
  2039. "atmel,nand-has-dma"))
  2040. caps = &atmel_sam9g45_nand_caps;
  2041. /*
  2042. * All SoCs except the at91sam9261 are assigning ALE to A21 and
  2043. * CLE to A22. If atmel,nand-addr-offset != 21 this means we're
  2044. * actually dealing with an at91sam9261 controller.
  2045. */
  2046. of_property_read_u32(pdev->dev.of_node,
  2047. "atmel,nand-addr-offset", &ale_offs);
  2048. if (ale_offs != 21)
  2049. caps = &atmel_sam9261_nand_caps;
  2050. }
  2051. return caps->ops->probe(pdev, caps);
  2052. }
  2053. static int atmel_nand_controller_remove(struct platform_device *pdev)
  2054. {
  2055. struct atmel_nand_controller *nc = platform_get_drvdata(pdev);
  2056. return nc->caps->ops->remove(nc);
  2057. }
  2058. static __maybe_unused int atmel_nand_controller_resume(struct device *dev)
  2059. {
  2060. struct atmel_nand_controller *nc = dev_get_drvdata(dev);
  2061. struct atmel_nand *nand;
  2062. list_for_each_entry(nand, &nc->chips, node) {
  2063. int i;
  2064. for (i = 0; i < nand->numcs; i++)
  2065. nand_reset(&nand->base, i);
  2066. }
  2067. return 0;
  2068. }
  2069. static SIMPLE_DEV_PM_OPS(atmel_nand_controller_pm_ops, NULL,
  2070. atmel_nand_controller_resume);
  2071. static struct platform_driver atmel_nand_controller_driver = {
  2072. .driver = {
  2073. .name = "atmel-nand-controller",
  2074. .of_match_table = of_match_ptr(atmel_nand_controller_of_ids),
  2075. },
  2076. .probe = atmel_nand_controller_probe,
  2077. .remove = atmel_nand_controller_remove,
  2078. };
  2079. module_platform_driver(atmel_nand_controller_driver);
  2080. MODULE_LICENSE("GPL");
  2081. MODULE_AUTHOR("Boris Brezillon <boris.brezillon@free-electrons.com>");
  2082. MODULE_DESCRIPTION("NAND Flash Controller driver for Atmel SoCs");
  2083. MODULE_ALIAS("platform:atmel-nand-controller");