1. 21 4月, 2018 2 次提交
  2. 07 4月, 2018 1 次提交
    • C
      drm/i915: Pass the set of guilty engines to i915_reset() · d0667e9c
      Chris Wilson 提交于
      Currently, we rely on inspecting the hangcheck state from within the
      i915_reset() routines to determine which engines were guilty of the
      hang. This is problematic for cases where we want to run
      i915_handle_error() and call i915_reset() independently of hangcheck.
      Instead of relying on the indirect parameter passing, turn it into an
      explicit parameter providing the set of stalled engines which then are
      treated as guilty until proven innocent.
      
      While we are removing the implicit stalled parameter, also make the
      reason into an explicit parameter to i915_reset(). We still need a
      back-channel for i915_handle_error() to hand over the task to the locked
      waiter, but let's keep that its own channel rather than incriminate
      another.
      
      This leaves stalled/seqno as being private to hangcheck, with no more
      nefarious snooping by reset, be it whole-device or per-engine. \o/
      
      The only real issue now is that this makes it crystal clear that we
      don't actually do any testing of hangcheck per se in
      drv_selftest/live_hangcheck, merely of resets!
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Michel Thierry <michel.thierry@intel.com>
      Cc: Jeff McGee <jeff.mcgee@intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Reviewed-by: NMichel Thierry <michel.thierry@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180406220354.18911-2-chris@chris-wilson.co.uk
      d0667e9c
  3. 06 4月, 2018 3 次提交
  4. 23 3月, 2018 1 次提交
  5. 20 3月, 2018 2 次提交
  6. 10 3月, 2018 1 次提交
  7. 09 3月, 2018 2 次提交
    • C
      drm/i915: Push irq_shift from gen8_cs_irq_handler() to caller · 51f6b0f9
      Chris Wilson 提交于
      Originally we were inlining gen8_cs_irq_handler() and so expected the
      compiler to constant-fold away the irq_shift (so we had hardcoded it as
      opposed to use engine->irq_shift). However, we dropped the inline given
      the proliferation of gen8_cs_irq_handler()s. If we pull the shifting
      of the iir into the caller, we can shrink the code still further:
      
      add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-34 (-34)
      Function                                     old     new   delta
      gen8_cs_irq_handler                          123     118      -5
      gen8_gt_irq_handler                          261     248     -13
      gen11_irq_handler                            722     706     -16
      
      v2: Drop gen11_cs_irq_handler now that it is a simple
      stub around gen8_cs_irq_handler (Daniele)
      
      References: 5d3d69d5 ("drm/i915: Stop inlining the execlists IRQ handler")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Reviewed-by: NDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180309010808.11921-1-chris@chris-wilson.co.uk
      51f6b0f9
    • M
      drm/i915: Handle pipe CRC around enabling/disabling pipe. · 033b7a23
      Maarten Lankhorst 提交于
      This will get rid of the following error:
      [   74.730271] WARNING: CPU: 4 PID: 0 at drivers/gpu/drm/drm_vblank.c:614 drm_calc_vbltimestamp_from_scanoutpos+0x13e/0x2f0
      [   74.730311] Modules linked in: vgem snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic i915 x86_pkg_temp_thermal intel_powerclamp coretemp snd_hda_intel crct10dif_pclmul snd_hda_codec crc32_pclmul snd_hwdep broadcom ghash_clmulni_intel snd_hda_core bcm_phy_lib snd_pcm tg3 lpc_ich mei_me mei prime_numbers
      [   74.730353] CPU: 4 PID: 0 Comm: swapper/4 Tainted: G     U           4.16.0-rc2-CI-CI_DRM_3822+ #1
      [   74.730355] Hardware name: Dell Inc. XPS 8300  /0Y2MRG, BIOS A06 10/17/2011
      [   74.730359] RIP: 0010:drm_calc_vbltimestamp_from_scanoutpos+0x13e/0x2f0
      [   74.730361] RSP: 0018:ffff88022fb03d10 EFLAGS: 00010086
      [   74.730365] RAX: ffffffffa0291d20 RBX: ffff88021a180000 RCX: 0000000000000001
      [   74.730367] RDX: ffffffff820e7db8 RSI: 0000000000000001 RDI: ffffffff82068cea
      [   74.730369] RBP: ffff88022fb03d70 R08: 0000000000000000 R09: ffffffff815d26d0
      [   74.730371] R10: 0000000000000000 R11: ffffffffa0161ca0 R12: 0000000000000001
      [   74.730373] R13: ffff880212448008 R14: ffff880212448330 R15: 0000000000000000
      [   74.730376] FS:  0000000000000000(0000) GS:ffff88022fb00000(0000) knlGS:0000000000000000
      [   74.730378] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   74.730380] CR2: 000055edcbec9000 CR3: 0000000002210001 CR4: 00000000000606e0
      [   74.730382] Call Trace:
      [   74.730385]  <IRQ>
      [   74.730397]  drm_get_last_vbltimestamp+0x36/0x50
      [   74.730401]  drm_update_vblank_count+0x64/0x240
      [   74.730409]  drm_crtc_accurate_vblank_count+0x41/0x90
      [   74.730453]  display_pipe_crc_irq_handler+0x176/0x220 [i915]
      [   74.730497]  i9xx_pipe_crc_irq_handler+0xfe/0x150 [i915]
      [   74.730537]  ironlake_irq_handler+0x618/0xa30 [i915]
      [   74.730548]  __handle_irq_event_percpu+0x3c/0x340
      [   74.730556]  handle_irq_event_percpu+0x1b/0x50
      [   74.730561]  handle_irq_event+0x2f/0x50
      [   74.730566]  handle_edge_irq+0xe4/0x1b0
      [   74.730572]  handle_irq+0x11/0x20
      [   74.730576]  do_IRQ+0x5e/0x120
      [   74.730584]  common_interrupt+0x84/0x84
      [   74.730586]  </IRQ>
      [   74.730591] RIP: 0010:cpuidle_enter_state+0xaa/0x350
      [   74.730593] RSP: 0018:ffffc9000008beb8 EFLAGS: 00000212 ORIG_RAX: ffffffffffffffde
      [   74.730597] RAX: ffff880226b80040 RBX: 000000000031fc3e RCX: 0000000000000001
      [   74.730599] RDX: 0000000000000000 RSI: ffffffff8210fb59 RDI: ffffffff820c02e7
      [   74.730601] RBP: 0000000000000004 R08: 00000000000040af R09: 0000000000000018
      [   74.730603] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000004
      [   74.730606] R13: ffffe8ffffd00430 R14: 0000001166120bf4 R15: ffffffff82294460
      [   74.730621]  ? cpuidle_enter_state+0xa6/0x350
      [   74.730629]  do_idle+0x188/0x1d0
      [   74.730636]  cpu_startup_entry+0x14/0x20
      [   74.730641]  start_secondary+0x129/0x160
      [   74.730646]  secondary_startup_64+0xa5/0xb0
      [   74.730660] Code: e1 48 c7 c2 b8 7d 0e 82 be 01 00 00 00 48 c7 c7 ea 8c 06 82 e8 64 ec ff ff 48 8b 83 c8 07 00 00 48 83 78 28 00 0f 84 e2 fe ff ff <0f> 0b 45 31 ed e9 db fe ff ff 41 b8 d3 4d 62 10 89 c8 6a 03 41
      [   74.730754] ---[ end trace 14b1345705b68565 ]---
      
      Changes since v1:
      - Don't try to apply CRC workaround when enabling pipe, it should already be enabled.
      Changes since v2:
      - Make crc functions for !DEBUGFS case inline.
      - Pass intel_crtc to crc functions.
      - Add comments to callsites.
      Changes since v3:
      - Cache selected source to pipe_crc->source.
      - Set pipe_crc->skipped to MIN_INT during disable to close a race condition.
      Changes since v4:
      - Handle fallout from setting pipe_crc->source in irq handler.
      
      Cc: Marta Löfstedt <marta.lofstedt@intel.com>
      Reported-by: NMarta Löfstedt <marta.lofstedt@intel.com>
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105185Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180308120202.52446-1-maarten.lankhorst@linux.intel.comReviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      033b7a23
  8. 07 3月, 2018 1 次提交
  9. 01 3月, 2018 1 次提交
  10. 22 2月, 2018 1 次提交
  11. 19 2月, 2018 2 次提交
  12. 16 2月, 2018 1 次提交
  13. 03 2月, 2018 1 次提交
  14. 31 1月, 2018 2 次提交
    • R
      drm/i915/cnl: Add HPD support for Port F. · cf53902f
      Rodrigo Vivi 提交于
      On CNP boards that are using DDI F,
      bit 25 (SDE_PORTE_HOTPLUG_SPT) is representing
      the Digital Port F hotplug line when the Digital
      Port F hotplug detect input is enabled.
      
      v2: Reuse all existent structure instead of adding a
      new HPD_PORT_F pointing to pin of port E.
      v3: Use IS_CNL_WITH_PORT_F so we can start upstreaming
          this right now. If that SKU ever get a proper name
          we come back and update it.
      v4: Rebase on top of digital connected port using encoder
          instead of port.
      v5: Moved IS_CNL_WITH_PORT_F definition to the PCI IDs patch.
      
      Cc: Lucas De Marchi <lucas.demarchi@intel.com>
      Cc: Manasi Navare <manasi.d.navare@intel.com>
      Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180129232223.766-8-rodrigo.vivi@intel.com
      cf53902f
    • R
      drm/i915/cnl: Add AUX-F support · a324fcac
      Rodrigo Vivi 提交于
      On some Cannonlake SKUs we have a dedicated Aux for port F,
      that is only the full split between port A and port E.
      
      There is still no Aux E for Port E, as in previous platforms,
      because port_E still means shared lanes with port A.
      
      v2: Rebase.
      v3: Add couple missed PORT_F cases on intel_dp.
      v4: Rebase and fix commit message.
      v5: Squash Imre's "drm/i915: Add missing AUX_F power well string"
      v6: Rebase on top of display headers rework.
      v7: s/IS_CANNONLAKE/IS_CNL_WITH_PORT_F (DK)
      v8: Fix Aux bits for Port F (DK)
      v9: Fix VBT definition of Port F (DK).
      v10: Squash power well addition to this patch to avoid
           warns as pointed by DK.
      v11: Clean up squashed commit message. (David)
      v12: Remove unnecessary handling for older platforms (DK)
           Adding AUX_F to PG2 following other existent ones. (DK)
      
      Cc: David Weinehall <david.weinehall@linux.intel.com>
      Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Cc: Lucas De Marchi <lucas.demarchi@intel.com>
      Cc: Imre Deak <imre.deak@intel.com>
      Cc: Manasi Navare <manasi.d.navare@intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Reviewed-by: NDavid Weinehall <david.weinehall@linux.intel.com>
      Reviewed-by: NDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180129232223.766-2-rodrigo.vivi@intel.com
      a324fcac
  15. 25 1月, 2018 1 次提交
  16. 06 12月, 2017 1 次提交
  17. 01 12月, 2017 1 次提交
  18. 16 11月, 2017 1 次提交
  19. 09 11月, 2017 1 次提交
    • C
      drm/i915: Filter out spurious execlists context-switch interrupts · 5d266692
      Chris Wilson 提交于
      Back in commit a4b2b015 ("drm/i915: Don't mark an execlists
      context-switch when idle") we noticed the presence of late
      context-switch interrupts. We were able to filter those out by looking
      at whether the ELSP remained active, but in commit beecec90
      ("drm/i915/execlists: Preemption!") that became problematic as we now
      anticipate receiving a context-switch event for preemption while ELSP
      may be empty. To restore the spurious interrupt suppression, add a
      counter for the expected number of pending context-switches and skip if
      we do not need to handle this interrupt to make forward progress.
      
      v2: Don't forget to switch on for preempt.
      v3: Reduce the counter to a on/off boolean tracker. Declare the HW as
      active when we first submit, and idle after the final completion event
      (with which we confirm the HW says it is idle), and track each source
      of activity separately. With a finite number of sources, it should aide
      us in debugging which gets stuck.
      
      Fixes: beecec90 ("drm/i915/execlists: Preemption!")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Michal Winiarski <michal.winiarski@intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171023213237.26536-3-chris@chris-wilson.co.ukReviewed-by: NMika Kuoppala <mika.kuoppala@linux.intel.com>
      (cherry picked from commit 4a118ecb)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      5d266692
  20. 26 10月, 2017 1 次提交
    • C
      drm/i915/guc: Always enable the breadcrumbs irq · bcbd5c33
      Chris Wilson 提交于
      The execlists emulation on top of the GuC (used for scheduling and
      preemption) depends on the MI_USER_INTERRUPT for its notifications and
      tasklet action. As we always employ the irq, there is no advantage in
      ever disabling it while we are using the GuC, so allow us to arm the
      breadcrumb irq when enabling GuC submission and disarm upon disabling.
      The impact should be lessened by the delayed irq disabling we do (we
      only disable after receiving an interrupt for which no one was wanting),
      but allowing guc to explicitly manage the irq in relation to itself is
      simpler and prevents an issue with losing an interrupt for preemption
      as it is not coupled to an active request.
      
      Internally, we add a reference counter (breadcrumbs.irq_enabled) as a
      simple mechanism to allow GuC to keep the breadcrumb irq enabled. To
      improve upon always enabling the irq while guc is selected, we need
      to hook into the parking facility of intel_engines so that we only enable
      the breadcrumbs while the GT is active (one step better would be to
      individually park/unpark each engine).
      
      In effect, this means that we keep the breadcrumb irq always enabled for
      the entire duration the guc is busy, whereas before we would try to
      switch it off whenever we idled for more than interrupt with no
      associated waiters. The difference *should* be negligible in practice!
      
      v2: Stop abusing fence signaling (and its auxiliary data structures) to
      enable the breadcrumbs irqs.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Michał Winiarski <michal.winiarski@intel.com>,
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Reviewed-by: Michał Winiarski <michal.winiarski@intel.com>,
      Link: https://patchwork.freedesktop.org/patch/msgid/20171025143943.7661-3-chris@chris-wilson.co.uk
      bcbd5c33
  21. 24 10月, 2017 1 次提交
    • C
      drm/i915: Filter out spurious execlists context-switch interrupts · 4a118ecb
      Chris Wilson 提交于
      Back in commit a4b2b015 ("drm/i915: Don't mark an execlists
      context-switch when idle") we noticed the presence of late
      context-switch interrupts. We were able to filter those out by looking
      at whether the ELSP remained active, but in commit beecec90
      ("drm/i915/execlists: Preemption!") that became problematic as we now
      anticipate receiving a context-switch event for preemption while ELSP
      may be empty. To restore the spurious interrupt suppression, add a
      counter for the expected number of pending context-switches and skip if
      we do not need to handle this interrupt to make forward progress.
      
      v2: Don't forget to switch on for preempt.
      v3: Reduce the counter to a on/off boolean tracker. Declare the HW as
      active when we first submit, and idle after the final completion event
      (with which we confirm the HW says it is idle), and track each source
      of activity separately. With a finite number of sources, it should aide
      us in debugging which gets stuck.
      
      Fixes: beecec90 ("drm/i915/execlists: Preemption!")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Michal Winiarski <michal.winiarski@intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171023213237.26536-3-chris@chris-wilson.co.ukReviewed-by: NMika Kuoppala <mika.kuoppala@linux.intel.com>
      4a118ecb
  22. 11 10月, 2017 3 次提交
  23. 10 10月, 2017 2 次提交
  24. 05 10月, 2017 1 次提交
    • C
      drm/i915/execlists: Preemption! · beecec90
      Chris Wilson 提交于
      When we write to ELSP, it triggers a context preemption at the earliest
      arbitration point (3DPRIMITIVE, some PIPECONTROLs, a few other
      operations and the explicit MI_ARB_CHECK). If this is to the same
      context, it triggers a LITE_RESTORE where the RING_TAIL is merely
      updated (used currently to chain requests from the same context
      together, avoiding bubbles). However, if it is to a different context, a
      full context-switch is performed and it will start to execute the new
      context saving the image of the old for later execution.
      
      Previously we avoided preemption by only submitting a new context when
      the old was idle. But now we wish embrace it, and if the new request has
      a higher priority than the currently executing request, we write to the
      ELSP regardless, thus triggering preemption, but we tell the GPU to
      switch to our special preemption context (not the target). In the
      context-switch interrupt handler, we know that the previous contexts
      have finished execution and so can unwind all the incomplete requests
      and compute the new highest priority request to execute.
      
      It would be feasible to avoid the switch-to-idle intermediate by
      programming the ELSP with the target context. The difficulty is in
      tracking which request that should be whilst maintaining the dependency
      change, the error comes in with coalesced requests. As we only track the
      most recent request and its priority, we may run into the issue of being
      tricked in preempting a high priority request that was followed by a
      low priority request from the same context (e.g. for PI); worse still
      that earlier request may be our own dependency and the order then broken
      by preemption. By injecting the switch-to-idle and then recomputing the
      priority queue, we avoid the issue with tracking in-flight coalesced
      requests. Having tried the preempt-to-busy approach, and failed to find
      a way around the coalesced priority issue, Michal's original proposal to
      inject an idle context (based on handling GuC preemption) succeeds.
      
      The current heuristic for deciding when to preempt are only if the new
      request is of higher priority, and has the privileged priority of
      greater than 0. Note that the scheduler remains unfair!
      
      v2: Disable for gen8 (bdw/bsw) as we need additional w/a for GPGPU.
      Since, the feature is now conditional and not always available when we
      have a scheduler, make it known via the HAS_SCHEDULER GETPARAM (now a
      capability mask).
      v3: Stylistic tweaks.
      v4: Appease Joonas with a snippet of kerneldoc, only to fuel to fire of
      the preempt vs preempting debate.
      Suggested-by: NMichal Winiarski <michal.winiarski@intel.com>
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Michal Winiarski <michal.winiarski@intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Cc: Ben Widawsky <benjamin.widawsky@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171003203453.15692-8-chris@chris-wilson.co.uk
      beecec90
  25. 02 10月, 2017 1 次提交
  26. 29 9月, 2017 1 次提交
  27. 26 9月, 2017 1 次提交
    • U
      drm/i915: Enable scanline read based on frame timestamps · aec0246f
      Uma Shankar 提交于
      For certain platforms on certain encoders, timings are driven
      from port instead of pipe. Thus, we can't rely on pipe scanline
      registers to get the timing information. Some cases scanline
      register read will not be functional.
      This is causing vblank evasion logic to fail since it relies on
      scanline, causing atomic update failure warnings.
      
      This patch uses pipe framestamp and current timestamp registers
      to calculate scanline. This is an indirect way to get the scanline.
      It helps resolve atomic update failure for gen9 dsi platforms.
      
      v2: Addressed Ville and Daniel's review comments. Updated the
      register MACROs, handled race condition for register reads,
      extracted timings from the hwmode. Removed the dependency on
      crtc->config to get the encoder type.
      
      v3: Made get scanline function generic
      
      v4: Addressed Ville's review comments. Added a flag to decide timestamp
      based scanline reporting. Changed 64bit variables to u32
      
      v5: Adressed Ville's review comments. Put the scanline compute function
      at the place of caller. Removed hwmode flags from uapi and used a local
      i915 data structure instead.
      
      v6: Used vblank hwmode to get the timings.
      
      v7: Fixed sparse warnings, indentation and minor review comments.
      
      v8: Limited this only for Gen9 DSI.
      
      Credits-to: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NUma Shankar <uma.shankar@intel.com>
      Signed-off-by: NChandra Konduru <chandra.konduru@intel.com>
      Signed-off-by: NVidya Srinivas <vidya.srinivas@intel.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/1506347761-4201-1-git-send-email-vidya.srinivas@intel.com
      aec0246f
  28. 25 9月, 2017 2 次提交
  29. 22 9月, 2017 1 次提交