aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2015-12-18 20:45:31 -0500
committerDave Airlie <airlied@redhat.com>2015-12-18 20:45:31 -0500
commit45ad5ccfa9c72da35905dab4603df0d0f383af8f (patch)
treedd226fc3d0d4e619bccd90e52ac6418730d8a684
parent544a14fd222b5dedfa32e9e69c0da9345b996e15 (diff)
parente112e593b215c394c0303dbf0534db0928e87967 (diff)
Merge tag 'topic/drm-misc-2015-12-18' of git://anongit.freedesktop.org/drm-intel into drm-next
Seems I lied in my last drm-misc pull request and suddenly there's a big pile of random stuff. Boris dug out Thierry's drm-trivial branch and resubmitted everything since that branch didn't really work out. On top of that Nicolas' changes to drm_dev_set_unique - this might conflict with new driver pulls (I double checked and current drm-next should be fine), so please beware. The -next/-fixes conflict in vmwgfx will change slightly with this here too. * tag 'topic/drm-misc-2015-12-18' of git://anongit.freedesktop.org/drm-intel: (36 commits) drm: use dev_name as default unique name in drm_dev_alloc() drm: make drm_dev_set_unique() not use a format string drm/vmwgfx: Constify function pointer structs drm/udl: Constify function pointer structs drm/tegra: Constify function pointer structs drm/rockchip: Constify function pointer structs drm/nouveau: Constify function pointer structs drm/mgag200: Constify function pointer structs drm/imx: Constify function pointer structs drm/i2c/sil164: Constify function pointer structs drm/i2c/adv7511: Constify function pointer structs drm/exynos: Constify function pointer structs drm/cirrus: Constify function pointer structs drm/i2c/ch7006: Constify function pointer structs drm/bridge/nxp-ptn3460: Constify function pointer structs drm/bridge/dw_hdmi: Constify function pointer structs drm/bochs: Constify function pointer structs drm/atmel-hlcdc: Constify function pointer structs drm/armada: Constify function pointer structs drm: Constify drm_encoder_slave_funcs ...
-rw-r--r--Documentation/DocBook/gpu.tmpl158
-rw-r--r--drivers/gpu/drm/armada/armada_crtc.c2
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c9
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c4
-rw-r--r--drivers/gpu/drm/bochs/bochs_kms.c8
-rw-r--r--drivers/gpu/drm/bridge/dw-hdmi.c6
-rw-r--r--drivers/gpu/drm/bridge/nxp-ptn3460.c6
-rw-r--r--drivers/gpu/drm/cirrus/cirrus_mode.c4
-rw-r--r--drivers/gpu/drm/drm_atomic_helper.c5
-rw-r--r--drivers/gpu/drm/drm_dp_mst_topology.c4
-rw-r--r--drivers/gpu/drm/drm_drv.c26
-rw-r--r--drivers/gpu/drm/drm_encoder_slave.c2
-rw-r--r--drivers/gpu/drm/drm_fb_cma_helper.c6
-rw-r--r--drivers/gpu/drm/drm_gem_cma_helper.c4
-rw-r--r--drivers/gpu/drm/drm_modes.c12
-rw-r--r--drivers/gpu/drm/drm_modeset_lock.c14
-rw-r--r--drivers/gpu/drm/drm_prime.c16
-rw-r--r--drivers/gpu/drm/exynos/exynos_dp_core.c8
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_crtc.c4
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_dpi.c8
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_dsi.c8
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_fb.c2
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_mic.c2
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_vidi.c8
-rw-r--r--drivers/gpu/drm/exynos/exynos_hdmi.c8
-rw-r--r--drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c1
-rw-r--r--drivers/gpu/drm/gma500/mdfld_dsi_dpi.c10
-rw-r--r--drivers/gpu/drm/i2c/adv7511.c2
-rw-r--r--drivers/gpu/drm/i2c/ch7006_drv.c2
-rw-r--r--drivers/gpu/drm/i2c/sil164_drv.c2
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h48
-rw-r--r--drivers/gpu/drm/imx/dw_hdmi-imx.c4
-rw-r--r--drivers/gpu/drm/imx/imx-drm-core.c23
-rw-r--r--drivers/gpu/drm/imx/imx-drm.h2
-rw-r--r--drivers/gpu/drm/imx/imx-ldb.c8
-rw-r--r--drivers/gpu/drm/imx/imx-tve.c8
-rw-r--r--drivers/gpu/drm/imx/ipuv3-crtc.c2
-rw-r--r--drivers/gpu/drm/imx/parallel-display.c8
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_mode.c4
-rw-r--r--drivers/gpu/drm/nouveau/dispnv04/tvnv17.c6
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_drm.c4
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_encoder.h2
-rw-r--r--drivers/gpu/drm/omapdrm/tcm-sita.c7
-rw-r--r--drivers/gpu/drm/qxl/qxl_object.c2
-rw-r--r--drivers/gpu/drm/qxl/qxl_ttm.c4
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c6
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c8
-rw-r--r--drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c4
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_drv.c4
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_fb.c2
-rw-r--r--drivers/gpu/drm/tegra/drm.c1
-rw-r--r--drivers/gpu/drm/tegra/fb.c2
-rw-r--r--drivers/gpu/drm/udl/udl_connector.c4
-rw-r--r--drivers/gpu/drm/udl/udl_modeset.c2
-rw-r--r--drivers/gpu/drm/vc4/vc4_drv.c2
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_kms.c4
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c6
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c6
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c6
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_surface.c9
-rw-r--r--include/drm/drmP.h2
-rw-r--r--include/drm/drm_crtc.h18
-rw-r--r--include/drm/drm_encoder_slave.h2
63 files changed, 208 insertions, 363 deletions
diff --git a/Documentation/DocBook/gpu.tmpl b/Documentation/DocBook/gpu.tmpl
index c66d6412f573..6c6e81a9eaf4 100644
--- a/Documentation/DocBook/gpu.tmpl
+++ b/Documentation/DocBook/gpu.tmpl
@@ -986,10 +986,7 @@ int max_width, max_height;</synopsis>
986!Idrivers/gpu/drm/drm_atomic.c 986!Idrivers/gpu/drm/drm_atomic.c
987 </sect2> 987 </sect2>
988 <sect2> 988 <sect2>
989 <title>Frame Buffer Creation</title> 989 <title>Frame Buffer Abstraction</title>
990 <synopsis>struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
991 struct drm_file *file_priv,
992 struct drm_mode_fb_cmd2 *mode_cmd);</synopsis>
993 <para> 990 <para>
994 Frame buffers are abstract memory objects that provide a source of 991 Frame buffers are abstract memory objects that provide a source of
995 pixels to scanout to a CRTC. Applications explicitly request the 992 pixels to scanout to a CRTC. Applications explicitly request the
@@ -1008,73 +1005,6 @@ int max_width, max_height;</synopsis>
1008 and so expects TTM handles in the create ioctl and not GEM handles. 1005 and so expects TTM handles in the create ioctl and not GEM handles.
1009 </para> 1006 </para>
1010 <para> 1007 <para>
1011 Drivers must first validate the requested frame buffer parameters passed
1012 through the mode_cmd argument. In particular this is where invalid
1013 sizes, pixel formats or pitches can be caught.
1014 </para>
1015 <para>
1016 If the parameters are deemed valid, drivers then create, initialize and
1017 return an instance of struct <structname>drm_framebuffer</structname>.
1018 If desired the instance can be embedded in a larger driver-specific
1019 structure. Drivers must fill its <structfield>width</structfield>,
1020 <structfield>height</structfield>, <structfield>pitches</structfield>,
1021 <structfield>offsets</structfield>, <structfield>depth</structfield>,
1022 <structfield>bits_per_pixel</structfield> and
1023 <structfield>pixel_format</structfield> fields from the values passed
1024 through the <parameter>drm_mode_fb_cmd2</parameter> argument. They
1025 should call the <function>drm_helper_mode_fill_fb_struct</function>
1026 helper function to do so.
1027 </para>
1028
1029 <para>
1030 The initialization of the new framebuffer instance is finalized with a
1031 call to <function>drm_framebuffer_init</function> which takes a pointer
1032 to DRM frame buffer operations (struct
1033 <structname>drm_framebuffer_funcs</structname>). Note that this function
1034 publishes the framebuffer and so from this point on it can be accessed
1035 concurrently from other threads. Hence it must be the last step in the
1036 driver's framebuffer initialization sequence. Frame buffer operations
1037 are
1038 <itemizedlist>
1039 <listitem>
1040 <synopsis>int (*create_handle)(struct drm_framebuffer *fb,
1041 struct drm_file *file_priv, unsigned int *handle);</synopsis>
1042 <para>
1043 Create a handle to the frame buffer underlying memory object. If
1044 the frame buffer uses a multi-plane format, the handle will
1045 reference the memory object associated with the first plane.
1046 </para>
1047 <para>
1048 Drivers call <function>drm_gem_handle_create</function> to create
1049 the handle.
1050 </para>
1051 </listitem>
1052 <listitem>
1053 <synopsis>void (*destroy)(struct drm_framebuffer *framebuffer);</synopsis>
1054 <para>
1055 Destroy the frame buffer object and frees all associated
1056 resources. Drivers must call
1057 <function>drm_framebuffer_cleanup</function> to free resources
1058 allocated by the DRM core for the frame buffer object, and must
1059 make sure to unreference all memory objects associated with the
1060 frame buffer. Handles created by the
1061 <methodname>create_handle</methodname> operation are released by
1062 the DRM core.
1063 </para>
1064 </listitem>
1065 <listitem>
1066 <synopsis>int (*dirty)(struct drm_framebuffer *framebuffer,
1067 struct drm_file *file_priv, unsigned flags, unsigned color,
1068 struct drm_clip_rect *clips, unsigned num_clips);</synopsis>
1069 <para>
1070 This optional operation notifies the driver that a region of the
1071 frame buffer has changed in response to a DRM_IOCTL_MODE_DIRTYFB
1072 ioctl call.
1073 </para>
1074 </listitem>
1075 </itemizedlist>
1076 </para>
1077 <para>
1078 The lifetime of a drm framebuffer is controlled with a reference count, 1008 The lifetime of a drm framebuffer is controlled with a reference count,
1079 drivers can grab additional references with 1009 drivers can grab additional references with
1080 <function>drm_framebuffer_reference</function>and drop them 1010 <function>drm_framebuffer_reference</function>and drop them
@@ -3570,92 +3500,6 @@ int num_ioctls;</synopsis>
3570 <sect2> 3500 <sect2>
3571 <title>DPIO</title> 3501 <title>DPIO</title>
3572!Pdrivers/gpu/drm/i915/i915_reg.h DPIO 3502!Pdrivers/gpu/drm/i915/i915_reg.h DPIO
3573 <table id="dpiox2">
3574 <title>Dual channel PHY (VLV/CHV/BXT)</title>
3575 <tgroup cols="8">
3576 <colspec colname="c0" />
3577 <colspec colname="c1" />
3578 <colspec colname="c2" />
3579 <colspec colname="c3" />
3580 <colspec colname="c4" />
3581 <colspec colname="c5" />
3582 <colspec colname="c6" />
3583 <colspec colname="c7" />
3584 <spanspec spanname="ch0" namest="c0" nameend="c3" />
3585 <spanspec spanname="ch1" namest="c4" nameend="c7" />
3586 <spanspec spanname="ch0pcs01" namest="c0" nameend="c1" />
3587 <spanspec spanname="ch0pcs23" namest="c2" nameend="c3" />
3588 <spanspec spanname="ch1pcs01" namest="c4" nameend="c5" />
3589 <spanspec spanname="ch1pcs23" namest="c6" nameend="c7" />
3590 <thead>
3591 <row>
3592 <entry spanname="ch0">CH0</entry>
3593 <entry spanname="ch1">CH1</entry>
3594 </row>
3595 </thead>
3596 <tbody valign="top" align="center">
3597 <row>
3598 <entry spanname="ch0">CMN/PLL/REF</entry>
3599 <entry spanname="ch1">CMN/PLL/REF</entry>
3600 </row>
3601 <row>
3602 <entry spanname="ch0pcs01">PCS01</entry>
3603 <entry spanname="ch0pcs23">PCS23</entry>
3604 <entry spanname="ch1pcs01">PCS01</entry>
3605 <entry spanname="ch1pcs23">PCS23</entry>
3606 </row>
3607 <row>
3608 <entry>TX0</entry>
3609 <entry>TX1</entry>
3610 <entry>TX2</entry>
3611 <entry>TX3</entry>
3612 <entry>TX0</entry>
3613 <entry>TX1</entry>
3614 <entry>TX2</entry>
3615 <entry>TX3</entry>
3616 </row>
3617 <row>
3618 <entry spanname="ch0">DDI0</entry>
3619 <entry spanname="ch1">DDI1</entry>
3620 </row>
3621 </tbody>
3622 </tgroup>
3623 </table>
3624 <table id="dpiox1">
3625 <title>Single channel PHY (CHV/BXT)</title>
3626 <tgroup cols="4">
3627 <colspec colname="c0" />
3628 <colspec colname="c1" />
3629 <colspec colname="c2" />
3630 <colspec colname="c3" />
3631 <spanspec spanname="ch0" namest="c0" nameend="c3" />
3632 <spanspec spanname="ch0pcs01" namest="c0" nameend="c1" />
3633 <spanspec spanname="ch0pcs23" namest="c2" nameend="c3" />
3634 <thead>
3635 <row>
3636 <entry spanname="ch0">CH0</entry>
3637 </row>
3638 </thead>
3639 <tbody valign="top" align="center">
3640 <row>
3641 <entry spanname="ch0">CMN/PLL/REF</entry>
3642 </row>
3643 <row>
3644 <entry spanname="ch0pcs01">PCS01</entry>
3645 <entry spanname="ch0pcs23">PCS23</entry>
3646 </row>
3647 <row>
3648 <entry>TX0</entry>
3649 <entry>TX1</entry>
3650 <entry>TX2</entry>
3651 <entry>TX3</entry>
3652 </row>
3653 <row>
3654 <entry spanname="ch0">DDI2</entry>
3655 </row>
3656 </tbody>
3657 </tgroup>
3658 </table>
3659 </sect2> 3503 </sect2>
3660 3504
3661 <sect2> 3505 <sect2>
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index 9bdc28cf927e..4123680933a6 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -1074,7 +1074,7 @@ armada_drm_crtc_set_property(struct drm_crtc *crtc,
1074 return 0; 1074 return 0;
1075} 1075}
1076 1076
1077static struct drm_crtc_funcs armada_crtc_funcs = { 1077static const struct drm_crtc_funcs armada_crtc_funcs = {
1078 .cursor_set = armada_drm_crtc_cursor_set, 1078 .cursor_set = armada_drm_crtc_cursor_set,
1079 .cursor_move = armada_drm_crtc_cursor_move, 1079 .cursor_move = armada_drm_crtc_cursor_move,
1080 .destroy = armada_drm_crtc_destroy, 1080 .destroy = armada_drm_crtc_destroy,
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index 816895447155..a45b32ba029e 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -333,6 +333,10 @@ static const struct of_device_id atmel_hlcdc_of_match[] = {
333 .data = &atmel_hlcdc_dc_at91sam9x5, 333 .data = &atmel_hlcdc_dc_at91sam9x5,
334 }, 334 },
335 { 335 {
336 .compatible = "atmel,sama5d2-hlcdc",
337 .data = &atmel_hlcdc_dc_sama5d4,
338 },
339 {
336 .compatible = "atmel,sama5d3-hlcdc", 340 .compatible = "atmel,sama5d3-hlcdc",
337 .data = &atmel_hlcdc_dc_sama5d3, 341 .data = &atmel_hlcdc_dc_sama5d3,
338 }, 342 },
@@ -342,6 +346,7 @@ static const struct of_device_id atmel_hlcdc_of_match[] = {
342 }, 346 },
343 { /* sentinel */ }, 347 { /* sentinel */ },
344}; 348};
349MODULE_DEVICE_TABLE(of, atmel_hlcdc_of_match);
345 350
346int atmel_hlcdc_dc_mode_valid(struct atmel_hlcdc_dc *dc, 351int atmel_hlcdc_dc_mode_valid(struct atmel_hlcdc_dc *dc,
347 struct drm_display_mode *mode) 352 struct drm_display_mode *mode)
@@ -733,10 +738,6 @@ static int atmel_hlcdc_dc_drm_probe(struct platform_device *pdev)
733 if (!ddev) 738 if (!ddev)
734 return -ENOMEM; 739 return -ENOMEM;
735 740
736 ret = drm_dev_set_unique(ddev, dev_name(ddev->dev));
737 if (ret)
738 goto err_unref;
739
740 ret = atmel_hlcdc_dc_load(ddev); 741 ret = atmel_hlcdc_dc_load(ddev);
741 if (ret) 742 if (ret)
742 goto err_unref; 743 goto err_unref;
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
index d1129000c5cf..0f7ec016e7a9 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
@@ -146,7 +146,7 @@ atmel_hlcdc_rgb_encoder_mode_set(struct drm_encoder *encoder,
146 cfg); 146 cfg);
147} 147}
148 148
149static struct drm_encoder_helper_funcs atmel_hlcdc_panel_encoder_helper_funcs = { 149static const struct drm_encoder_helper_funcs atmel_hlcdc_panel_encoder_helper_funcs = {
150 .mode_fixup = atmel_hlcdc_panel_encoder_mode_fixup, 150 .mode_fixup = atmel_hlcdc_panel_encoder_mode_fixup,
151 .mode_set = atmel_hlcdc_rgb_encoder_mode_set, 151 .mode_set = atmel_hlcdc_rgb_encoder_mode_set,
152 .disable = atmel_hlcdc_panel_encoder_disable, 152 .disable = atmel_hlcdc_panel_encoder_disable,
@@ -192,7 +192,7 @@ atmel_hlcdc_rgb_best_encoder(struct drm_connector *connector)
192 return &rgb->encoder; 192 return &rgb->encoder;
193} 193}
194 194
195static struct drm_connector_helper_funcs atmel_hlcdc_panel_connector_helper_funcs = { 195static const struct drm_connector_helper_funcs atmel_hlcdc_panel_connector_helper_funcs = {
196 .get_modes = atmel_hlcdc_panel_get_modes, 196 .get_modes = atmel_hlcdc_panel_get_modes,
197 .mode_valid = atmel_hlcdc_rgb_mode_valid, 197 .mode_valid = atmel_hlcdc_rgb_mode_valid,
198 .best_encoder = atmel_hlcdc_rgb_best_encoder, 198 .best_encoder = atmel_hlcdc_rgb_best_encoder,
diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c
index a88be6dd34a4..2849f1b95eec 100644
--- a/drivers/gpu/drm/bochs/bochs_kms.c
+++ b/drivers/gpu/drm/bochs/bochs_kms.c
@@ -119,7 +119,7 @@ static int bochs_crtc_page_flip(struct drm_crtc *crtc,
119 bochs_crtc_mode_set_base(crtc, 0, 0, old_fb); 119 bochs_crtc_mode_set_base(crtc, 0, 0, old_fb);
120 if (event) { 120 if (event) {
121 spin_lock_irqsave(&bochs->dev->event_lock, irqflags); 121 spin_lock_irqsave(&bochs->dev->event_lock, irqflags);
122 drm_send_vblank_event(bochs->dev, -1, event); 122 drm_crtc_send_vblank_event(crtc, event);
123 spin_unlock_irqrestore(&bochs->dev->event_lock, irqflags); 123 spin_unlock_irqrestore(&bochs->dev->event_lock, irqflags);
124 } 124 }
125 return 0; 125 return 0;
@@ -245,13 +245,13 @@ static enum drm_connector_status bochs_connector_detect(struct drm_connector
245 return connector_status_connected; 245 return connector_status_connected;
246} 246}
247 247
248struct drm_connector_helper_funcs bochs_connector_connector_helper_funcs = { 248static const struct drm_connector_helper_funcs bochs_connector_connector_helper_funcs = {
249 .get_modes = bochs_connector_get_modes, 249 .get_modes = bochs_connector_get_modes,
250 .mode_valid = bochs_connector_mode_valid, 250 .mode_valid = bochs_connector_mode_valid,
251 .best_encoder = bochs_connector_best_encoder, 251 .best_encoder = bochs_connector_best_encoder,
252}; 252};
253 253
254struct drm_connector_funcs bochs_connector_connector_funcs = { 254static const struct drm_connector_funcs bochs_connector_connector_funcs = {
255 .dpms = drm_helper_connector_dpms, 255 .dpms = drm_helper_connector_dpms,
256 .detect = bochs_connector_detect, 256 .detect = bochs_connector_detect,
257 .fill_modes = drm_helper_probe_single_connector_modes, 257 .fill_modes = drm_helper_probe_single_connector_modes,
@@ -283,7 +283,7 @@ int bochs_kms_init(struct bochs_device *bochs)
283 bochs->dev->mode_config.preferred_depth = 24; 283 bochs->dev->mode_config.preferred_depth = 24;
284 bochs->dev->mode_config.prefer_shadow = 0; 284 bochs->dev->mode_config.prefer_shadow = 0;
285 285
286 bochs->dev->mode_config.funcs = (void *)&bochs_mode_funcs; 286 bochs->dev->mode_config.funcs = &bochs_mode_funcs;
287 287
288 bochs_crtc_init(bochs->dev); 288 bochs_crtc_init(bochs->dev);
289 bochs_encoder_init(bochs->dev); 289 bochs_encoder_init(bochs->dev);
diff --git a/drivers/gpu/drm/bridge/dw-hdmi.c b/drivers/gpu/drm/bridge/dw-hdmi.c
index 298018a8562e..77cafa9aa41c 100644
--- a/drivers/gpu/drm/bridge/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/dw-hdmi.c
@@ -1514,7 +1514,7 @@ static void dw_hdmi_connector_force(struct drm_connector *connector)
1514 mutex_unlock(&hdmi->mutex); 1514 mutex_unlock(&hdmi->mutex);
1515} 1515}
1516 1516
1517static struct drm_connector_funcs dw_hdmi_connector_funcs = { 1517static const struct drm_connector_funcs dw_hdmi_connector_funcs = {
1518 .dpms = drm_helper_connector_dpms, 1518 .dpms = drm_helper_connector_dpms,
1519 .fill_modes = drm_helper_probe_single_connector_modes, 1519 .fill_modes = drm_helper_probe_single_connector_modes,
1520 .detect = dw_hdmi_connector_detect, 1520 .detect = dw_hdmi_connector_detect,
@@ -1522,13 +1522,13 @@ static struct drm_connector_funcs dw_hdmi_connector_funcs = {
1522 .force = dw_hdmi_connector_force, 1522 .force = dw_hdmi_connector_force,
1523}; 1523};
1524 1524
1525static struct drm_connector_helper_funcs dw_hdmi_connector_helper_funcs = { 1525static const struct drm_connector_helper_funcs dw_hdmi_connector_helper_funcs = {
1526 .get_modes = dw_hdmi_connector_get_modes, 1526 .get_modes = dw_hdmi_connector_get_modes,
1527 .mode_valid = dw_hdmi_connector_mode_valid, 1527 .mode_valid = dw_hdmi_connector_mode_valid,
1528 .best_encoder = dw_hdmi_connector_best_encoder, 1528 .best_encoder = dw_hdmi_connector_best_encoder,
1529}; 1529};
1530 1530
1531static struct drm_bridge_funcs dw_hdmi_bridge_funcs = { 1531static const struct drm_bridge_funcs dw_hdmi_bridge_funcs = {
1532 .enable = dw_hdmi_bridge_enable, 1532 .enable = dw_hdmi_bridge_enable,
1533 .disable = dw_hdmi_bridge_disable, 1533 .disable = dw_hdmi_bridge_disable,
1534 .pre_enable = dw_hdmi_bridge_nop, 1534 .pre_enable = dw_hdmi_bridge_nop,
diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c
index 0ffa3a6a206a..7ecd59f70b8e 100644
--- a/drivers/gpu/drm/bridge/nxp-ptn3460.c
+++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c
@@ -242,7 +242,7 @@ static struct drm_encoder *ptn3460_best_encoder(struct drm_connector *connector)
242 return ptn_bridge->bridge.encoder; 242 return ptn_bridge->bridge.encoder;
243} 243}
244 244
245static struct drm_connector_helper_funcs ptn3460_connector_helper_funcs = { 245static const struct drm_connector_helper_funcs ptn3460_connector_helper_funcs = {
246 .get_modes = ptn3460_get_modes, 246 .get_modes = ptn3460_get_modes,
247 .best_encoder = ptn3460_best_encoder, 247 .best_encoder = ptn3460_best_encoder,
248}; 248};
@@ -258,7 +258,7 @@ static void ptn3460_connector_destroy(struct drm_connector *connector)
258 drm_connector_cleanup(connector); 258 drm_connector_cleanup(connector);
259} 259}
260 260
261static struct drm_connector_funcs ptn3460_connector_funcs = { 261static const struct drm_connector_funcs ptn3460_connector_funcs = {
262 .dpms = drm_atomic_helper_connector_dpms, 262 .dpms = drm_atomic_helper_connector_dpms,
263 .fill_modes = drm_helper_probe_single_connector_modes, 263 .fill_modes = drm_helper_probe_single_connector_modes,
264 .detect = ptn3460_detect, 264 .detect = ptn3460_detect,
@@ -299,7 +299,7 @@ static int ptn3460_bridge_attach(struct drm_bridge *bridge)
299 return ret; 299 return ret;
300} 300}
301 301
302static struct drm_bridge_funcs ptn3460_bridge_funcs = { 302static const struct drm_bridge_funcs ptn3460_bridge_funcs = {
303 .pre_enable = ptn3460_pre_enable, 303 .pre_enable = ptn3460_pre_enable,
304 .enable = ptn3460_enable, 304 .enable = ptn3460_enable,
305 .disable = ptn3460_disable, 305 .disable = ptn3460_disable,
diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
index 276719e52153..4a02854a6963 100644
--- a/drivers/gpu/drm/cirrus/cirrus_mode.c
+++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
@@ -533,12 +533,12 @@ static void cirrus_connector_destroy(struct drm_connector *connector)
533 kfree(connector); 533 kfree(connector);
534} 534}
535 535
536struct drm_connector_helper_funcs cirrus_vga_connector_helper_funcs = { 536static const struct drm_connector_helper_funcs cirrus_vga_connector_helper_funcs = {
537 .get_modes = cirrus_vga_get_modes, 537 .get_modes = cirrus_vga_get_modes,
538 .best_encoder = cirrus_connector_best_encoder, 538 .best_encoder = cirrus_connector_best_encoder,
539}; 539};
540 540
541struct drm_connector_funcs cirrus_vga_connector_funcs = { 541static const struct drm_connector_funcs cirrus_vga_connector_funcs = {
542 .dpms = drm_helper_connector_dpms, 542 .dpms = drm_helper_connector_dpms,
543 .detect = cirrus_vga_detect, 543 .detect = cirrus_vga_detect,
544 .fill_modes = drm_helper_probe_single_connector_modes, 544 .fill_modes = drm_helper_probe_single_connector_modes,
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 63f925b75357..268d37f26960 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -88,8 +88,7 @@ drm_atomic_helper_plane_changed(struct drm_atomic_state *state,
88 88
89static bool 89static bool
90check_pending_encoder_assignment(struct drm_atomic_state *state, 90check_pending_encoder_assignment(struct drm_atomic_state *state,
91 struct drm_encoder *new_encoder, 91 struct drm_encoder *new_encoder)
92 struct drm_connector *new_connector)
93{ 92{
94 struct drm_connector *connector; 93 struct drm_connector *connector;
95 struct drm_connector_state *conn_state; 94 struct drm_connector_state *conn_state;
@@ -257,7 +256,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
257 return 0; 256 return 0;
258 } 257 }
259 258
260 if (!check_pending_encoder_assignment(state, new_encoder, connector)) { 259 if (!check_pending_encoder_assignment(state, new_encoder)) {
261 DRM_DEBUG_ATOMIC("Encoder for [CONNECTOR:%d:%s] already assigned\n", 260 DRM_DEBUG_ATOMIC("Encoder for [CONNECTOR:%d:%s] already assigned\n",
262 connector->base.id, 261 connector->base.id,
263 connector->name); 262 connector->name);
diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
index 809959d56d78..3b6627dde9ff 100644
--- a/drivers/gpu/drm/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/drm_dp_mst_topology.c
@@ -1673,6 +1673,7 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr)
1673 if (mgr->proposed_vcpis[i]) { 1673 if (mgr->proposed_vcpis[i]) {
1674 port = container_of(mgr->proposed_vcpis[i], struct drm_dp_mst_port, vcpi); 1674 port = container_of(mgr->proposed_vcpis[i], struct drm_dp_mst_port, vcpi);
1675 req_payload.num_slots = mgr->proposed_vcpis[i]->num_slots; 1675 req_payload.num_slots = mgr->proposed_vcpis[i]->num_slots;
1676 req_payload.vcpi = mgr->proposed_vcpis[i]->vcpi;
1676 } else { 1677 } else {
1677 port = NULL; 1678 port = NULL;
1678 req_payload.num_slots = 0; 1679 req_payload.num_slots = 0;
@@ -1688,6 +1689,7 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr)
1688 if (req_payload.num_slots) { 1689 if (req_payload.num_slots) {
1689 drm_dp_create_payload_step1(mgr, mgr->proposed_vcpis[i]->vcpi, &req_payload); 1690 drm_dp_create_payload_step1(mgr, mgr->proposed_vcpis[i]->vcpi, &req_payload);
1690 mgr->payloads[i].num_slots = req_payload.num_slots; 1691 mgr->payloads[i].num_slots = req_payload.num_slots;
1692 mgr->payloads[i].vcpi = req_payload.vcpi;
1691 } else if (mgr->payloads[i].num_slots) { 1693 } else if (mgr->payloads[i].num_slots) {
1692 mgr->payloads[i].num_slots = 0; 1694 mgr->payloads[i].num_slots = 0;
1693 drm_dp_destroy_payload_step1(mgr, port, port->vcpi.vcpi, &mgr->payloads[i]); 1695 drm_dp_destroy_payload_step1(mgr, port, port->vcpi.vcpi, &mgr->payloads[i]);
@@ -1823,7 +1825,7 @@ static int drm_dp_encode_up_ack_reply(struct drm_dp_sideband_msg_tx *msg, u8 req
1823{ 1825{
1824 struct drm_dp_sideband_msg_reply_body reply; 1826 struct drm_dp_sideband_msg_reply_body reply;
1825 1827
1826 reply.reply_type = 1; 1828 reply.reply_type = 0;
1827 reply.req_type = req_type; 1829 reply.req_type = req_type;
1828 drm_dp_encode_sideband_reply(&reply, msg); 1830 drm_dp_encode_sideband_reply(&reply, msg);
1829 return 0; 1831 return 0;
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 7dd6728dd092..bf934cdea21c 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -633,8 +633,17 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver,
633 } 633 }
634 } 634 }
635 635
636 if (parent) {
637 ret = drm_dev_set_unique(dev, dev_name(parent));
638 if (ret)
639 goto err_setunique;
640 }
641
636 return dev; 642 return dev;
637 643
644err_setunique:
645 if (drm_core_check_feature(dev, DRIVER_GEM))
646 drm_gem_destroy(dev);
638err_ctxbitmap: 647err_ctxbitmap:
639 drm_legacy_ctxbitmap_cleanup(dev); 648 drm_legacy_ctxbitmap_cleanup(dev);
640 drm_ht_remove(&dev->map_hash); 649 drm_ht_remove(&dev->map_hash);
@@ -797,23 +806,18 @@ EXPORT_SYMBOL(drm_dev_unregister);
797/** 806/**
798 * drm_dev_set_unique - Set the unique name of a DRM device 807 * drm_dev_set_unique - Set the unique name of a DRM device
799 * @dev: device of which to set the unique name 808 * @dev: device of which to set the unique name
800 * @fmt: format string for unique name 809 * @name: unique name
801 * 810 *
802 * Sets the unique name of a DRM device using the specified format string and 811 * Sets the unique name of a DRM device using the specified string. Drivers
803 * a variable list of arguments. Drivers can use this at driver probe time if 812 * can use this at driver probe time if the unique name of the devices they
804 * the unique name of the devices they drive is static. 813 * drive is static.
805 * 814 *
806 * Return: 0 on success or a negative error code on failure. 815 * Return: 0 on success or a negative error code on failure.
807 */ 816 */
808int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...) 817int drm_dev_set_unique(struct drm_device *dev, const char *name)
809{ 818{
810 va_list ap;
811
812 kfree(dev->unique); 819 kfree(dev->unique);
813 820 dev->unique = kstrdup(name, GFP_KERNEL);
814 va_start(ap, fmt);
815 dev->unique = kvasprintf(GFP_KERNEL, fmt, ap);
816 va_end(ap);
817 821
818 return dev->unique ? 0 : -ENOMEM; 822 return dev->unique ? 0 : -ENOMEM;
819} 823}
diff --git a/drivers/gpu/drm/drm_encoder_slave.c b/drivers/gpu/drm/drm_encoder_slave.c
index d18b88b755c3..e8629076de32 100644
--- a/drivers/gpu/drm/drm_encoder_slave.c
+++ b/drivers/gpu/drm/drm_encoder_slave.c
@@ -124,7 +124,7 @@ EXPORT_SYMBOL(drm_i2c_encoder_destroy);
124 * Wrapper fxns which can be plugged in to drm_encoder_helper_funcs: 124 * Wrapper fxns which can be plugged in to drm_encoder_helper_funcs:
125 */ 125 */
126 126
127static inline struct drm_encoder_slave_funcs * 127static inline const struct drm_encoder_slave_funcs *
128get_slave_funcs(struct drm_encoder *enc) 128get_slave_funcs(struct drm_encoder *enc)
129{ 129{
130 return to_encoder_slave(enc)->slave_funcs; 130 return to_encoder_slave(enc)->slave_funcs;
diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
index b7d5b848d2f8..5543fa806aec 100644
--- a/drivers/gpu/drm/drm_fb_cma_helper.c
+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -266,7 +266,7 @@ static int drm_fbdev_cma_create(struct drm_fb_helper *helper,
266 fbi = drm_fb_helper_alloc_fbi(helper); 266 fbi = drm_fb_helper_alloc_fbi(helper);
267 if (IS_ERR(fbi)) { 267 if (IS_ERR(fbi)) {
268 ret = PTR_ERR(fbi); 268 ret = PTR_ERR(fbi);
269 goto err_drm_gem_cma_free_object; 269 goto err_gem_free_object;
270 } 270 }
271 271
272 fbdev_cma->fb = drm_fb_cma_alloc(dev, &mode_cmd, &obj, 1); 272 fbdev_cma->fb = drm_fb_cma_alloc(dev, &mode_cmd, &obj, 1);
@@ -299,8 +299,8 @@ static int drm_fbdev_cma_create(struct drm_fb_helper *helper,
299 299
300err_fb_info_destroy: 300err_fb_info_destroy:
301 drm_fb_helper_release_fbi(helper); 301 drm_fb_helper_release_fbi(helper);
302err_drm_gem_cma_free_object: 302err_gem_free_object:
303 drm_gem_cma_free_object(&obj->base); 303 dev->driver->gem_free_object(&obj->base);
304 return ret; 304 return ret;
305} 305}
306 306
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
index 0f7b00ba57da..e5df53b6e229 100644
--- a/drivers/gpu/drm/drm_gem_cma_helper.c
+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
@@ -121,7 +121,7 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
121 return cma_obj; 121 return cma_obj;
122 122
123error: 123error:
124 drm_gem_cma_free_object(&cma_obj->base); 124 drm->driver->gem_free_object(&cma_obj->base);
125 return ERR_PTR(ret); 125 return ERR_PTR(ret);
126} 126}
127EXPORT_SYMBOL_GPL(drm_gem_cma_create); 127EXPORT_SYMBOL_GPL(drm_gem_cma_create);
@@ -171,7 +171,7 @@ drm_gem_cma_create_with_handle(struct drm_file *file_priv,
171 return cma_obj; 171 return cma_obj;
172 172
173err_handle_create: 173err_handle_create:
174 drm_gem_cma_free_object(gem_obj); 174 drm->driver->gem_free_object(gem_obj);
175 175
176 return ERR_PTR(ret); 176 return ERR_PTR(ret);
177} 177}
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 5a8a78d5e960..20775c05235a 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -553,10 +553,10 @@ EXPORT_SYMBOL(drm_gtf_mode_complex);
553 * drivers/video/fbmon.c 553 * drivers/video/fbmon.c
554 * 554 *
555 * Standard GTF parameters: 555 * Standard GTF parameters:
556 * M = 600 556 * M = 600
557 * C = 40 557 * C = 40
558 * K = 128 558 * K = 128
559 * J = 20 559 * J = 20
560 * 560 *
561 * Returns: 561 * Returns:
562 * The modeline based on the GTF algorithm stored in a drm_display_mode object. 562 * The modeline based on the GTF algorithm stored in a drm_display_mode object.
@@ -1244,7 +1244,7 @@ EXPORT_SYMBOL(drm_mode_connector_list_update);
1244 * This uses the same parameters as the fb modedb.c, except for an extra 1244 * This uses the same parameters as the fb modedb.c, except for an extra
1245 * force-enable, force-enable-digital and force-disable bit at the end: 1245 * force-enable, force-enable-digital and force-disable bit at the end:
1246 * 1246 *
1247 * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd] 1247 * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
1248 * 1248 *
1249 * The intermediate drm_cmdline_mode structure is required to store additional 1249 * The intermediate drm_cmdline_mode structure is required to store additional
1250 * options from the command line modline like the force-enable/disable flag. 1250 * options from the command line modline like the force-enable/disable flag.
@@ -1523,4 +1523,4 @@ int drm_mode_convert_umode(struct drm_display_mode *out,
1523 1523
1524out: 1524out:
1525 return ret; 1525 return ret;
1526} \ No newline at end of file 1526}
diff --git a/drivers/gpu/drm/drm_modeset_lock.c b/drivers/gpu/drm/drm_modeset_lock.c
index c2f5971146ba..e3a4adf03e7b 100644
--- a/drivers/gpu/drm/drm_modeset_lock.c
+++ b/drivers/gpu/drm/drm_modeset_lock.c
@@ -40,17 +40,15 @@
40 * The basic usage pattern is to: 40 * The basic usage pattern is to:
41 * 41 *
42 * drm_modeset_acquire_init(&ctx) 42 * drm_modeset_acquire_init(&ctx)
43 * retry: 43 * retry:
44 * foreach (lock in random_ordered_set_of_locks) { 44 * foreach (lock in random_ordered_set_of_locks) {
45 * ret = drm_modeset_lock(lock, &ctx) 45 * ret = drm_modeset_lock(lock, &ctx)
46 * if (ret == -EDEADLK) { 46 * if (ret == -EDEADLK) {
47 * drm_modeset_backoff(&ctx); 47 * drm_modeset_backoff(&ctx);
48 * goto retry; 48 * goto retry;
49 * } 49 * }
50 * } 50 * }
51 *
52 * ... do stuff ... 51 * ... do stuff ...
53 *
54 * drm_modeset_drop_locks(&ctx); 52 * drm_modeset_drop_locks(&ctx);
55 * drm_modeset_acquire_fini(&ctx); 53 * drm_modeset_acquire_fini(&ctx);
56 */ 54 */
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 9f935f55d74c..27aa7183b20b 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -313,19 +313,15 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = {
313 * 313 *
314 * Export callbacks: 314 * Export callbacks:
315 * 315 *
316 * - @gem_prime_pin (optional): prepare a GEM object for exporting 316 * * @gem_prime_pin (optional): prepare a GEM object for exporting
317 * 317 * * @gem_prime_get_sg_table: provide a scatter/gather table of pinned pages
318 * - @gem_prime_get_sg_table: provide a scatter/gather table of pinned pages 318 * * @gem_prime_vmap: vmap a buffer exported by your driver
319 * 319 * * @gem_prime_vunmap: vunmap a buffer exported by your driver
320 * - @gem_prime_vmap: vmap a buffer exported by your driver 320 * * @gem_prime_mmap (optional): mmap a buffer exported by your driver
321 *
322 * - @gem_prime_vunmap: vunmap a buffer exported by your driver
323 *
324 * - @gem_prime_mmap (optional): mmap a buffer exported by your driver
325 * 321 *
326 * Import callback: 322 * Import callback:
327 * 323 *
328 * - @gem_prime_import_sg_table (import): produce a GEM object from another 324 * * @gem_prime_import_sg_table (import): produce a GEM object from another
329 * driver's scatter/gather table 325 * driver's scatter/gather table
330 */ 326 */
331 327
diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c
index 793e4977fcf7..b79c316c2ad2 100644
--- a/drivers/gpu/drm/exynos/exynos_dp_core.c
+++ b/drivers/gpu/drm/exynos/exynos_dp_core.c
@@ -953,7 +953,7 @@ static void exynos_dp_connector_destroy(struct drm_connector *connector)
953 drm_connector_cleanup(connector); 953 drm_connector_cleanup(connector);
954} 954}
955 955
956static struct drm_connector_funcs exynos_dp_connector_funcs = { 956static const struct drm_connector_funcs exynos_dp_connector_funcs = {
957 .dpms = drm_atomic_helper_connector_dpms, 957 .dpms = drm_atomic_helper_connector_dpms,
958 .fill_modes = drm_helper_probe_single_connector_modes, 958 .fill_modes = drm_helper_probe_single_connector_modes,
959 .detect = exynos_dp_detect, 959 .detect = exynos_dp_detect,
@@ -998,7 +998,7 @@ static struct drm_encoder *exynos_dp_best_encoder(
998 return &dp->encoder; 998 return &dp->encoder;
999} 999}
1000 1000
1001static struct drm_connector_helper_funcs exynos_dp_connector_helper_funcs = { 1001static const struct drm_connector_helper_funcs exynos_dp_connector_helper_funcs = {
1002 .get_modes = exynos_dp_get_modes, 1002 .get_modes = exynos_dp_get_modes,
1003 .best_encoder = exynos_dp_best_encoder, 1003 .best_encoder = exynos_dp_best_encoder,
1004}; 1004};
@@ -1176,14 +1176,14 @@ static void exynos_dp_disable(struct drm_encoder *encoder)
1176{ 1176{
1177} 1177}
1178 1178
1179static struct drm_encoder_helper_funcs exynos_dp_encoder_helper_funcs = { 1179static const struct drm_encoder_helper_funcs exynos_dp_encoder_helper_funcs = {
1180 .mode_fixup = exynos_dp_mode_fixup, 1180 .mode_fixup = exynos_dp_mode_fixup,
1181 .mode_set = exynos_dp_mode_set, 1181 .mode_set = exynos_dp_mode_set,
1182 .enable = exynos_dp_enable, 1182 .enable = exynos_dp_enable,
1183 .disable = exynos_dp_disable, 1183 .disable = exynos_dp_disable,
1184}; 1184};
1185 1185
1186static struct drm_encoder_funcs exynos_dp_encoder_funcs = { 1186static const struct drm_encoder_funcs exynos_dp_encoder_funcs = {
1187 .destroy = drm_encoder_cleanup, 1187 .destroy = drm_encoder_cleanup,
1188}; 1188};
1189 1189
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index 9d30a0fa3248..80f797414236 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -93,7 +93,7 @@ static void exynos_crtc_atomic_flush(struct drm_crtc *crtc,
93 } 93 }
94} 94}
95 95
96static struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = { 96static const struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
97 .enable = exynos_drm_crtc_enable, 97 .enable = exynos_drm_crtc_enable,
98 .disable = exynos_drm_crtc_disable, 98 .disable = exynos_drm_crtc_disable,
99 .mode_set_nofb = exynos_drm_crtc_mode_set_nofb, 99 .mode_set_nofb = exynos_drm_crtc_mode_set_nofb,
@@ -113,7 +113,7 @@ static void exynos_drm_crtc_destroy(struct drm_crtc *crtc)
113 kfree(exynos_crtc); 113 kfree(exynos_crtc);
114} 114}
115 115
116static struct drm_crtc_funcs exynos_crtc_funcs = { 116static const struct drm_crtc_funcs exynos_crtc_funcs = {
117 .set_config = drm_atomic_helper_set_config, 117 .set_config = drm_atomic_helper_set_config,
118 .page_flip = drm_atomic_helper_page_flip, 118 .page_flip = drm_atomic_helper_page_flip,
119 .destroy = exynos_drm_crtc_destroy, 119 .destroy = exynos_drm_crtc_destroy,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
index 1dbf8dca2d6b..05350ae0785b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
@@ -57,7 +57,7 @@ static void exynos_dpi_connector_destroy(struct drm_connector *connector)
57 drm_connector_cleanup(connector); 57 drm_connector_cleanup(connector);
58} 58}
59 59
60static struct drm_connector_funcs exynos_dpi_connector_funcs = { 60static const struct drm_connector_funcs exynos_dpi_connector_funcs = {
61 .dpms = drm_atomic_helper_connector_dpms, 61 .dpms = drm_atomic_helper_connector_dpms,
62 .detect = exynos_dpi_detect, 62 .detect = exynos_dpi_detect,
63 .fill_modes = drm_helper_probe_single_connector_modes, 63 .fill_modes = drm_helper_probe_single_connector_modes,
@@ -100,7 +100,7 @@ exynos_dpi_best_encoder(struct drm_connector *connector)
100 return &ctx->encoder; 100 return &ctx->encoder;
101} 101}
102 102
103static struct drm_connector_helper_funcs exynos_dpi_connector_helper_funcs = { 103static const struct drm_connector_helper_funcs exynos_dpi_connector_helper_funcs = {
104 .get_modes = exynos_dpi_get_modes, 104 .get_modes = exynos_dpi_get_modes,
105 .best_encoder = exynos_dpi_best_encoder, 105 .best_encoder = exynos_dpi_best_encoder,
106}; 106};
@@ -161,14 +161,14 @@ static void exynos_dpi_disable(struct drm_encoder *encoder)
161 } 161 }
162} 162}
163 163
164static struct drm_encoder_helper_funcs exynos_dpi_encoder_helper_funcs = { 164static const struct drm_encoder_helper_funcs exynos_dpi_encoder_helper_funcs = {
165 .mode_fixup = exynos_dpi_mode_fixup, 165 .mode_fixup = exynos_dpi_mode_fixup,
166 .mode_set = exynos_dpi_mode_set, 166 .mode_set = exynos_dpi_mode_set,
167 .enable = exynos_dpi_enable, 167 .enable = exynos_dpi_enable,
168 .disable = exynos_dpi_disable, 168 .disable = exynos_dpi_disable,
169}; 169};
170 170
171static struct drm_encoder_funcs exynos_dpi_encoder_funcs = { 171static const struct drm_encoder_funcs exynos_dpi_encoder_funcs = {
172 .destroy = drm_encoder_cleanup, 172 .destroy = drm_encoder_cleanup,
173}; 173};
174 174
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index bc09bba3132a..d84a498ef099 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1541,7 +1541,7 @@ static void exynos_dsi_connector_destroy(struct drm_connector *connector)
1541 connector->dev = NULL; 1541 connector->dev = NULL;
1542} 1542}
1543 1543
1544static struct drm_connector_funcs exynos_dsi_connector_funcs = { 1544static const struct drm_connector_funcs exynos_dsi_connector_funcs = {
1545 .dpms = drm_atomic_helper_connector_dpms, 1545 .dpms = drm_atomic_helper_connector_dpms,
1546 .detect = exynos_dsi_detect, 1546 .detect = exynos_dsi_detect,
1547 .fill_modes = drm_helper_probe_single_connector_modes, 1547 .fill_modes = drm_helper_probe_single_connector_modes,
@@ -1569,7 +1569,7 @@ exynos_dsi_best_encoder(struct drm_connector *connector)
1569 return &dsi->encoder; 1569 return &dsi->encoder;
1570} 1570}
1571 1571
1572static struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = { 1572static const struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = {
1573 .get_modes = exynos_dsi_get_modes, 1573 .get_modes = exynos_dsi_get_modes,
1574 .best_encoder = exynos_dsi_best_encoder, 1574 .best_encoder = exynos_dsi_best_encoder,
1575}; 1575};
@@ -1622,14 +1622,14 @@ static void exynos_dsi_mode_set(struct drm_encoder *encoder,
1622 vm->hsync_len = m->hsync_end - m->hsync_start; 1622 vm->hsync_len = m->hsync_end - m->hsync_start;
1623} 1623}
1624 1624
1625static struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = { 1625static const struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = {
1626 .mode_fixup = exynos_dsi_mode_fixup, 1626 .mode_fixup = exynos_dsi_mode_fixup,
1627 .mode_set = exynos_dsi_mode_set, 1627 .mode_set = exynos_dsi_mode_set,
1628 .enable = exynos_dsi_enable, 1628 .enable = exynos_dsi_enable,
1629 .disable = exynos_dsi_disable, 1629 .disable = exynos_dsi_disable,
1630}; 1630};
1631 1631
1632static struct drm_encoder_funcs exynos_dsi_encoder_funcs = { 1632static const struct drm_encoder_funcs exynos_dsi_encoder_funcs = {
1633 .destroy = drm_encoder_cleanup, 1633 .destroy = drm_encoder_cleanup,
1634}; 1634};
1635 1635
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index f6bdb0d6f142..cbbb1a86e70a 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -110,7 +110,7 @@ static int exynos_drm_fb_dirty(struct drm_framebuffer *fb,
110 return 0; 110 return 0;
111} 111}
112 112
113static struct drm_framebuffer_funcs exynos_drm_fb_funcs = { 113static const struct drm_framebuffer_funcs exynos_drm_fb_funcs = {
114 .destroy = exynos_drm_fb_destroy, 114 .destroy = exynos_drm_fb_destroy,
115 .create_handle = exynos_drm_fb_create_handle, 115 .create_handle = exynos_drm_fb_create_handle,
116 .dirty = exynos_drm_fb_dirty, 116 .dirty = exynos_drm_fb_dirty,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_mic.c b/drivers/gpu/drm/exynos/exynos_drm_mic.c
index 8994eab56ba8..4eaef36aec5a 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_mic.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_mic.c
@@ -389,7 +389,7 @@ already_disabled:
389 mutex_unlock(&mic_mutex); 389 mutex_unlock(&mic_mutex);
390} 390}
391 391
392struct drm_bridge_funcs mic_bridge_funcs = { 392static const struct drm_bridge_funcs mic_bridge_funcs = {
393 .disable = mic_disable, 393 .disable = mic_disable,
394 .post_disable = mic_post_disable, 394 .post_disable = mic_post_disable,
395 .pre_enable = mic_pre_enable, 395 .pre_enable = mic_pre_enable,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
index 319aa31954d1..0be29c1b2c05 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
@@ -339,7 +339,7 @@ static void vidi_connector_destroy(struct drm_connector *connector)
339{ 339{
340} 340}
341 341
342static struct drm_connector_funcs vidi_connector_funcs = { 342static const struct drm_connector_funcs vidi_connector_funcs = {
343 .dpms = drm_atomic_helper_connector_dpms, 343 .dpms = drm_atomic_helper_connector_dpms,
344 .fill_modes = drm_helper_probe_single_connector_modes, 344 .fill_modes = drm_helper_probe_single_connector_modes,
345 .detect = vidi_detect, 345 .detect = vidi_detect,
@@ -383,7 +383,7 @@ static struct drm_encoder *vidi_best_encoder(struct drm_connector *connector)
383 return &ctx->encoder; 383 return &ctx->encoder;
384} 384}
385 385
386static struct drm_connector_helper_funcs vidi_connector_helper_funcs = { 386static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = {
387 .get_modes = vidi_get_modes, 387 .get_modes = vidi_get_modes,
388 .best_encoder = vidi_best_encoder, 388 .best_encoder = vidi_best_encoder,
389}; 389};
@@ -431,14 +431,14 @@ static void exynos_vidi_disable(struct drm_encoder *encoder)
431{ 431{
432} 432}
433 433
434static struct drm_encoder_helper_funcs exynos_vidi_encoder_helper_funcs = { 434static const struct drm_encoder_helper_funcs exynos_vidi_encoder_helper_funcs = {
435 .mode_fixup = exynos_vidi_mode_fixup, 435 .mode_fixup = exynos_vidi_mode_fixup,
436 .mode_set = exynos_vidi_mode_set, 436 .mode_set = exynos_vidi_mode_set,
437 .enable = exynos_vidi_enable, 437 .enable = exynos_vidi_enable,
438 .disable = exynos_vidi_disable, 438 .disable = exynos_vidi_disable,
439}; 439};
440 440
441static struct drm_encoder_funcs exynos_vidi_encoder_funcs = { 441static const struct drm_encoder_funcs exynos_vidi_encoder_funcs = {
442 .destroy = drm_encoder_cleanup, 442 .destroy = drm_encoder_cleanup,
443}; 443};
444 444
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 7d5ca6ca4efe..21a29dbce18c 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -956,7 +956,7 @@ static void hdmi_connector_destroy(struct drm_connector *connector)
956 drm_connector_cleanup(connector); 956 drm_connector_cleanup(connector);
957} 957}
958 958
959static struct drm_connector_funcs hdmi_connector_funcs = { 959static const struct drm_connector_funcs hdmi_connector_funcs = {
960 .dpms = drm_atomic_helper_connector_dpms, 960 .dpms = drm_atomic_helper_connector_dpms,
961 .fill_modes = drm_helper_probe_single_connector_modes, 961 .fill_modes = drm_helper_probe_single_connector_modes,
962 .detect = hdmi_detect, 962 .detect = hdmi_detect,
@@ -1030,7 +1030,7 @@ static struct drm_encoder *hdmi_best_encoder(struct drm_connector *connector)
1030 return &hdata->encoder; 1030 return &hdata->encoder;
1031} 1031}
1032 1032
1033static struct drm_connector_helper_funcs hdmi_connector_helper_funcs = { 1033static const struct drm_connector_helper_funcs hdmi_connector_helper_funcs = {
1034 .get_modes = hdmi_get_modes, 1034 .get_modes = hdmi_get_modes,
1035 .mode_valid = hdmi_mode_valid, 1035 .mode_valid = hdmi_mode_valid,
1036 .best_encoder = hdmi_best_encoder, 1036 .best_encoder = hdmi_best_encoder,
@@ -1641,14 +1641,14 @@ static void hdmi_disable(struct drm_encoder *encoder)
1641 hdata->powered = false; 1641 hdata->powered = false;
1642} 1642}
1643 1643
1644static struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs = { 1644static const struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs = {
1645 .mode_fixup = hdmi_mode_fixup, 1645 .mode_fixup = hdmi_mode_fixup,
1646 .mode_set = hdmi_mode_set, 1646 .mode_set = hdmi_mode_set,
1647 .enable = hdmi_enable, 1647 .enable = hdmi_enable,
1648 .disable = hdmi_disable, 1648 .disable = hdmi_disable,
1649}; 1649};
1650 1650
1651static struct drm_encoder_funcs exynos_hdmi_encoder_funcs = { 1651static const struct drm_encoder_funcs exynos_hdmi_encoder_funcs = {
1652 .destroy = drm_encoder_cleanup, 1652 .destroy = drm_encoder_cleanup,
1653}; 1653};
1654 1654
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
index 1930234ba5f1..fca97d3fc846 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
@@ -363,7 +363,6 @@ static int fsl_dcu_drm_probe(struct platform_device *pdev)
363 fsl_dev->np = dev->of_node; 363 fsl_dev->np = dev->of_node;
364 drm->dev_private = fsl_dev; 364 drm->dev_private = fsl_dev;
365 dev_set_drvdata(dev, fsl_dev); 365 dev_set_drvdata(dev, fsl_dev);
366 drm_dev_set_unique(drm, dev_name(dev));
367 366
368 ret = drm_dev_register(drm, 0); 367 ret = drm_dev_register(drm, 0);
369 if (ret < 0) 368 if (ret < 0)
diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
index 1a1acd3cb049..7cd87a0c2385 100644
--- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
@@ -821,14 +821,18 @@ void mdfld_dsi_dpi_mode_set(struct drm_encoder *encoder,
821 struct drm_device *dev = dsi_config->dev; 821 struct drm_device *dev = dsi_config->dev;
822 struct drm_psb_private *dev_priv = dev->dev_private; 822 struct drm_psb_private *dev_priv = dev->dev_private;
823 int pipe = mdfld_dsi_encoder_get_pipe(dsi_encoder); 823 int pipe = mdfld_dsi_encoder_get_pipe(dsi_encoder);
824
825 u32 pipeconf_reg = PIPEACONF; 824 u32 pipeconf_reg = PIPEACONF;
826 u32 dspcntr_reg = DSPACNTR; 825 u32 dspcntr_reg = DSPACNTR;
826 u32 pipeconf, dspcntr;
827 827
828 u32 pipeconf = dev_priv->pipeconf[pipe];
829 u32 dspcntr = dev_priv->dspcntr[pipe];
830 u32 mipi = MIPI_PORT_EN | PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX; 828 u32 mipi = MIPI_PORT_EN | PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX;
831 829
830 if (WARN_ON(pipe < 0))
831 return;
832
833 pipeconf = dev_priv->pipeconf[pipe];
834 dspcntr = dev_priv->dspcntr[pipe];
835
832 if (pipe) { 836 if (pipe) {
833 pipeconf_reg = PIPECCONF; 837 pipeconf_reg = PIPECCONF;
834 dspcntr_reg = DSPCCNTR; 838 dspcntr_reg = DSPCCNTR;
diff --git a/drivers/gpu/drm/i2c/adv7511.c b/drivers/gpu/drm/i2c/adv7511.c
index 00416f23b5cb..533d1e3d4a99 100644
--- a/drivers/gpu/drm/i2c/adv7511.c
+++ b/drivers/gpu/drm/i2c/adv7511.c
@@ -752,7 +752,7 @@ static void adv7511_encoder_mode_set(struct drm_encoder *encoder,
752 adv7511->f_tmds = mode->clock; 752 adv7511->f_tmds = mode->clock;
753} 753}
754 754
755static struct drm_encoder_slave_funcs adv7511_encoder_funcs = { 755static const struct drm_encoder_slave_funcs adv7511_encoder_funcs = {
756 .dpms = adv7511_encoder_dpms, 756 .dpms = adv7511_encoder_dpms,
757 .mode_valid = adv7511_encoder_mode_valid, 757 .mode_valid = adv7511_encoder_mode_valid,
758 .mode_set = adv7511_encoder_mode_set, 758 .mode_set = adv7511_encoder_mode_set,
diff --git a/drivers/gpu/drm/i2c/ch7006_drv.c b/drivers/gpu/drm/i2c/ch7006_drv.c
index d9a72c96e56c..90db5f4dcce5 100644
--- a/drivers/gpu/drm/i2c/ch7006_drv.c
+++ b/drivers/gpu/drm/i2c/ch7006_drv.c
@@ -371,7 +371,7 @@ static int ch7006_encoder_set_property(struct drm_encoder *encoder,
371 return 0; 371 return 0;
372} 372}
373 373
374static struct drm_encoder_slave_funcs ch7006_encoder_funcs = { 374static const struct drm_encoder_slave_funcs ch7006_encoder_funcs = {
375 .set_config = ch7006_encoder_set_config, 375 .set_config = ch7006_encoder_set_config,
376 .destroy = ch7006_encoder_destroy, 376 .destroy = ch7006_encoder_destroy,
377 .dpms = ch7006_encoder_dpms, 377 .dpms = ch7006_encoder_dpms,
diff --git a/drivers/gpu/drm/i2c/sil164_drv.c b/drivers/gpu/drm/i2c/sil164_drv.c
index 002ce7874332..c400428f6c8c 100644
--- a/drivers/gpu/drm/i2c/sil164_drv.c
+++ b/drivers/gpu/drm/i2c/sil164_drv.c
@@ -341,7 +341,7 @@ sil164_encoder_destroy(struct drm_encoder *encoder)
341 drm_i2c_encoder_destroy(encoder); 341 drm_i2c_encoder_destroy(encoder);
342} 342}
343 343
344static struct drm_encoder_slave_funcs sil164_encoder_funcs = { 344static const struct drm_encoder_slave_funcs sil164_encoder_funcs = {
345 .set_config = sil164_encoder_set_config, 345 .set_config = sil164_encoder_set_config,
346 .destroy = sil164_encoder_destroy, 346 .destroy = sil164_encoder_destroy,
347 .dpms = sil164_encoder_dpms, 347 .dpms = sil164_encoder_dpms,
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 206b213a74e1..1dae5ac3e0b1 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -855,31 +855,31 @@ enum skl_disp_power_wells {
855 * 855 *
856 * Note: DDI0 is digital port B, DD1 is digital port C, and DDI2 is 856 * Note: DDI0 is digital port B, DD1 is digital port C, and DDI2 is
857 * digital port D (CHV) or port A (BXT). 857 * digital port D (CHV) or port A (BXT).
858 */
859/*
860 * Dual channel PHY (VLV/CHV/BXT)
861 * ---------------------------------
862 * | CH0 | CH1 |
863 * | CMN/PLL/REF | CMN/PLL/REF |
864 * |---------------|---------------| Display PHY
865 * | PCS01 | PCS23 | PCS01 | PCS23 |
866 * |-------|-------|-------|-------|
867 * |TX0|TX1|TX2|TX3|TX0|TX1|TX2|TX3|
868 * ---------------------------------
869 * | DDI0 | DDI1 | DP/HDMI ports
870 * ---------------------------------
871 * 858 *
872 * Single channel PHY (CHV/BXT) 859 *
873 * ----------------- 860 * Dual channel PHY (VLV/CHV/BXT)
874 * | CH0 | 861 * ---------------------------------
875 * | CMN/PLL/REF | 862 * | CH0 | CH1 |
876 * |---------------| Display PHY 863 * | CMN/PLL/REF | CMN/PLL/REF |
877 * | PCS01 | PCS23 | 864 * |---------------|---------------| Display PHY
878 * |-------|-------| 865 * | PCS01 | PCS23 | PCS01 | PCS23 |
879 * |TX0|TX1|TX2|TX3| 866 * |-------|-------|-------|-------|
880 * ----------------- 867 * |TX0|TX1|TX2|TX3|TX0|TX1|TX2|TX3|
881 * | DDI2 | DP/HDMI port 868 * ---------------------------------
882 * ----------------- 869 * | DDI0 | DDI1 | DP/HDMI ports
870 * ---------------------------------
871 *
872 * Single channel PHY (CHV/BXT)
873 * -----------------
874 * | CH0 |
875 * | CMN/PLL/REF |
876 * |---------------| Display PHY
877 * | PCS01 | PCS23 |
878 * |-------|-------|
879 * |TX0|TX1|TX2|TX3|
880 * -----------------
881 * | DDI2 | DP/HDMI port
882 * -----------------
883 */ 883 */
884#define DPIO_DEVFN 0 884#define DPIO_DEVFN 0
885 885
diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c b/drivers/gpu/drm/imx/dw_hdmi-imx.c
index 35fcf6b84537..063825fecbe2 100644
--- a/drivers/gpu/drm/imx/dw_hdmi-imx.c
+++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c
@@ -137,7 +137,7 @@ static void dw_hdmi_imx_encoder_prepare(struct drm_encoder *encoder)
137 imx_drm_set_bus_format(encoder, MEDIA_BUS_FMT_RGB888_1X24); 137 imx_drm_set_bus_format(encoder, MEDIA_BUS_FMT_RGB888_1X24);
138} 138}
139 139
140static struct drm_encoder_helper_funcs dw_hdmi_imx_encoder_helper_funcs = { 140static const struct drm_encoder_helper_funcs dw_hdmi_imx_encoder_helper_funcs = {
141 .mode_fixup = dw_hdmi_imx_encoder_mode_fixup, 141 .mode_fixup = dw_hdmi_imx_encoder_mode_fixup,
142 .mode_set = dw_hdmi_imx_encoder_mode_set, 142 .mode_set = dw_hdmi_imx_encoder_mode_set,
143 .prepare = dw_hdmi_imx_encoder_prepare, 143 .prepare = dw_hdmi_imx_encoder_prepare,
@@ -145,7 +145,7 @@ static struct drm_encoder_helper_funcs dw_hdmi_imx_encoder_helper_funcs = {
145 .disable = dw_hdmi_imx_encoder_disable, 145 .disable = dw_hdmi_imx_encoder_disable,
146}; 146};
147 147
148static struct drm_encoder_funcs dw_hdmi_imx_encoder_funcs = { 148static const struct drm_encoder_funcs dw_hdmi_imx_encoder_funcs = {
149 .destroy = drm_encoder_cleanup, 149 .destroy = drm_encoder_cleanup,
150}; 150};
151 151
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
index 09e20ea69419..7be7ac808304 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -39,13 +39,12 @@ struct imx_drm_component {
39struct imx_drm_device { 39struct imx_drm_device {
40 struct drm_device *drm; 40 struct drm_device *drm;
41 struct imx_drm_crtc *crtc[MAX_CRTC]; 41 struct imx_drm_crtc *crtc[MAX_CRTC];
42 int pipes; 42 unsigned int pipes;
43 struct drm_fbdev_cma *fbhelper; 43 struct drm_fbdev_cma *fbhelper;
44}; 44};
45 45
46struct imx_drm_crtc { 46struct imx_drm_crtc {
47 struct drm_crtc *crtc; 47 struct drm_crtc *crtc;
48 int pipe;
49 struct imx_drm_crtc_helper_funcs imx_drm_helper_funcs; 48 struct imx_drm_crtc_helper_funcs imx_drm_helper_funcs;
50}; 49};
51 50
@@ -54,9 +53,9 @@ static int legacyfb_depth = 16;
54module_param(legacyfb_depth, int, 0444); 53module_param(legacyfb_depth, int, 0444);
55#endif 54#endif
56 55
57int imx_drm_crtc_id(struct imx_drm_crtc *crtc) 56unsigned int imx_drm_crtc_id(struct imx_drm_crtc *crtc)
58{ 57{
59 return crtc->pipe; 58 return drm_crtc_index(crtc->crtc);
60} 59}
61EXPORT_SYMBOL_GPL(imx_drm_crtc_id); 60EXPORT_SYMBOL_GPL(imx_drm_crtc_id);
62 61
@@ -124,19 +123,19 @@ EXPORT_SYMBOL_GPL(imx_drm_set_bus_format);
124 123
125int imx_drm_crtc_vblank_get(struct imx_drm_crtc *imx_drm_crtc) 124int imx_drm_crtc_vblank_get(struct imx_drm_crtc *imx_drm_crtc)
126{ 125{
127 return drm_vblank_get(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe); 126 return drm_crtc_vblank_get(imx_drm_crtc->crtc);
128} 127}
129EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_get); 128EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_get);
130 129
131void imx_drm_crtc_vblank_put(struct imx_drm_crtc *imx_drm_crtc) 130void imx_drm_crtc_vblank_put(struct imx_drm_crtc *imx_drm_crtc)
132{ 131{
133 drm_vblank_put(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe); 132 drm_crtc_vblank_put(imx_drm_crtc->crtc);
134} 133}
135EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_put); 134EXPORT_SYMBOL_GPL(imx_drm_crtc_vblank_put);
136 135
137void imx_drm_handle_vblank(struct imx_drm_crtc *imx_drm_crtc) 136void imx_drm_handle_vblank(struct imx_drm_crtc *imx_drm_crtc)
138{ 137{
139 drm_handle_vblank(imx_drm_crtc->crtc->dev, imx_drm_crtc->pipe); 138 drm_crtc_handle_vblank(imx_drm_crtc->crtc);
140} 139}
141EXPORT_SYMBOL_GPL(imx_drm_handle_vblank); 140EXPORT_SYMBOL_GPL(imx_drm_handle_vblank);
142 141
@@ -215,7 +214,7 @@ static void imx_drm_output_poll_changed(struct drm_device *drm)
215 drm_fbdev_cma_hotplug_event(imxdrm->fbhelper); 214 drm_fbdev_cma_hotplug_event(imxdrm->fbhelper);
216} 215}
217 216
218static struct drm_mode_config_funcs imx_drm_mode_config_funcs = { 217static const struct drm_mode_config_funcs imx_drm_mode_config_funcs = {
219 .fb_create = drm_fb_cma_create, 218 .fb_create = drm_fb_cma_create,
220 .output_poll_changed = imx_drm_output_poll_changed, 219 .output_poll_changed = imx_drm_output_poll_changed,
221}; 220};
@@ -356,12 +355,11 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
356 return -ENOMEM; 355 return -ENOMEM;
357 356
358 imx_drm_crtc->imx_drm_helper_funcs = *imx_drm_helper_funcs; 357 imx_drm_crtc->imx_drm_helper_funcs = *imx_drm_helper_funcs;
359 imx_drm_crtc->pipe = imxdrm->pipes++;
360 imx_drm_crtc->crtc = crtc; 358 imx_drm_crtc->crtc = crtc;
361 359
362 crtc->port = port; 360 crtc->port = port;
363 361
364 imxdrm->crtc[imx_drm_crtc->pipe] = imx_drm_crtc; 362 imxdrm->crtc[imxdrm->pipes++] = imx_drm_crtc;
365 363
366 *new_crtc = imx_drm_crtc; 364 *new_crtc = imx_drm_crtc;
367 365
@@ -378,7 +376,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
378 return 0; 376 return 0;
379 377
380err_register: 378err_register:
381 imxdrm->crtc[imx_drm_crtc->pipe] = NULL; 379 imxdrm->crtc[--imxdrm->pipes] = NULL;
382 kfree(imx_drm_crtc); 380 kfree(imx_drm_crtc);
383 return ret; 381 return ret;
384} 382}
@@ -390,10 +388,11 @@ EXPORT_SYMBOL_GPL(imx_drm_add_crtc);
390int imx_drm_remove_crtc(struct imx_drm_crtc *imx_drm_crtc) 388int imx_drm_remove_crtc(struct imx_drm_crtc *imx_drm_crtc)
391{ 389{
392 struct imx_drm_device *imxdrm = imx_drm_crtc->crtc->dev->dev_private; 390 struct imx_drm_device *imxdrm = imx_drm_crtc->crtc->dev->dev_private;
391 unsigned int pipe = drm_crtc_index(imx_drm_crtc->crtc);
393 392
394 drm_crtc_cleanup(imx_drm_crtc->crtc); 393 drm_crtc_cleanup(imx_drm_crtc->crtc);
395 394
396 imxdrm->crtc[imx_drm_crtc->pipe] = NULL; 395 imxdrm->crtc[pipe] = NULL;
397 396
398 kfree(imx_drm_crtc); 397 kfree(imx_drm_crtc);
399 398
diff --git a/drivers/gpu/drm/imx/imx-drm.h b/drivers/gpu/drm/imx/imx-drm.h
index 83284b4d4be1..71cf6d9c714f 100644
--- a/drivers/gpu/drm/imx/imx-drm.h
+++ b/drivers/gpu/drm/imx/imx-drm.h
@@ -13,7 +13,7 @@ struct drm_plane;
13struct imx_drm_crtc; 13struct imx_drm_crtc;
14struct platform_device; 14struct platform_device;
15 15
16int imx_drm_crtc_id(struct imx_drm_crtc *crtc); 16unsigned int imx_drm_crtc_id(struct imx_drm_crtc *crtc);
17 17
18struct imx_drm_crtc_helper_funcs { 18struct imx_drm_crtc_helper_funcs {
19 int (*enable_vblank)(struct drm_crtc *crtc); 19 int (*enable_vblank)(struct drm_crtc *crtc);
diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
index c79a61b67ded..22ac482231ed 100644
--- a/drivers/gpu/drm/imx/imx-ldb.c
+++ b/drivers/gpu/drm/imx/imx-ldb.c
@@ -358,23 +358,23 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder)
358 drm_panel_unprepare(imx_ldb_ch->panel); 358 drm_panel_unprepare(imx_ldb_ch->panel);
359} 359}
360 360
361static struct drm_connector_funcs imx_ldb_connector_funcs = { 361static const struct drm_connector_funcs imx_ldb_connector_funcs = {
362 .dpms = drm_helper_connector_dpms, 362 .dpms = drm_helper_connector_dpms,
363 .fill_modes = drm_helper_probe_single_connector_modes, 363 .fill_modes = drm_helper_probe_single_connector_modes,
364 .detect = imx_ldb_connector_detect, 364 .detect = imx_ldb_connector_detect,
365 .destroy = imx_drm_connector_destroy, 365 .destroy = imx_drm_connector_destroy,
366}; 366};
367 367
368static struct drm_connector_helper_funcs imx_ldb_connector_helper_funcs = { 368static const struct drm_connector_helper_funcs imx_ldb_connector_helper_funcs = {
369 .get_modes = imx_ldb_connector_get_modes, 369 .get_modes = imx_ldb_connector_get_modes,
370 .best_encoder = imx_ldb_connector_best_encoder, 370 .best_encoder = imx_ldb_connector_best_encoder,
371}; 371};
372 372
373static struct drm_encoder_funcs imx_ldb_encoder_funcs = { 373static const struct drm_encoder_funcs imx_ldb_encoder_funcs = {
374 .destroy = imx_drm_encoder_destroy, 374 .destroy = imx_drm_encoder_destroy,
375}; 375};
376 376
377static struct drm_encoder_helper_funcs imx_ldb_encoder_helper_funcs = { 377static const struct drm_encoder_helper_funcs imx_ldb_encoder_helper_funcs = {
378 .dpms = imx_ldb_encoder_dpms, 378 .dpms = imx_ldb_encoder_dpms,
379 .mode_fixup = imx_ldb_encoder_mode_fixup, 379 .mode_fixup = imx_ldb_encoder_mode_fixup,
380 .prepare = imx_ldb_encoder_prepare, 380 .prepare = imx_ldb_encoder_prepare,
diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c
index e61a8fca77cd..292349f0b132 100644
--- a/drivers/gpu/drm/imx/imx-tve.c
+++ b/drivers/gpu/drm/imx/imx-tve.c
@@ -360,24 +360,24 @@ static void imx_tve_encoder_disable(struct drm_encoder *encoder)
360 tve_disable(tve); 360 tve_disable(tve);
361} 361}
362 362
363static struct drm_connector_funcs imx_tve_connector_funcs = { 363static const struct drm_connector_funcs imx_tve_connector_funcs = {
364 .dpms = drm_helper_connector_dpms, 364 .dpms = drm_helper_connector_dpms,
365 .fill_modes = drm_helper_probe_single_connector_modes, 365 .fill_modes = drm_helper_probe_single_connector_modes,
366 .detect = imx_tve_connector_detect, 366 .detect = imx_tve_connector_detect,
367 .destroy = imx_drm_connector_destroy, 367 .destroy = imx_drm_connector_destroy,
368}; 368};
369 369
370static struct drm_connector_helper_funcs imx_tve_connector_helper_funcs = { 370static const struct drm_connector_helper_funcs imx_tve_connector_helper_funcs = {
371 .get_modes = imx_tve_connector_get_modes, 371 .get_modes = imx_tve_connector_get_modes,
372 .best_encoder = imx_tve_connector_best_encoder, 372 .best_encoder = imx_tve_connector_best_encoder,
373 .mode_valid = imx_tve_connector_mode_valid, 373 .mode_valid = imx_tve_connector_mode_valid,
374}; 374};
375 375
376static struct drm_encoder_funcs imx_tve_encoder_funcs = { 376static const struct drm_encoder_funcs imx_tve_encoder_funcs = {
377 .destroy = imx_drm_encoder_destroy, 377 .destroy = imx_drm_encoder_destroy,
378}; 378};
379 379
380static struct drm_encoder_helper_funcs imx_tve_encoder_helper_funcs = { 380static const struct drm_encoder_helper_funcs imx_tve_encoder_helper_funcs = {
381 .dpms = imx_tve_encoder_dpms, 381 .dpms = imx_tve_encoder_dpms,
382 .mode_fixup = imx_tve_encoder_mode_fixup, 382 .mode_fixup = imx_tve_encoder_mode_fixup,
383 .prepare = imx_tve_encoder_prepare, 383 .prepare = imx_tve_encoder_prepare,
diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c
index 4ab841eebee1..30a57185bdb4 100644
--- a/drivers/gpu/drm/imx/ipuv3-crtc.c
+++ b/drivers/gpu/drm/imx/ipuv3-crtc.c
@@ -270,7 +270,7 @@ static void ipu_crtc_commit(struct drm_crtc *crtc)
270 ipu_fb_enable(ipu_crtc); 270 ipu_fb_enable(ipu_crtc);
271} 271}
272 272
273static struct drm_crtc_helper_funcs ipu_helper_funcs = { 273static const struct drm_crtc_helper_funcs ipu_helper_funcs = {
274 .dpms = ipu_crtc_dpms, 274 .dpms = ipu_crtc_dpms,
275 .mode_fixup = ipu_crtc_mode_fixup, 275 .mode_fixup = ipu_crtc_mode_fixup,
276 .mode_set = ipu_crtc_mode_set, 276 .mode_set = ipu_crtc_mode_set,
diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c
index fcbe4d2eeabf..b74bf8e334f5 100644
--- a/drivers/gpu/drm/imx/parallel-display.c
+++ b/drivers/gpu/drm/imx/parallel-display.c
@@ -148,23 +148,23 @@ static void imx_pd_encoder_disable(struct drm_encoder *encoder)
148 drm_panel_unprepare(imxpd->panel); 148 drm_panel_unprepare(imxpd->panel);
149} 149}
150 150
151static struct drm_connector_funcs imx_pd_connector_funcs = { 151static const struct drm_connector_funcs imx_pd_connector_funcs = {
152 .dpms = drm_helper_connector_dpms, 152 .dpms = drm_helper_connector_dpms,
153 .fill_modes = drm_helper_probe_single_connector_modes, 153 .fill_modes = drm_helper_probe_single_connector_modes,
154 .detect = imx_pd_connector_detect, 154 .detect = imx_pd_connector_detect,
155 .destroy = imx_drm_connector_destroy, 155 .destroy = imx_drm_connector_destroy,
156}; 156};
157 157
158static struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = { 158static const struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = {
159 .get_modes = imx_pd_connector_get_modes, 159 .get_modes = imx_pd_connector_get_modes,
160 .best_encoder = imx_pd_connector_best_encoder, 160 .best_encoder = imx_pd_connector_best_encoder,
161}; 161};
162 162
163static struct drm_encoder_funcs imx_pd_encoder_funcs = { 163static const struct drm_encoder_funcs imx_pd_encoder_funcs = {
164 .destroy = imx_drm_encoder_destroy, 164 .destroy = imx_drm_encoder_destroy,
165}; 165};
166 166
167static struct drm_encoder_helper_funcs imx_pd_encoder_helper_funcs = { 167static const struct drm_encoder_helper_funcs imx_pd_encoder_helper_funcs = {
168 .dpms = imx_pd_encoder_dpms, 168 .dpms = imx_pd_encoder_dpms,
169 .mode_fixup = imx_pd_encoder_mode_fixup, 169 .mode_fixup = imx_pd_encoder_mode_fixup,
170 .prepare = imx_pd_encoder_prepare, 170 .prepare = imx_pd_encoder_prepare,
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index 31802128dfbb..19c18b7af28a 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -1684,13 +1684,13 @@ static void mga_connector_destroy(struct drm_connector *connector)
1684 kfree(connector); 1684 kfree(connector);
1685} 1685}
1686 1686
1687struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = { 1687static const struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = {
1688 .get_modes = mga_vga_get_modes, 1688 .get_modes = mga_vga_get_modes,
1689 .mode_valid = mga_vga_mode_valid, 1689 .mode_valid = mga_vga_mode_valid,
1690 .best_encoder = mga_connector_best_encoder, 1690 .best_encoder = mga_connector_best_encoder,
1691}; 1691};
1692 1692
1693struct drm_connector_funcs mga_vga_connector_funcs = { 1693static const struct drm_connector_funcs mga_vga_connector_funcs = {
1694 .dpms = drm_helper_connector_dpms, 1694 .dpms = drm_helper_connector_dpms,
1695 .detect = mga_vga_detect, 1695 .detect = mga_vga_detect,
1696 .fill_modes = drm_helper_probe_single_connector_modes, 1696 .fill_modes = drm_helper_probe_single_connector_modes,
diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
index d9644c0c5a83..163317d26de9 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
@@ -769,7 +769,7 @@ static void nv17_tv_destroy(struct drm_encoder *encoder)
769 kfree(tv_enc); 769 kfree(tv_enc);
770} 770}
771 771
772static struct drm_encoder_helper_funcs nv17_tv_helper_funcs = { 772static const struct drm_encoder_helper_funcs nv17_tv_helper_funcs = {
773 .dpms = nv17_tv_dpms, 773 .dpms = nv17_tv_dpms,
774 .mode_fixup = nv17_tv_mode_fixup, 774 .mode_fixup = nv17_tv_mode_fixup,
775 .prepare = nv17_tv_prepare, 775 .prepare = nv17_tv_prepare,
@@ -778,14 +778,14 @@ static struct drm_encoder_helper_funcs nv17_tv_helper_funcs = {
778 .detect = nv17_tv_detect, 778 .detect = nv17_tv_detect,
779}; 779};
780 780
781static struct drm_encoder_slave_funcs nv17_tv_slave_funcs = { 781static const struct drm_encoder_slave_funcs nv17_tv_slave_funcs = {
782 .get_modes = nv17_tv_get_modes, 782 .get_modes = nv17_tv_get_modes,
783 .mode_valid = nv17_tv_mode_valid, 783 .mode_valid = nv17_tv_mode_valid,
784 .create_resources = nv17_tv_create_resources, 784 .create_resources = nv17_tv_create_resources,
785 .set_property = nv17_tv_set_property, 785 .set_property = nv17_tv_set_property,
786}; 786};
787 787
788static struct drm_encoder_funcs nv17_tv_funcs = { 788static const struct drm_encoder_funcs nv17_tv_funcs = {
789 .destroy = nv17_tv_destroy, 789 .destroy = nv17_tv_destroy,
790}; 790};
791 791
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 1d3ee5179ab8..b3a563c44bcd 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -1046,10 +1046,6 @@ nouveau_platform_device_create(const struct nvkm_device_tegra_func *func,
1046 goto err_free; 1046 goto err_free;
1047 } 1047 }
1048 1048
1049 err = drm_dev_set_unique(drm, "%s", dev_name(&pdev->dev));
1050 if (err < 0)
1051 goto err_free;
1052
1053 drm->platformdev = pdev; 1049 drm->platformdev = pdev;
1054 platform_set_drvdata(pdev, drm); 1050 platform_set_drvdata(pdev, drm);
1055 1051
diff --git a/drivers/gpu/drm/nouveau/nouveau_encoder.h b/drivers/gpu/drm/nouveau/nouveau_encoder.h
index c38a86408363..ee6a6d3fc80f 100644
--- a/drivers/gpu/drm/nouveau/nouveau_encoder.h
+++ b/drivers/gpu/drm/nouveau/nouveau_encoder.h
@@ -83,7 +83,7 @@ static inline struct drm_encoder *to_drm_encoder(struct nouveau_encoder *enc)
83 return &enc->base.base; 83 return &enc->base.base;
84} 84}
85 85
86static inline struct drm_encoder_slave_funcs * 86static inline const struct drm_encoder_slave_funcs *
87get_slave_funcs(struct drm_encoder *enc) 87get_slave_funcs(struct drm_encoder *enc)
88{ 88{
89 return to_encoder_slave(enc)->slave_funcs; 89 return to_encoder_slave(enc)->slave_funcs;
diff --git a/drivers/gpu/drm/omapdrm/tcm-sita.c b/drivers/gpu/drm/omapdrm/tcm-sita.c
index efb609510540..6df1f2a1bc52 100644
--- a/drivers/gpu/drm/omapdrm/tcm-sita.c
+++ b/drivers/gpu/drm/omapdrm/tcm-sita.c
@@ -87,14 +87,11 @@ struct tcm *sita_init(u16 width, u16 height, struct tcm_pt *attr)
87 if (width == 0 || height == 0) 87 if (width == 0 || height == 0)
88 return NULL; 88 return NULL;
89 89
90 tcm = kmalloc(sizeof(*tcm), GFP_KERNEL); 90 tcm = kzalloc(sizeof(*tcm), GFP_KERNEL);
91 pvt = kmalloc(sizeof(*pvt), GFP_KERNEL); 91 pvt = kzalloc(sizeof(*pvt), GFP_KERNEL);
92 if (!tcm || !pvt) 92 if (!tcm || !pvt)
93 goto error; 93 goto error;
94 94
95 memset(tcm, 0, sizeof(*tcm));
96 memset(pvt, 0, sizeof(*pvt));
97
98 /* Updating the pointers to SiTA implementation APIs */ 95 /* Updating the pointers to SiTA implementation APIs */
99 tcm->height = height; 96 tcm->height = height;
100 tcm->width = width; 97 tcm->width = width;
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index b28370e014c6..5e1d7899dd72 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -32,7 +32,7 @@ static void qxl_ttm_bo_destroy(struct ttm_buffer_object *tbo)
32 struct qxl_bo *bo; 32 struct qxl_bo *bo;
33 struct qxl_device *qdev; 33 struct qxl_device *qdev;
34 34
35 bo = container_of(tbo, struct qxl_bo, tbo); 35 bo = to_qxl_bo(tbo);
36 qdev = (struct qxl_device *)bo->gem_base.dev->dev_private; 36 qdev = (struct qxl_device *)bo->gem_base.dev->dev_private;
37 37
38 qxl_surface_evict(qdev, bo, false); 38 qxl_surface_evict(qdev, bo, false);
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index 0cbc4c987164..953412766416 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -201,7 +201,7 @@ static void qxl_evict_flags(struct ttm_buffer_object *bo,
201 placement->num_busy_placement = 1; 201 placement->num_busy_placement = 1;
202 return; 202 return;
203 } 203 }
204 qbo = container_of(bo, struct qxl_bo, tbo); 204 qbo = to_qxl_bo(bo);
205 qxl_ttm_placement_from_domain(qbo, QXL_GEM_DOMAIN_CPU, false); 205 qxl_ttm_placement_from_domain(qbo, QXL_GEM_DOMAIN_CPU, false);
206 *placement = qbo->placement; 206 *placement = qbo->placement;
207} 207}
@@ -365,7 +365,7 @@ static void qxl_bo_move_notify(struct ttm_buffer_object *bo,
365 365
366 if (!qxl_ttm_bo_is_qxl_bo(bo)) 366 if (!qxl_ttm_bo_is_qxl_bo(bo))
367 return; 367 return;
368 qbo = container_of(bo, struct qxl_bo, tbo); 368 qbo = to_qxl_bo(bo);
369 qdev = qbo->gem_base.dev->dev_private; 369 qdev = qbo->gem_base.dev->dev_private;
370 370
371 if (bo->mem.mem_type == TTM_PL_PRIV0 && qbo->surface_id) 371 if (bo->mem.mem_type == TTM_PL_PRIV0 && qbo->surface_id)
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
index 96f2eb43713c..a37b6e2fe51a 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
@@ -28,7 +28,7 @@ static int rcar_du_hdmi_connector_get_modes(struct drm_connector *connector)
28{ 28{
29 struct rcar_du_connector *con = to_rcar_connector(connector); 29 struct rcar_du_connector *con = to_rcar_connector(connector);
30 struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder); 30 struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
31 struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); 31 const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
32 32
33 if (sfuncs->get_modes == NULL) 33 if (sfuncs->get_modes == NULL)
34 return 0; 34 return 0;
@@ -41,7 +41,7 @@ static int rcar_du_hdmi_connector_mode_valid(struct drm_connector *connector,
41{ 41{
42 struct rcar_du_connector *con = to_rcar_connector(connector); 42 struct rcar_du_connector *con = to_rcar_connector(connector);
43 struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder); 43 struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
44 struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); 44 const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
45 45
46 if (sfuncs->mode_valid == NULL) 46 if (sfuncs->mode_valid == NULL)
47 return MODE_OK; 47 return MODE_OK;
@@ -66,7 +66,7 @@ rcar_du_hdmi_connector_detect(struct drm_connector *connector, bool force)
66{ 66{
67 struct rcar_du_connector *con = to_rcar_connector(connector); 67 struct rcar_du_connector *con = to_rcar_connector(connector);
68 struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder); 68 struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
69 struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); 69 const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
70 70
71 if (sfuncs->detect == NULL) 71 if (sfuncs->detect == NULL)
72 return connector_status_unknown; 72 return connector_status_unknown;
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c b/drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c
index 11267de26a51..2567efcbee36 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c
@@ -35,7 +35,7 @@ struct rcar_du_hdmienc {
35static void rcar_du_hdmienc_disable(struct drm_encoder *encoder) 35static void rcar_du_hdmienc_disable(struct drm_encoder *encoder)
36{ 36{
37 struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder); 37 struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder);
38 struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); 38 const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
39 39
40 if (sfuncs->dpms) 40 if (sfuncs->dpms)
41 sfuncs->dpms(encoder, DRM_MODE_DPMS_OFF); 41 sfuncs->dpms(encoder, DRM_MODE_DPMS_OFF);
@@ -50,7 +50,7 @@ static void rcar_du_hdmienc_disable(struct drm_encoder *encoder)
50static void rcar_du_hdmienc_enable(struct drm_encoder *encoder) 50static void rcar_du_hdmienc_enable(struct drm_encoder *encoder)
51{ 51{
52 struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder); 52 struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder);
53 struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); 53 const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
54 54
55 if (hdmienc->renc->lvds) 55 if (hdmienc->renc->lvds)
56 rcar_du_lvdsenc_enable(hdmienc->renc->lvds, encoder->crtc, 56 rcar_du_lvdsenc_enable(hdmienc->renc->lvds, encoder->crtc,
@@ -67,7 +67,7 @@ static int rcar_du_hdmienc_atomic_check(struct drm_encoder *encoder,
67 struct drm_connector_state *conn_state) 67 struct drm_connector_state *conn_state)
68{ 68{
69 struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder); 69 struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder);
70 struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); 70 const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
71 struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode; 71 struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode;
72 const struct drm_display_mode *mode = &crtc_state->mode; 72 const struct drm_display_mode *mode = &crtc_state->mode;
73 73
@@ -89,7 +89,7 @@ static void rcar_du_hdmienc_mode_set(struct drm_encoder *encoder,
89 struct drm_display_mode *adjusted_mode) 89 struct drm_display_mode *adjusted_mode)
90{ 90{
91 struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder); 91 struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder);
92 struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); 92 const struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);
93 93
94 if (sfuncs->mode_set) 94 if (sfuncs->mode_set)
95 sfuncs->mode_set(encoder, mode, adjusted_mode); 95 sfuncs->mode_set(encoder, mode, adjusted_mode);
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index 525b5a81e96e..bddcabd7a370 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -173,7 +173,7 @@ dw_hdmi_rockchip_mode_valid(struct drm_connector *connector,
173 return (valid) ? MODE_OK : MODE_BAD; 173 return (valid) ? MODE_OK : MODE_BAD;
174} 174}
175 175
176static struct drm_encoder_funcs dw_hdmi_rockchip_encoder_funcs = { 176static const struct drm_encoder_funcs dw_hdmi_rockchip_encoder_funcs = {
177 .destroy = drm_encoder_cleanup, 177 .destroy = drm_encoder_cleanup,
178}; 178};
179 179
@@ -218,7 +218,7 @@ static void dw_hdmi_rockchip_encoder_prepare(struct drm_encoder *encoder)
218 ROCKCHIP_OUT_MODE_AAAA); 218 ROCKCHIP_OUT_MODE_AAAA);
219} 219}
220 220
221static struct drm_encoder_helper_funcs dw_hdmi_rockchip_encoder_helper_funcs = { 221static const struct drm_encoder_helper_funcs dw_hdmi_rockchip_encoder_helper_funcs = {
222 .mode_fixup = dw_hdmi_rockchip_encoder_mode_fixup, 222 .mode_fixup = dw_hdmi_rockchip_encoder_mode_fixup,
223 .mode_set = dw_hdmi_rockchip_encoder_mode_set, 223 .mode_set = dw_hdmi_rockchip_encoder_mode_set,
224 .prepare = dw_hdmi_rockchip_encoder_prepare, 224 .prepare = dw_hdmi_rockchip_encoder_prepare,
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index f22e1e1ee64a..afbb7407c44f 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -450,10 +450,6 @@ static int rockchip_drm_bind(struct device *dev)
450 if (!drm) 450 if (!drm)
451 return -ENOMEM; 451 return -ENOMEM;
452 452
453 ret = drm_dev_set_unique(drm, "%s", dev_name(dev));
454 if (ret)
455 goto err_free;
456
457 ret = drm_dev_register(drm, 0); 453 ret = drm_dev_register(drm, 0);
458 if (ret) 454 if (ret)
459 goto err_free; 455 goto err_free;
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
index b8ac5911c102..621f25c463bd 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
@@ -66,7 +66,7 @@ static int rockchip_drm_fb_create_handle(struct drm_framebuffer *fb,
66 rockchip_fb->obj[0], handle); 66 rockchip_fb->obj[0], handle);
67} 67}
68 68
69static struct drm_framebuffer_funcs rockchip_drm_fb_funcs = { 69static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs = {
70 .destroy = rockchip_drm_fb_destroy, 70 .destroy = rockchip_drm_fb_destroy,
71 .create_handle = rockchip_drm_fb_create_handle, 71 .create_handle = rockchip_drm_fb_create_handle,
72}; 72};
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 50d7160c667b..c5c856a0879d 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -990,7 +990,6 @@ static int host1x_drm_probe(struct host1x_device *dev)
990 if (!drm) 990 if (!drm)
991 return -ENOMEM; 991 return -ENOMEM;
992 992
993 drm_dev_set_unique(drm, dev_name(&dev->dev));
994 dev_set_drvdata(&dev->dev, drm); 993 dev_set_drvdata(&dev->dev, drm);
995 994
996 err = drm_dev_register(drm, 0); 995 err = drm_dev_register(drm, 0);
diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c
index a7213f30fb20..ca84de9ccb51 100644
--- a/drivers/gpu/drm/tegra/fb.c
+++ b/drivers/gpu/drm/tegra/fb.c
@@ -88,7 +88,7 @@ static int tegra_fb_create_handle(struct drm_framebuffer *framebuffer,
88 return drm_gem_handle_create(file, &fb->planes[0]->gem, handle); 88 return drm_gem_handle_create(file, &fb->planes[0]->gem, handle);
89} 89}
90 90
91static struct drm_framebuffer_funcs tegra_fb_funcs = { 91static const struct drm_framebuffer_funcs tegra_fb_funcs = {
92 .destroy = tegra_fb_destroy, 92 .destroy = tegra_fb_destroy,
93 .create_handle = tegra_fb_create_handle, 93 .create_handle = tegra_fb_create_handle,
94}; 94};
diff --git a/drivers/gpu/drm/udl/udl_connector.c b/drivers/gpu/drm/udl/udl_connector.c
index 0110d95522f3..4709b54c204c 100644
--- a/drivers/gpu/drm/udl/udl_connector.c
+++ b/drivers/gpu/drm/udl/udl_connector.c
@@ -122,13 +122,13 @@ static void udl_connector_destroy(struct drm_connector *connector)
122 kfree(connector); 122 kfree(connector);
123} 123}
124 124
125static struct drm_connector_helper_funcs udl_connector_helper_funcs = { 125static const struct drm_connector_helper_funcs udl_connector_helper_funcs = {
126 .get_modes = udl_get_modes, 126 .get_modes = udl_get_modes,
127 .mode_valid = udl_mode_valid, 127 .mode_valid = udl_mode_valid,
128 .best_encoder = udl_best_single_encoder, 128 .best_encoder = udl_best_single_encoder,
129}; 129};
130 130
131static struct drm_connector_funcs udl_connector_funcs = { 131static const struct drm_connector_funcs udl_connector_funcs = {
132 .dpms = drm_helper_connector_dpms, 132 .dpms = drm_helper_connector_dpms,
133 .detect = udl_detect, 133 .detect = udl_detect,
134 .fill_modes = drm_helper_probe_single_connector_modes, 134 .fill_modes = drm_helper_probe_single_connector_modes,
diff --git a/drivers/gpu/drm/udl/udl_modeset.c b/drivers/gpu/drm/udl/udl_modeset.c
index 677190a65e82..160ef2a08b89 100644
--- a/drivers/gpu/drm/udl/udl_modeset.c
+++ b/drivers/gpu/drm/udl/udl_modeset.c
@@ -400,7 +400,7 @@ static void udl_crtc_commit(struct drm_crtc *crtc)
400 udl_crtc_dpms(crtc, DRM_MODE_DPMS_ON); 400 udl_crtc_dpms(crtc, DRM_MODE_DPMS_ON);
401} 401}
402 402
403static struct drm_crtc_helper_funcs udl_helper_funcs = { 403static const struct drm_crtc_helper_funcs udl_helper_funcs = {
404 .dpms = udl_crtc_dpms, 404 .dpms = udl_crtc_dpms,
405 .mode_fixup = udl_crtc_mode_fixup, 405 .mode_fixup = udl_crtc_mode_fixup,
406 .mode_set = udl_crtc_mode_set, 406 .mode_set = udl_crtc_mode_set,
diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
index cbcbbb83500e..f1655fff8425 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
@@ -184,8 +184,6 @@ static int vc4_drm_bind(struct device *dev)
184 vc4->dev = drm; 184 vc4->dev = drm;
185 drm->dev_private = vc4; 185 drm->dev_private = vc4;
186 186
187 drm_dev_set_unique(drm, dev_name(dev));
188
189 vc4_bo_cache_init(drm); 187 vc4_bo_cache_init(drm);
190 188
191 drm_mode_config_init(drm); 189 drm_mode_config_init(drm);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 9394c3535e85..162f188969a7 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -470,7 +470,7 @@ int vmw_kms_readback(struct vmw_private *dev_priv,
470} 470}
471 471
472 472
473static struct drm_framebuffer_funcs vmw_framebuffer_surface_funcs = { 473static const struct drm_framebuffer_funcs vmw_framebuffer_surface_funcs = {
474 .destroy = vmw_framebuffer_surface_destroy, 474 .destroy = vmw_framebuffer_surface_destroy,
475 .dirty = vmw_framebuffer_surface_dirty, 475 .dirty = vmw_framebuffer_surface_dirty,
476}; 476};
@@ -647,7 +647,7 @@ static int vmw_framebuffer_dmabuf_dirty(struct drm_framebuffer *framebuffer,
647 return ret; 647 return ret;
648} 648}
649 649
650static struct drm_framebuffer_funcs vmw_framebuffer_dmabuf_funcs = { 650static const struct drm_framebuffer_funcs vmw_framebuffer_dmabuf_funcs = {
651 .destroy = vmw_framebuffer_dmabuf_destroy, 651 .destroy = vmw_framebuffer_dmabuf_destroy,
652 .dirty = vmw_framebuffer_dmabuf_dirty, 652 .dirty = vmw_framebuffer_dmabuf_dirty,
653}; 653};
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index 2aff5e51d926..2def684e61a4 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -294,7 +294,7 @@ static int vmw_ldu_crtc_set_config(struct drm_mode_set *set)
294 return vmw_ldu_commit_list(dev_priv); 294 return vmw_ldu_commit_list(dev_priv);
295} 295}
296 296
297static struct drm_crtc_funcs vmw_legacy_crtc_funcs = { 297static const struct drm_crtc_funcs vmw_legacy_crtc_funcs = {
298 .cursor_set = vmw_du_crtc_cursor_set, 298 .cursor_set = vmw_du_crtc_cursor_set,
299 .cursor_move = vmw_du_crtc_cursor_move, 299 .cursor_move = vmw_du_crtc_cursor_move,
300 .gamma_set = vmw_du_crtc_gamma_set, 300 .gamma_set = vmw_du_crtc_gamma_set,
@@ -312,7 +312,7 @@ static void vmw_ldu_encoder_destroy(struct drm_encoder *encoder)
312 vmw_ldu_destroy(vmw_encoder_to_ldu(encoder)); 312 vmw_ldu_destroy(vmw_encoder_to_ldu(encoder));
313} 313}
314 314
315static struct drm_encoder_funcs vmw_legacy_encoder_funcs = { 315static const struct drm_encoder_funcs vmw_legacy_encoder_funcs = {
316 .destroy = vmw_ldu_encoder_destroy, 316 .destroy = vmw_ldu_encoder_destroy,
317}; 317};
318 318
@@ -325,7 +325,7 @@ static void vmw_ldu_connector_destroy(struct drm_connector *connector)
325 vmw_ldu_destroy(vmw_connector_to_ldu(connector)); 325 vmw_ldu_destroy(vmw_connector_to_ldu(connector));
326} 326}
327 327
328static struct drm_connector_funcs vmw_legacy_connector_funcs = { 328static const struct drm_connector_funcs vmw_legacy_connector_funcs = {
329 .dpms = vmw_du_connector_dpms, 329 .dpms = vmw_du_connector_dpms,
330 .detect = vmw_du_connector_detect, 330 .detect = vmw_du_connector_detect,
331 .fill_modes = vmw_du_connector_fill_modes, 331 .fill_modes = vmw_du_connector_fill_modes,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 6bb7af37934a..ecac70af032a 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -530,7 +530,7 @@ out_no_fence:
530 return ret; 530 return ret;
531} 531}
532 532
533static struct drm_crtc_funcs vmw_screen_object_crtc_funcs = { 533static const struct drm_crtc_funcs vmw_screen_object_crtc_funcs = {
534 .cursor_set = vmw_du_crtc_cursor_set, 534 .cursor_set = vmw_du_crtc_cursor_set,
535 .cursor_move = vmw_du_crtc_cursor_move, 535 .cursor_move = vmw_du_crtc_cursor_move,
536 .gamma_set = vmw_du_crtc_gamma_set, 536 .gamma_set = vmw_du_crtc_gamma_set,
@@ -548,7 +548,7 @@ static void vmw_sou_encoder_destroy(struct drm_encoder *encoder)
548 vmw_sou_destroy(vmw_encoder_to_sou(encoder)); 548 vmw_sou_destroy(vmw_encoder_to_sou(encoder));
549} 549}
550 550
551static struct drm_encoder_funcs vmw_screen_object_encoder_funcs = { 551static const struct drm_encoder_funcs vmw_screen_object_encoder_funcs = {
552 .destroy = vmw_sou_encoder_destroy, 552 .destroy = vmw_sou_encoder_destroy,
553}; 553};
554 554
@@ -561,7 +561,7 @@ static void vmw_sou_connector_destroy(struct drm_connector *connector)
561 vmw_sou_destroy(vmw_connector_to_sou(connector)); 561 vmw_sou_destroy(vmw_connector_to_sou(connector));
562} 562}
563 563
564static struct drm_connector_funcs vmw_sou_connector_funcs = { 564static const struct drm_connector_funcs vmw_sou_connector_funcs = {
565 .dpms = vmw_du_connector_dpms, 565 .dpms = vmw_du_connector_dpms,
566 .set_property = vmw_du_connector_set_property, 566 .set_property = vmw_du_connector_set_property,
567 .destroy = vmw_sou_connector_destroy, 567 .destroy = vmw_sou_connector_destroy,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index 45e72c2f15cd..87fc00af8d28 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -1040,7 +1040,7 @@ out_finish:
1040/* 1040/*
1041 * Screen Target CRTC dispatch table 1041 * Screen Target CRTC dispatch table
1042 */ 1042 */
1043static struct drm_crtc_funcs vmw_stdu_crtc_funcs = { 1043static const struct drm_crtc_funcs vmw_stdu_crtc_funcs = {
1044 .cursor_set = vmw_du_crtc_cursor_set, 1044 .cursor_set = vmw_du_crtc_cursor_set,
1045 .cursor_move = vmw_du_crtc_cursor_move, 1045 .cursor_move = vmw_du_crtc_cursor_move,
1046 .gamma_set = vmw_du_crtc_gamma_set, 1046 .gamma_set = vmw_du_crtc_gamma_set,
@@ -1070,7 +1070,7 @@ static void vmw_stdu_encoder_destroy(struct drm_encoder *encoder)
1070 vmw_stdu_destroy(vmw_encoder_to_stdu(encoder)); 1070 vmw_stdu_destroy(vmw_encoder_to_stdu(encoder));
1071} 1071}
1072 1072
1073static struct drm_encoder_funcs vmw_stdu_encoder_funcs = { 1073static const struct drm_encoder_funcs vmw_stdu_encoder_funcs = {
1074 .destroy = vmw_stdu_encoder_destroy, 1074 .destroy = vmw_stdu_encoder_destroy,
1075}; 1075};
1076 1076
@@ -1097,7 +1097,7 @@ static void vmw_stdu_connector_destroy(struct drm_connector *connector)
1097 1097
1098 1098
1099 1099
1100static struct drm_connector_funcs vmw_stdu_connector_funcs = { 1100static const struct drm_connector_funcs vmw_stdu_connector_funcs = {
1101 .dpms = vmw_du_connector_dpms, 1101 .dpms = vmw_du_connector_dpms,
1102 .detect = vmw_du_connector_detect, 1102 .detect = vmw_du_connector_detect,
1103 .fill_modes = vmw_du_connector_fill_modes, 1103 .fill_modes = vmw_du_connector_fill_modes,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
index 7d620e82e000..c2a721a8cef9 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
@@ -771,7 +771,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
771 } 771 }
772 srf->offsets = kmalloc(srf->num_sizes * sizeof(*srf->offsets), 772 srf->offsets = kmalloc(srf->num_sizes * sizeof(*srf->offsets),
773 GFP_KERNEL); 773 GFP_KERNEL);
774 if (unlikely(srf->sizes == NULL)) { 774 if (unlikely(srf->offsets == NULL)) {
775 ret = -ENOMEM; 775 ret = -ENOMEM;
776 goto out_no_offsets; 776 goto out_no_offsets;
777 } 777 }
@@ -815,11 +815,8 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
815 srf->sizes[0].height == 64 && 815 srf->sizes[0].height == 64 &&
816 srf->format == SVGA3D_A8R8G8B8) { 816 srf->format == SVGA3D_A8R8G8B8) {
817 817
818 srf->snooper.image = kmalloc(64 * 64 * 4, GFP_KERNEL); 818 srf->snooper.image = kzalloc(64 * 64 * 4, GFP_KERNEL);
819 /* clear the image */ 819 if (!srf->snooper.image) {
820 if (srf->snooper.image) {
821 memset(srf->snooper.image, 0x00, 64 * 64 * 4);
822 } else {
823 DRM_ERROR("Failed to allocate cursor_image\n"); 820 DRM_ERROR("Failed to allocate cursor_image\n");
824 ret = -ENOMEM; 821 ret = -ENOMEM;
825 goto out_no_copy; 822 goto out_no_copy;
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 5531d7bbe851..04caa8f8a52f 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1068,7 +1068,7 @@ void drm_dev_ref(struct drm_device *dev);
1068void drm_dev_unref(struct drm_device *dev); 1068void drm_dev_unref(struct drm_device *dev);
1069int drm_dev_register(struct drm_device *dev, unsigned long flags); 1069int drm_dev_register(struct drm_device *dev, unsigned long flags);
1070void drm_dev_unregister(struct drm_device *dev); 1070void drm_dev_unregister(struct drm_device *dev);
1071int drm_dev_set_unique(struct drm_device *dev, const char *fmt, ...); 1071int drm_dev_set_unique(struct drm_device *dev, const char *name);
1072 1072
1073struct drm_minor *drm_minor_acquire(unsigned int minor_id); 1073struct drm_minor *drm_minor_acquire(unsigned int minor_id);
1074void drm_minor_release(struct drm_minor *minor); 1074void drm_minor_release(struct drm_minor *minor);
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index c2f98ba2bb98..3b040b355472 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -172,7 +172,9 @@ struct drm_framebuffer_funcs {
172 * Clean up framebuffer resources, specifically also unreference the 172 * Clean up framebuffer resources, specifically also unreference the
173 * backing storage. The core guarantees to call this function for every 173 * backing storage. The core guarantees to call this function for every
174 * framebuffer successfully created by ->fb_create() in 174 * framebuffer successfully created by ->fb_create() in
175 * &drm_mode_config_funcs. 175 * &drm_mode_config_funcs. Drivers must also call
176 * drm_framebuffer_cleanup() to release DRM core resources for this
177 * framebuffer.
176 */ 178 */
177 void (*destroy)(struct drm_framebuffer *framebuffer); 179 void (*destroy)(struct drm_framebuffer *framebuffer);
178 180
@@ -187,6 +189,9 @@ struct drm_framebuffer_funcs {
187 * copying the current screen contents to a private buffer and blending 189 * copying the current screen contents to a private buffer and blending
188 * between that and the new contents. 190 * between that and the new contents.
189 * 191 *
192 * GEM based drivers should call drm_gem_handle_create() to create the
193 * handle.
194 *
190 * RETURNS: 195 * RETURNS:
191 * 196 *
192 * 0 on success or a negative error code on failure. 197 * 0 on success or a negative error code on failure.
@@ -1731,6 +1736,17 @@ struct drm_mode_config_funcs {
1731 * requested metadata, but most of that is left to the driver. See 1736 * requested metadata, but most of that is left to the driver. See
1732 * struct &drm_mode_fb_cmd2 for details. 1737 * struct &drm_mode_fb_cmd2 for details.
1733 * 1738 *
1739 * If the parameters are deemed valid and the backing storage objects in
1740 * the underlying memory manager all exist, then the driver allocates
1741 * a new &drm_framebuffer structure, subclassed to contain
1742 * driver-specific information (like the internal native buffer object
1743 * references). It also needs to fill out all relevant metadata, which
1744 * should be done by calling drm_helper_mode_fill_fb_struct().
1745 *
1746 * The initialization is finalized by calling drm_framebuffer_init(),
1747 * which registers the framebuffer and makes it accessible to other
1748 * threads.
1749 *
1734 * RETURNS: 1750 * RETURNS:
1735 * 1751 *
1736 * A new framebuffer with an initial reference count of 1 or a negative 1752 * A new framebuffer with an initial reference count of 1 or a negative
diff --git a/include/drm/drm_encoder_slave.h b/include/drm/drm_encoder_slave.h
index 8b9cc3671858..82cdf611393d 100644
--- a/include/drm/drm_encoder_slave.h
+++ b/include/drm/drm_encoder_slave.h
@@ -95,7 +95,7 @@ struct drm_encoder_slave_funcs {
95struct drm_encoder_slave { 95struct drm_encoder_slave {
96 struct drm_encoder base; 96 struct drm_encoder base;
97 97
98 struct drm_encoder_slave_funcs *slave_funcs; 98 const struct drm_encoder_slave_funcs *slave_funcs;
99 void *slave_priv; 99 void *slave_priv;
100 void *bus_priv; 100 void *bus_priv;
101}; 101};