drm/atomic: Move __drm_atomic_helper_disable_plane/set_config()
authorNoralf Trønnes <noralf@tronnes.org>
Fri, 31 May 2019 14:01:10 +0000 (16:01 +0200)
committerNoralf Trønnes <noralf@tronnes.org>
Sat, 8 Jun 2019 14:46:37 +0000 (16:46 +0200)
Prepare for moving drm_fb_helper modesetting code to drm_client.
drm_client will be linked to drm.ko, so move
__drm_atomic_helper_disable_plane() and __drm_atomic_helper_set_config()
out of drm_kms_helper.ko.

While at it, fix two checkpatch complaints:
- WARNING: Block comments use a trailing */ on a separate line
- CHECK: Alignment should match open parenthesis

v7: Declare drm_mode_set and drm_plane_state

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190531140117.37751-2-noralf@tronnes.org
drivers/gpu/drm/drm_atomic.c
drivers/gpu/drm/drm_atomic_helper.c
drivers/gpu/drm/drm_crtc_internal.h
include/drm/drm_atomic_helper.h

index b640e77..169f06d 100644 (file)
@@ -1179,6 +1179,174 @@ int drm_atomic_nonblocking_commit(struct drm_atomic_state *state)
 }
 EXPORT_SYMBOL(drm_atomic_nonblocking_commit);
 
