1. 22 8月, 2016 6 次提交
    • L
      drm/i915/skl: Add support for the SAGV, fix underrun hangs · f4033726
      Lyude 提交于
      Since the watermark calculations for Skylake are still broken, we're apt
      to hitting underruns very easily under multi-monitor configurations.
      While it would be lovely if this was fixed, it's not. Another problem
      that's been coming from this however, is the mysterious issue of
      underruns causing full system hangs. An easy way to reproduce this with
      a skylake system:
      
      - Get a laptop with a skylake GPU, and hook up two external monitors to
        it
      - Move the cursor from the built-in LCD to one of the external displays
        as quickly as you can
      - You'll get a few pipe underruns, and eventually the entire system will
        just freeze.
      
      After doing a lot of investigation and reading through the bspec, I
      found the existence of the SAGV, which is responsible for adjusting the
      system agent voltage and clock frequencies depending on how much power
      we need. According to the bspec:
      
      "The display engine access to system memory is blocked during the
       adjustment time. SAGV defaults to enabled. Software must use the
       GT-driver pcode mailbox to disable SAGV when the display engine is not
       able to tolerate the blocking time."
      
      The rest of the bspec goes on to explain that software can simply leave
      the SAGV enabled, and disable it when we use interlaced pipes/have more
      then one pipe active.
      
      Sure enough, with this patchset the system hangs resulting from pipe
      underruns on Skylake have completely vanished on my T460s. Additionally,
      the bspec mentions turning off the SAGV	with more then one pipe enabled
      as a workaround for display underruns. While this patch doesn't entirely
      fix that, it looks like it does improve the situation a little bit so
      it's likely this is going to be required to make watermarks on Skylake
      fully functional.
      
      This will still need additional work in the future: we shouldn't be
      enabling the SAGV if any of the currently enabled planes can't enable WM
      levels that introduce latencies >= 30 µs.
      
      Changes since v11:
       - Add skl_can_enable_sagv()
       - Make sure we don't enable SAGV when not all planes can enable
         watermarks >= the SAGV engine block time. I was originally going to
         save this for later, but I recently managed to run into a machine
         that was having problems with a single pipe configuration + SAGV.
       - Make comparisons to I915_SKL_SAGV_NOT_CONTROLLED explicit
       - Change I915_SAGV_DYNAMIC_FREQ to I915_SAGV_ENABLE
       - Move printks outside of mutexes
       - Don't print error messages twice
      Changes since v10:
       - Apparently sandybridge_pcode_read actually writes values and reads
         them back, despite it's misleading function name. This means we've
         been doing this mostly wrong and have been writing garbage to the
         SAGV control. Because of this, we no longer attempt to read the SAGV
         status during initialization (since there are no helpers for this).
       - mlankhorst noticed that this patch was breaking on some very early
         pre-release Skylake machines, which apparently don't allow you to
         disable the SAGV. To prevent machines from failing tests due to SAGV
         errors, if the first time we try to control the SAGV results in the
         mailbox indicating an invalid command, we just disable future attempts
         to control the SAGV state by setting dev_priv->skl_sagv_status to
         I915_SKL_SAGV_NOT_CONTROLLED and make a note of it in dmesg.
       - Move mutex_unlock() a little higher in skl_enable_sagv(). This
         doesn't actually fix anything, but lets us release the lock a little
         sooner since we're finished with it.
      Changes since v9:
       - Only enable/disable sagv on Skylake
      Changes since v8:
       - Add intel_state->modeset guard to the conditional for
         skl_enable_sagv()
      Changes since v7:
       - Remove GEN9_SAGV_LOW_FREQ, replace with GEN9_SAGV_IS_ENABLED (that's
         all we use it for anyway)
       - Use GEN9_SAGV_IS_ENABLED instead of 0x1 for clarification
       - Fix a styling error that snuck past me
      Changes since v6:
       - Protect skl_enable_sagv() with intel_state->modeset conditional in
         intel_atomic_commit_tail()
      Changes since v5:
       - Don't use is_power_of_2. Makes things confusing
       - Don't use the old state to figure out whether or not to
         enable/disable the sagv, use the new one
       - Split the loop in skl_disable_sagv into it's own function
       - Move skl_sagv_enable/disable() calls into intel_atomic_commit_tail()
      Changes since v4:
       - Use is_power_of_2 against active_crtcs to check whether we have > 1
         pipe enabled
       - Fix skl_sagv_get_hw_state(): (temp & 0x1) indicates disabled, 0x0
         enabled
       - Call skl_sagv_enable/disable() from pre/post-plane updates
      Changes since v3:
       - Use time_before() to compare timeout to jiffies
      Changes since v2:
       - Really apply minor style nitpicks to patch this time
      Changes since v1:
       - Added comments about this probably being one of the requirements to
         fixing Skylake's watermark issues
       - Minor style nitpicks from Matt Roper
       - Disable these functions on Broxton, since it doesn't have an SAGV
      Signed-off-by: NLyude <cpaul@redhat.com>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1471463761-26796-3-git-send-email-cpaul@redhat.com
      [mlankhorst: ENOSYS -> ENXIO, whitespace fixes]
      
      (cherry picked from commit 656d1b89)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      f4033726
    • L
      drm/i915/gen6+: Interpret mailbox error flags · 5bc6abe7
      Lyude 提交于
      In order to add proper support for the SAGV, we need to be able to know
      what the cause of a failure to change the SAGV through the pcode mailbox
      was. The reasoning for this is that some very early pre-release Skylake
      machines don't actually allow you to control the SAGV on them, and
      indicate an invalid mailbox command was sent.
      
      This also might come in handy in the future for debugging.
      
      Changes since v1:
       - Add functions for interpreting gen6 mailbox error codes along with
         gen7+ error codes, and actually interpret those codes properly
       - Renamed patch to reflect new behavior
      Signed-off-by: NLyude <cpaul@redhat.com>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1471463761-26796-2-git-send-email-cpaul@redhat.com
      [mlankhorst: -ENOSYS -> -ENXIO for checkpatch]
      
      (cherry picked from commit 87660502)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      5bc6abe7
    • D
      drm/i915: Reattach comment, complete type specification · 0184c2ff
      Dave Gordon 提交于
      In the recent patch
      bc3d6744 drm/i915: Allow userspace to request no-error-capture upon ...
      the final version moved the flags and the associated #defines around
      so they were adjacent; unfortunately, they ended up between a comment
      and the thing (hw_id) to which the comment applies :(
      
      So this patch reshuffles the comment and subject back together.
      
      Also, as we're touching 'hw_id', let's change it from just 'unsigned'
      to a fully-specified 'unsigned int', because some code checking tools
      (including checkpatch) object to plain 'unsigned'.
      
      Fixes: bc3d6744 ("drm/i915: Allow userspace to request no-error-capture...")
      Signed-off-by: NDave Gordon <david.s.gordon@intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Link: http://patchwork.freedesktop.org/patch/msgid/1471616622-6919-1-git-send-email-david.s.gordon@intel.comReviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      (cherry picked from commit 0be81156)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      0184c2ff
    • C
      drm/i915: Unconditionally flush any chipset buffers before execbuf · dcd79934
      Chris Wilson 提交于
      If userspace is asynchronously streaming into the batch or other
      execobjects, we may not flush those writes along with a change in cache
      domain (as there is no change). Therefore those writes may end up in
      internal chipset buffers and not visible to the GPU upon execution. We
      must issue a flush command or otherwise we encounter incoherency in the
      batchbuffers and the GPU executing invalid commands (i.e. hanging) quite
      regularly.
      
      v2: Throw a paranoid wmb() into the general flush so that we remain
      consistent with before.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90841
      Fixes: 1816f923 ("drm/i915: Support creation of unbound wc user...")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Akash Goel <akash.goel@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Tested-by: NMatti Hämäläinen <ccr@tnsp.org>
      Cc: stable@vger.kernel.org
      Reviewed-by: NMika Kuoppala <mika.kuoppala@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20160818161718.27187-1-chris@chris-wilson.co.uk
      (cherry picked from commit 600f4368)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      dcd79934
    • M
      drm/i915/gen9: Drop invalid WARN() during data rate calculation · c7aca235
      Matt Roper 提交于
      It's possible to have a non-zero plane mask and still wind up with a
      total data rate of zero.  There are two cases where this can happen:
      
       * planes are active (from the KMS point of view), but are
         all fully clipped (positioned offscreen)
       * the only active plane on a CRTC is the cursor (which is handled
         independently and not counted into the general data rate computations
      
      These are both valid display setups (although unusual), so we need to
      drop the WARN().
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Testcase: kms_universal_planes.cursor-only-pipe-*
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1466196140-16336-4-git-send-email-matthew.d.roper@intel.com
      Cc: stable@vger.kernel.org #v4.7+
      (cherry picked from commit 43aa7e87)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      c7aca235
    • M
      drm/i915/gen9: Initialize intel_state->active_crtcs during WM sanitization (v2) · f4750a46
      Matt Roper 提交于
      intel_state->active_crtcs is usually only initialized when doing a
      modeset.  During our first atomic commit after boot, we're effectively
      faking a modeset to sanitize the DDB/wm setup, so ensure that this field
      gets initialized before use.
      
      v2:
       - Don't clobber active_crtcs if our first commit really is a modeset
         (Maarten)
       - Grab connection_mutex when faking a modeset during sanitization
         (Maarten)
      Reported-by: NTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Tested-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1466196140-16336-2-git-send-email-matthew.d.roper@intel.com
      Cc: stable@vger.kernel.org #v4.7+
      (cherry picked from commit 1b54a880)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      f4750a46
  2. 18 8月, 2016 1 次提交
  3. 16 8月, 2016 1 次提交
  4. 15 8月, 2016 1 次提交
    • L
      drm/etnaviv: take GPU lock later in the submit process · d9853490
      Lucas Stach 提交于
      Both the fence and event alloc are safe to be done without holding the GPU
      lock, as they either don't need any locking (fences) or are protected by
      their own lock (events).
      
      This solves a bad locking interaction between the submit path and the
      recover worker. If userspace manages to exhaust all available events while
      the GPU is hung, the submit will wait for events to become available
      holding the GPU lock. The recover worker waits for this lock to become
      available before trying to recover the GPU which frees up the allocated
      events. Essentially both paths are deadlocked until the submit path
      times out waiting for available events, failing the submit that could
      otherwise be handled just fine if the recover worker had the chance to
      bring the GPU back in a working state.
      Signed-off-by: NLucas Stach <l.stach@pengutronix.de>
      Reviewed-by: NChristian Gmeiner <christian.gmeiner@gmail.com>
      d9853490
  5. 11 8月, 2016 16 次提交
  6. 10 8月, 2016 2 次提交
  7. 09 8月, 2016 7 次提交
  8. 08 8月, 2016 2 次提交
    • D
      drm: Paper over locking inversion after registration rework · 5c6c201c
      Daniel Vetter 提交于
      drm_connector_register_all requires a few too many locks because our
      connector_list locking is busted. Add another FIXME+hack to work
      around this. This should address the below lockdep splat:
      
      ======================================================
      [ INFO: possible circular locking dependency detected ]
      4.7.0-rc5+ #524 Tainted: G           O
      -------------------------------------------------------
      kworker/u8:0/6 is trying to acquire lock:
       (&dev->mode_config.mutex){+.+.+.}, at: [<ffffffff815afde0>] drm_modeset_lock_all+0x40/0x120
      
      but task is already holding lock:
       ((fb_notifier_list).rwsem){++++.+}, at: [<ffffffff810ac195>] __blocking_notifier_call_chain+0x35/0x70
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #1 ((fb_notifier_list).rwsem){++++.+}:
             [<ffffffff810df611>] lock_acquire+0xb1/0x200
             [<ffffffff819a55b4>] down_write+0x44/0x80
             [<ffffffff810abf91>] blocking_notifier_chain_register+0x21/0xb0
             [<ffffffff814c7448>] fb_register_client+0x18/0x20
             [<ffffffff814c6c86>] backlight_device_register+0x136/0x260
             [<ffffffffa0127eb2>] intel_backlight_device_register+0xa2/0x160 [i915]
             [<ffffffffa00f46be>] intel_connector_register+0xe/0x10 [i915]
             [<ffffffffa0112bfb>] intel_dp_connector_register+0x1b/0x80 [i915]
             [<ffffffff8159dfea>] drm_connector_register+0x4a/0x80
             [<ffffffff8159fe44>] drm_connector_register_all+0x64/0xf0
             [<ffffffff815a2a64>] drm_modeset_register_all+0x174/0x1c0
             [<ffffffff81599b72>] drm_dev_register+0xc2/0xd0
             [<ffffffffa00621d7>] i915_driver_load+0x1547/0x2200 [i915]
             [<ffffffffa006d80f>] i915_pci_probe+0x4f/0x70 [i915]
             [<ffffffff814a2135>] local_pci_probe+0x45/0xa0
             [<ffffffff814a349b>] pci_device_probe+0xdb/0x130
             [<ffffffff815c07e3>] driver_probe_device+0x223/0x440
             [<ffffffff815c0ad5>] __driver_attach+0xd5/0x100
             [<ffffffff815be386>] bus_for_each_dev+0x66/0xa0
             [<ffffffff815c002e>] driver_attach+0x1e/0x20
             [<ffffffff815bf9be>] bus_add_driver+0x1ee/0x280
             [<ffffffff815c1810>] driver_register+0x60/0xe0
             [<ffffffff814a1a10>] __pci_register_driver+0x60/0x70
             [<ffffffffa01a905b>] i915_init+0x5b/0x62 [i915]
             [<ffffffff8100042d>] do_one_initcall+0x3d/0x150
             [<ffffffff811a935b>] do_init_module+0x5f/0x1d9
             [<ffffffff81124416>] load_module+0x20e6/0x27e0
             [<ffffffff81124d63>] SYSC_finit_module+0xc3/0xf0
             [<ffffffff81124dae>] SyS_finit_module+0xe/0x10
             [<ffffffff819a83a9>] entry_SYSCALL_64_fastpath+0x1c/0xac
      
      -> #0 (&dev->mode_config.mutex){+.+.+.}:
             [<ffffffff810df0ac>] __lock_acquire+0x10fc/0x1260
             [<ffffffff810df611>] lock_acquire+0xb1/0x200
             [<ffffffff819a3097>] mutex_lock_nested+0x67/0x3c0
             [<ffffffff815afde0>] drm_modeset_lock_all+0x40/0x120
             [<ffffffff8158f79b>] drm_fb_helper_restore_fbdev_mode_unlocked+0x2b/0x80
             [<ffffffff8158f81d>] drm_fb_helper_set_par+0x2d/0x50
             [<ffffffffa0105f7a>] intel_fbdev_set_par+0x1a/0x60 [i915]
             [<ffffffff814c13c6>] fbcon_init+0x586/0x610
             [<ffffffff8154d16a>] visual_init+0xca/0x130
             [<ffffffff8154e611>] do_bind_con_driver+0x1c1/0x3a0
             [<ffffffff8154eaf6>] do_take_over_console+0x116/0x180
             [<ffffffff814bd3a7>] do_fbcon_takeover+0x57/0xb0
             [<ffffffff814c1e48>] fbcon_event_notify+0x658/0x750
             [<ffffffff810abcae>] notifier_call_chain+0x3e/0xb0
             [<ffffffff810ac1ad>] __blocking_notifier_call_chain+0x4d/0x70
             [<ffffffff810ac1e6>] blocking_notifier_call_chain+0x16/0x20
             [<ffffffff814c748b>] fb_notifier_call_chain+0x1b/0x20
             [<ffffffff814c86b1>] register_framebuffer+0x251/0x330
             [<ffffffff8158fa9f>] drm_fb_helper_initial_config+0x25f/0x3f0
             [<ffffffffa0106b48>] intel_fbdev_initial_config+0x18/0x30 [i915]
             [<ffffffff810adfd8>] async_run_entry_fn+0x48/0x150
             [<ffffffff810a3947>] process_one_work+0x1e7/0x750
             [<ffffffff810a3efb>] worker_thread+0x4b/0x4f0
             [<ffffffff810aad4f>] kthread+0xef/0x110
             [<ffffffff819a85ef>] ret_from_fork+0x1f/0x40
      
      other info that might help us debug this:
      
       Possible unsafe locking scenario:
      
             CPU0                    CPU1
             ----                    ----
        lock((fb_notifier_list).rwsem);
                                     lock(&dev->mode_config.mutex);
                                     lock((fb_notifier_list).rwsem);
        lock(&dev->mode_config.mutex);
      
       *** DEADLOCK ***
      
      6 locks held by kworker/u8:0/6:
       #0:  ("events_unbound"){.+.+.+}, at: [<ffffffff810a38c9>] process_one_work+0x169/0x750
       #1:  ((&entry->work)){+.+.+.}, at: [<ffffffff810a38c9>] process_one_work+0x169/0x750
       #2:  (registration_lock){+.+.+.}, at: [<ffffffff814c8487>] register_framebuffer+0x27/0x330
       #3:  (console_lock){+.+.+.}, at: [<ffffffff814c86ce>] register_framebuffer+0x26e/0x330
       #4:  (&fb_info->lock){+.+.+.}, at: [<ffffffff814c78dd>] lock_fb_info+0x1d/0x40
       #5:  ((fb_notifier_list).rwsem){++++.+}, at: [<ffffffff810ac195>] __blocking_notifier_call_chain+0x35/0x70
      
      stack backtrace:
      CPU: 2 PID: 6 Comm: kworker/u8:0 Tainted: G           O    4.7.0-rc5+ #524
      Hardware name: Intel Corp. Broxton P/NOTEBOOK, BIOS APLKRVPA.X64.0138.B33.1606250842 06/25/2016
      Workqueue: events_unbound async_run_entry_fn
       0000000000000000 ffff8800758577f0 ffffffff814507a5 ffffffff828b9900
       ffffffff828b9900 ffff880075857830 ffffffff810dc6fa ffff880075857880
       ffff88007584d688 0000000000000005 0000000000000006 ffff88007584d6b0
      Call Trace:
       [<ffffffff814507a5>] dump_stack+0x67/0x92
       [<ffffffff810dc6fa>] print_circular_bug+0x1aa/0x200
       [<ffffffff810df0ac>] __lock_acquire+0x10fc/0x1260
       [<ffffffff810df611>] lock_acquire+0xb1/0x200
       [<ffffffff815afde0>] ? drm_modeset_lock_all+0x40/0x120
       [<ffffffff815afde0>] ? drm_modeset_lock_all+0x40/0x120
       [<ffffffff819a3097>] mutex_lock_nested+0x67/0x3c0
       [<ffffffff815afde0>] ? drm_modeset_lock_all+0x40/0x120
       [<ffffffff810fa85f>] ? rcu_read_lock_sched_held+0x7f/0x90
       [<ffffffff81208218>] ? kmem_cache_alloc_trace+0x248/0x2b0
       [<ffffffff815afdc5>] ? drm_modeset_lock_all+0x25/0x120
       [<ffffffff815afde0>] drm_modeset_lock_all+0x40/0x120
       [<ffffffff8158f79b>] drm_fb_helper_restore_fbdev_mode_unlocked+0x2b/0x80
       [<ffffffff8158f81d>] drm_fb_helper_set_par+0x2d/0x50
       [<ffffffffa0105f7a>] intel_fbdev_set_par+0x1a/0x60 [i915]
       [<ffffffff814c13c6>] fbcon_init+0x586/0x610
       [<ffffffff8154d16a>] visual_init+0xca/0x130
       [<ffffffff8154e611>] do_bind_con_driver+0x1c1/0x3a0
       [<ffffffff8154eaf6>] do_take_over_console+0x116/0x180
       [<ffffffff814bd3a7>] do_fbcon_takeover+0x57/0xb0
       [<ffffffff814c1e48>] fbcon_event_notify+0x658/0x750
       [<ffffffff810abcae>] notifier_call_chain+0x3e/0xb0
       [<ffffffff810ac1ad>] __blocking_notifier_call_chain+0x4d/0x70
       [<ffffffff810ac1e6>] blocking_notifier_call_chain+0x16/0x20
       [<ffffffff814c748b>] fb_notifier_call_chain+0x1b/0x20
       [<ffffffff814c86b1>] register_framebuffer+0x251/0x330
       [<ffffffff815b7e8d>] ? vga_switcheroo_client_fb_set+0x5d/0x70
       [<ffffffff8158fa9f>] drm_fb_helper_initial_config+0x25f/0x3f0
       [<ffffffffa0106b48>] intel_fbdev_initial_config+0x18/0x30 [i915]
       [<ffffffff810adfd8>] async_run_entry_fn+0x48/0x150
       [<ffffffff810a3947>] process_one_work+0x1e7/0x750
       [<ffffffff810a38c9>] ? process_one_work+0x169/0x750
       [<ffffffff810a3efb>] worker_thread+0x4b/0x4f0
       [<ffffffff810a3eb0>] ? process_one_work+0x750/0x750
       [<ffffffff810aad4f>] kthread+0xef/0x110
       [<ffffffff819a85ef>] ret_from_fork+0x1f/0x40
       [<ffffffff810aac60>] ? kthread_stop+0x2e0/0x2e0
      
      v2: Rebase onto the right branch (hand-editing patches ftw) and add more
      reporters.
      Reported-by: NImre Deak <imre.deak@intel.com>
      Cc: Imre Deak <imre.deak@intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Acked-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reported-by: NJiri Kosina <jikos@kernel.org>
      Cc: Jiri Kosina <jikos@kernel.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      5c6c201c
    • L
      drm: rcar-du: Link HDMI encoder with bridge · 29986cc8
      Laurent Pinchart 提交于
      The conversion of the rcar-du driver from the I2C slave encoder to the
      DRM bridge API left the HDMI encoder's bridge pointer NULL, preventing
      the bridge from being handled automatically by the DRM core. Fix it.
      
      Fixes: 1d926114 ("drm: rcar-du: Remove i2c slave encoder interface for hdmi encoder")
      Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      29986cc8
  9. 06 8月, 2016 1 次提交
  10. 04 8月, 2016 3 次提交