tegra30-emc.c 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Tegra30 External Memory Controller driver
  4. *
  5. * Based on downstream driver from NVIDIA and tegra124-emc.c
  6. * Copyright (C) 2011-2014 NVIDIA Corporation
  7. *
  8. * Author: Dmitry Osipenko <digetx@gmail.com>
  9. * Copyright (C) 2019 GRATE-DRIVER project
  10. */
  11. #include <linux/bitfield.h>
  12. #include <linux/clk.h>
  13. #include <linux/clk/tegra.h>
  14. #include <linux/debugfs.h>
  15. #include <linux/delay.h>
  16. #include <linux/err.h>
  17. #include <linux/interconnect-provider.h>
  18. #include <linux/interrupt.h>
  19. #include <linux/io.h>
  20. #include <linux/iopoll.h>
  21. #include <linux/kernel.h>
  22. #include <linux/module.h>
  23. #include <linux/mutex.h>
  24. #include <linux/of.h>
  25. #include <linux/platform_device.h>
  26. #include <linux/pm_opp.h>
  27. #include <linux/slab.h>
  28. #include <linux/sort.h>
  29. #include <linux/types.h>
  30. #include <soc/tegra/common.h>
  31. #include <soc/tegra/fuse.h>
  32. #include "../jedec_ddr.h"
  33. #include "../of_memory.h"
  34. #include "mc.h"
  35. #define EMC_INTSTATUS 0x000
  36. #define EMC_INTMASK 0x004
  37. #define EMC_DBG 0x008
  38. #define EMC_ADR_CFG 0x010
  39. #define EMC_CFG 0x00c
  40. #define EMC_REFCTRL 0x020
  41. #define EMC_TIMING_CONTROL 0x028
  42. #define EMC_RC 0x02c
  43. #define EMC_RFC 0x030
  44. #define EMC_RAS 0x034
  45. #define EMC_RP 0x038
  46. #define EMC_R2W 0x03c
  47. #define EMC_W2R 0x040
  48. #define EMC_R2P 0x044
  49. #define EMC_W2P 0x048
  50. #define EMC_RD_RCD 0x04c
  51. #define EMC_WR_RCD 0x050
  52. #define EMC_RRD 0x054
  53. #define EMC_REXT 0x058
  54. #define EMC_WDV 0x05c
  55. #define EMC_QUSE 0x060
  56. #define EMC_QRST 0x064
  57. #define EMC_QSAFE 0x068
  58. #define EMC_RDV 0x06c
  59. #define EMC_REFRESH 0x070
  60. #define EMC_BURST_REFRESH_NUM 0x074
  61. #define EMC_PDEX2WR 0x078
  62. #define EMC_PDEX2RD 0x07c
  63. #define EMC_PCHG2PDEN 0x080
  64. #define EMC_ACT2PDEN 0x084
  65. #define EMC_AR2PDEN 0x088
  66. #define EMC_RW2PDEN 0x08c
  67. #define EMC_TXSR 0x090
  68. #define EMC_TCKE 0x094
  69. #define EMC_TFAW 0x098
  70. #define EMC_TRPAB 0x09c
  71. #define EMC_TCLKSTABLE 0x0a0
  72. #define EMC_TCLKSTOP 0x0a4
  73. #define EMC_TREFBW 0x0a8
  74. #define EMC_QUSE_EXTRA 0x0ac
  75. #define EMC_ODT_WRITE 0x0b0
  76. #define EMC_ODT_READ 0x0b4
  77. #define EMC_WEXT 0x0b8
  78. #define EMC_CTT 0x0bc
  79. #define EMC_MRS_WAIT_CNT 0x0c8
  80. #define EMC_MRS 0x0cc
  81. #define EMC_EMRS 0x0d0
  82. #define EMC_SELF_REF 0x0e0
  83. #define EMC_MRW 0x0e8
  84. #define EMC_MRR 0x0ec
  85. #define EMC_XM2DQSPADCTRL3 0x0f8
  86. #define EMC_FBIO_SPARE 0x100
  87. #define EMC_FBIO_CFG5 0x104
  88. #define EMC_FBIO_CFG6 0x114
  89. #define EMC_CFG_RSV 0x120
  90. #define EMC_AUTO_CAL_CONFIG 0x2a4
  91. #define EMC_AUTO_CAL_INTERVAL 0x2a8
  92. #define EMC_AUTO_CAL_STATUS 0x2ac
  93. #define EMC_STATUS 0x2b4
  94. #define EMC_CFG_2 0x2b8
  95. #define EMC_CFG_DIG_DLL 0x2bc
  96. #define EMC_CFG_DIG_DLL_PERIOD 0x2c0
  97. #define EMC_CTT_DURATION 0x2d8
  98. #define EMC_CTT_TERM_CTRL 0x2dc
  99. #define EMC_ZCAL_INTERVAL 0x2e0
  100. #define EMC_ZCAL_WAIT_CNT 0x2e4
  101. #define EMC_ZQ_CAL 0x2ec
  102. #define EMC_XM2CMDPADCTRL 0x2f0
  103. #define EMC_XM2DQSPADCTRL2 0x2fc
  104. #define EMC_XM2DQPADCTRL2 0x304
  105. #define EMC_XM2CLKPADCTRL 0x308
  106. #define EMC_XM2COMPPADCTRL 0x30c
  107. #define EMC_XM2VTTGENPADCTRL 0x310
  108. #define EMC_XM2VTTGENPADCTRL2 0x314
  109. #define EMC_XM2QUSEPADCTRL 0x318
  110. #define EMC_DLL_XFORM_DQS0 0x328
  111. #define EMC_DLL_XFORM_DQS1 0x32c
  112. #define EMC_DLL_XFORM_DQS2 0x330
  113. #define EMC_DLL_XFORM_DQS3 0x334
  114. #define EMC_DLL_XFORM_DQS4 0x338
  115. #define EMC_DLL_XFORM_DQS5 0x33c
  116. #define EMC_DLL_XFORM_DQS6 0x340
  117. #define EMC_DLL_XFORM_DQS7 0x344
  118. #define EMC_DLL_XFORM_QUSE0 0x348
  119. #define EMC_DLL_XFORM_QUSE1 0x34c
  120. #define EMC_DLL_XFORM_QUSE2 0x350
  121. #define EMC_DLL_XFORM_QUSE3 0x354
  122. #define EMC_DLL_XFORM_QUSE4 0x358
  123. #define EMC_DLL_XFORM_QUSE5 0x35c
  124. #define EMC_DLL_XFORM_QUSE6 0x360
  125. #define EMC_DLL_XFORM_QUSE7 0x364
  126. #define EMC_DLL_XFORM_DQ0 0x368
  127. #define EMC_DLL_XFORM_DQ1 0x36c
  128. #define EMC_DLL_XFORM_DQ2 0x370
  129. #define EMC_DLL_XFORM_DQ3 0x374
  130. #define EMC_DLI_TRIM_TXDQS0 0x3a8
  131. #define EMC_DLI_TRIM_TXDQS1 0x3ac
  132. #define EMC_DLI_TRIM_TXDQS2 0x3b0
  133. #define EMC_DLI_TRIM_TXDQS3 0x3b4
  134. #define EMC_DLI_TRIM_TXDQS4 0x3b8
  135. #define EMC_DLI_TRIM_TXDQS5 0x3bc
  136. #define EMC_DLI_TRIM_TXDQS6 0x3c0
  137. #define EMC_DLI_TRIM_TXDQS7 0x3c4
  138. #define EMC_STALL_THEN_EXE_BEFORE_CLKCHANGE 0x3c8
  139. #define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE 0x3cc
  140. #define EMC_UNSTALL_RW_AFTER_CLKCHANGE 0x3d0
  141. #define EMC_SEL_DPD_CTRL 0x3d8
  142. #define EMC_PRE_REFRESH_REQ_CNT 0x3dc
  143. #define EMC_DYN_SELF_REF_CONTROL 0x3e0
  144. #define EMC_TXSRDLL 0x3e4
  145. #define EMC_STATUS_TIMING_UPDATE_STALLED BIT(23)
  146. #define EMC_MODE_SET_DLL_RESET BIT(8)
  147. #define EMC_MODE_SET_LONG_CNT BIT(26)
  148. #define EMC_SELF_REF_CMD_ENABLED BIT(0)
  149. #define DRAM_DEV_SEL_ALL (0 << 30)
  150. #define DRAM_DEV_SEL_0 BIT(31)
  151. #define DRAM_DEV_SEL_1 BIT(30)
  152. #define DRAM_BROADCAST(num) \
  153. ((num) > 1 ? DRAM_DEV_SEL_ALL : DRAM_DEV_SEL_0)
  154. #define EMC_ZQ_CAL_CMD BIT(0)
  155. #define EMC_ZQ_CAL_LONG BIT(4)
  156. #define EMC_ZQ_CAL_LONG_CMD_DEV0 \
  157. (DRAM_DEV_SEL_0 | EMC_ZQ_CAL_LONG | EMC_ZQ_CAL_CMD)
  158. #define EMC_ZQ_CAL_LONG_CMD_DEV1 \
  159. (DRAM_DEV_SEL_1 | EMC_ZQ_CAL_LONG | EMC_ZQ_CAL_CMD)
  160. #define EMC_DBG_READ_MUX_ASSEMBLY BIT(0)
  161. #define EMC_DBG_WRITE_MUX_ACTIVE BIT(1)
  162. #define EMC_DBG_FORCE_UPDATE BIT(2)
  163. #define EMC_DBG_CFG_PRIORITY BIT(24)
  164. #define EMC_CFG5_QUSE_MODE_SHIFT 13
  165. #define EMC_CFG5_QUSE_MODE_MASK (7 << EMC_CFG5_QUSE_MODE_SHIFT)
  166. #define EMC_CFG5_QUSE_MODE_INTERNAL_LPBK 2
  167. #define EMC_CFG5_QUSE_MODE_PULSE_INTERN 3
  168. #define EMC_SEL_DPD_CTRL_QUSE_DPD_ENABLE BIT(9)
  169. #define EMC_XM2COMPPADCTRL_VREF_CAL_ENABLE BIT(10)
  170. #define EMC_XM2QUSEPADCTRL_IVREF_ENABLE BIT(4)
  171. #define EMC_XM2DQSPADCTRL2_VREF_ENABLE BIT(5)
  172. #define EMC_XM2DQSPADCTRL3_VREF_ENABLE BIT(5)
  173. #define EMC_AUTO_CAL_STATUS_ACTIVE BIT(31)
  174. #define EMC_FBIO_CFG5_DRAM_TYPE_MASK 0x3
  175. #define EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK 0x3ff
  176. #define EMC_MRS_WAIT_CNT_LONG_WAIT_SHIFT 16
  177. #define EMC_MRS_WAIT_CNT_LONG_WAIT_MASK \
  178. (0x3ff << EMC_MRS_WAIT_CNT_LONG_WAIT_SHIFT)
  179. #define EMC_REFCTRL_DEV_SEL_MASK 0x3
  180. #define EMC_REFCTRL_ENABLE BIT(31)
  181. #define EMC_REFCTRL_ENABLE_ALL(num) \
  182. (((num) > 1 ? 0 : 2) | EMC_REFCTRL_ENABLE)
  183. #define EMC_REFCTRL_DISABLE_ALL(num) ((num) > 1 ? 0 : 2)
  184. #define EMC_CFG_PERIODIC_QRST BIT(21)
  185. #define EMC_CFG_DYN_SREF_ENABLE BIT(28)
  186. #define EMC_CLKCHANGE_REQ_ENABLE BIT(0)
  187. #define EMC_CLKCHANGE_PD_ENABLE BIT(1)
  188. #define EMC_CLKCHANGE_SR_ENABLE BIT(2)
  189. #define EMC_TIMING_UPDATE BIT(0)
  190. #define EMC_REFRESH_OVERFLOW_INT BIT(3)
  191. #define EMC_CLKCHANGE_COMPLETE_INT BIT(4)
  192. #define EMC_MRR_DIVLD_INT BIT(5)
  193. #define EMC_MRR_DEV_SELECTN GENMASK(31, 30)
  194. #define EMC_MRR_MRR_MA GENMASK(23, 16)
  195. #define EMC_MRR_MRR_DATA GENMASK(15, 0)
  196. #define EMC_ADR_CFG_EMEM_NUMDEV BIT(0)
  197. enum emc_dram_type {
  198. DRAM_TYPE_DDR3,
  199. DRAM_TYPE_DDR1,
  200. DRAM_TYPE_LPDDR2,
  201. DRAM_TYPE_DDR2,
  202. };
  203. enum emc_dll_change {
  204. DLL_CHANGE_NONE,
  205. DLL_CHANGE_ON,
  206. DLL_CHANGE_OFF
  207. };
  208. static const u16 emc_timing_registers[] = {
  209. [0] = EMC_RC,
  210. [1] = EMC_RFC,
  211. [2] = EMC_RAS,
  212. [3] = EMC_RP,
  213. [4] = EMC_R2W,
  214. [5] = EMC_W2R,
  215. [6] = EMC_R2P,
  216. [7] = EMC_W2P,
  217. [8] = EMC_RD_RCD,
  218. [9] = EMC_WR_RCD,
  219. [10] = EMC_RRD,
  220. [11] = EMC_REXT,
  221. [12] = EMC_WEXT,
  222. [13] = EMC_WDV,
  223. [14] = EMC_QUSE,
  224. [15] = EMC_QRST,
  225. [16] = EMC_QSAFE,
  226. [17] = EMC_RDV,
  227. [18] = EMC_REFRESH,
  228. [19] = EMC_BURST_REFRESH_NUM,
  229. [20] = EMC_PRE_REFRESH_REQ_CNT,
  230. [21] = EMC_PDEX2WR,
  231. [22] = EMC_PDEX2RD,
  232. [23] = EMC_PCHG2PDEN,
  233. [24] = EMC_ACT2PDEN,
  234. [25] = EMC_AR2PDEN,
  235. [26] = EMC_RW2PDEN,
  236. [27] = EMC_TXSR,
  237. [28] = EMC_TXSRDLL,
  238. [29] = EMC_TCKE,
  239. [30] = EMC_TFAW,
  240. [31] = EMC_TRPAB,
  241. [32] = EMC_TCLKSTABLE,
  242. [33] = EMC_TCLKSTOP,
  243. [34] = EMC_TREFBW,
  244. [35] = EMC_QUSE_EXTRA,
  245. [36] = EMC_FBIO_CFG6,
  246. [37] = EMC_ODT_WRITE,
  247. [38] = EMC_ODT_READ,
  248. [39] = EMC_FBIO_CFG5,
  249. [40] = EMC_CFG_DIG_DLL,
  250. [41] = EMC_CFG_DIG_DLL_PERIOD,
  251. [42] = EMC_DLL_XFORM_DQS0,
  252. [43] = EMC_DLL_XFORM_DQS1,
  253. [44] = EMC_DLL_XFORM_DQS2,
  254. [45] = EMC_DLL_XFORM_DQS3,
  255. [46] = EMC_DLL_XFORM_DQS4,
  256. [47] = EMC_DLL_XFORM_DQS5,
  257. [48] = EMC_DLL_XFORM_DQS6,
  258. [49] = EMC_DLL_XFORM_DQS7,
  259. [50] = EMC_DLL_XFORM_QUSE0,
  260. [51] = EMC_DLL_XFORM_QUSE1,
  261. [52] = EMC_DLL_XFORM_QUSE2,
  262. [53] = EMC_DLL_XFORM_QUSE3,
  263. [54] = EMC_DLL_XFORM_QUSE4,
  264. [55] = EMC_DLL_XFORM_QUSE5,
  265. [56] = EMC_DLL_XFORM_QUSE6,
  266. [57] = EMC_DLL_XFORM_QUSE7,
  267. [58] = EMC_DLI_TRIM_TXDQS0,
  268. [59] = EMC_DLI_TRIM_TXDQS1,
  269. [60] = EMC_DLI_TRIM_TXDQS2,
  270. [61] = EMC_DLI_TRIM_TXDQS3,
  271. [62] = EMC_DLI_TRIM_TXDQS4,
  272. [63] = EMC_DLI_TRIM_TXDQS5,
  273. [64] = EMC_DLI_TRIM_TXDQS6,
  274. [65] = EMC_DLI_TRIM_TXDQS7,
  275. [66] = EMC_DLL_XFORM_DQ0,
  276. [67] = EMC_DLL_XFORM_DQ1,
  277. [68] = EMC_DLL_XFORM_DQ2,
  278. [69] = EMC_DLL_XFORM_DQ3,
  279. [70] = EMC_XM2CMDPADCTRL,
  280. [71] = EMC_XM2DQSPADCTRL2,
  281. [72] = EMC_XM2DQPADCTRL2,
  282. [73] = EMC_XM2CLKPADCTRL,
  283. [74] = EMC_XM2COMPPADCTRL,
  284. [75] = EMC_XM2VTTGENPADCTRL,
  285. [76] = EMC_XM2VTTGENPADCTRL2,
  286. [77] = EMC_XM2QUSEPADCTRL,
  287. [78] = EMC_XM2DQSPADCTRL3,
  288. [79] = EMC_CTT_TERM_CTRL,
  289. [80] = EMC_ZCAL_INTERVAL,
  290. [81] = EMC_ZCAL_WAIT_CNT,
  291. [82] = EMC_MRS_WAIT_CNT,
  292. [83] = EMC_AUTO_CAL_CONFIG,
  293. [84] = EMC_CTT,
  294. [85] = EMC_CTT_DURATION,
  295. [86] = EMC_DYN_SELF_REF_CONTROL,
  296. [87] = EMC_FBIO_SPARE,
  297. [88] = EMC_CFG_RSV,
  298. };
  299. struct emc_timing {
  300. unsigned long rate;
  301. u32 data[ARRAY_SIZE(emc_timing_registers)];
  302. u32 emc_auto_cal_interval;
  303. u32 emc_mode_1;
  304. u32 emc_mode_2;
  305. u32 emc_mode_reset;
  306. u32 emc_zcal_cnt_long;
  307. bool emc_cfg_periodic_qrst;
  308. bool emc_cfg_dyn_self_ref;
  309. };
  310. enum emc_rate_request_type {
  311. EMC_RATE_DEBUG,
  312. EMC_RATE_ICC,
  313. EMC_RATE_TYPE_MAX,
  314. };
  315. struct emc_rate_request {
  316. unsigned long min_rate;
  317. unsigned long max_rate;
  318. };
  319. struct tegra_emc {
  320. struct device *dev;
  321. struct tegra_mc *mc;
  322. struct icc_provider provider;
  323. struct notifier_block clk_nb;
  324. struct clk *clk;
  325. void __iomem *regs;
  326. unsigned int irq;
  327. bool bad_state;
  328. struct emc_timing *new_timing;
  329. struct emc_timing *timings;
  330. unsigned int num_timings;
  331. u32 mc_override;
  332. u32 emc_cfg;
  333. u32 emc_mode_1;
  334. u32 emc_mode_2;
  335. u32 emc_mode_reset;
  336. bool vref_cal_toggle : 1;
  337. bool zcal_long : 1;
  338. bool dll_on : 1;
  339. struct {
  340. struct dentry *root;
  341. unsigned long min_rate;
  342. unsigned long max_rate;
  343. } debugfs;
  344. /*
  345. * There are multiple sources in the EMC driver which could request
  346. * a min/max clock rate, these rates are contained in this array.
  347. */
  348. struct emc_rate_request requested_rate[EMC_RATE_TYPE_MAX];
  349. /* protect shared rate-change code path */
  350. struct mutex rate_lock;
  351. bool mrr_error;
  352. };
  353. static int emc_seq_update_timing(struct tegra_emc *emc)
  354. {
  355. u32 val;
  356. int err;
  357. writel_relaxed(EMC_TIMING_UPDATE, emc->regs + EMC_TIMING_CONTROL);
  358. err = readl_relaxed_poll_timeout_atomic(emc->regs + EMC_STATUS, val,
  359. !(val & EMC_STATUS_TIMING_UPDATE_STALLED),
  360. 1, 200);
  361. if (err) {
  362. dev_err(emc->dev, "failed to update timing: %d\n", err);
  363. return err;
  364. }
  365. return 0;
  366. }
  367. static irqreturn_t tegra_emc_isr(int irq, void *data)
  368. {
  369. struct tegra_emc *emc = data;
  370. u32 intmask = EMC_REFRESH_OVERFLOW_INT;
  371. u32 status;
  372. status = readl_relaxed(emc->regs + EMC_INTSTATUS) & intmask;
  373. if (!status)
  374. return IRQ_NONE;
  375. /* notify about HW problem */
  376. if (status & EMC_REFRESH_OVERFLOW_INT)
  377. dev_err_ratelimited(emc->dev,
  378. "refresh request overflow timeout\n");
  379. /* clear interrupts */
  380. writel_relaxed(status, emc->regs + EMC_INTSTATUS);
  381. return IRQ_HANDLED;
  382. }
  383. static struct emc_timing *emc_find_timing(struct tegra_emc *emc,
  384. unsigned long rate)
  385. {
  386. struct emc_timing *timing = NULL;
  387. unsigned int i;
  388. for (i = 0; i < emc->num_timings; i++) {
  389. if (emc->timings[i].rate >= rate) {
  390. timing = &emc->timings[i];
  391. break;
  392. }
  393. }
  394. if (!timing) {
  395. dev_err(emc->dev, "no timing for rate %lu\n", rate);
  396. return NULL;
  397. }
  398. return timing;
  399. }
  400. static bool emc_dqs_preset(struct tegra_emc *emc, struct emc_timing *timing,
  401. bool *schmitt_to_vref)
  402. {
  403. bool preset = false;
  404. u32 val;
  405. if (timing->data[71] & EMC_XM2DQSPADCTRL2_VREF_ENABLE) {
  406. val = readl_relaxed(emc->regs + EMC_XM2DQSPADCTRL2);
  407. if (!(val & EMC_XM2DQSPADCTRL2_VREF_ENABLE)) {
  408. val |= EMC_XM2DQSPADCTRL2_VREF_ENABLE;
  409. writel_relaxed(val, emc->regs + EMC_XM2DQSPADCTRL2);
  410. preset = true;
  411. }
  412. }
  413. if (timing->data[78] & EMC_XM2DQSPADCTRL3_VREF_ENABLE) {
  414. val = readl_relaxed(emc->regs + EMC_XM2DQSPADCTRL3);
  415. if (!(val & EMC_XM2DQSPADCTRL3_VREF_ENABLE)) {
  416. val |= EMC_XM2DQSPADCTRL3_VREF_ENABLE;
  417. writel_relaxed(val, emc->regs + EMC_XM2DQSPADCTRL3);
  418. preset = true;
  419. }
  420. }
  421. if (timing->data[77] & EMC_XM2QUSEPADCTRL_IVREF_ENABLE) {
  422. val = readl_relaxed(emc->regs + EMC_XM2QUSEPADCTRL);
  423. if (!(val & EMC_XM2QUSEPADCTRL_IVREF_ENABLE)) {
  424. val |= EMC_XM2QUSEPADCTRL_IVREF_ENABLE;
  425. writel_relaxed(val, emc->regs + EMC_XM2QUSEPADCTRL);
  426. *schmitt_to_vref = true;
  427. preset = true;
  428. }
  429. }
  430. return preset;
  431. }
  432. static int emc_prepare_mc_clk_cfg(struct tegra_emc *emc, unsigned long rate)
  433. {
  434. struct tegra_mc *mc = emc->mc;
  435. unsigned int misc0_index = 16;
  436. unsigned int i;
  437. bool same;
  438. for (i = 0; i < mc->num_timings; i++) {
  439. if (mc->timings[i].rate != rate)
  440. continue;
  441. if (mc->timings[i].emem_data[misc0_index] & BIT(27))
  442. same = true;
  443. else
  444. same = false;
  445. return tegra20_clk_prepare_emc_mc_same_freq(emc->clk, same);
  446. }
  447. return -EINVAL;
  448. }
  449. static int emc_prepare_timing_change(struct tegra_emc *emc, unsigned long rate)
  450. {
  451. struct emc_timing *timing = emc_find_timing(emc, rate);
  452. enum emc_dll_change dll_change;
  453. enum emc_dram_type dram_type;
  454. bool schmitt_to_vref = false;
  455. unsigned int pre_wait = 0;
  456. bool qrst_used = false;
  457. unsigned int dram_num;
  458. unsigned int i;
  459. u32 fbio_cfg5;
  460. u32 emc_dbg;
  461. u32 val;
  462. int err;
  463. if (!timing || emc->bad_state)
  464. return -EINVAL;
  465. dev_dbg(emc->dev, "%s: using timing rate %lu for requested rate %lu\n",
  466. __func__, timing->rate, rate);
  467. emc->bad_state = true;
  468. err = emc_prepare_mc_clk_cfg(emc, rate);
  469. if (err) {
  470. dev_err(emc->dev, "mc clock preparation failed: %d\n", err);
  471. return err;
  472. }
  473. emc->vref_cal_toggle = false;
  474. emc->mc_override = mc_readl(emc->mc, MC_EMEM_ARB_OVERRIDE);
  475. emc->emc_cfg = readl_relaxed(emc->regs + EMC_CFG);
  476. emc_dbg = readl_relaxed(emc->regs + EMC_DBG);
  477. if (emc->dll_on == !!(timing->emc_mode_1 & 0x1))
  478. dll_change = DLL_CHANGE_NONE;
  479. else if (timing->emc_mode_1 & 0x1)
  480. dll_change = DLL_CHANGE_ON;
  481. else
  482. dll_change = DLL_CHANGE_OFF;
  483. emc->dll_on = !!(timing->emc_mode_1 & 0x1);
  484. if (timing->data[80] && !readl_relaxed(emc->regs + EMC_ZCAL_INTERVAL))
  485. emc->zcal_long = true;
  486. else
  487. emc->zcal_long = false;
  488. fbio_cfg5 = readl_relaxed(emc->regs + EMC_FBIO_CFG5);
  489. dram_type = fbio_cfg5 & EMC_FBIO_CFG5_DRAM_TYPE_MASK;
  490. dram_num = tegra_mc_get_emem_device_count(emc->mc);
  491. /* disable dynamic self-refresh */
  492. if (emc->emc_cfg & EMC_CFG_DYN_SREF_ENABLE) {
  493. emc->emc_cfg &= ~EMC_CFG_DYN_SREF_ENABLE;
  494. writel_relaxed(emc->emc_cfg, emc->regs + EMC_CFG);
  495. pre_wait = 5;
  496. }
  497. /* update MC arbiter settings */
  498. val = mc_readl(emc->mc, MC_EMEM_ARB_OUTSTANDING_REQ);
  499. if (!(val & MC_EMEM_ARB_OUTSTANDING_REQ_HOLDOFF_OVERRIDE) ||
  500. ((val & MC_EMEM_ARB_OUTSTANDING_REQ_MAX_MASK) > 0x50)) {
  501. val = MC_EMEM_ARB_OUTSTANDING_REQ_LIMIT_ENABLE |
  502. MC_EMEM_ARB_OUTSTANDING_REQ_HOLDOFF_OVERRIDE | 0x50;
  503. mc_writel(emc->mc, val, MC_EMEM_ARB_OUTSTANDING_REQ);
  504. mc_writel(emc->mc, MC_TIMING_UPDATE, MC_TIMING_CONTROL);
  505. }
  506. if (emc->mc_override & MC_EMEM_ARB_OVERRIDE_EACK_MASK)
  507. mc_writel(emc->mc,
  508. emc->mc_override & ~MC_EMEM_ARB_OVERRIDE_EACK_MASK,
  509. MC_EMEM_ARB_OVERRIDE);
  510. /* check DQ/DQS VREF delay */
  511. if (emc_dqs_preset(emc, timing, &schmitt_to_vref)) {
  512. if (pre_wait < 3)
  513. pre_wait = 3;
  514. }
  515. if (pre_wait) {
  516. err = emc_seq_update_timing(emc);
  517. if (err)
  518. return err;
  519. udelay(pre_wait);
  520. }
  521. /* disable auto-calibration if VREF mode is switching */
  522. if (timing->emc_auto_cal_interval) {
  523. val = readl_relaxed(emc->regs + EMC_XM2COMPPADCTRL);
  524. val ^= timing->data[74];
  525. if (val & EMC_XM2COMPPADCTRL_VREF_CAL_ENABLE) {
  526. writel_relaxed(0, emc->regs + EMC_AUTO_CAL_INTERVAL);
  527. err = readl_relaxed_poll_timeout_atomic(
  528. emc->regs + EMC_AUTO_CAL_STATUS, val,
  529. !(val & EMC_AUTO_CAL_STATUS_ACTIVE), 1, 300);
  530. if (err) {
  531. dev_err(emc->dev,
  532. "auto-cal finish timeout: %d\n", err);
  533. return err;
  534. }
  535. emc->vref_cal_toggle = true;
  536. }
  537. }
  538. /* program shadow registers */
  539. for (i = 0; i < ARRAY_SIZE(timing->data); i++) {
  540. /* EMC_XM2CLKPADCTRL should be programmed separately */
  541. if (i != 73)
  542. writel_relaxed(timing->data[i],
  543. emc->regs + emc_timing_registers[i]);
  544. }
  545. err = tegra_mc_write_emem_configuration(emc->mc, timing->rate);
  546. if (err)
  547. return err;
  548. /* DDR3: predict MRS long wait count */
  549. if (dram_type == DRAM_TYPE_DDR3 && dll_change == DLL_CHANGE_ON) {
  550. u32 cnt = 512;
  551. if (emc->zcal_long)
  552. cnt -= dram_num * 256;
  553. val = timing->data[82] & EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK;
  554. if (cnt < val)
  555. cnt = val;
  556. val = timing->data[82] & ~EMC_MRS_WAIT_CNT_LONG_WAIT_MASK;
  557. val |= (cnt << EMC_MRS_WAIT_CNT_LONG_WAIT_SHIFT) &
  558. EMC_MRS_WAIT_CNT_LONG_WAIT_MASK;
  559. writel_relaxed(val, emc->regs + EMC_MRS_WAIT_CNT);
  560. }
  561. /* this read also completes the writes */
  562. val = readl_relaxed(emc->regs + EMC_SEL_DPD_CTRL);
  563. if (!(val & EMC_SEL_DPD_CTRL_QUSE_DPD_ENABLE) && schmitt_to_vref) {
  564. u32 cur_mode, new_mode;
  565. cur_mode = fbio_cfg5 & EMC_CFG5_QUSE_MODE_MASK;
  566. cur_mode >>= EMC_CFG5_QUSE_MODE_SHIFT;
  567. new_mode = timing->data[39] & EMC_CFG5_QUSE_MODE_MASK;
  568. new_mode >>= EMC_CFG5_QUSE_MODE_SHIFT;
  569. if ((cur_mode != EMC_CFG5_QUSE_MODE_PULSE_INTERN &&
  570. cur_mode != EMC_CFG5_QUSE_MODE_INTERNAL_LPBK) ||
  571. (new_mode != EMC_CFG5_QUSE_MODE_PULSE_INTERN &&
  572. new_mode != EMC_CFG5_QUSE_MODE_INTERNAL_LPBK))
  573. qrst_used = true;
  574. }
  575. /* flow control marker 1 */
  576. writel_relaxed(0x1, emc->regs + EMC_STALL_THEN_EXE_BEFORE_CLKCHANGE);
  577. /* enable periodic reset */
  578. if (qrst_used) {
  579. writel_relaxed(emc_dbg | EMC_DBG_WRITE_MUX_ACTIVE,
  580. emc->regs + EMC_DBG);
  581. writel_relaxed(emc->emc_cfg | EMC_CFG_PERIODIC_QRST,
  582. emc->regs + EMC_CFG);
  583. writel_relaxed(emc_dbg, emc->regs + EMC_DBG);
  584. }
  585. /* disable auto-refresh to save time after clock change */
  586. writel_relaxed(EMC_REFCTRL_DISABLE_ALL(dram_num),
  587. emc->regs + EMC_REFCTRL);
  588. /* turn off DLL and enter self-refresh on DDR3 */
  589. if (dram_type == DRAM_TYPE_DDR3) {
  590. if (dll_change == DLL_CHANGE_OFF)
  591. writel_relaxed(timing->emc_mode_1,
  592. emc->regs + EMC_EMRS);
  593. writel_relaxed(DRAM_BROADCAST(dram_num) |
  594. EMC_SELF_REF_CMD_ENABLED,
  595. emc->regs + EMC_SELF_REF);
  596. }
  597. /* flow control marker 2 */
  598. writel_relaxed(0x1, emc->regs + EMC_STALL_THEN_EXE_AFTER_CLKCHANGE);
  599. /* enable write-active MUX, update unshadowed pad control */
  600. writel_relaxed(emc_dbg | EMC_DBG_WRITE_MUX_ACTIVE, emc->regs + EMC_DBG);
  601. writel_relaxed(timing->data[73], emc->regs + EMC_XM2CLKPADCTRL);
  602. /* restore periodic QRST and disable write-active MUX */
  603. val = !!(emc->emc_cfg & EMC_CFG_PERIODIC_QRST);
  604. if (qrst_used || timing->emc_cfg_periodic_qrst != val) {
  605. if (timing->emc_cfg_periodic_qrst)
  606. emc->emc_cfg |= EMC_CFG_PERIODIC_QRST;
  607. else
  608. emc->emc_cfg &= ~EMC_CFG_PERIODIC_QRST;
  609. writel_relaxed(emc->emc_cfg, emc->regs + EMC_CFG);
  610. }
  611. writel_relaxed(emc_dbg, emc->regs + EMC_DBG);
  612. /* exit self-refresh on DDR3 */
  613. if (dram_type == DRAM_TYPE_DDR3)
  614. writel_relaxed(DRAM_BROADCAST(dram_num),
  615. emc->regs + EMC_SELF_REF);
  616. /* set DRAM-mode registers */
  617. if (dram_type == DRAM_TYPE_DDR3) {
  618. if (timing->emc_mode_1 != emc->emc_mode_1)
  619. writel_relaxed(timing->emc_mode_1,
  620. emc->regs + EMC_EMRS);
  621. if (timing->emc_mode_2 != emc->emc_mode_2)
  622. writel_relaxed(timing->emc_mode_2,
  623. emc->regs + EMC_EMRS);
  624. if (timing->emc_mode_reset != emc->emc_mode_reset ||
  625. dll_change == DLL_CHANGE_ON) {
  626. val = timing->emc_mode_reset;
  627. if (dll_change == DLL_CHANGE_ON) {
  628. val |= EMC_MODE_SET_DLL_RESET;
  629. val |= EMC_MODE_SET_LONG_CNT;
  630. } else {
  631. val &= ~EMC_MODE_SET_DLL_RESET;
  632. }
  633. writel_relaxed(val, emc->regs + EMC_MRS);
  634. }
  635. } else {
  636. if (timing->emc_mode_2 != emc->emc_mode_2)
  637. writel_relaxed(timing->emc_mode_2,
  638. emc->regs + EMC_MRW);
  639. if (timing->emc_mode_1 != emc->emc_mode_1)
  640. writel_relaxed(timing->emc_mode_1,
  641. emc->regs + EMC_MRW);
  642. }
  643. emc->emc_mode_1 = timing->emc_mode_1;
  644. emc->emc_mode_2 = timing->emc_mode_2;
  645. emc->emc_mode_reset = timing->emc_mode_reset;
  646. /* issue ZCAL command if turning ZCAL on */
  647. if (emc->zcal_long) {
  648. writel_relaxed(EMC_ZQ_CAL_LONG_CMD_DEV0,
  649. emc->regs + EMC_ZQ_CAL);
  650. if (dram_num > 1)
  651. writel_relaxed(EMC_ZQ_CAL_LONG_CMD_DEV1,
  652. emc->regs + EMC_ZQ_CAL);
  653. }
  654. /* flow control marker 3 */
  655. writel_relaxed(0x1, emc->regs + EMC_UNSTALL_RW_AFTER_CLKCHANGE);
  656. /*
  657. * Read and discard an arbitrary MC register (Note: EMC registers
  658. * can't be used) to ensure the register writes are completed.
  659. */
  660. mc_readl(emc->mc, MC_EMEM_ARB_OVERRIDE);
  661. return 0;
  662. }
  663. static int emc_complete_timing_change(struct tegra_emc *emc,
  664. unsigned long rate)
  665. {
  666. struct emc_timing *timing = emc_find_timing(emc, rate);
  667. unsigned int dram_num;
  668. int err;
  669. u32 v;
  670. err = readl_relaxed_poll_timeout_atomic(emc->regs + EMC_INTSTATUS, v,
  671. v & EMC_CLKCHANGE_COMPLETE_INT,
  672. 1, 100);
  673. if (err) {
  674. dev_err(emc->dev, "emc-car handshake timeout: %d\n", err);
  675. return err;
  676. }
  677. /* re-enable auto-refresh */
  678. dram_num = tegra_mc_get_emem_device_count(emc->mc);
  679. writel_relaxed(EMC_REFCTRL_ENABLE_ALL(dram_num),
  680. emc->regs + EMC_REFCTRL);
  681. /* restore auto-calibration */
  682. if (emc->vref_cal_toggle)
  683. writel_relaxed(timing->emc_auto_cal_interval,
  684. emc->regs + EMC_AUTO_CAL_INTERVAL);
  685. /* restore dynamic self-refresh */
  686. if (timing->emc_cfg_dyn_self_ref) {
  687. emc->emc_cfg |= EMC_CFG_DYN_SREF_ENABLE;
  688. writel_relaxed(emc->emc_cfg, emc->regs + EMC_CFG);
  689. }
  690. /* set number of clocks to wait after each ZQ command */
  691. if (emc->zcal_long)
  692. writel_relaxed(timing->emc_zcal_cnt_long,
  693. emc->regs + EMC_ZCAL_WAIT_CNT);
  694. /* wait for writes to settle */
  695. udelay(2);
  696. /* update restored timing */
  697. err = emc_seq_update_timing(emc);
  698. if (!err)
  699. emc->bad_state = false;
  700. /* restore early ACK */
  701. mc_writel(emc->mc, emc->mc_override, MC_EMEM_ARB_OVERRIDE);
  702. return err;
  703. }
  704. static int emc_unprepare_timing_change(struct tegra_emc *emc,
  705. unsigned long rate)
  706. {
  707. if (!emc->bad_state) {
  708. /* shouldn't ever happen in practice */
  709. dev_err(emc->dev, "timing configuration can't be reverted\n");
  710. emc->bad_state = true;
  711. }
  712. return 0;
  713. }
  714. static int emc_clk_change_notify(struct notifier_block *nb,
  715. unsigned long msg, void *data)
  716. {
  717. struct tegra_emc *emc = container_of(nb, struct tegra_emc, clk_nb);
  718. struct clk_notifier_data *cnd = data;
  719. int err;
  720. switch (msg) {
  721. case PRE_RATE_CHANGE:
  722. /*
  723. * Disable interrupt since read accesses are prohibited after
  724. * stalling.
  725. */
  726. disable_irq(emc->irq);
  727. err = emc_prepare_timing_change(emc, cnd->new_rate);
  728. enable_irq(emc->irq);
  729. break;
  730. case ABORT_RATE_CHANGE:
  731. err = emc_unprepare_timing_change(emc, cnd->old_rate);
  732. break;
  733. case POST_RATE_CHANGE:
  734. err = emc_complete_timing_change(emc, cnd->new_rate);
  735. break;
  736. default:
  737. return NOTIFY_DONE;
  738. }
  739. return notifier_from_errno(err);
  740. }
  741. static int load_one_timing_from_dt(struct tegra_emc *emc,
  742. struct emc_timing *timing,
  743. struct device_node *node)
  744. {
  745. u32 value;
  746. int err;
  747. err = of_property_read_u32(node, "clock-frequency", &value);
  748. if (err) {
  749. dev_err(emc->dev, "timing %pOF: failed to read rate: %d\n",
  750. node, err);
  751. return err;
  752. }
  753. timing->rate = value;
  754. err = of_property_read_u32_array(node, "nvidia,emc-configuration",
  755. timing->data,
  756. ARRAY_SIZE(emc_timing_registers));
  757. if (err) {
  758. dev_err(emc->dev,
  759. "timing %pOF: failed to read emc timing data: %d\n",
  760. node, err);
  761. return err;
  762. }
  763. #define EMC_READ_BOOL(prop, dtprop) \
  764. timing->prop = of_property_read_bool(node, dtprop);
  765. #define EMC_READ_U32(prop, dtprop) \
  766. err = of_property_read_u32(node, dtprop, &timing->prop); \
  767. if (err) { \
  768. dev_err(emc->dev, \
  769. "timing %pOFn: failed to read " #prop ": %d\n", \
  770. node, err); \
  771. return err; \
  772. }
  773. EMC_READ_U32(emc_auto_cal_interval, "nvidia,emc-auto-cal-interval")
  774. EMC_READ_U32(emc_mode_1, "nvidia,emc-mode-1")
  775. EMC_READ_U32(emc_mode_2, "nvidia,emc-mode-2")
  776. EMC_READ_U32(emc_mode_reset, "nvidia,emc-mode-reset")
  777. EMC_READ_U32(emc_zcal_cnt_long, "nvidia,emc-zcal-cnt-long")
  778. EMC_READ_BOOL(emc_cfg_dyn_self_ref, "nvidia,emc-cfg-dyn-self-ref")
  779. EMC_READ_BOOL(emc_cfg_periodic_qrst, "nvidia,emc-cfg-periodic-qrst")
  780. #undef EMC_READ_U32
  781. #undef EMC_READ_BOOL
  782. dev_dbg(emc->dev, "%s: %pOF: rate %lu\n", __func__, node, timing->rate);
  783. return 0;
  784. }
  785. static int cmp_timings(const void *_a, const void *_b)
  786. {
  787. const struct emc_timing *a = _a;
  788. const struct emc_timing *b = _b;
  789. if (a->rate < b->rate)
  790. return -1;
  791. if (a->rate > b->rate)
  792. return 1;
  793. return 0;
  794. }
  795. static int emc_check_mc_timings(struct tegra_emc *emc)
  796. {
  797. struct tegra_mc *mc = emc->mc;
  798. unsigned int i;
  799. if (emc->num_timings != mc->num_timings) {
  800. dev_err(emc->dev, "emc/mc timings number mismatch: %u %u\n",
  801. emc->num_timings, mc->num_timings);
  802. return -EINVAL;
  803. }
  804. for (i = 0; i < mc->num_timings; i++) {
  805. if (emc->timings[i].rate != mc->timings[i].rate) {
  806. dev_err(emc->dev,
  807. "emc/mc timing rate mismatch: %lu %lu\n",
  808. emc->timings[i].rate, mc->timings[i].rate);
  809. return -EINVAL;
  810. }
  811. }
  812. return 0;
  813. }
  814. static int emc_load_timings_from_dt(struct tegra_emc *emc,
  815. struct device_node *node)
  816. {
  817. struct emc_timing *timing;
  818. int child_count;
  819. int err;
  820. child_count = of_get_child_count(node);
  821. if (!child_count) {
  822. dev_err(emc->dev, "no memory timings in: %pOF\n", node);
  823. return -EINVAL;
  824. }
  825. emc->timings = devm_kcalloc(emc->dev, child_count, sizeof(*timing),
  826. GFP_KERNEL);
  827. if (!emc->timings)
  828. return -ENOMEM;
  829. emc->num_timings = child_count;
  830. timing = emc->timings;
  831. for_each_child_of_node_scoped(node, child) {
  832. err = load_one_timing_from_dt(emc, timing++, child);
  833. if (err)
  834. return err;
  835. }
  836. sort(emc->timings, emc->num_timings, sizeof(*timing), cmp_timings,
  837. NULL);
  838. err = emc_check_mc_timings(emc);
  839. if (err)
  840. return err;
  841. dev_info_once(emc->dev,
  842. "got %u timings for RAM code %u (min %luMHz max %luMHz)\n",
  843. emc->num_timings,
  844. tegra_read_ram_code(),
  845. emc->timings[0].rate / 1000000,
  846. emc->timings[emc->num_timings - 1].rate / 1000000);
  847. return 0;
  848. }
  849. static struct device_node *emc_find_node_by_ram_code(struct tegra_emc *emc)
  850. {
  851. struct device *dev = emc->dev;
  852. struct device_node *np;
  853. u32 value, ram_code;
  854. int err;
  855. if (emc->mrr_error) {
  856. dev_warn(dev, "memory timings skipped due to MRR error\n");
  857. return NULL;
  858. }
  859. if (of_get_child_count(dev->of_node) == 0) {
  860. dev_info_once(dev, "device-tree doesn't have memory timings\n");
  861. return NULL;
  862. }
  863. ram_code = tegra_read_ram_code();
  864. for_each_child_of_node(dev->of_node, np) {
  865. err = of_property_read_u32(np, "nvidia,ram-code", &value);
  866. if (err || value != ram_code)
  867. continue;
  868. return np;
  869. }
  870. dev_err(dev, "no memory timings for RAM code %u found in device-tree\n",
  871. ram_code);
  872. return NULL;
  873. }
  874. static int emc_read_lpddr_mode_register(struct tegra_emc *emc,
  875. unsigned int emem_dev,
  876. unsigned int register_addr,
  877. unsigned int *register_data)
  878. {
  879. u32 memory_dev = emem_dev ? 1 : 2;
  880. u32 val, mr_mask = 0xff;
  881. int err;
  882. /* clear data-valid interrupt status */
  883. writel_relaxed(EMC_MRR_DIVLD_INT, emc->regs + EMC_INTSTATUS);
  884. /* issue mode register read request */
  885. val = FIELD_PREP(EMC_MRR_DEV_SELECTN, memory_dev);
  886. val |= FIELD_PREP(EMC_MRR_MRR_MA, register_addr);
  887. writel_relaxed(val, emc->regs + EMC_MRR);
  888. /* wait for the LPDDR2 data-valid interrupt */
  889. err = readl_relaxed_poll_timeout_atomic(emc->regs + EMC_INTSTATUS, val,
  890. val & EMC_MRR_DIVLD_INT,
  891. 1, 100);
  892. if (err) {
  893. dev_err(emc->dev, "mode register %u read failed: %d\n",
  894. register_addr, err);
  895. emc->mrr_error = true;
  896. return err;
  897. }
  898. /* read out mode register data */
  899. val = readl_relaxed(emc->regs + EMC_MRR);
  900. *register_data = FIELD_GET(EMC_MRR_MRR_DATA, val) & mr_mask;
  901. return 0;
  902. }
  903. static void emc_read_lpddr_sdram_info(struct tegra_emc *emc,
  904. unsigned int emem_dev)
  905. {
  906. union lpddr2_basic_config4 basic_conf4;
  907. unsigned int manufacturer_id;
  908. unsigned int revision_id1;
  909. unsigned int revision_id2;
  910. /* these registers are standard for all LPDDR JEDEC memory chips */
  911. emc_read_lpddr_mode_register(emc, emem_dev, 5, &manufacturer_id);
  912. emc_read_lpddr_mode_register(emc, emem_dev, 6, &revision_id1);
  913. emc_read_lpddr_mode_register(emc, emem_dev, 7, &revision_id2);
  914. emc_read_lpddr_mode_register(emc, emem_dev, 8, &basic_conf4.value);
  915. dev_info(emc->dev, "SDRAM[dev%u]: manufacturer: 0x%x (%s) rev1: 0x%x rev2: 0x%x prefetch: S%u density: %uMbit iowidth: %ubit\n",
  916. emem_dev, manufacturer_id,
  917. lpddr2_jedec_manufacturer(manufacturer_id),
  918. revision_id1, revision_id2,
  919. 4 >> basic_conf4.arch_type,
  920. 64 << basic_conf4.density,
  921. 32 >> basic_conf4.io_width);
  922. }
  923. static int emc_setup_hw(struct tegra_emc *emc)
  924. {
  925. u32 fbio_cfg5, emc_cfg, emc_dbg, emc_adr_cfg;
  926. u32 intmask = EMC_REFRESH_OVERFLOW_INT;
  927. static bool print_sdram_info_once;
  928. enum emc_dram_type dram_type;
  929. const char *dram_type_str;
  930. unsigned int emem_numdev;
  931. fbio_cfg5 = readl_relaxed(emc->regs + EMC_FBIO_CFG5);
  932. dram_type = fbio_cfg5 & EMC_FBIO_CFG5_DRAM_TYPE_MASK;
  933. emc_cfg = readl_relaxed(emc->regs + EMC_CFG_2);
  934. /* enable EMC and CAR to handshake on PLL divider/source changes */
  935. emc_cfg |= EMC_CLKCHANGE_REQ_ENABLE;
  936. /* configure clock change mode accordingly to DRAM type */
  937. switch (dram_type) {
  938. case DRAM_TYPE_LPDDR2:
  939. emc_cfg |= EMC_CLKCHANGE_PD_ENABLE;
  940. emc_cfg &= ~EMC_CLKCHANGE_SR_ENABLE;
  941. break;
  942. default:
  943. emc_cfg &= ~EMC_CLKCHANGE_SR_ENABLE;
  944. emc_cfg &= ~EMC_CLKCHANGE_PD_ENABLE;
  945. break;
  946. }
  947. writel_relaxed(emc_cfg, emc->regs + EMC_CFG_2);
  948. /* initialize interrupt */
  949. writel_relaxed(intmask, emc->regs + EMC_INTMASK);
  950. writel_relaxed(0xffffffff, emc->regs + EMC_INTSTATUS);
  951. /* ensure that unwanted debug features are disabled */
  952. emc_dbg = readl_relaxed(emc->regs + EMC_DBG);
  953. emc_dbg |= EMC_DBG_CFG_PRIORITY;
  954. emc_dbg &= ~EMC_DBG_READ_MUX_ASSEMBLY;
  955. emc_dbg &= ~EMC_DBG_WRITE_MUX_ACTIVE;
  956. emc_dbg &= ~EMC_DBG_FORCE_UPDATE;
  957. writel_relaxed(emc_dbg, emc->regs + EMC_DBG);
  958. switch (dram_type) {
  959. case DRAM_TYPE_DDR1:
  960. dram_type_str = "DDR1";
  961. break;
  962. case DRAM_TYPE_LPDDR2:
  963. dram_type_str = "LPDDR2";
  964. break;
  965. case DRAM_TYPE_DDR2:
  966. dram_type_str = "DDR2";
  967. break;
  968. case DRAM_TYPE_DDR3:
  969. dram_type_str = "DDR3";
  970. break;
  971. }
  972. emc_adr_cfg = readl_relaxed(emc->regs + EMC_ADR_CFG);
  973. emem_numdev = FIELD_GET(EMC_ADR_CFG_EMEM_NUMDEV, emc_adr_cfg) + 1;
  974. dev_info_once(emc->dev, "%u %s %s attached\n", emem_numdev,
  975. dram_type_str, emem_numdev == 2 ? "devices" : "device");
  976. if (dram_type == DRAM_TYPE_LPDDR2 && !print_sdram_info_once) {
  977. while (emem_numdev--)
  978. emc_read_lpddr_sdram_info(emc, emem_numdev);
  979. print_sdram_info_once = true;
  980. }
  981. return 0;
  982. }
  983. static long emc_round_rate(unsigned long rate,
  984. unsigned long min_rate,
  985. unsigned long max_rate,
  986. void *arg)
  987. {
  988. struct emc_timing *timing = NULL;
  989. struct tegra_emc *emc = arg;
  990. unsigned int i;
  991. if (!emc->num_timings)
  992. return clk_get_rate(emc->clk);
  993. min_rate = min(min_rate, emc->timings[emc->num_timings - 1].rate);
  994. for (i = 0; i < emc->num_timings; i++) {
  995. if (emc->timings[i].rate < rate && i != emc->num_timings - 1)
  996. continue;
  997. if (emc->timings[i].rate > max_rate) {
  998. i = max(i, 1u) - 1;
  999. if (emc->timings[i].rate < min_rate)
  1000. break;
  1001. }
  1002. if (emc->timings[i].rate < min_rate)
  1003. continue;
  1004. timing = &emc->timings[i];
  1005. break;
  1006. }
  1007. if (!timing) {
  1008. dev_err(emc->dev, "no timing for rate %lu min %lu max %lu\n",
  1009. rate, min_rate, max_rate);
  1010. return -EINVAL;
  1011. }
  1012. return timing->rate;
  1013. }
  1014. static void tegra_emc_rate_requests_init(struct tegra_emc *emc)
  1015. {
  1016. unsigned int i;
  1017. for (i = 0; i < EMC_RATE_TYPE_MAX; i++) {
  1018. emc->requested_rate[i].min_rate = 0;
  1019. emc->requested_rate[i].max_rate = ULONG_MAX;
  1020. }
  1021. }
  1022. static int emc_request_rate(struct tegra_emc *emc,
  1023. unsigned long new_min_rate,
  1024. unsigned long new_max_rate,
  1025. enum emc_rate_request_type type)
  1026. {
  1027. struct emc_rate_request *req = emc->requested_rate;
  1028. unsigned long min_rate = 0, max_rate = ULONG_MAX;
  1029. unsigned int i;
  1030. int err;
  1031. /* select minimum and maximum rates among the requested rates */
  1032. for (i = 0; i < EMC_RATE_TYPE_MAX; i++, req++) {
  1033. if (i == type) {
  1034. min_rate = max(new_min_rate, min_rate);
  1035. max_rate = min(new_max_rate, max_rate);
  1036. } else {
  1037. min_rate = max(req->min_rate, min_rate);
  1038. max_rate = min(req->max_rate, max_rate);
  1039. }
  1040. }
  1041. if (min_rate > max_rate) {
  1042. dev_err_ratelimited(emc->dev, "%s: type %u: out of range: %lu %lu\n",
  1043. __func__, type, min_rate, max_rate);
  1044. return -ERANGE;
  1045. }
  1046. /*
  1047. * EMC rate-changes should go via OPP API because it manages voltage
  1048. * changes.
  1049. */
  1050. err = dev_pm_opp_set_rate(emc->dev, min_rate);
  1051. if (err)
  1052. return err;
  1053. emc->requested_rate[type].min_rate = new_min_rate;
  1054. emc->requested_rate[type].max_rate = new_max_rate;
  1055. return 0;
  1056. }
  1057. static int emc_set_min_rate(struct tegra_emc *emc, unsigned long rate,
  1058. enum emc_rate_request_type type)
  1059. {
  1060. struct emc_rate_request *req = &emc->requested_rate[type];
  1061. int ret;
  1062. mutex_lock(&emc->rate_lock);
  1063. ret = emc_request_rate(emc, rate, req->max_rate, type);
  1064. mutex_unlock(&emc->rate_lock);
  1065. return ret;
  1066. }
  1067. static int emc_set_max_rate(struct tegra_emc *emc, unsigned long rate,
  1068. enum emc_rate_request_type type)
  1069. {
  1070. struct emc_rate_request *req = &emc->requested_rate[type];
  1071. int ret;
  1072. mutex_lock(&emc->rate_lock);
  1073. ret = emc_request_rate(emc, req->min_rate, rate, type);
  1074. mutex_unlock(&emc->rate_lock);
  1075. return ret;
  1076. }
  1077. /*
  1078. * debugfs interface
  1079. *
  1080. * The memory controller driver exposes some files in debugfs that can be used
  1081. * to control the EMC frequency. The top-level directory can be found here:
  1082. *
  1083. * /sys/kernel/debug/emc
  1084. *
  1085. * It contains the following files:
  1086. *
  1087. * - available_rates: This file contains a list of valid, space-separated
  1088. * EMC frequencies.
  1089. *
  1090. * - min_rate: Writing a value to this file sets the given frequency as the
  1091. * floor of the permitted range. If this is higher than the currently
  1092. * configured EMC frequency, this will cause the frequency to be
  1093. * increased so that it stays within the valid range.
  1094. *
  1095. * - max_rate: Similarily to the min_rate file, writing a value to this file
  1096. * sets the given frequency as the ceiling of the permitted range. If
  1097. * the value is lower than the currently configured EMC frequency, this
  1098. * will cause the frequency to be decreased so that it stays within the
  1099. * valid range.
  1100. */
  1101. static bool tegra_emc_validate_rate(struct tegra_emc *emc, unsigned long rate)
  1102. {
  1103. unsigned int i;
  1104. for (i = 0; i < emc->num_timings; i++)
  1105. if (rate == emc->timings[i].rate)
  1106. return true;
  1107. return false;
  1108. }
  1109. static int tegra_emc_debug_available_rates_show(struct seq_file *s, void *data)
  1110. {
  1111. struct tegra_emc *emc = s->private;
  1112. const char *prefix = "";
  1113. unsigned int i;
  1114. for (i = 0; i < emc->num_timings; i++) {
  1115. seq_printf(s, "%s%lu", prefix, emc->timings[i].rate);
  1116. prefix = " ";
  1117. }
  1118. seq_puts(s, "\n");
  1119. return 0;
  1120. }
  1121. DEFINE_SHOW_ATTRIBUTE(tegra_emc_debug_available_rates);
  1122. static int tegra_emc_debug_min_rate_get(void *data, u64 *rate)
  1123. {
  1124. struct tegra_emc *emc = data;
  1125. *rate = emc->debugfs.min_rate;
  1126. return 0;
  1127. }
  1128. static int tegra_emc_debug_min_rate_set(void *data, u64 rate)
  1129. {
  1130. struct tegra_emc *emc = data;
  1131. int err;
  1132. if (!tegra_emc_validate_rate(emc, rate))
  1133. return -EINVAL;
  1134. err = emc_set_min_rate(emc, rate, EMC_RATE_DEBUG);
  1135. if (err < 0)
  1136. return err;
  1137. emc->debugfs.min_rate = rate;
  1138. return 0;
  1139. }
  1140. DEFINE_DEBUGFS_ATTRIBUTE(tegra_emc_debug_min_rate_fops,
  1141. tegra_emc_debug_min_rate_get,
  1142. tegra_emc_debug_min_rate_set, "%llu\n");
  1143. static int tegra_emc_debug_max_rate_get(void *data, u64 *rate)
  1144. {
  1145. struct tegra_emc *emc = data;
  1146. *rate = emc->debugfs.max_rate;
  1147. return 0;
  1148. }
  1149. static int tegra_emc_debug_max_rate_set(void *data, u64 rate)
  1150. {
  1151. struct tegra_emc *emc = data;
  1152. int err;
  1153. if (!tegra_emc_validate_rate(emc, rate))
  1154. return -EINVAL;
  1155. err = emc_set_max_rate(emc, rate, EMC_RATE_DEBUG);
  1156. if (err < 0)
  1157. return err;
  1158. emc->debugfs.max_rate = rate;
  1159. return 0;
  1160. }
  1161. DEFINE_DEBUGFS_ATTRIBUTE(tegra_emc_debug_max_rate_fops,
  1162. tegra_emc_debug_max_rate_get,
  1163. tegra_emc_debug_max_rate_set, "%llu\n");
  1164. static void tegra_emc_debugfs_init(struct tegra_emc *emc)
  1165. {
  1166. struct device *dev = emc->dev;
  1167. unsigned int i;
  1168. int err;
  1169. emc->debugfs.min_rate = ULONG_MAX;
  1170. emc->debugfs.max_rate = 0;
  1171. for (i = 0; i < emc->num_timings; i++) {
  1172. if (emc->timings[i].rate < emc->debugfs.min_rate)
  1173. emc->debugfs.min_rate = emc->timings[i].rate;
  1174. if (emc->timings[i].rate > emc->debugfs.max_rate)
  1175. emc->debugfs.max_rate = emc->timings[i].rate;
  1176. }
  1177. if (!emc->num_timings) {
  1178. emc->debugfs.min_rate = clk_get_rate(emc->clk);
  1179. emc->debugfs.max_rate = emc->debugfs.min_rate;
  1180. }
  1181. err = clk_set_rate_range(emc->clk, emc->debugfs.min_rate,
  1182. emc->debugfs.max_rate);
  1183. if (err < 0) {
  1184. dev_err(dev, "failed to set rate range [%lu-%lu] for %pC\n",
  1185. emc->debugfs.min_rate, emc->debugfs.max_rate,
  1186. emc->clk);
  1187. }
  1188. emc->debugfs.root = debugfs_create_dir("emc", NULL);
  1189. debugfs_create_file("available_rates", 0444, emc->debugfs.root,
  1190. emc, &tegra_emc_debug_available_rates_fops);
  1191. debugfs_create_file("min_rate", 0644, emc->debugfs.root,
  1192. emc, &tegra_emc_debug_min_rate_fops);
  1193. debugfs_create_file("max_rate", 0644, emc->debugfs.root,
  1194. emc, &tegra_emc_debug_max_rate_fops);
  1195. }
  1196. static inline struct tegra_emc *
  1197. to_tegra_emc_provider(struct icc_provider *provider)
  1198. {
  1199. return container_of(provider, struct tegra_emc, provider);
  1200. }
  1201. static struct icc_node_data *
  1202. emc_of_icc_xlate_extended(const struct of_phandle_args *spec, void *data)
  1203. {
  1204. struct icc_provider *provider = data;
  1205. struct icc_node_data *ndata;
  1206. struct icc_node *node;
  1207. /* External Memory is the only possible ICC route */
  1208. list_for_each_entry(node, &provider->nodes, node_list) {
  1209. if (node->id != TEGRA_ICC_EMEM)
  1210. continue;
  1211. ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
  1212. if (!ndata)
  1213. return ERR_PTR(-ENOMEM);
  1214. /*
  1215. * SRC and DST nodes should have matching TAG in order to have
  1216. * it set by default for a requested path.
  1217. */
  1218. ndata->tag = TEGRA_MC_ICC_TAG_ISO;
  1219. ndata->node = node;
  1220. return ndata;
  1221. }
  1222. return ERR_PTR(-EPROBE_DEFER);
  1223. }
  1224. static int emc_icc_set(struct icc_node *src, struct icc_node *dst)
  1225. {
  1226. struct tegra_emc *emc = to_tegra_emc_provider(dst->provider);
  1227. unsigned long long peak_bw = icc_units_to_bps(dst->peak_bw);
  1228. unsigned long long avg_bw = icc_units_to_bps(dst->avg_bw);
  1229. unsigned long long rate = max(avg_bw, peak_bw);
  1230. const unsigned int dram_data_bus_width_bytes = 4;
  1231. const unsigned int ddr = 2;
  1232. int err;
  1233. /*
  1234. * Tegra30 EMC runs on a clock rate of SDRAM bus. This means that
  1235. * EMC clock rate is twice smaller than the peak data rate because
  1236. * data is sampled on both EMC clock edges.
  1237. */
  1238. do_div(rate, ddr * dram_data_bus_width_bytes);
  1239. rate = min_t(u64, rate, U32_MAX);
  1240. err = emc_set_min_rate(emc, rate, EMC_RATE_ICC);
  1241. if (err)
  1242. return err;
  1243. return 0;
  1244. }
  1245. static int tegra_emc_interconnect_init(struct tegra_emc *emc)
  1246. {
  1247. const struct tegra_mc_soc *soc = emc->mc->soc;
  1248. struct icc_node *node;
  1249. int err;
  1250. emc->provider.dev = emc->dev;
  1251. emc->provider.set = emc_icc_set;
  1252. emc->provider.data = &emc->provider;
  1253. emc->provider.aggregate = soc->icc_ops->aggregate;
  1254. emc->provider.xlate_extended = emc_of_icc_xlate_extended;
  1255. icc_provider_init(&emc->provider);
  1256. /* create External Memory Controller node */
  1257. node = icc_node_create(TEGRA_ICC_EMC);
  1258. if (IS_ERR(node)) {
  1259. err = PTR_ERR(node);
  1260. goto err_msg;
  1261. }
  1262. node->name = "External Memory Controller";
  1263. icc_node_add(node, &emc->provider);
  1264. /* link External Memory Controller to External Memory (DRAM) */
  1265. err = icc_link_create(node, TEGRA_ICC_EMEM);
  1266. if (err)
  1267. goto remove_nodes;
  1268. /* create External Memory node */
  1269. node = icc_node_create(TEGRA_ICC_EMEM);
  1270. if (IS_ERR(node)) {
  1271. err = PTR_ERR(node);
  1272. goto remove_nodes;
  1273. }
  1274. node->name = "External Memory (DRAM)";
  1275. icc_node_add(node, &emc->provider);
  1276. err = icc_provider_register(&emc->provider);
  1277. if (err)
  1278. goto remove_nodes;
  1279. return 0;
  1280. remove_nodes:
  1281. icc_nodes_remove(&emc->provider);
  1282. err_msg:
  1283. dev_err(emc->dev, "failed to initialize ICC: %d\n", err);
  1284. return err;
  1285. }
  1286. static void devm_tegra_emc_unset_callback(void *data)
  1287. {
  1288. tegra20_clk_set_emc_round_callback(NULL, NULL);
  1289. }
  1290. static void devm_tegra_emc_unreg_clk_notifier(void *data)
  1291. {
  1292. struct tegra_emc *emc = data;
  1293. clk_notifier_unregister(emc->clk, &emc->clk_nb);
  1294. }
  1295. static int tegra_emc_init_clk(struct tegra_emc *emc)
  1296. {
  1297. int err;
  1298. tegra20_clk_set_emc_round_callback(emc_round_rate, emc);
  1299. err = devm_add_action_or_reset(emc->dev, devm_tegra_emc_unset_callback,
  1300. NULL);
  1301. if (err)
  1302. return err;
  1303. emc->clk = devm_clk_get(emc->dev, NULL);
  1304. if (IS_ERR(emc->clk)) {
  1305. dev_err(emc->dev, "failed to get EMC clock: %pe\n", emc->clk);
  1306. return PTR_ERR(emc->clk);
  1307. }
  1308. err = clk_notifier_register(emc->clk, &emc->clk_nb);
  1309. if (err) {
  1310. dev_err(emc->dev, "failed to register clk notifier: %d\n", err);
  1311. return err;
  1312. }
  1313. err = devm_add_action_or_reset(emc->dev,
  1314. devm_tegra_emc_unreg_clk_notifier, emc);
  1315. if (err)
  1316. return err;
  1317. return 0;
  1318. }
  1319. static int tegra_emc_probe(struct platform_device *pdev)
  1320. {
  1321. struct tegra_core_opp_params opp_params = {};
  1322. struct device_node *np;
  1323. struct tegra_emc *emc;
  1324. int err;
  1325. emc = devm_kzalloc(&pdev->dev, sizeof(*emc), GFP_KERNEL);
  1326. if (!emc)
  1327. return -ENOMEM;
  1328. emc->mc = devm_tegra_memory_controller_get(&pdev->dev);
  1329. if (IS_ERR(emc->mc))
  1330. return PTR_ERR(emc->mc);
  1331. mutex_init(&emc->rate_lock);
  1332. emc->clk_nb.notifier_call = emc_clk_change_notify;
  1333. emc->dev = &pdev->dev;
  1334. emc->regs = devm_platform_ioremap_resource(pdev, 0);
  1335. if (IS_ERR(emc->regs))
  1336. return PTR_ERR(emc->regs);
  1337. err = emc_setup_hw(emc);
  1338. if (err)
  1339. return err;
  1340. np = emc_find_node_by_ram_code(emc);
  1341. if (np) {
  1342. err = emc_load_timings_from_dt(emc, np);
  1343. of_node_put(np);
  1344. if (err)
  1345. return err;
  1346. }
  1347. err = platform_get_irq(pdev, 0);
  1348. if (err < 0)
  1349. return err;
  1350. emc->irq = err;
  1351. err = devm_request_irq(&pdev->dev, emc->irq, tegra_emc_isr, 0,
  1352. dev_name(&pdev->dev), emc);
  1353. if (err) {
  1354. dev_err(&pdev->dev, "failed to request irq: %d\n", err);
  1355. return err;
  1356. }
  1357. err = tegra_emc_init_clk(emc);
  1358. if (err)
  1359. return err;
  1360. opp_params.init_state = true;
  1361. err = devm_tegra_core_dev_init_opp_table(&pdev->dev, &opp_params);
  1362. if (err)
  1363. return err;
  1364. platform_set_drvdata(pdev, emc);
  1365. tegra_emc_rate_requests_init(emc);
  1366. tegra_emc_debugfs_init(emc);
  1367. tegra_emc_interconnect_init(emc);
  1368. /*
  1369. * Don't allow the kernel module to be unloaded. Unloading adds some
  1370. * extra complexity which doesn't really worth the effort in a case of
  1371. * this driver.
  1372. */
  1373. try_module_get(THIS_MODULE);
  1374. return 0;
  1375. }
  1376. static int tegra_emc_suspend(struct device *dev)
  1377. {
  1378. struct tegra_emc *emc = dev_get_drvdata(dev);
  1379. int err;
  1380. /* take exclusive control over the clock's rate */
  1381. err = clk_rate_exclusive_get(emc->clk);
  1382. if (err) {
  1383. dev_err(emc->dev, "failed to acquire clk: %d\n", err);
  1384. return err;
  1385. }
  1386. /* suspending in a bad state will hang machine */
  1387. if (WARN(emc->bad_state, "hardware in a bad state\n"))
  1388. return -EINVAL;
  1389. emc->bad_state = true;
  1390. return 0;
  1391. }
  1392. static int tegra_emc_resume(struct device *dev)
  1393. {
  1394. struct tegra_emc *emc = dev_get_drvdata(dev);
  1395. emc_setup_hw(emc);
  1396. emc->bad_state = false;
  1397. clk_rate_exclusive_put(emc->clk);
  1398. return 0;
  1399. }
  1400. static const struct dev_pm_ops tegra_emc_pm_ops = {
  1401. .suspend = tegra_emc_suspend,
  1402. .resume = tegra_emc_resume,
  1403. };
  1404. static const struct of_device_id tegra_emc_of_match[] = {
  1405. { .compatible = "nvidia,tegra30-emc", },
  1406. {},
  1407. };
  1408. MODULE_DEVICE_TABLE(of, tegra_emc_of_match);
  1409. static struct platform_driver tegra_emc_driver = {
  1410. .probe = tegra_emc_probe,
  1411. .driver = {
  1412. .name = "tegra30-emc",
  1413. .of_match_table = tegra_emc_of_match,
  1414. .pm = &tegra_emc_pm_ops,
  1415. .suppress_bind_attrs = true,
  1416. .sync_state = icc_sync_state,
  1417. },
  1418. };
  1419. module_platform_driver(tegra_emc_driver);
  1420. MODULE_AUTHOR("Dmitry Osipenko <digetx@gmail.com>");
  1421. MODULE_DESCRIPTION("NVIDIA Tegra30 EMC driver");
  1422. MODULE_LICENSE("GPL v2");