+/* just used from drm-client and atomic-helper: */
+int __drm_atomic_helper_disable_plane(struct drm_plane *plane,
+                                     struct drm_plane_state *plane_state)
+{
+       int ret;
+
+       ret = drm_atomic_set_crtc_for_plane(plane_state, NULL);
+       if (ret != 0)
+               return ret;
+
+       drm_atomic_set_fb_for_plane(plane_state, NULL);
+       plane_state->crtc_x = 0;
+       plane_state->crtc_y = 0;
+       plane_state->crtc_w = 0;
+       plane_state->crtc_h = 0;
+       plane_state->src_x = 0;
+       plane_state->src_y = 0;
+       plane_state->src_w = 0;
+       plane_state->src_h = 0;
+
+       return 0;
+}
+EXPORT_SYMBOL(__drm_atomic_helper_disable_plane);
+
+static int update_output_state(struct drm_atomic_state *state,
+                              struct drm_mode_set *set)
+{
+       struct drm_device *dev = set->crtc->dev;
+       struct drm_crtc *crtc;
+       struct drm_crtc_state *new_crtc_state;
+       struct drm_connector *connector;
+       struct drm_connector_state *new_conn_state;
+       int ret, i;
+
+       ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
+                              state->acquire_ctx);
+       if (ret)
+               return ret;
+
+       /* First disable all connectors on the target crtc. */
+       ret = drm_atomic_add_affected_connectors(state, set->crtc);
+       if (ret)
+               return ret;
+
+       for_each_new_connector_in_state(state, connector, new_conn_state, i) {
+               if (new_conn_state->crtc == set->crtc) {
+                       ret = drm_atomic_set_crtc_for_connector(new_conn_state,
+                                                               NULL);
+                       if (ret)
+                               return ret;
+
+                       /* Make sure legacy setCrtc always re-trains */
+                       new_conn_state->link_status = DRM_LINK_STATUS_GOOD;
+               }
+       }
+
+       /* Then set all connectors from set->connectors on the target crtc */
+       for (i = 0; i < set->num_connectors; i++) {
+               new_conn_state = drm_atomic_get_connector_state(state,
+                                                               set->connectors[i]);
+               if (IS_ERR(new_conn_state))
+                       return PTR_ERR(new_conn_state);
+
+               ret = drm_atomic_set_crtc_for_connector(new_conn_state,
+                                                       set->crtc);
+               if (ret)
+                       return ret;
+       }
+
+       for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
+               /*
+                * Don't update ->enable for the CRTC in the set_config request,
+                * since a mismatch would indicate a bug in the upper layers.
+                * The actual modeset code later on will catch any
+                * inconsistencies here.
+                */
+               if (crtc == set->crtc)
+                       continue;
+
+               if (!new_crtc_state->connector_mask) {
+                       ret = drm_atomic_set_mode_prop_for_crtc(new_crtc_state,
+                                                               NULL);
+                       if (ret < 0)
+                               return ret;
+
+                       new_crtc_state->active = false;
+               }
+       }
+
+       return 0;
+}
+
+/* just used from drm-client and atomic-helper: */
+int __drm_atomic_helper_set_config(struct drm_mode_set *set,
+                                  struct drm_atomic_state *state)
+{
+       struct drm_crtc_state *crtc_state;
+       struct drm_plane_state *primary_state;
+       struct drm_crtc *crtc = set->crtc;
+       int hdisplay, vdisplay;
+       int ret;
+
+       crtc_state = drm_atomic_get_crtc_state(state, crtc);
+       if (IS_ERR(crtc_state))
+               return PTR_ERR(crtc_state);
+
+       primary_state = drm_atomic_get_plane_state(state, crtc->primary);
+       if (IS_ERR(primary_state))
+               return PTR_ERR(primary_state);
+
+       if (!set->mode) {
+               WARN_ON(set->fb);
+               WARN_ON(set->num_connectors);
+
+               ret = drm_atomic_set_mode_for_crtc(crtc_state, NULL);
+               if (ret != 0)
+                       return ret;
+
+               crtc_state->active = false;
+
+               ret = drm_atomic_set_crtc_for_plane(primary_state, NULL);
+               if (ret != 0)
+                       return ret;
+
+               drm_atomic_set_fb_for_plane(primary_state, NULL);
+
+               goto commit;
+       }
+
+       WARN_ON(!set->fb);
+       WARN_ON(!set->num_connectors);
+
+       ret = drm_atomic_set_mode_for_crtc(crtc_state, set->mode);
+       if (ret != 0)
+               return ret;
+
+       crtc_state->active = true;
+
+       ret = drm_atomic_set_crtc_for_plane(primary_state, crtc);
+       if (ret != 0)
+               return ret;
+
+       drm_mode_get_hv_timing(set->mode, &hdisplay, &vdisplay);
+
+       drm_atomic_set_fb_for_plane(primary_state, set->fb);
+       primary_state->crtc_x = 0;
+       primary_state->crtc_y = 0;
+       primary_state->crtc_w = hdisplay;
+       primary_state->crtc_h = vdisplay;
+       primary_state->src_x = set->x << 16;
+       primary_state->src_y = set->y << 16;
+       if (drm_rotation_90_or_270(primary_state->rotation)) {
+               primary_state->src_w = vdisplay << 16;
+               primary_state->src_h = hdisplay << 16;
+       } else {
+               primary_state->src_w = hdisplay << 16;
+               primary_state->src_h = vdisplay << 16;
+       }
+
+commit:
+       ret = update_output_state(state, set);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+EXPORT_SYMBOL(__drm_atomic_helper_set_config);
+
 void drm_atomic_print_state(const struct drm_atomic_state *state)
 {
        struct drm_printer p = drm_info_printer(state->dev->dev);
index acf993c..0fc63d6 100644 (file)
@@ -2844,95 +2844,6 @@ fail:
 }
 EXPORT_SYMBOL(drm_atomic_helper_disable_plane);
 
-/* just used from fb-helper and atomic-helper: */
-int __drm_atomic_helper_disable_plane(struct drm_plane *plane,
-               struct drm_plane_state *plane_state)
-{
-       int ret;
-
-       ret = drm_atomic_set_crtc_for_plane(plane_state, NULL);
-       if (ret != 0)
-               return ret;
-
-       drm_atomic_set_fb_for_plane(plane_state, NULL);
-       plane_state->crtc_x = 0;
-       plane_state->crtc_y = 0;
-       plane_state->crtc_w = 0;
-       plane_state->crtc_h = 0;
-       plane_state->src_x = 0;
-       plane_state->src_y = 0;
-       plane_state->src_w = 0;
-       plane_state->src_h = 0;
-
-       return 0;
-}
-
-static int update_output_state(struct drm_atomic_state *state,
-                              struct drm_mode_set *set)
-{
-       struct drm_device *dev = set->crtc->dev;
-       struct drm_crtc *crtc;
-       struct drm_crtc_state *new_crtc_state;
-       struct drm_connector *connector;
-       struct drm_connector_state *new_conn_state;
-       int ret, i;
-
-       ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
-                              state->acquire_ctx);
-       if (ret)
-               return ret;
-
-       /* First disable all connectors on the target crtc. */
-       ret = drm_atomic_add_affected_connectors(state, set->crtc);
-       if (ret)
-               return ret;
-
-       for_each_new_connector_in_state(state, connector, new_conn_state, i) {
-               if (new_conn_state->crtc == set->crtc) {
-                       ret = drm_atomic_set_crtc_for_connector(new_conn_state,
-                                                               NULL);
-                       if (ret)
-                               return ret;
-
-                       /* Make sure legacy setCrtc always re-trains */
-                       new_conn_state->link_status = DRM_LINK_STATUS_GOOD;
-               }
-       }
-
-       /* Then set all connectors from set->connectors on the target crtc */
-       for (i = 0; i < set->num_connectors; i++) {
-               new_conn_state = drm_atomic_get_connector_state(state,
-                                                           set->connectors[i]);
-               if (IS_ERR(new_conn_state))
-                       return PTR_ERR(new_conn_state);
-
-               ret = drm_atomic_set_crtc_for_connector(new_conn_state,
-                                                       set->crtc);
-               if (ret)
-                       return ret;
-       }
-
-       for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
-               /* Don't update ->enable for the CRTC in the set_config request,
-                * since a mismatch would indicate a bug in the upper layers.
-                * The actual modeset code later on will catch any
-                * inconsistencies here. */
-               if (crtc == set->crtc)
-                       continue;
-
-               if (!new_crtc_state->connector_mask) {
-                       ret = drm_atomic_set_mode_prop_for_crtc(new_crtc_state,
-                                                               NULL);
-                       if (ret < 0)
-                               return ret;
-
-                       new_crtc_state->active = false;
-               }
-       }
-
-       return 0;
-}
-
 /**
  * drm_atomic_helper_set_config - set a new config from userspace
  * @set: mode set configuration
@@ -2977,81 +2888,6 @@ fail:
 }
 EXPORT_SYMBOL(drm_atomic_helper_set_config);
 
-/* just used from fb-helper and atomic-helper: */
-int __drm_atomic_helper_set_config(struct drm_mode_set *set,
-               struct drm_atomic_state *state)
-{
-       struct drm_crtc_state *crtc_state;
-       struct drm_plane_state *primary_state;
-       struct drm_crtc *crtc = set->crtc;
-       int hdisplay, vdisplay;
-       int ret;
-
-       crtc_state = drm_atomic_get_crtc_state(state, crtc);
-       if (IS_ERR(crtc_state))
-               return PTR_ERR(crtc_state);
-
-       primary_state = drm_atomic_get_plane_state(state, crtc->primary);
-       if (IS_ERR(primary_state))
-               return PTR_ERR(primary_state);
-
-       if (!set->mode) {
-               WARN_ON(set->fb);
-               WARN_ON(set->num_connectors);
-
-               ret = drm_atomic_set_mode_for_crtc(crtc_state, NULL);
-               if (ret != 0)
-                       return ret;
-
-               crtc_state->active = false;
-
-               ret = drm_atomic_set_crtc_for_plane(primary_state, NULL);
-               if (ret != 0)
-                       return ret;
-
-               drm_atomic_set_fb_for_plane(primary_state, NULL);
-
-               goto commit;
-       }
-
-       WARN_ON(!set->fb);
-       WARN_ON(!set->num_connectors);
-
-       ret = drm_atomic_set_mode_for_crtc(crtc_state, set->mode);
-       if (ret != 0)
-               return ret;
-
-       crtc_state->active = true;
-
-       ret = drm_atomic_set_crtc_for_plane(primary_state, crtc);
-       if (ret != 0)
-               return ret;
-
-       drm_mode_get_hv_timing(set->mode, &hdisplay, &vdisplay);
-
-       drm_atomic_set_fb_for_plane(primary_state, set->fb);
-       primary_state->crtc_x = 0;
-       primary_state->crtc_y = 0;
-       primary_state->crtc_w = hdisplay;
-       primary_state->crtc_h = vdisplay;
-       primary_state->src_x = set->x << 16;
-       primary_state->src_y = set->y << 16;
-       if (drm_rotation_90_or_270(primary_state->rotation)) {
-               primary_state->src_w = vdisplay << 16;
-               primary_state->src_h = hdisplay << 16;
-       } else {
-               primary_state->src_w = hdisplay << 16;
-               primary_state->src_h = vdisplay << 16;
-       }
-
-commit:
-       ret = update_output_state(state, set);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
 /**
  * drm_atomic_helper_disable_all - disable all currently active outputs
  * @dev: DRM device
index c78a44f..c7d5e4c 100644 (file)
@@ -50,7 +50,9 @@ struct drm_mode_create_dumb;
 struct drm_mode_fb_cmd2;
 struct drm_mode_fb_cmd;
 struct drm_mode_object;
+struct drm_mode_set;
 struct drm_plane;
+struct drm_plane_state;
 struct drm_property;
 struct edid;
 struct kref;
@@ -223,6 +225,11 @@ struct drm_minor;
 int drm_atomic_debugfs_init(struct drm_minor *minor);
 #endif
 
+int __drm_atomic_helper_disable_plane(struct drm_plane *plane,
+                                     struct drm_plane_state *plane_state);
+int __drm_atomic_helper_set_config(struct drm_mode_set *set,
+                                  struct drm_atomic_state *state);
+
 void drm_atomic_print_state(const struct drm_atomic_state *state);
 
 /* drm_atomic_uapi.c */
index 58214be..bf4e071 100644 (file)
@@ -117,12 +117,8 @@ int drm_atomic_helper_update_plane(struct drm_plane *plane,
                                   struct drm_modeset_acquire_ctx *ctx);
 int drm_atomic_helper_disable_plane(struct drm_plane *plane,
                                    struct drm_modeset_acquire_ctx *ctx);
-int __drm_atomic_helper_disable_plane(struct drm_plane *plane,
-               struct drm_plane_state *plane_state);
 int drm_atomic_helper_set_config(struct drm_mode_set *set,
                                 struct drm_modeset_acquire_ctx *ctx);
-int __drm_atomic_helper_set_config(struct drm_mode_set *set,
-               struct drm_atomic_state *state);
 
 int drm_atomic_helper_disable_all(struct drm_device *dev,
                                  struct drm_modeset_acquire_ctx *ctx);