intel_uncore.c 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001
  1. /*
  2. * Copyright © 2013 Intel Corporation
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a
  5. * copy of this software and associated documentation files (the "Software"),
  6. * to deal in the Software without restriction, including without limitation
  7. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. * and/or sell copies of the Software, and to permit persons to whom the
  9. * Software is furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice (including the next
  12. * paragraph) shall be included in all copies or substantial portions of the
  13. * Software.
  14. *
  15. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  18. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  21. * IN THE SOFTWARE.
  22. */
  23. #include "i915_drv.h"
  24. #include "intel_drv.h"
  25. #define FORCEWAKE_ACK_TIMEOUT_MS 2
  26. #define __raw_i915_read8(dev_priv__, reg__) readb((dev_priv__)->regs + (reg__))
  27. #define __raw_i915_write8(dev_priv__, reg__, val__) writeb(val__, (dev_priv__)->regs + (reg__))
  28. #define __raw_i915_read16(dev_priv__, reg__) readw((dev_priv__)->regs + (reg__))
  29. #define __raw_i915_write16(dev_priv__, reg__, val__) writew(val__, (dev_priv__)->regs + (reg__))
  30. #define __raw_i915_read32(dev_priv__, reg__) readl((dev_priv__)->regs + (reg__))
  31. #define __raw_i915_write32(dev_priv__, reg__, val__) writel(val__, (dev_priv__)->regs + (reg__))
  32. #define __raw_i915_read64(dev_priv__, reg__) readq((dev_priv__)->regs + (reg__))
  33. #define __raw_i915_write64(dev_priv__, reg__, val__) writeq(val__, (dev_priv__)->regs + (reg__))
  34. #define __raw_posting_read(dev_priv__, reg__) (void)__raw_i915_read32(dev_priv__, reg__)
  35. static void __gen6_gt_wait_for_thread_c0(struct drm_i915_private *dev_priv)
  36. {
  37. u32 gt_thread_status_mask;
  38. if (IS_HASWELL(dev_priv->dev))
  39. gt_thread_status_mask = GEN6_GT_THREAD_STATUS_CORE_MASK_HSW;
  40. else
  41. gt_thread_status_mask = GEN6_GT_THREAD_STATUS_CORE_MASK;
  42. /* w/a for a sporadic read returning 0 by waiting for the GT
  43. * thread to wake up.
  44. */
  45. if (wait_for_atomic_us((__raw_i915_read32(dev_priv, GEN6_GT_THREAD_STATUS_REG) & gt_thread_status_mask) == 0, 500))
  46. DRM_ERROR("GT thread status wait timed out\n");
  47. }
  48. static void __gen6_gt_force_wake_reset(struct drm_i915_private *dev_priv)
  49. {
  50. __raw_i915_write32(dev_priv, FORCEWAKE, 0);
  51. /* something from same cacheline, but !FORCEWAKE */
  52. __raw_posting_read(dev_priv, ECOBUS);
  53. }
  54. static void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv,
  55. int fw_engine)
  56. {
  57. if (wait_for_atomic((__raw_i915_read32(dev_priv, FORCEWAKE_ACK) & 1) == 0,
  58. FORCEWAKE_ACK_TIMEOUT_MS))
  59. DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
  60. __raw_i915_write32(dev_priv, FORCEWAKE, 1);
  61. /* something from same cacheline, but !FORCEWAKE */
  62. __raw_posting_read(dev_priv, ECOBUS);
  63. if (wait_for_atomic((__raw_i915_read32(dev_priv, FORCEWAKE_ACK) & 1),
  64. FORCEWAKE_ACK_TIMEOUT_MS))
  65. DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
  66. /* WaRsForcewakeWaitTC0:snb */
  67. __gen6_gt_wait_for_thread_c0(dev_priv);
  68. }
  69. static void __gen6_gt_force_wake_mt_reset(struct drm_i915_private *dev_priv)
  70. {
  71. __raw_i915_write32(dev_priv, FORCEWAKE_MT, _MASKED_BIT_DISABLE(0xffff));
  72. /* something from same cacheline, but !FORCEWAKE_MT */
  73. __raw_posting_read(dev_priv, ECOBUS);
  74. }
  75. static void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv,
  76. int fw_engine)
  77. {
  78. u32 forcewake_ack;
  79. if (IS_HASWELL(dev_priv->dev) || IS_GEN8(dev_priv->dev))
  80. forcewake_ack = FORCEWAKE_ACK_HSW;
  81. else
  82. forcewake_ack = FORCEWAKE_MT_ACK;
  83. if (wait_for_atomic((__raw_i915_read32(dev_priv, forcewake_ack) & FORCEWAKE_KERNEL) == 0,
  84. FORCEWAKE_ACK_TIMEOUT_MS))
  85. DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
  86. __raw_i915_write32(dev_priv, FORCEWAKE_MT,
  87. _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
  88. /* something from same cacheline, but !FORCEWAKE_MT */
  89. __raw_posting_read(dev_priv, ECOBUS);
  90. if (wait_for_atomic((__raw_i915_read32(dev_priv, forcewake_ack) & FORCEWAKE_KERNEL),
  91. FORCEWAKE_ACK_TIMEOUT_MS))
  92. DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
  93. /* WaRsForcewakeWaitTC0:ivb,hsw */
  94. if (INTEL_INFO(dev_priv->dev)->gen < 8)
  95. __gen6_gt_wait_for_thread_c0(dev_priv);
  96. }
  97. static void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
  98. {
  99. u32 gtfifodbg;
  100. gtfifodbg = __raw_i915_read32(dev_priv, GTFIFODBG);
  101. if (WARN(gtfifodbg, "GT wake FIFO error 0x%x\n", gtfifodbg))
  102. __raw_i915_write32(dev_priv, GTFIFODBG, gtfifodbg);
  103. }
  104. static void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv,
  105. int fw_engine)
  106. {
  107. __raw_i915_write32(dev_priv, FORCEWAKE, 0);
  108. /* something from same cacheline, but !FORCEWAKE */
  109. __raw_posting_read(dev_priv, ECOBUS);
  110. gen6_gt_check_fifodbg(dev_priv);
  111. }
  112. static void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv,
  113. int fw_engine)
  114. {
  115. __raw_i915_write32(dev_priv, FORCEWAKE_MT,
  116. _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
  117. /* something from same cacheline, but !FORCEWAKE_MT */
  118. __raw_posting_read(dev_priv, ECOBUS);
  119. gen6_gt_check_fifodbg(dev_priv);
  120. }
  121. static int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
  122. {
  123. int ret = 0;
  124. /* On VLV, FIFO will be shared by both SW and HW.
  125. * So, we need to read the FREE_ENTRIES everytime */
  126. if (IS_VALLEYVIEW(dev_priv->dev))
  127. dev_priv->uncore.fifo_count =
  128. __raw_i915_read32(dev_priv, GTFIFOCTL) &
  129. GT_FIFO_FREE_ENTRIES_MASK;
  130. if (dev_priv->uncore.fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES) {
  131. int loop = 500;
  132. u32 fifo = __raw_i915_read32(dev_priv, GTFIFOCTL) & GT_FIFO_FREE_ENTRIES_MASK;
  133. while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) {
  134. udelay(10);
  135. fifo = __raw_i915_read32(dev_priv, GTFIFOCTL) & GT_FIFO_FREE_ENTRIES_MASK;
  136. }
  137. if (WARN_ON(loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES))
  138. ++ret;
  139. dev_priv->uncore.fifo_count = fifo;
  140. }
  141. dev_priv->uncore.fifo_count--;
  142. return ret;
  143. }
  144. static void vlv_force_wake_reset(struct drm_i915_private *dev_priv)
  145. {
  146. __raw_i915_write32(dev_priv, FORCEWAKE_VLV,
  147. _MASKED_BIT_DISABLE(0xffff));
  148. /* something from same cacheline, but !FORCEWAKE_VLV */
  149. __raw_posting_read(dev_priv, FORCEWAKE_ACK_VLV);
  150. }
  151. static void __vlv_force_wake_get(struct drm_i915_private *dev_priv,
  152. int fw_engine)
  153. {
  154. /* Check for Render Engine */
  155. if (FORCEWAKE_RENDER & fw_engine) {
  156. if (wait_for_atomic((__raw_i915_read32(dev_priv,
  157. FORCEWAKE_ACK_VLV) &
  158. FORCEWAKE_KERNEL) == 0,
  159. FORCEWAKE_ACK_TIMEOUT_MS))
  160. DRM_ERROR("Timed out: Render forcewake old ack to clear.\n");
  161. __raw_i915_write32(dev_priv, FORCEWAKE_VLV,
  162. _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
  163. if (wait_for_atomic((__raw_i915_read32(dev_priv,
  164. FORCEWAKE_ACK_VLV) &
  165. FORCEWAKE_KERNEL),
  166. FORCEWAKE_ACK_TIMEOUT_MS))
  167. DRM_ERROR("Timed out: waiting for Render to ack.\n");
  168. }
  169. /* Check for Media Engine */
  170. if (FORCEWAKE_MEDIA & fw_engine) {
  171. if (wait_for_atomic((__raw_i915_read32(dev_priv,
  172. FORCEWAKE_ACK_MEDIA_VLV) &
  173. FORCEWAKE_KERNEL) == 0,
  174. FORCEWAKE_ACK_TIMEOUT_MS))
  175. DRM_ERROR("Timed out: Media forcewake old ack to clear.\n");
  176. __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_VLV,
  177. _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
  178. if (wait_for_atomic((__raw_i915_read32(dev_priv,
  179. FORCEWAKE_ACK_MEDIA_VLV) &
  180. FORCEWAKE_KERNEL),
  181. FORCEWAKE_ACK_TIMEOUT_MS))
  182. DRM_ERROR("Timed out: waiting for media to ack.\n");
  183. }
  184. /* WaRsForcewakeWaitTC0:vlv */
  185. __gen6_gt_wait_for_thread_c0(dev_priv);
  186. }
  187. static void __vlv_force_wake_put(struct drm_i915_private *dev_priv,
  188. int fw_engine)
  189. {
  190. /* Check for Render Engine */
  191. if (FORCEWAKE_RENDER & fw_engine)
  192. __raw_i915_write32(dev_priv, FORCEWAKE_VLV,
  193. _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
  194. /* Check for Media Engine */
  195. if (FORCEWAKE_MEDIA & fw_engine)
  196. __raw_i915_write32(dev_priv, FORCEWAKE_MEDIA_VLV,
  197. _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
  198. /* The below doubles as a POSTING_READ */
  199. gen6_gt_check_fifodbg(dev_priv);
  200. }
  201. void vlv_force_wake_get(struct drm_i915_private *dev_priv,
  202. int fw_engine)
  203. {
  204. unsigned long irqflags;
  205. spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
  206. if (FORCEWAKE_RENDER & fw_engine) {
  207. if (dev_priv->uncore.fw_rendercount++ == 0)
  208. dev_priv->uncore.funcs.force_wake_get(dev_priv,
  209. FORCEWAKE_RENDER);
  210. }
  211. if (FORCEWAKE_MEDIA & fw_engine) {
  212. if (dev_priv->uncore.fw_mediacount++ == 0)
  213. dev_priv->uncore.funcs.force_wake_get(dev_priv,
  214. FORCEWAKE_MEDIA);
  215. }
  216. spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
  217. }
  218. void vlv_force_wake_put(struct drm_i915_private *dev_priv,
  219. int fw_engine)
  220. {
  221. unsigned long irqflags;
  222. spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
  223. if (FORCEWAKE_RENDER & fw_engine) {
  224. WARN_ON(dev_priv->uncore.fw_rendercount == 0);
  225. if (--dev_priv->uncore.fw_rendercount == 0)
  226. dev_priv->uncore.funcs.force_wake_put(dev_priv,
  227. FORCEWAKE_RENDER);
  228. }
  229. if (FORCEWAKE_MEDIA & fw_engine) {
  230. WARN_ON(dev_priv->uncore.fw_mediacount == 0);
  231. if (--dev_priv->uncore.fw_mediacount == 0)
  232. dev_priv->uncore.funcs.force_wake_put(dev_priv,
  233. FORCEWAKE_MEDIA);
  234. }
  235. spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
  236. }
  237. static void gen6_force_wake_work(struct work_struct *work)
  238. {
  239. struct drm_i915_private *dev_priv =
  240. container_of(work, typeof(*dev_priv), uncore.force_wake_work.work);
  241. unsigned long irqflags;
  242. spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
  243. if (--dev_priv->uncore.forcewake_count == 0)
  244. dev_priv->uncore.funcs.force_wake_put(dev_priv, FORCEWAKE_ALL);
  245. spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
  246. }
  247. static void intel_uncore_forcewake_reset(struct drm_device *dev)
  248. {
  249. struct drm_i915_private *dev_priv = dev->dev_private;
  250. if (IS_VALLEYVIEW(dev)) {
  251. vlv_force_wake_reset(dev_priv);
  252. } else if (INTEL_INFO(dev)->gen >= 6) {
  253. __gen6_gt_force_wake_reset(dev_priv);
  254. if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
  255. __gen6_gt_force_wake_mt_reset(dev_priv);
  256. }
  257. }
  258. void intel_uncore_early_sanitize(struct drm_device *dev)
  259. {
  260. struct drm_i915_private *dev_priv = dev->dev_private;
  261. if (HAS_FPGA_DBG_UNCLAIMED(dev))
  262. __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
  263. if (IS_HASWELL(dev) &&
  264. (__raw_i915_read32(dev_priv, HSW_EDRAM_PRESENT) == 1)) {
  265. /* The docs do not explain exactly how the calculation can be
  266. * made. It is somewhat guessable, but for now, it's always
  267. * 128MB.
  268. * NB: We can't write IDICR yet because we do not have gt funcs
  269. * set up */
  270. dev_priv->ellc_size = 128;
  271. DRM_INFO("Found %zuMB of eLLC\n", dev_priv->ellc_size);
  272. }
  273. /* clear out old GT FIFO errors */
  274. if (IS_GEN6(dev) || IS_GEN7(dev))
  275. __raw_i915_write32(dev_priv, GTFIFODBG,
  276. __raw_i915_read32(dev_priv, GTFIFODBG));
  277. intel_uncore_forcewake_reset(dev);
  278. }
  279. void intel_uncore_sanitize(struct drm_device *dev)
  280. {
  281. struct drm_i915_private *dev_priv = dev->dev_private;
  282. u32 reg_val;
  283. /* BIOS often leaves RC6 enabled, but disable it for hw init */
  284. intel_disable_gt_powersave(dev);
  285. /* Turn off power gate, require especially for the BIOS less system */
  286. if (IS_VALLEYVIEW(dev)) {
  287. mutex_lock(&dev_priv->rps.hw_lock);
  288. reg_val = vlv_punit_read(dev_priv, PUNIT_REG_PWRGT_STATUS);
  289. if (reg_val & (RENDER_PWRGT | MEDIA_PWRGT | DISP2D_PWRGT))
  290. vlv_punit_write(dev_priv, PUNIT_REG_PWRGT_CTRL, 0x0);
  291. mutex_unlock(&dev_priv->rps.hw_lock);
  292. }
  293. }
  294. /*
  295. * Generally this is called implicitly by the register read function. However,
  296. * if some sequence requires the GT to not power down then this function should
  297. * be called at the beginning of the sequence followed by a call to
  298. * gen6_gt_force_wake_put() at the end of the sequence.
  299. */
  300. void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv, int fw_engine)
  301. {
  302. unsigned long irqflags;
  303. if (!dev_priv->uncore.funcs.force_wake_get)
  304. return;
  305. intel_runtime_pm_get(dev_priv);
  306. /* Redirect to VLV specific routine */
  307. if (IS_VALLEYVIEW(dev_priv->dev))
  308. return vlv_force_wake_get(dev_priv, fw_engine);
  309. spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
  310. if (dev_priv->uncore.forcewake_count++ == 0)
  311. dev_priv->uncore.funcs.force_wake_get(dev_priv, FORCEWAKE_ALL);
  312. spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
  313. }
  314. /*
  315. * see gen6_gt_force_wake_get()
  316. */
  317. void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv, int fw_engine)
  318. {
  319. unsigned long irqflags;
  320. if (!dev_priv->uncore.funcs.force_wake_put)
  321. return;
  322. /* Redirect to VLV specific routine */
  323. if (IS_VALLEYVIEW(dev_priv->dev))
  324. return vlv_force_wake_put(dev_priv, fw_engine);
  325. spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
  326. if (--dev_priv->uncore.forcewake_count == 0) {
  327. dev_priv->uncore.forcewake_count++;
  328. mod_delayed_work(dev_priv->wq,
  329. &dev_priv->uncore.force_wake_work,
  330. 1);
  331. }
  332. spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
  333. intel_runtime_pm_put(dev_priv);
  334. }
  335. /* We give fast paths for the really cool registers */
  336. #define NEEDS_FORCE_WAKE(dev_priv, reg) \
  337. ((reg) < 0x40000 && (reg) != FORCEWAKE)
  338. static void
  339. ilk_dummy_write(struct drm_i915_private *dev_priv)
  340. {
  341. /* WaIssueDummyWriteToWakeupFromRC6:ilk Issue a dummy write to wake up
  342. * the chip from rc6 before touching it for real. MI_MODE is masked,
  343. * hence harmless to write 0 into. */
  344. __raw_i915_write32(dev_priv, MI_MODE, 0);
  345. }
  346. static void
  347. hsw_unclaimed_reg_clear(struct drm_i915_private *dev_priv, u32 reg)
  348. {
  349. if (__raw_i915_read32(dev_priv, FPGA_DBG) & FPGA_DBG_RM_NOCLAIM) {
  350. DRM_ERROR("Unknown unclaimed register before writing to %x\n",
  351. reg);
  352. __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
  353. }
  354. }
  355. static void
  356. hsw_unclaimed_reg_check(struct drm_i915_private *dev_priv, u32 reg)
  357. {
  358. if (__raw_i915_read32(dev_priv, FPGA_DBG) & FPGA_DBG_RM_NOCLAIM) {
  359. DRM_ERROR("Unclaimed write to %x\n", reg);
  360. __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
  361. }
  362. }
  363. static void
  364. assert_device_not_suspended(struct drm_i915_private *dev_priv)
  365. {
  366. WARN(HAS_RUNTIME_PM(dev_priv->dev) && dev_priv->pm.suspended,
  367. "Device suspended\n");
  368. }
  369. #define REG_READ_HEADER(x) \
  370. unsigned long irqflags; \
  371. u##x val = 0; \
  372. spin_lock_irqsave(&dev_priv->uncore.lock, irqflags)
  373. #define REG_READ_FOOTER \
  374. spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); \
  375. trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \
  376. return val
  377. #define __gen4_read(x) \
  378. static u##x \
  379. gen4_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \
  380. REG_READ_HEADER(x); \
  381. val = __raw_i915_read##x(dev_priv, reg); \
  382. REG_READ_FOOTER; \
  383. }
  384. #define __gen5_read(x) \
  385. static u##x \
  386. gen5_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \
  387. REG_READ_HEADER(x); \
  388. ilk_dummy_write(dev_priv); \
  389. val = __raw_i915_read##x(dev_priv, reg); \
  390. REG_READ_FOOTER; \
  391. }
  392. #define __gen6_read(x) \
  393. static u##x \
  394. gen6_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \
  395. REG_READ_HEADER(x); \
  396. if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
  397. if (dev_priv->uncore.forcewake_count == 0) \
  398. dev_priv->uncore.funcs.force_wake_get(dev_priv, \
  399. FORCEWAKE_ALL); \
  400. val = __raw_i915_read##x(dev_priv, reg); \
  401. if (dev_priv->uncore.forcewake_count == 0) \
  402. dev_priv->uncore.funcs.force_wake_put(dev_priv, \
  403. FORCEWAKE_ALL); \
  404. } else { \
  405. val = __raw_i915_read##x(dev_priv, reg); \
  406. } \
  407. REG_READ_FOOTER; \
  408. }
  409. #define __vlv_read(x) \
  410. static u##x \
  411. vlv_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \
  412. unsigned fwengine = 0; \
  413. unsigned *fwcount; \
  414. REG_READ_HEADER(x); \
  415. if (FORCEWAKE_VLV_RENDER_RANGE_OFFSET(reg)) { \
  416. fwengine = FORCEWAKE_RENDER; \
  417. fwcount = &dev_priv->uncore.fw_rendercount; \
  418. } \
  419. else if (FORCEWAKE_VLV_MEDIA_RANGE_OFFSET(reg)) { \
  420. fwengine = FORCEWAKE_MEDIA; \
  421. fwcount = &dev_priv->uncore.fw_mediacount; \
  422. } \
  423. if (fwengine != 0) { \
  424. if ((*fwcount)++ == 0) \
  425. (dev_priv)->uncore.funcs.force_wake_get(dev_priv, \
  426. fwengine); \
  427. val = __raw_i915_read##x(dev_priv, reg); \
  428. if (--(*fwcount) == 0) \
  429. (dev_priv)->uncore.funcs.force_wake_put(dev_priv, \
  430. fwengine); \
  431. } else { \
  432. val = __raw_i915_read##x(dev_priv, reg); \
  433. } \
  434. REG_READ_FOOTER; \
  435. }
  436. __vlv_read(8)
  437. __vlv_read(16)
  438. __vlv_read(32)
  439. __vlv_read(64)
  440. __gen6_read(8)
  441. __gen6_read(16)
  442. __gen6_read(32)
  443. __gen6_read(64)
  444. __gen5_read(8)
  445. __gen5_read(16)
  446. __gen5_read(32)
  447. __gen5_read(64)
  448. __gen4_read(8)
  449. __gen4_read(16)
  450. __gen4_read(32)
  451. __gen4_read(64)
  452. #undef __vlv_read
  453. #undef __gen6_read
  454. #undef __gen5_read
  455. #undef __gen4_read
  456. #undef REG_READ_FOOTER
  457. #undef REG_READ_HEADER
  458. #define REG_WRITE_HEADER \
  459. unsigned long irqflags; \
  460. trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \
  461. spin_lock_irqsave(&dev_priv->uncore.lock, irqflags)
  462. #define REG_WRITE_FOOTER \
  463. spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags)
  464. #define __gen4_write(x) \
  465. static void \
  466. gen4_write##x(struct drm_i915_private *dev_priv, off_t reg, u##x val, bool trace) { \
  467. REG_WRITE_HEADER; \
  468. __raw_i915_write##x(dev_priv, reg, val); \
  469. REG_WRITE_FOOTER; \
  470. }
  471. #define __gen5_write(x) \
  472. static void \
  473. gen5_write##x(struct drm_i915_private *dev_priv, off_t reg, u##x val, bool trace) { \
  474. REG_WRITE_HEADER; \
  475. ilk_dummy_write(dev_priv); \
  476. __raw_i915_write##x(dev_priv, reg, val); \
  477. REG_WRITE_FOOTER; \
  478. }
  479. #define __gen6_write(x) \
  480. static void \
  481. gen6_write##x(struct drm_i915_private *dev_priv, off_t reg, u##x val, bool trace) { \
  482. u32 __fifo_ret = 0; \
  483. REG_WRITE_HEADER; \
  484. if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
  485. __fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
  486. } \
  487. assert_device_not_suspended(dev_priv); \
  488. __raw_i915_write##x(dev_priv, reg, val); \
  489. if (unlikely(__fifo_ret)) { \
  490. gen6_gt_check_fifodbg(dev_priv); \
  491. } \
  492. REG_WRITE_FOOTER; \
  493. }
  494. #define __hsw_write(x) \
  495. static void \
  496. hsw_write##x(struct drm_i915_private *dev_priv, off_t reg, u##x val, bool trace) { \
  497. u32 __fifo_ret = 0; \
  498. REG_WRITE_HEADER; \
  499. if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
  500. __fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
  501. } \
  502. assert_device_not_suspended(dev_priv); \
  503. hsw_unclaimed_reg_clear(dev_priv, reg); \
  504. __raw_i915_write##x(dev_priv, reg, val); \
  505. if (unlikely(__fifo_ret)) { \
  506. gen6_gt_check_fifodbg(dev_priv); \
  507. } \
  508. hsw_unclaimed_reg_check(dev_priv, reg); \
  509. REG_WRITE_FOOTER; \
  510. }
  511. static const u32 gen8_shadowed_regs[] = {
  512. FORCEWAKE_MT,
  513. GEN6_RPNSWREQ,
  514. GEN6_RC_VIDEO_FREQ,
  515. RING_TAIL(RENDER_RING_BASE),
  516. RING_TAIL(GEN6_BSD_RING_BASE),
  517. RING_TAIL(VEBOX_RING_BASE),
  518. RING_TAIL(BLT_RING_BASE),
  519. /* TODO: Other registers are not yet used */
  520. };
  521. static bool is_gen8_shadowed(struct drm_i915_private *dev_priv, u32 reg)
  522. {
  523. int i;
  524. for (i = 0; i < ARRAY_SIZE(gen8_shadowed_regs); i++)
  525. if (reg == gen8_shadowed_regs[i])
  526. return true;
  527. return false;
  528. }
  529. #define __gen8_write(x) \
  530. static void \
  531. gen8_write##x(struct drm_i915_private *dev_priv, off_t reg, u##x val, bool trace) { \
  532. bool __needs_put = reg < 0x40000 && !is_gen8_shadowed(dev_priv, reg); \
  533. REG_WRITE_HEADER; \
  534. if (__needs_put) { \
  535. dev_priv->uncore.funcs.force_wake_get(dev_priv, \
  536. FORCEWAKE_ALL); \
  537. } \
  538. __raw_i915_write##x(dev_priv, reg, val); \
  539. if (__needs_put) { \
  540. dev_priv->uncore.funcs.force_wake_put(dev_priv, \
  541. FORCEWAKE_ALL); \
  542. } \
  543. REG_WRITE_FOOTER; \
  544. }
  545. __gen8_write(8)
  546. __gen8_write(16)
  547. __gen8_write(32)
  548. __gen8_write(64)
  549. __hsw_write(8)
  550. __hsw_write(16)
  551. __hsw_write(32)
  552. __hsw_write(64)
  553. __gen6_write(8)
  554. __gen6_write(16)
  555. __gen6_write(32)
  556. __gen6_write(64)
  557. __gen5_write(8)
  558. __gen5_write(16)
  559. __gen5_write(32)
  560. __gen5_write(64)
  561. __gen4_write(8)
  562. __gen4_write(16)
  563. __gen4_write(32)
  564. __gen4_write(64)
  565. #undef __gen8_write
  566. #undef __hsw_write
  567. #undef __gen6_write
  568. #undef __gen5_write
  569. #undef __gen4_write
  570. #undef REG_WRITE_FOOTER
  571. #undef REG_WRITE_HEADER
  572. void intel_uncore_init(struct drm_device *dev)
  573. {
  574. struct drm_i915_private *dev_priv = dev->dev_private;
  575. INIT_DELAYED_WORK(&dev_priv->uncore.force_wake_work,
  576. gen6_force_wake_work);
  577. if (IS_VALLEYVIEW(dev)) {
  578. dev_priv->uncore.funcs.force_wake_get = __vlv_force_wake_get;
  579. dev_priv->uncore.funcs.force_wake_put = __vlv_force_wake_put;
  580. } else if (IS_HASWELL(dev) || IS_GEN8(dev)) {
  581. dev_priv->uncore.funcs.force_wake_get = __gen6_gt_force_wake_mt_get;
  582. dev_priv->uncore.funcs.force_wake_put = __gen6_gt_force_wake_mt_put;
  583. } else if (IS_IVYBRIDGE(dev)) {
  584. u32 ecobus;
  585. /* IVB configs may use multi-threaded forcewake */
  586. /* A small trick here - if the bios hasn't configured
  587. * MT forcewake, and if the device is in RC6, then
  588. * force_wake_mt_get will not wake the device and the
  589. * ECOBUS read will return zero. Which will be
  590. * (correctly) interpreted by the test below as MT
  591. * forcewake being disabled.
  592. */
  593. mutex_lock(&dev->struct_mutex);
  594. __gen6_gt_force_wake_mt_get(dev_priv, FORCEWAKE_ALL);
  595. ecobus = __raw_i915_read32(dev_priv, ECOBUS);
  596. __gen6_gt_force_wake_mt_put(dev_priv, FORCEWAKE_ALL);
  597. mutex_unlock(&dev->struct_mutex);
  598. if (ecobus & FORCEWAKE_MT_ENABLE) {
  599. dev_priv->uncore.funcs.force_wake_get =
  600. __gen6_gt_force_wake_mt_get;
  601. dev_priv->uncore.funcs.force_wake_put =
  602. __gen6_gt_force_wake_mt_put;
  603. } else {
  604. DRM_INFO("No MT forcewake available on Ivybridge, this can result in issues\n");
  605. DRM_INFO("when using vblank-synced partial screen updates.\n");
  606. dev_priv->uncore.funcs.force_wake_get =
  607. __gen6_gt_force_wake_get;
  608. dev_priv->uncore.funcs.force_wake_put =
  609. __gen6_gt_force_wake_put;
  610. }
  611. } else if (IS_GEN6(dev)) {
  612. dev_priv->uncore.funcs.force_wake_get =
  613. __gen6_gt_force_wake_get;
  614. dev_priv->uncore.funcs.force_wake_put =
  615. __gen6_gt_force_wake_put;
  616. }
  617. switch (INTEL_INFO(dev)->gen) {
  618. default:
  619. dev_priv->uncore.funcs.mmio_writeb = gen8_write8;
  620. dev_priv->uncore.funcs.mmio_writew = gen8_write16;
  621. dev_priv->uncore.funcs.mmio_writel = gen8_write32;
  622. dev_priv->uncore.funcs.mmio_writeq = gen8_write64;
  623. dev_priv->uncore.funcs.mmio_readb = gen6_read8;
  624. dev_priv->uncore.funcs.mmio_readw = gen6_read16;
  625. dev_priv->uncore.funcs.mmio_readl = gen6_read32;
  626. dev_priv->uncore.funcs.mmio_readq = gen6_read64;
  627. break;
  628. case 7:
  629. case 6:
  630. if (IS_HASWELL(dev)) {
  631. dev_priv->uncore.funcs.mmio_writeb = hsw_write8;
  632. dev_priv->uncore.funcs.mmio_writew = hsw_write16;
  633. dev_priv->uncore.funcs.mmio_writel = hsw_write32;
  634. dev_priv->uncore.funcs.mmio_writeq = hsw_write64;
  635. } else {
  636. dev_priv->uncore.funcs.mmio_writeb = gen6_write8;
  637. dev_priv->uncore.funcs.mmio_writew = gen6_write16;
  638. dev_priv->uncore.funcs.mmio_writel = gen6_write32;
  639. dev_priv->uncore.funcs.mmio_writeq = gen6_write64;
  640. }
  641. if (IS_VALLEYVIEW(dev)) {
  642. dev_priv->uncore.funcs.mmio_readb = vlv_read8;
  643. dev_priv->uncore.funcs.mmio_readw = vlv_read16;
  644. dev_priv->uncore.funcs.mmio_readl = vlv_read32;
  645. dev_priv->uncore.funcs.mmio_readq = vlv_read64;
  646. } else {
  647. dev_priv->uncore.funcs.mmio_readb = gen6_read8;
  648. dev_priv->uncore.funcs.mmio_readw = gen6_read16;
  649. dev_priv->uncore.funcs.mmio_readl = gen6_read32;
  650. dev_priv->uncore.funcs.mmio_readq = gen6_read64;
  651. }
  652. break;
  653. case 5:
  654. dev_priv->uncore.funcs.mmio_writeb = gen5_write8;
  655. dev_priv->uncore.funcs.mmio_writew = gen5_write16;
  656. dev_priv->uncore.funcs.mmio_writel = gen5_write32;
  657. dev_priv->uncore.funcs.mmio_writeq = gen5_write64;
  658. dev_priv->uncore.funcs.mmio_readb = gen5_read8;
  659. dev_priv->uncore.funcs.mmio_readw = gen5_read16;
  660. dev_priv->uncore.funcs.mmio_readl = gen5_read32;
  661. dev_priv->uncore.funcs.mmio_readq = gen5_read64;
  662. break;
  663. case 4:
  664. case 3:
  665. case 2:
  666. dev_priv->uncore.funcs.mmio_writeb = gen4_write8;
  667. dev_priv->uncore.funcs.mmio_writew = gen4_write16;
  668. dev_priv->uncore.funcs.mmio_writel = gen4_write32;
  669. dev_priv->uncore.funcs.mmio_writeq = gen4_write64;
  670. dev_priv->uncore.funcs.mmio_readb = gen4_read8;
  671. dev_priv->uncore.funcs.mmio_readw = gen4_read16;
  672. dev_priv->uncore.funcs.mmio_readl = gen4_read32;
  673. dev_priv->uncore.funcs.mmio_readq = gen4_read64;
  674. break;
  675. }
  676. }
  677. void intel_uncore_fini(struct drm_device *dev)
  678. {
  679. struct drm_i915_private *dev_priv = dev->dev_private;
  680. flush_delayed_work(&dev_priv->uncore.force_wake_work);
  681. /* Paranoia: make sure we have disabled everything before we exit. */
  682. intel_uncore_sanitize(dev);
  683. }
  684. static const struct register_whitelist {
  685. uint64_t offset;
  686. uint32_t size;
  687. uint32_t gen_bitmask; /* support gens, 0x10 for 4, 0x30 for 4 and 5, etc. */
  688. } whitelist[] = {
  689. { RING_TIMESTAMP(RENDER_RING_BASE), 8, 0x1F0 },
  690. };
  691. int i915_reg_read_ioctl(struct drm_device *dev,
  692. void *data, struct drm_file *file)
  693. {
  694. struct drm_i915_private *dev_priv = dev->dev_private;
  695. struct drm_i915_reg_read *reg = data;
  696. struct register_whitelist const *entry = whitelist;
  697. int i;
  698. for (i = 0; i < ARRAY_SIZE(whitelist); i++, entry++) {
  699. if (entry->offset == reg->offset &&
  700. (1 << INTEL_INFO(dev)->gen & entry->gen_bitmask))
  701. break;
  702. }
  703. if (i == ARRAY_SIZE(whitelist))
  704. return -EINVAL;
  705. switch (entry->size) {
  706. case 8:
  707. reg->val = I915_READ64(reg->offset);
  708. break;
  709. case 4:
  710. reg->val = I915_READ(reg->offset);
  711. break;
  712. case 2:
  713. reg->val = I915_READ16(reg->offset);
  714. break;
  715. case 1:
  716. reg->val = I915_READ8(reg->offset);
  717. break;
  718. default:
  719. WARN_ON(1);
  720. return -EINVAL;
  721. }
  722. return 0;
  723. }
  724. int i915_get_reset_stats_ioctl(struct drm_device *dev,
  725. void *data, struct drm_file *file)
  726. {
  727. struct drm_i915_private *dev_priv = dev->dev_private;
  728. struct drm_i915_reset_stats *args = data;
  729. struct i915_ctx_hang_stats *hs;
  730. int ret;
  731. if (args->flags || args->pad)
  732. return -EINVAL;
  733. if (args->ctx_id == DEFAULT_CONTEXT_ID && !capable(CAP_SYS_ADMIN))
  734. return -EPERM;
  735. ret = mutex_lock_interruptible(&dev->struct_mutex);
  736. if (ret)
  737. return ret;
  738. hs = i915_gem_context_get_hang_stats(dev, file, args->ctx_id);
  739. if (IS_ERR(hs)) {
  740. mutex_unlock(&dev->struct_mutex);
  741. return PTR_ERR(hs);
  742. }
  743. if (capable(CAP_SYS_ADMIN))
  744. args->reset_count = i915_reset_count(&dev_priv->gpu_error);
  745. else
  746. args->reset_count = 0;
  747. args->batch_active = hs->batch_active;
  748. args->batch_pending = hs->batch_pending;
  749. mutex_unlock(&dev->struct_mutex);
  750. return 0;
  751. }
  752. static int i965_reset_complete(struct drm_device *dev)
  753. {
  754. u8 gdrst;
  755. pci_read_config_byte(dev->pdev, I965_GDRST, &gdrst);
  756. return (gdrst & GRDOM_RESET_ENABLE) == 0;
  757. }
  758. static int i965_do_reset(struct drm_device *dev)
  759. {
  760. int ret;
  761. /*
  762. * Set the domains we want to reset (GRDOM/bits 2 and 3) as
  763. * well as the reset bit (GR/bit 0). Setting the GR bit
  764. * triggers the reset; when done, the hardware will clear it.
  765. */
  766. pci_write_config_byte(dev->pdev, I965_GDRST,
  767. GRDOM_RENDER | GRDOM_RESET_ENABLE);
  768. ret = wait_for(i965_reset_complete(dev), 500);
  769. if (ret)
  770. return ret;
  771. /* We can't reset render&media without also resetting display ... */
  772. pci_write_config_byte(dev->pdev, I965_GDRST,
  773. GRDOM_MEDIA | GRDOM_RESET_ENABLE);
  774. ret = wait_for(i965_reset_complete(dev), 500);
  775. if (ret)
  776. return ret;
  777. pci_write_config_byte(dev->pdev, I965_GDRST, 0);
  778. return 0;
  779. }
  780. static int ironlake_do_reset(struct drm_device *dev)
  781. {
  782. struct drm_i915_private *dev_priv = dev->dev_private;
  783. u32 gdrst;
  784. int ret;
  785. gdrst = I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR);
  786. gdrst &= ~GRDOM_MASK;
  787. I915_WRITE(MCHBAR_MIRROR_BASE + ILK_GDSR,
  788. gdrst | GRDOM_RENDER | GRDOM_RESET_ENABLE);
  789. ret = wait_for(I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR) & 0x1, 500);
  790. if (ret)
  791. return ret;
  792. /* We can't reset render&media without also resetting display ... */
  793. gdrst = I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR);
  794. gdrst &= ~GRDOM_MASK;
  795. I915_WRITE(MCHBAR_MIRROR_BASE + ILK_GDSR,
  796. gdrst | GRDOM_MEDIA | GRDOM_RESET_ENABLE);
  797. return wait_for(I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR) & 0x1, 500);
  798. }
  799. static int gen6_do_reset(struct drm_device *dev)
  800. {
  801. struct drm_i915_private *dev_priv = dev->dev_private;
  802. int ret;
  803. unsigned long irqflags;
  804. /* Hold uncore.lock across reset to prevent any register access
  805. * with forcewake not set correctly
  806. */
  807. spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
  808. /* Reset the chip */
  809. /* GEN6_GDRST is not in the gt power well, no need to check
  810. * for fifo space for the write or forcewake the chip for
  811. * the read
  812. */
  813. __raw_i915_write32(dev_priv, GEN6_GDRST, GEN6_GRDOM_FULL);
  814. /* Spin waiting for the device to ack the reset request */
  815. ret = wait_for((__raw_i915_read32(dev_priv, GEN6_GDRST) & GEN6_GRDOM_FULL) == 0, 500);
  816. intel_uncore_forcewake_reset(dev);
  817. /* If reset with a user forcewake, try to restore, otherwise turn it off */
  818. if (dev_priv->uncore.forcewake_count)
  819. dev_priv->uncore.funcs.force_wake_get(dev_priv, FORCEWAKE_ALL);
  820. else
  821. dev_priv->uncore.funcs.force_wake_put(dev_priv, FORCEWAKE_ALL);
  822. /* Restore fifo count */
  823. dev_priv->uncore.fifo_count = __raw_i915_read32(dev_priv, GTFIFOCTL) & GT_FIFO_FREE_ENTRIES_MASK;
  824. spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
  825. return ret;
  826. }
  827. int intel_gpu_reset(struct drm_device *dev)
  828. {
  829. switch (INTEL_INFO(dev)->gen) {
  830. case 8:
  831. case 7:
  832. case 6: return gen6_do_reset(dev);
  833. case 5: return ironlake_do_reset(dev);
  834. case 4: return i965_do_reset(dev);
  835. default: return -ENODEV;
  836. }
  837. }
  838. void intel_uncore_check_errors(struct drm_device *dev)
  839. {
  840. struct drm_i915_private *dev_priv = dev->dev_private;
  841. if (HAS_FPGA_DBG_UNCLAIMED(dev) &&
  842. (__raw_i915_read32(dev_priv, FPGA_DBG) & FPGA_DBG_RM_NOCLAIM)) {
  843. DRM_ERROR("Unclaimed register before interrupt\n");
  844. __raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
  845. }
  846. }