aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2016-05-16 17:06:14 -0400
committerDave Airlie <airlied@redhat.com>2016-05-16 17:06:14 -0400
commit99ee87295017e36abb6925e6139ca303cb55aee7 (patch)
tree259fb5d2fd348147fd17378fdbf98761c32116e5
parent76e9cab5403809fa1fa6f698d2f7c1b7dd224022 (diff)
parent9ecb549867d7f642f0379f574f0e52870009a8bf (diff)
Merge tag 'topic/drm-misc-2016-05-13' of git://anongit.freedesktop.org/drm-intel into drm-next
I kinda hoped that I could still sneak in Noralf's drm_simple_display_pipe, since there's intereset by others now (for tilcdc at least). But it wasn't ready by a hair. Oh well. Otherwise random stuff plus prep patches from Noralf. * tag 'topic/drm-misc-2016-05-13' of git://anongit.freedesktop.org/drm-intel: drm/atomic: Add drm_atomic_helper_best_encoder() drm/atomic: Don't skip drm_bridge_*() calls if !drm_encoder_helper_funcs drm/fb-cma-helper: Hook up to DocBook and fix some docs drm/fb-helper: Remove mention of CONFIG_FB_DEFERRED_IO in docs drm/sti: include linux/seq_file.h where needed drm/tegra: Use lockless gem BO free callback drm/exynos: Use lockless gem BO free callback drm: Make drm_encoder_helper_funcs optional
-rw-r--r--Documentation/DocBook/gpu.tmpl5
-rw-r--r--drivers/gpu/drm/drm_atomic_helper.c49
-rw-r--r--drivers/gpu/drm/drm_crtc_helper.c41
-rw-r--r--drivers/gpu/drm/drm_fb_cma_helper.c8
-rw-r--r--drivers/gpu/drm/drm_fb_helper.c16
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_drv.c2
-rw-r--r--drivers/gpu/drm/sti/sti_cursor.c2
-rw-r--r--drivers/gpu/drm/sti/sti_gdp.c1
-rw-r--r--drivers/gpu/drm/sti/sti_hda.c1
-rw-r--r--drivers/gpu/drm/sti/sti_hqvdp.c1
-rw-r--r--drivers/gpu/drm/sti/sti_mixer.c1
-rw-r--r--drivers/gpu/drm/sti/sti_tvout.c1
-rw-r--r--drivers/gpu/drm/sti/sti_vid.c1
-rw-r--r--drivers/gpu/drm/tegra/drm.c2
-rw-r--r--include/drm/drm_atomic_helper.h2
15 files changed, 95 insertions, 38 deletions
diff --git a/Documentation/DocBook/gpu.tmpl b/Documentation/DocBook/gpu.tmpl
index 9dd48f7490df..4a0c599b6a6d 100644
--- a/Documentation/DocBook/gpu.tmpl
+++ b/Documentation/DocBook/gpu.tmpl
@@ -1617,6 +1617,11 @@ void intel_crt_init(struct drm_device *dev)
1617!Iinclude/drm/drm_fb_helper.h 1617!Iinclude/drm/drm_fb_helper.h
1618 </sect2> 1618 </sect2>
1619 <sect2> 1619 <sect2>
1620 <title>Framebuffer CMA Helper Functions Reference</title>
1621!Pdrivers/gpu/drm/drm_fb_cma_helper.c framebuffer cma helper functions
1622!Edrivers/gpu/drm/drm_fb_cma_helper.c
1623 </sect2>
1624 <sect2>
1620 <title>Display Port Helper Functions Reference</title> 1625 <title>Display Port Helper Functions Reference</title>
1621!Pdrivers/gpu/drm/drm_dp_helper.c dp helpers 1626!Pdrivers/gpu/drm/drm_dp_helper.c dp helpers
1622!Iinclude/drm/drm_dp_helper.h 1627!Iinclude/drm/drm_dp_helper.h
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 997fd21e5388..43a0b3dfa846 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -384,8 +384,6 @@ mode_fixup(struct drm_atomic_state *state)
384 */ 384 */
385 encoder = conn_state->best_encoder; 385 encoder = conn_state->best_encoder;
386 funcs = encoder->helper_private; 386 funcs = encoder->helper_private;
387 if (!funcs)
388 continue;
389 387
390 ret = drm_bridge_mode_fixup(encoder->bridge, &crtc_state->mode, 388 ret = drm_bridge_mode_fixup(encoder->bridge, &crtc_state->mode,
391 &crtc_state->adjusted_mode); 389 &crtc_state->adjusted_mode);
@@ -394,7 +392,7 @@ mode_fixup(struct drm_atomic_state *state)
394 return -EINVAL; 392 return -EINVAL;
395 } 393 }
396 394
397 if (funcs->atomic_check) { 395 if (funcs && funcs->atomic_check) {
398 ret = funcs->atomic_check(encoder, crtc_state, 396 ret = funcs->atomic_check(encoder, crtc_state,
399 conn_state); 397 conn_state);
400 if (ret) { 398 if (ret) {
@@ -402,7 +400,7 @@ mode_fixup(struct drm_atomic_state *state)
402 encoder->base.id, encoder->name); 400 encoder->base.id, encoder->name);
403 return ret; 401 return ret;
404 } 402 }
405 } else if (funcs->mode_fixup) { 403 } else if (funcs && funcs->mode_fixup) {
406 ret = funcs->mode_fixup(encoder, &crtc_state->mode, 404 ret = funcs->mode_fixup(encoder, &crtc_state->mode,
407 &crtc_state->adjusted_mode); 405 &crtc_state->adjusted_mode);
408 if (!ret) { 406 if (!ret) {
@@ -707,12 +705,14 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
707 drm_bridge_disable(encoder->bridge); 705 drm_bridge_disable(encoder->bridge);
708 706
709 /* Right function depends upon target state. */ 707 /* Right function depends upon target state. */
710 if (connector->state->crtc && funcs->prepare) 708 if (funcs) {
711 funcs->prepare(encoder); 709 if (connector->state->crtc && funcs->prepare)
712 else if (funcs->disable) 710 funcs->prepare(encoder);
713 funcs->disable(encoder); 711 else if (funcs->disable)
714 else 712 funcs->disable(encoder);
715 funcs->dpms(encoder, DRM_MODE_DPMS_OFF); 713 else if (funcs->dpms)
714 funcs->dpms(encoder, DRM_MODE_DPMS_OFF);
715 }
716 716
717 drm_bridge_post_disable(encoder->bridge); 717 drm_bridge_post_disable(encoder->bridge);
718 } 718 }
@@ -873,7 +873,7 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
873 * Each encoder has at most one connector (since we always steal 873 * Each encoder has at most one connector (since we always steal
874 * it away), so we won't call mode_set hooks twice. 874 * it away), so we won't call mode_set hooks twice.
875 */ 875 */
876 if (funcs->mode_set) 876 if (funcs && funcs->mode_set)
877 funcs->mode_set(encoder, mode, adjusted_mode); 877 funcs->mode_set(encoder, mode, adjusted_mode);
878 878
879 drm_bridge_mode_set(encoder->bridge, mode, adjusted_mode); 879 drm_bridge_mode_set(encoder->bridge, mode, adjusted_mode);
@@ -974,10 +974,12 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
974 */ 974 */
975 drm_bridge_pre_enable(encoder->bridge); 975 drm_bridge_pre_enable(encoder->bridge);
976 976
977 if (funcs->enable) 977 if (funcs) {
978 funcs->enable(encoder); 978 if (funcs->enable)
979 else 979 funcs->enable(encoder);
980 funcs->commit(encoder); 980 else if (funcs->commit)
981 funcs->commit(encoder);
982 }
981 983
982 drm_bridge_enable(encoder->bridge); 984 drm_bridge_enable(encoder->bridge);
983 } 985 }
@@ -2481,6 +2483,23 @@ backoff:
2481EXPORT_SYMBOL(drm_atomic_helper_connector_dpms); 2483EXPORT_SYMBOL(drm_atomic_helper_connector_dpms);
2482 2484
2483/** 2485/**
2486 * drm_atomic_helper_best_encoder - Helper for &drm_connector_helper_funcs
2487 * ->best_encoder callback
2488 * @connector: Connector control structure
2489 *
2490 * This is a &drm_connector_helper_funcs ->best_encoder callback helper for
2491 * connectors that support exactly 1 encoder, statically determined at driver
2492 * init time.
2493 */
2494struct drm_encoder *
2495drm_atomic_helper_best_encoder(struct drm_connector *connector)
2496{
2497 WARN_ON(connector->encoder_ids[1]);
2498 return drm_encoder_find(connector->dev, connector->encoder_ids[0]);
2499}
2500EXPORT_SYMBOL(drm_atomic_helper_best_encoder);
2501
2502/**
2484 * DOC: atomic state reset and initialization 2503 * DOC: atomic state reset and initialization
2485 * 2504 *
2486 * Both the drm core and the atomic helpers assume that there is always the full 2505 * Both the drm core and the atomic helpers assume that there is always the full
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index f47a252ffa89..a6e42433ef0e 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -170,11 +170,14 @@ drm_encoder_disable(struct drm_encoder *encoder)
170{ 170{
171 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; 171 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
172 172
173 if (!encoder_funcs)
174 return;
175
173 drm_bridge_disable(encoder->bridge); 176 drm_bridge_disable(encoder->bridge);
174 177
175 if (encoder_funcs->disable) 178 if (encoder_funcs->disable)
176 (*encoder_funcs->disable)(encoder); 179 (*encoder_funcs->disable)(encoder);
177 else 180 else if (encoder_funcs->dpms)
178 (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF); 181 (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF);
179 182
180 drm_bridge_post_disable(encoder->bridge); 183 drm_bridge_post_disable(encoder->bridge);
@@ -248,6 +251,9 @@ drm_crtc_prepare_encoders(struct drm_device *dev)
248 251
249 drm_for_each_encoder(encoder, dev) { 252 drm_for_each_encoder(encoder, dev) {
250 encoder_funcs = encoder->helper_private; 253 encoder_funcs = encoder->helper_private;
254 if (!encoder_funcs)
255 continue;
256
251 /* Disable unused encoders */ 257 /* Disable unused encoders */
252 if (encoder->crtc == NULL) 258 if (encoder->crtc == NULL)
253 drm_encoder_disable(encoder); 259 drm_encoder_disable(encoder);
@@ -326,6 +332,10 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
326 if (encoder->crtc != crtc) 332 if (encoder->crtc != crtc)
327 continue; 333 continue;
328 334
335 encoder_funcs = encoder->helper_private;
336 if (!encoder_funcs)
337 continue;
338
329 ret = drm_bridge_mode_fixup(encoder->bridge, 339 ret = drm_bridge_mode_fixup(encoder->bridge,
330 mode, adjusted_mode); 340 mode, adjusted_mode);
331 if (!ret) { 341 if (!ret) {
@@ -360,11 +370,15 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
360 if (encoder->crtc != crtc) 370 if (encoder->crtc != crtc)
361 continue; 371 continue;
362 372
373 encoder_funcs = encoder->helper_private;
374 if (!encoder_funcs)
375 continue;
376
363 drm_bridge_disable(encoder->bridge); 377 drm_bridge_disable(encoder->bridge);
364 378
365 encoder_funcs = encoder->helper_private;
366 /* Disable the encoders as the first thing we do. */ 379 /* Disable the encoders as the first thing we do. */
367 encoder_funcs->prepare(encoder); 380 if (encoder_funcs->prepare)
381 encoder_funcs->prepare(encoder);
368 382
369 drm_bridge_post_disable(encoder->bridge); 383 drm_bridge_post_disable(encoder->bridge);
370 } 384 }
@@ -385,11 +399,15 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
385 if (encoder->crtc != crtc) 399 if (encoder->crtc != crtc)
386 continue; 400 continue;
387 401
402 encoder_funcs = encoder->helper_private;
403 if (!encoder_funcs)
404 continue;
405
388 DRM_DEBUG_KMS("[ENCODER:%d:%s] set [MODE:%d:%s]\n", 406 DRM_DEBUG_KMS("[ENCODER:%d:%s] set [MODE:%d:%s]\n",
389 encoder->base.id, encoder->name, 407 encoder->base.id, encoder->name,
390 mode->base.id, mode->name); 408 mode->base.id, mode->name);
391 encoder_funcs = encoder->helper_private; 409 if (encoder_funcs->mode_set)
392 encoder_funcs->mode_set(encoder, mode, adjusted_mode); 410 encoder_funcs->mode_set(encoder, mode, adjusted_mode);
393 411
394 drm_bridge_mode_set(encoder->bridge, mode, adjusted_mode); 412 drm_bridge_mode_set(encoder->bridge, mode, adjusted_mode);
395 } 413 }
@@ -402,10 +420,14 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
402 if (encoder->crtc != crtc) 420 if (encoder->crtc != crtc)
403 continue; 421 continue;
404 422
423 encoder_funcs = encoder->helper_private;
424 if (!encoder_funcs)
425 continue;
426
405 drm_bridge_pre_enable(encoder->bridge); 427 drm_bridge_pre_enable(encoder->bridge);
406 428
407 encoder_funcs = encoder->helper_private; 429 if (encoder_funcs->commit)
408 encoder_funcs->commit(encoder); 430 encoder_funcs->commit(encoder);
409 431
410 drm_bridge_enable(encoder->bridge); 432 drm_bridge_enable(encoder->bridge);
411 } 433 }
@@ -790,12 +812,15 @@ static void drm_helper_encoder_dpms(struct drm_encoder *encoder, int mode)
790 struct drm_bridge *bridge = encoder->bridge; 812 struct drm_bridge *bridge = encoder->bridge;
791 const struct drm_encoder_helper_funcs *encoder_funcs; 813 const struct drm_encoder_helper_funcs *encoder_funcs;
792 814
815 encoder_funcs = encoder->helper_private;
816 if (!encoder_funcs)
817 return;
818
793 if (mode == DRM_MODE_DPMS_ON) 819 if (mode == DRM_MODE_DPMS_ON)
794 drm_bridge_pre_enable(bridge); 820 drm_bridge_pre_enable(bridge);
795 else 821 else
796 drm_bridge_disable(bridge); 822 drm_bridge_disable(bridge);
797 823
798 encoder_funcs = encoder->helper_private;
799 if (encoder_funcs->dpms) 824 if (encoder_funcs->dpms)
800 encoder_funcs->dpms(encoder, mode); 825 encoder_funcs->dpms(encoder, mode);
801 826
diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
index 086f600a975a..3165ac0e93e5 100644
--- a/drivers/gpu/drm/drm_fb_cma_helper.c
+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -43,14 +43,12 @@ struct drm_fbdev_cma {
43 * Provides helper functions for creating a cma (contiguous memory allocator) 43 * Provides helper functions for creating a cma (contiguous memory allocator)
44 * backed framebuffer. 44 * backed framebuffer.
45 * 45 *
46 * drm_fb_cma_create() is used in the 46 * drm_fb_cma_create() is used in the &drm_mode_config_funcs ->fb_create
47 * (struct drm_mode_config_funcs *)->fb_create callback function to create the 47 * callback function to create a cma backed framebuffer.
48 * cma backed framebuffer.
49 * 48 *
50 * An fbdev framebuffer backed by cma is also available by calling 49 * An fbdev framebuffer backed by cma is also available by calling
51 * drm_fbdev_cma_init(). drm_fbdev_cma_fini() tears it down. 50 * drm_fbdev_cma_init(). drm_fbdev_cma_fini() tears it down.
52 * If CONFIG_FB_DEFERRED_IO is enabled and the callback 51 * If the &drm_framebuffer_funcs ->dirty callback is set, fb_deferred_io
53 * (struct drm_framebuffer_funcs)->dirty is set, fb_deferred_io
54 * will be set up automatically. dirty() is called by 52 * will be set up automatically. dirty() is called by
55 * drm_fb_helper_deferred_io() in process context (struct delayed_work). 53 * drm_fb_helper_deferred_io() in process context (struct delayed_work).
56 * 54 *
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 385284bc773c..e03f8ad90b3a 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -85,14 +85,14 @@ static LIST_HEAD(kernel_fb_helper_list);
85 * should call drm_fb_helper_single_add_all_connectors() followed by 85 * should call drm_fb_helper_single_add_all_connectors() followed by
86 * drm_fb_helper_initial_config(). 86 * drm_fb_helper_initial_config().
87 * 87 *
88 * If CONFIG_FB_DEFERRED_IO is enabled and &drm_framebuffer_funcs ->dirty is 88 * If &drm_framebuffer_funcs ->dirty is set, the
89 * set, the drm_fb_helper_{cfb,sys}_{write,fillrect,copyarea,imageblit} 89 * drm_fb_helper_{cfb,sys}_{write,fillrect,copyarea,imageblit} functions will
90 * functions will accumulate changes and schedule &fb_helper .dirty_work to run 90 * accumulate changes and schedule &drm_fb_helper ->dirty_work to run right
91 * right away. This worker then calls the dirty() function ensuring that it 91 * away. This worker then calls the dirty() function ensuring that it will
92 * will always run in process context since the fb_*() function could be 92 * always run in process context since the fb_*() function could be running in
93 * running in atomic context. If drm_fb_helper_deferred_io() is used as the 93 * atomic context. If drm_fb_helper_deferred_io() is used as the deferred_io
94 * deferred_io callback it will also schedule dirty_work with the damage 94 * callback it will also schedule dirty_work with the damage collected from the
95 * collected from the mmap page writes. 95 * mmap page writes.
96 */ 96 */
97 97
98/** 98/**
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 6c4dd49de993..21c719e8e02b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -418,7 +418,7 @@ static struct drm_driver exynos_drm_driver = {
418 .get_vblank_counter = drm_vblank_no_hw_counter, 418 .get_vblank_counter = drm_vblank_no_hw_counter,
419 .enable_vblank = exynos_drm_crtc_enable_vblank, 419 .enable_vblank = exynos_drm_crtc_enable_vblank,
420 .disable_vblank = exynos_drm_crtc_disable_vblank, 420 .disable_vblank = exynos_drm_crtc_disable_vblank,
421 .gem_free_object = exynos_drm_gem_free_object, 421 .gem_free_object_unlocked = exynos_drm_gem_free_object,
422 .gem_vm_ops = &exynos_drm_gem_vm_ops, 422 .gem_vm_ops = &exynos_drm_gem_vm_ops,
423 .dumb_create = exynos_drm_gem_dumb_create, 423 .dumb_create = exynos_drm_gem_dumb_create,
424 .dumb_map_offset = exynos_drm_gem_dumb_map_offset, 424 .dumb_map_offset = exynos_drm_gem_dumb_map_offset,
diff --git a/drivers/gpu/drm/sti/sti_cursor.c b/drivers/gpu/drm/sti/sti_cursor.c
index 3abb400151ac..4e990299735c 100644
--- a/drivers/gpu/drm/sti/sti_cursor.c
+++ b/drivers/gpu/drm/sti/sti_cursor.c
@@ -6,6 +6,8 @@
6 * License terms: GNU General Public License (GPL), version 2 6 * License terms: GNU General Public License (GPL), version 2
7 */ 7 */
8 8
9#include <linux/seq_file.h>
10
9#include <drm/drm_atomic.h> 11#include <drm/drm_atomic.h>
10#include <drm/drm_fb_cma_helper.h> 12#include <drm/drm_fb_cma_helper.h>
11#include <drm/drm_gem_cma_helper.h> 13#include <drm/drm_gem_cma_helper.h>
diff --git a/drivers/gpu/drm/sti/sti_gdp.c b/drivers/gpu/drm/sti/sti_gdp.c
index ff3d3e7e7704..ff33c38da197 100644
--- a/drivers/gpu/drm/sti/sti_gdp.c
+++ b/drivers/gpu/drm/sti/sti_gdp.c
@@ -5,6 +5,7 @@
5 * for STMicroelectronics. 5 * for STMicroelectronics.
6 * License terms: GNU General Public License (GPL), version 2 6 * License terms: GNU General Public License (GPL), version 2
7 */ 7 */
8#include <linux/seq_file.h>
8 9
9#include <drm/drm_atomic.h> 10#include <drm/drm_atomic.h>
10#include <drm/drm_fb_cma_helper.h> 11#include <drm/drm_fb_cma_helper.h>
diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
index ec0d017eaf1a..f7d3464cdf09 100644
--- a/drivers/gpu/drm/sti/sti_hda.c
+++ b/drivers/gpu/drm/sti/sti_hda.c
@@ -8,6 +8,7 @@
8#include <linux/component.h> 8#include <linux/component.h>
9#include <linux/module.h> 9#include <linux/module.h>
10#include <linux/platform_device.h> 10#include <linux/platform_device.h>
11#include <linux/seq_file.h>
11 12
12#include <drm/drmP.h> 13#include <drm/drmP.h>
13#include <drm/drm_atomic_helper.h> 14#include <drm/drm_atomic_helper.h>
diff --git a/drivers/gpu/drm/sti/sti_hqvdp.c b/drivers/gpu/drm/sti/sti_hqvdp.c
index e05b0dc523ff..1edec29b9e45 100644
--- a/drivers/gpu/drm/sti/sti_hqvdp.c
+++ b/drivers/gpu/drm/sti/sti_hqvdp.c
@@ -7,6 +7,7 @@
7#include <linux/component.h> 7#include <linux/component.h>
8#include <linux/firmware.h> 8#include <linux/firmware.h>
9#include <linux/reset.h> 9#include <linux/reset.h>
10#include <linux/seq_file.h>
10 11
11#include <drm/drm_atomic.h> 12#include <drm/drm_atomic.h>
12#include <drm/drm_fb_cma_helper.h> 13#include <drm/drm_fb_cma_helper.h>
diff --git a/drivers/gpu/drm/sti/sti_mixer.c b/drivers/gpu/drm/sti/sti_mixer.c
index e7425c38fc93..aed7801b51f7 100644
--- a/drivers/gpu/drm/sti/sti_mixer.c
+++ b/drivers/gpu/drm/sti/sti_mixer.c
@@ -5,6 +5,7 @@
5 * for STMicroelectronics. 5 * for STMicroelectronics.
6 * License terms: GNU General Public License (GPL), version 2 6 * License terms: GNU General Public License (GPL), version 2
7 */ 7 */
8#include <linux/seq_file.h>
8 9
9#include "sti_compositor.h" 10#include "sti_compositor.h"
10#include "sti_mixer.h" 11#include "sti_mixer.h"
diff --git a/drivers/gpu/drm/sti/sti_tvout.c b/drivers/gpu/drm/sti/sti_tvout.c
index 2c99016443e5..f983db5a59da 100644
--- a/drivers/gpu/drm/sti/sti_tvout.c
+++ b/drivers/gpu/drm/sti/sti_tvout.c
@@ -12,6 +12,7 @@
12#include <linux/of_platform.h> 12#include <linux/of_platform.h>
13#include <linux/platform_device.h> 13#include <linux/platform_device.h>
14#include <linux/reset.h> 14#include <linux/reset.h>
15#include <linux/seq_file.h>
15 16
16#include <drm/drmP.h> 17#include <drm/drmP.h>
17#include <drm/drm_crtc_helper.h> 18#include <drm/drm_crtc_helper.h>
diff --git a/drivers/gpu/drm/sti/sti_vid.c b/drivers/gpu/drm/sti/sti_vid.c
index 5a2c5dc3687b..523ed19f5ac6 100644
--- a/drivers/gpu/drm/sti/sti_vid.c
+++ b/drivers/gpu/drm/sti/sti_vid.c
@@ -3,6 +3,7 @@
3 * Author: Fabien Dessenne <fabien.dessenne@st.com> for STMicroelectronics. 3 * Author: Fabien Dessenne <fabien.dessenne@st.com> for STMicroelectronics.
4 * License terms: GNU General Public License (GPL), version 2 4 * License terms: GNU General Public License (GPL), version 2
5 */ 5 */
6#include <linux/seq_file.h>
6 7
7#include <drm/drmP.h> 8#include <drm/drmP.h>
8 9
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 71a52f4e688b..45deb8fd8e7c 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -932,7 +932,7 @@ static struct drm_driver tegra_drm_driver = {
932 .debugfs_cleanup = tegra_debugfs_cleanup, 932 .debugfs_cleanup = tegra_debugfs_cleanup,
933#endif 933#endif
934 934
935 .gem_free_object = tegra_bo_free_object, 935 .gem_free_object_unlocked = tegra_bo_free_object,
936 .gem_vm_ops = &tegra_bo_vm_ops, 936 .gem_vm_ops = &tegra_bo_vm_ops,
937 937
938 .prime_handle_to_fd = drm_gem_prime_handle_to_fd, 938 .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
index 03642878bc51..ccca709a255b 100644
--- a/include/drm/drm_atomic_helper.h
+++ b/include/drm/drm_atomic_helper.h
@@ -110,6 +110,8 @@ int drm_atomic_helper_page_flip(struct drm_crtc *crtc,
110 uint32_t flags); 110 uint32_t flags);
111int drm_atomic_helper_connector_dpms(struct drm_connector *connector, 111int drm_atomic_helper_connector_dpms(struct drm_connector *connector,
112 int mode); 112 int mode);
113struct drm_encoder *
114drm_atomic_helper_best_encoder(struct drm_connector *connector);
113 115
114/* default implementations for state handling */ 116/* default implementations for state handling */
115void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc); 117void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc);