tegra30-emc.c 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764
  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 <[email protected]>
  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_platform.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 device_node *child;
  818. struct emc_timing *timing;
  819. int child_count;
  820. int err;
  821. child_count = of_get_child_count(node);
  822. if (!child_count) {
  823. dev_err(emc->dev, "no memory timings in: %pOF\n", node);
  824. return -EINVAL;
  825. }
  826. emc->timings = devm_kcalloc(emc->dev, child_count, sizeof(*timing),
  827. GFP_KERNEL);
  828. if (!emc->timings)
  829. return -ENOMEM;
  830. emc->num_timings = child_count;
  831. timing = emc->timings;
  832. for_each_child_of_node(node, child) {
  833. err = load_one_timing_from_dt(emc, timing++, child);
  834. if (err) {
  835. of_node_put(child);
  836. return err;
  837. }
  838. }
  839. sort(emc->timings, emc->num_timings, sizeof(*timing), cmp_timings,
  840. NULL);
  841. err = emc_check_mc_timings(emc);
  842. if (err)
  843. return err;
  844. dev_info_once(emc->dev,
  845. "got %u timings for RAM code %u (min %luMHz max %luMHz)\n",
  846. emc->num_timings,
  847. tegra_read_ram_code(),
  848. emc->timings[0].rate / 1000000,
  849. emc->timings[emc->num_timings - 1].rate / 1000000);
  850. return 0;
  851. }
  852. static struct device_node *emc_find_node_by_ram_code(struct tegra_emc *emc)
  853. {
  854. struct device *dev = emc->dev;
  855. struct device_node *np;
  856. u32 value, ram_code;
  857. int err;
  858. if (emc->mrr_error) {
  859. dev_warn(dev, "memory timings skipped due to MRR error\n");
  860. return NULL;
  861. }
  862. if (of_get_child_count(dev->of_node) == 0) {
  863. dev_info_once(dev, "device-tree doesn't have memory timings\n");
  864. return NULL;
  865. }
  866. ram_code = tegra_read_ram_code();
  867. for_each_child_of_node(dev->of_node, np) {
  868. err = of_property_read_u32(np, "nvidia,ram-code", &value);
  869. if (err || value != ram_code)
  870. continue;
  871. return np;
  872. }
  873. dev_err(dev, "no memory timings for RAM code %u found in device-tree\n",
  874. ram_code);
  875. return NULL;
  876. }
  877. static int emc_read_lpddr_mode_register(struct tegra_emc *emc,
  878. unsigned int emem_dev,
  879. unsigned int register_addr,
  880. unsigned int *register_data)
  881. {
  882. u32 memory_dev = emem_dev ? 1 : 2;
  883. u32 val, mr_mask = 0xff;
  884. int err;
  885. /* clear data-valid interrupt status */
  886. writel_relaxed(EMC_MRR_DIVLD_INT, emc->regs + EMC_INTSTATUS);
  887. /* issue mode register read request */
  888. val = FIELD_PREP(EMC_MRR_DEV_SELECTN, memory_dev);
  889. val |= FIELD_PREP(EMC_MRR_MRR_MA, register_addr);
  890. writel_relaxed(val, emc->regs + EMC_MRR);
  891. /* wait for the LPDDR2 data-valid interrupt */
  892. err = readl_relaxed_poll_timeout_atomic(emc->regs + EMC_INTSTATUS, val,
  893. val & EMC_MRR_DIVLD_INT,
  894. 1, 100);
  895. if (err) {
  896. dev_err(emc->dev, "mode register %u read failed: %d\n",
  897. register_addr, err);
  898. emc->mrr_error = true;
  899. return err;
  900. }
  901. /* read out mode register data */
  902. val = readl_relaxed(emc->regs + EMC_MRR);
  903. *register_data = FIELD_GET(EMC_MRR_MRR_DATA, val) & mr_mask;
  904. return 0;
  905. }
  906. static void emc_read_lpddr_sdram_info(struct tegra_emc *emc,
  907. unsigned int emem_dev)
  908. {
  909. union lpddr2_basic_config4 basic_conf4;
  910. unsigned int manufacturer_id;
  911. unsigned int revision_id1;
  912. unsigned int revision_id2;
  913. /* these registers are standard for all LPDDR JEDEC memory chips */
  914. emc_read_lpddr_mode_register(emc, emem_dev, 5, &manufacturer_id);
  915. emc_read_lpddr_mode_register(emc, emem_dev, 6, &revision_id1);
  916. emc_read_lpddr_mode_register(emc, emem_dev, 7, &revision_id2);
  917. emc_read_lpddr_mode_register(emc, emem_dev, 8, &basic_conf4.value);
  918. 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",
  919. emem_dev, manufacturer_id,
  920. lpddr2_jedec_manufacturer(manufacturer_id),
  921. revision_id1, revision_id2,
  922. 4 >> basic_conf4.arch_type,
  923. 64 << basic_conf4.density,
  924. 32 >> basic_conf4.io_width);
  925. }
  926. static int emc_setup_hw(struct tegra_emc *emc)
  927. {
  928. u32 fbio_cfg5, emc_cfg, emc_dbg, emc_adr_cfg;
  929. u32 intmask = EMC_REFRESH_OVERFLOW_INT;
  930. static bool print_sdram_info_once;
  931. enum emc_dram_type dram_type;
  932. const char *dram_type_str;
  933. unsigned int emem_numdev;
  934. fbio_cfg5 = readl_relaxed(emc->regs + EMC_FBIO_CFG5);
  935. dram_type = fbio_cfg5 & EMC_FBIO_CFG5_DRAM_TYPE_MASK;
  936. emc_cfg = readl_relaxed(emc->regs + EMC_CFG_2);
  937. /* enable EMC and CAR to handshake on PLL divider/source changes */
  938. emc_cfg |= EMC_CLKCHANGE_REQ_ENABLE;
  939. /* configure clock change mode accordingly to DRAM type */
  940. switch (dram_type) {
  941. case DRAM_TYPE_LPDDR2:
  942. emc_cfg |= EMC_CLKCHANGE_PD_ENABLE;
  943. emc_cfg &= ~EMC_CLKCHANGE_SR_ENABLE;
  944. break;
  945. default:
  946. emc_cfg &= ~EMC_CLKCHANGE_SR_ENABLE;
  947. emc_cfg &= ~EMC_CLKCHANGE_PD_ENABLE;
  948. break;
  949. }
  950. writel_relaxed(emc_cfg, emc->regs + EMC_CFG_2);
  951. /* initialize interrupt */
  952. writel_relaxed(intmask, emc->regs + EMC_INTMASK);
  953. writel_relaxed(0xffffffff, emc->regs + EMC_INTSTATUS);
  954. /* ensure that unwanted debug features are disabled */
  955. emc_dbg = readl_relaxed(emc->regs + EMC_DBG);
  956. emc_dbg |= EMC_DBG_CFG_PRIORITY;
  957. emc_dbg &= ~EMC_DBG_READ_MUX_ASSEMBLY;
  958. emc_dbg &= ~EMC_DBG_WRITE_MUX_ACTIVE;
  959. emc_dbg &= ~EMC_DBG_FORCE_UPDATE;
  960. writel_relaxed(emc_dbg, emc->regs + EMC_DBG);
  961. switch (dram_type) {
  962. case DRAM_TYPE_DDR1:
  963. dram_type_str = "DDR1";
  964. break;
  965. case DRAM_TYPE_LPDDR2:
  966. dram_type_str = "LPDDR2";
  967. break;
  968. case DRAM_TYPE_DDR2:
  969. dram_type_str = "DDR2";
  970. break;
  971. case DRAM_TYPE_DDR3:
  972. dram_type_str = "DDR3";
  973. break;
  974. }
  975. emc_adr_cfg = readl_relaxed(emc->regs + EMC_ADR_CFG);
  976. emem_numdev = FIELD_GET(EMC_ADR_CFG_EMEM_NUMDEV, emc_adr_cfg) + 1;
  977. dev_info_once(emc->dev, "%u %s %s attached\n", emem_numdev,
  978. dram_type_str, emem_numdev == 2 ? "devices" : "device");
  979. if (dram_type == DRAM_TYPE_LPDDR2 && !print_sdram_info_once) {
  980. while (emem_numdev--)
  981. emc_read_lpddr_sdram_info(emc, emem_numdev);
  982. print_sdram_info_once = true;
  983. }
  984. return 0;
  985. }
  986. static long emc_round_rate(unsigned long rate,
  987. unsigned long min_rate,
  988. unsigned long max_rate,
  989. void *arg)
  990. {
  991. struct emc_timing *timing = NULL;
  992. struct tegra_emc *emc = arg;
  993. unsigned int i;
  994. if (!emc->num_timings)
  995. return clk_get_rate(emc->clk);
  996. min_rate = min(min_rate, emc->timings[emc->num_timings - 1].rate);
  997. for (i = 0; i < emc->num_timings; i++) {
  998. if (emc->timings[i].rate < rate && i != emc->num_timings - 1)
  999. continue;
  1000. if (emc->timings[i].rate > max_rate) {
  1001. i = max(i, 1u) - 1;
  1002. if (emc->timings[i].rate < min_rate)
  1003. break;
  1004. }
  1005. if (emc->timings[i].rate < min_rate)
  1006. continue;
  1007. timing = &emc->timings[i];
  1008. break;
  1009. }
  1010. if (!timing) {
  1011. dev_err(emc->dev, "no timing for rate %lu min %lu max %lu\n",
  1012. rate, min_rate, max_rate);
  1013. return -EINVAL;
  1014. }
  1015. return timing->rate;
  1016. }
  1017. static void tegra_emc_rate_requests_init(struct tegra_emc *emc)
  1018. {
  1019. unsigned int i;
  1020. for (i = 0; i < EMC_RATE_TYPE_MAX; i++) {
  1021. emc->requested_rate[i].min_rate = 0;
  1022. emc->requested_rate[i].max_rate = ULONG_MAX;
  1023. }
  1024. }
  1025. static int emc_request_rate(struct tegra_emc *emc,
  1026. unsigned long new_min_rate,
  1027. unsigned long new_max_rate,
  1028. enum emc_rate_request_type type)
  1029. {
  1030. struct emc_rate_request *req = emc->requested_rate;
  1031. unsigned long min_rate = 0, max_rate = ULONG_MAX;
  1032. unsigned int i;
  1033. int err;
  1034. /* select minimum and maximum rates among the requested rates */
  1035. for (i = 0; i < EMC_RATE_TYPE_MAX; i++, req++) {
  1036. if (i == type) {
  1037. min_rate = max(new_min_rate, min_rate);
  1038. max_rate = min(new_max_rate, max_rate);
  1039. } else {
  1040. min_rate = max(req->min_rate, min_rate);
  1041. max_rate = min(req->max_rate, max_rate);
  1042. }
  1043. }
  1044. if (min_rate > max_rate) {
  1045. dev_err_ratelimited(emc->dev, "%s: type %u: out of range: %lu %lu\n",
  1046. __func__, type, min_rate, max_rate);
  1047. return -ERANGE;
  1048. }
  1049. /*
  1050. * EMC rate-changes should go via OPP API because it manages voltage
  1051. * changes.
  1052. */
  1053. err = dev_pm_opp_set_rate(emc->dev, min_rate);
  1054. if (err)
  1055. return err;
  1056. emc->requested_rate[type].min_rate = new_min_rate;
  1057. emc->requested_rate[type].max_rate = new_max_rate;
  1058. return 0;
  1059. }
  1060. static int emc_set_min_rate(struct tegra_emc *emc, unsigned long rate,
  1061. enum emc_rate_request_type type)
  1062. {
  1063. struct emc_rate_request *req = &emc->requested_rate[type];
  1064. int ret;
  1065. mutex_lock(&emc->rate_lock);
  1066. ret = emc_request_rate(emc, rate, req->max_rate, type);
  1067. mutex_unlock(&emc->rate_lock);
  1068. return ret;
  1069. }
  1070. static int emc_set_max_rate(struct tegra_emc *emc, unsigned long rate,
  1071. enum emc_rate_request_type type)
  1072. {
  1073. struct emc_rate_request *req = &emc->requested_rate[type];
  1074. int ret;
  1075. mutex_lock(&emc->rate_lock);
  1076. ret = emc_request_rate(emc, req->min_rate, rate, type);
  1077. mutex_unlock(&emc->rate_lock);
  1078. return ret;
  1079. }
  1080. /*
  1081. * debugfs interface
  1082. *
  1083. * The memory controller driver exposes some files in debugfs that can be used
  1084. * to control the EMC frequency. The top-level directory can be found here:
  1085. *
  1086. * /sys/kernel/debug/emc
  1087. *
  1088. * It contains the following files:
  1089. *
  1090. * - available_rates: This file contains a list of valid, space-separated
  1091. * EMC frequencies.
  1092. *
  1093. * - min_rate: Writing a value to this file sets the given frequency as the
  1094. * floor of the permitted range. If this is higher than the currently
  1095. * configured EMC frequency, this will cause the frequency to be
  1096. * increased so that it stays within the valid range.
  1097. *
  1098. * - max_rate: Similarily to the min_rate file, writing a value to this file
  1099. * sets the given frequency as the ceiling of the permitted range. If
  1100. * the value is lower than the currently configured EMC frequency, this
  1101. * will cause the frequency to be decreased so that it stays within the
  1102. * valid range.
  1103. */
  1104. static bool tegra_emc_validate_rate(struct tegra_emc *emc, unsigned long rate)
  1105. {
  1106. unsigned int i;
  1107. for (i = 0; i < emc->num_timings; i++)
  1108. if (rate == emc->timings[i].rate)
  1109. return true;
  1110. return false;
  1111. }
  1112. static int tegra_emc_debug_available_rates_show(struct seq_file *s, void *data)
  1113. {
  1114. struct tegra_emc *emc = s->private;
  1115. const char *prefix = "";
  1116. unsigned int i;
  1117. for (i = 0; i < emc->num_timings; i++) {
  1118. seq_printf(s, "%s%lu", prefix, emc->timings[i].rate);
  1119. prefix = " ";
  1120. }
  1121. seq_puts(s, "\n");
  1122. return 0;
  1123. }
  1124. static int tegra_emc_debug_available_rates_open(struct inode *inode,
  1125. struct file *file)
  1126. {
  1127. return single_open(file, tegra_emc_debug_available_rates_show,
  1128. inode->i_private);
  1129. }
  1130. static const struct file_operations tegra_emc_debug_available_rates_fops = {
  1131. .open = tegra_emc_debug_available_rates_open,
  1132. .read = seq_read,
  1133. .llseek = seq_lseek,
  1134. .release = single_release,
  1135. };
  1136. static int tegra_emc_debug_min_rate_get(void *data, u64 *rate)
  1137. {
  1138. struct tegra_emc *emc = data;
  1139. *rate = emc->debugfs.min_rate;
  1140. return 0;
  1141. }
  1142. static int tegra_emc_debug_min_rate_set(void *data, u64 rate)
  1143. {
  1144. struct tegra_emc *emc = data;
  1145. int err;
  1146. if (!tegra_emc_validate_rate(emc, rate))
  1147. return -EINVAL;
  1148. err = emc_set_min_rate(emc, rate, EMC_RATE_DEBUG);
  1149. if (err < 0)
  1150. return err;
  1151. emc->debugfs.min_rate = rate;
  1152. return 0;
  1153. }
  1154. DEFINE_DEBUGFS_ATTRIBUTE(tegra_emc_debug_min_rate_fops,
  1155. tegra_emc_debug_min_rate_get,
  1156. tegra_emc_debug_min_rate_set, "%llu\n");
  1157. static int tegra_emc_debug_max_rate_get(void *data, u64 *rate)
  1158. {
  1159. struct tegra_emc *emc = data;
  1160. *rate = emc->debugfs.max_rate;
  1161. return 0;
  1162. }
  1163. static int tegra_emc_debug_max_rate_set(void *data, u64 rate)
  1164. {
  1165. struct tegra_emc *emc = data;
  1166. int err;
  1167. if (!tegra_emc_validate_rate(emc, rate))
  1168. return -EINVAL;
  1169. err = emc_set_max_rate(emc, rate, EMC_RATE_DEBUG);
  1170. if (err < 0)
  1171. return err;
  1172. emc->debugfs.max_rate = rate;
  1173. return 0;
  1174. }
  1175. DEFINE_DEBUGFS_ATTRIBUTE(tegra_emc_debug_max_rate_fops,
  1176. tegra_emc_debug_max_rate_get,
  1177. tegra_emc_debug_max_rate_set, "%llu\n");
  1178. static void tegra_emc_debugfs_init(struct tegra_emc *emc)
  1179. {
  1180. struct device *dev = emc->dev;
  1181. unsigned int i;
  1182. int err;
  1183. emc->debugfs.min_rate = ULONG_MAX;
  1184. emc->debugfs.max_rate = 0;
  1185. for (i = 0; i < emc->num_timings; i++) {
  1186. if (emc->timings[i].rate < emc->debugfs.min_rate)
  1187. emc->debugfs.min_rate = emc->timings[i].rate;
  1188. if (emc->timings[i].rate > emc->debugfs.max_rate)
  1189. emc->debugfs.max_rate = emc->timings[i].rate;
  1190. }
  1191. if (!emc->num_timings) {
  1192. emc->debugfs.min_rate = clk_get_rate(emc->clk);
  1193. emc->debugfs.max_rate = emc->debugfs.min_rate;
  1194. }
  1195. err = clk_set_rate_range(emc->clk, emc->debugfs.min_rate,
  1196. emc->debugfs.max_rate);
  1197. if (err < 0) {
  1198. dev_err(dev, "failed to set rate range [%lu-%lu] for %pC\n",
  1199. emc->debugfs.min_rate, emc->debugfs.max_rate,
  1200. emc->clk);
  1201. }
  1202. emc->debugfs.root = debugfs_create_dir("emc", NULL);
  1203. debugfs_create_file("available_rates", 0444, emc->debugfs.root,
  1204. emc, &tegra_emc_debug_available_rates_fops);
  1205. debugfs_create_file("min_rate", 0644, emc->debugfs.root,
  1206. emc, &tegra_emc_debug_min_rate_fops);
  1207. debugfs_create_file("max_rate", 0644, emc->debugfs.root,
  1208. emc, &tegra_emc_debug_max_rate_fops);
  1209. }
  1210. static inline struct tegra_emc *
  1211. to_tegra_emc_provider(struct icc_provider *provider)
  1212. {
  1213. return container_of(provider, struct tegra_emc, provider);
  1214. }
  1215. static struct icc_node_data *
  1216. emc_of_icc_xlate_extended(struct of_phandle_args *spec, void *data)
  1217. {
  1218. struct icc_provider *provider = data;
  1219. struct icc_node_data *ndata;
  1220. struct icc_node *node;
  1221. /* External Memory is the only possible ICC route */
  1222. list_for_each_entry(node, &provider->nodes, node_list) {
  1223. if (node->id != TEGRA_ICC_EMEM)
  1224. continue;
  1225. ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
  1226. if (!ndata)
  1227. return ERR_PTR(-ENOMEM);
  1228. /*
  1229. * SRC and DST nodes should have matching TAG in order to have
  1230. * it set by default for a requested path.
  1231. */
  1232. ndata->tag = TEGRA_MC_ICC_TAG_ISO;
  1233. ndata->node = node;
  1234. return ndata;
  1235. }
  1236. return ERR_PTR(-EPROBE_DEFER);
  1237. }
  1238. static int emc_icc_set(struct icc_node *src, struct icc_node *dst)
  1239. {
  1240. struct tegra_emc *emc = to_tegra_emc_provider(dst->provider);
  1241. unsigned long long peak_bw = icc_units_to_bps(dst->peak_bw);
  1242. unsigned long long avg_bw = icc_units_to_bps(dst->avg_bw);
  1243. unsigned long long rate = max(avg_bw, peak_bw);
  1244. const unsigned int dram_data_bus_width_bytes = 4;
  1245. const unsigned int ddr = 2;
  1246. int err;
  1247. /*
  1248. * Tegra30 EMC runs on a clock rate of SDRAM bus. This means that
  1249. * EMC clock rate is twice smaller than the peak data rate because
  1250. * data is sampled on both EMC clock edges.
  1251. */
  1252. do_div(rate, ddr * dram_data_bus_width_bytes);
  1253. rate = min_t(u64, rate, U32_MAX);
  1254. err = emc_set_min_rate(emc, rate, EMC_RATE_ICC);
  1255. if (err)
  1256. return err;
  1257. return 0;
  1258. }
  1259. static int tegra_emc_interconnect_init(struct tegra_emc *emc)
  1260. {
  1261. const struct tegra_mc_soc *soc = emc->mc->soc;
  1262. struct icc_node *node;
  1263. int err;
  1264. emc->provider.dev = emc->dev;
  1265. emc->provider.set = emc_icc_set;
  1266. emc->provider.data = &emc->provider;
  1267. emc->provider.aggregate = soc->icc_ops->aggregate;
  1268. emc->provider.xlate_extended = emc_of_icc_xlate_extended;
  1269. icc_provider_init(&emc->provider);
  1270. /* create External Memory Controller node */
  1271. node = icc_node_create(TEGRA_ICC_EMC);
  1272. if (IS_ERR(node)) {
  1273. err = PTR_ERR(node);
  1274. goto err_msg;
  1275. }
  1276. node->name = "External Memory Controller";
  1277. icc_node_add(node, &emc->provider);
  1278. /* link External Memory Controller to External Memory (DRAM) */
  1279. err = icc_link_create(node, TEGRA_ICC_EMEM);
  1280. if (err)
  1281. goto remove_nodes;
  1282. /* create External Memory node */
  1283. node = icc_node_create(TEGRA_ICC_EMEM);
  1284. if (IS_ERR(node)) {
  1285. err = PTR_ERR(node);
  1286. goto remove_nodes;
  1287. }
  1288. node->name = "External Memory (DRAM)";
  1289. icc_node_add(node, &emc->provider);
  1290. err = icc_provider_register(&emc->provider);
  1291. if (err)
  1292. goto remove_nodes;
  1293. return 0;
  1294. remove_nodes:
  1295. icc_nodes_remove(&emc->provider);
  1296. err_msg:
  1297. dev_err(emc->dev, "failed to initialize ICC: %d\n", err);
  1298. return err;
  1299. }
  1300. static void devm_tegra_emc_unset_callback(void *data)
  1301. {
  1302. tegra20_clk_set_emc_round_callback(NULL, NULL);
  1303. }
  1304. static void devm_tegra_emc_unreg_clk_notifier(void *data)
  1305. {
  1306. struct tegra_emc *emc = data;
  1307. clk_notifier_unregister(emc->clk, &emc->clk_nb);
  1308. }
  1309. static int tegra_emc_init_clk(struct tegra_emc *emc)
  1310. {
  1311. int err;
  1312. tegra20_clk_set_emc_round_callback(emc_round_rate, emc);
  1313. err = devm_add_action_or_reset(emc->dev, devm_tegra_emc_unset_callback,
  1314. NULL);
  1315. if (err)
  1316. return err;
  1317. emc->clk = devm_clk_get(emc->dev, NULL);
  1318. if (IS_ERR(emc->clk)) {
  1319. dev_err(emc->dev, "failed to get EMC clock: %pe\n", emc->clk);
  1320. return PTR_ERR(emc->clk);
  1321. }
  1322. err = clk_notifier_register(emc->clk, &emc->clk_nb);
  1323. if (err) {
  1324. dev_err(emc->dev, "failed to register clk notifier: %d\n", err);
  1325. return err;
  1326. }
  1327. err = devm_add_action_or_reset(emc->dev,
  1328. devm_tegra_emc_unreg_clk_notifier, emc);
  1329. if (err)
  1330. return err;
  1331. return 0;
  1332. }
  1333. static int tegra_emc_probe(struct platform_device *pdev)
  1334. {
  1335. struct tegra_core_opp_params opp_params = {};
  1336. struct device_node *np;
  1337. struct tegra_emc *emc;
  1338. int err;
  1339. emc = devm_kzalloc(&pdev->dev, sizeof(*emc), GFP_KERNEL);
  1340. if (!emc)
  1341. return -ENOMEM;
  1342. emc->mc = devm_tegra_memory_controller_get(&pdev->dev);
  1343. if (IS_ERR(emc->mc))
  1344. return PTR_ERR(emc->mc);
  1345. mutex_init(&emc->rate_lock);
  1346. emc->clk_nb.notifier_call = emc_clk_change_notify;
  1347. emc->dev = &pdev->dev;
  1348. emc->regs = devm_platform_ioremap_resource(pdev, 0);
  1349. if (IS_ERR(emc->regs))
  1350. return PTR_ERR(emc->regs);
  1351. err = emc_setup_hw(emc);
  1352. if (err)
  1353. return err;
  1354. np = emc_find_node_by_ram_code(emc);
  1355. if (np) {
  1356. err = emc_load_timings_from_dt(emc, np);
  1357. of_node_put(np);
  1358. if (err)
  1359. return err;
  1360. }
  1361. err = platform_get_irq(pdev, 0);
  1362. if (err < 0)
  1363. return err;
  1364. emc->irq = err;
  1365. err = devm_request_irq(&pdev->dev, emc->irq, tegra_emc_isr, 0,
  1366. dev_name(&pdev->dev), emc);
  1367. if (err) {
  1368. dev_err(&pdev->dev, "failed to request irq: %d\n", err);
  1369. return err;
  1370. }
  1371. err = tegra_emc_init_clk(emc);
  1372. if (err)
  1373. return err;
  1374. opp_params.init_state = true;
  1375. err = devm_tegra_core_dev_init_opp_table(&pdev->dev, &opp_params);
  1376. if (err)
  1377. return err;
  1378. platform_set_drvdata(pdev, emc);
  1379. tegra_emc_rate_requests_init(emc);
  1380. tegra_emc_debugfs_init(emc);
  1381. tegra_emc_interconnect_init(emc);
  1382. /*
  1383. * Don't allow the kernel module to be unloaded. Unloading adds some
  1384. * extra complexity which doesn't really worth the effort in a case of
  1385. * this driver.
  1386. */
  1387. try_module_get(THIS_MODULE);
  1388. return 0;
  1389. }
  1390. static int tegra_emc_suspend(struct device *dev)
  1391. {
  1392. struct tegra_emc *emc = dev_get_drvdata(dev);
  1393. int err;
  1394. /* take exclusive control over the clock's rate */
  1395. err = clk_rate_exclusive_get(emc->clk);
  1396. if (err) {
  1397. dev_err(emc->dev, "failed to acquire clk: %d\n", err);
  1398. return err;
  1399. }
  1400. /* suspending in a bad state will hang machine */
  1401. if (WARN(emc->bad_state, "hardware in a bad state\n"))
  1402. return -EINVAL;
  1403. emc->bad_state = true;
  1404. return 0;
  1405. }
  1406. static int tegra_emc_resume(struct device *dev)
  1407. {
  1408. struct tegra_emc *emc = dev_get_drvdata(dev);
  1409. emc_setup_hw(emc);
  1410. emc->bad_state = false;
  1411. clk_rate_exclusive_put(emc->clk);
  1412. return 0;
  1413. }
  1414. static const struct dev_pm_ops tegra_emc_pm_ops = {
  1415. .suspend = tegra_emc_suspend,
  1416. .resume = tegra_emc_resume,
  1417. };
  1418. static const struct of_device_id tegra_emc_of_match[] = {
  1419. { .compatible = "nvidia,tegra30-emc", },
  1420. {},
  1421. };
  1422. MODULE_DEVICE_TABLE(of, tegra_emc_of_match);
  1423. static struct platform_driver tegra_emc_driver = {
  1424. .probe = tegra_emc_probe,
  1425. .driver = {
  1426. .name = "tegra30-emc",
  1427. .of_match_table = tegra_emc_of_match,
  1428. .pm = &tegra_emc_pm_ops,
  1429. .suppress_bind_attrs = true,
  1430. .sync_state = icc_sync_state,
  1431. },
  1432. };
  1433. module_platform_driver(tegra_emc_driver);
  1434. MODULE_AUTHOR("Dmitry Osipenko <[email protected]>");
  1435. MODULE_DESCRIPTION("NVIDIA Tegra30 EMC driver");
  1436. MODULE_LICENSE("GPL v2");