Discussion:
[radeon-alex:drm-next-4.21 64/142] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:4942 amdgpu_dm_atomic_commit_tail() error: we previously assumed 'dc_state' could be null (see line 4927)
Dan Carpenter
2018-12-10 10:34:48 UTC
Permalink
tree: git://people.freedesktop.org/~agd5f/linux.git drm-next-4.21
head: 22666cc1481ae3814d9c7718418cc4a3aa7d90c3
commit: eb3dc8978596a045f469f13bb13271a707623ecb [64/142] drm/amd/display: Use private obj helpers for dm_atomic_state

New smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:4942 amdgpu_dm_atomic_commit_tail() error: we previously assumed 'dc_state' could be null (see line 4927)

Old smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2979 create_stream_for_sink() error: we previously assumed 'preferred_mode' could be null (see line 2962)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:4998 amdgpu_dm_atomic_commit_tail() error: we previously assumed 'dm_state' could be null (see line 4846)

git remote add radeon-alex git://people.freedesktop.org/~agd5f/linux.git
git remote update radeon-alex
git checkout eb3dc8978596a045f469f13bb13271a707623ecb
vim +/dc_state +4942 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c

e7b07ceef Harry Wentland 2017-08-10 4817
b8592b484 Leo Li 2018-09-14 4818 /**
b8592b484 Leo Li 2018-09-14 4819 * amdgpu_dm_atomic_commit_tail() - AMDgpu DM's commit tail implementation.
b8592b484 Leo Li 2018-09-14 4820 * @state: The atomic state to commit
b8592b484 Leo Li 2018-09-14 4821 *
b8592b484 Leo Li 2018-09-14 4822 * This will tell DC to commit the constructed DC state from atomic_check,
b8592b484 Leo Li 2018-09-14 4823 * programming the hardware. Any failures here implies a hardware failure, since
b8592b484 Leo Li 2018-09-14 4824 * atomic check should have filtered anything non-kosher.
b8592b484 Leo Li 2018-09-14 4825 */
7578ecda1 Alex Deucher 2017-10-10 4826 static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
e7b07ceef Harry Wentland 2017-08-10 4827 {
e7b07ceef Harry Wentland 2017-08-10 4828 struct drm_device *dev = state->dev;
e7b07ceef Harry Wentland 2017-08-10 4829 struct amdgpu_device *adev = dev->dev_private;
e7b07ceef Harry Wentland 2017-08-10 4830 struct amdgpu_display_manager *dm = &adev->dm;
e7b07ceef Harry Wentland 2017-08-10 4831 struct dm_atomic_state *dm_state;
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4832 struct dc_state *dc_state = NULL, *dc_state_temp = NULL;
e7b07ceef Harry Wentland 2017-08-10 4833 uint32_t i, j;
5cc6dcbd4 Leo (Sunpeng Li 2017-10-12 4834) struct drm_crtc *crtc;
0bc9706db Leo (Sunpeng Li 2017-10-12 4835) struct drm_crtc_state *old_crtc_state, *new_crtc_state;
e7b07ceef Harry Wentland 2017-08-10 4836 unsigned long flags;
e7b07ceef Harry Wentland 2017-08-10 4837 bool wait_for_vblank = true;
e7b07ceef Harry Wentland 2017-08-10 4838 struct drm_connector *connector;
c2cea7063 Leo (Sunpeng Li 2017-10-12 4839) struct drm_connector_state *old_con_state, *new_con_state;
54d765752 Leo (Sunpeng Li 2017-10-12 4840) struct dm_crtc_state *dm_old_crtc_state, *dm_new_crtc_state;
fe2a19652 Lyude Paul 2018-06-21 4841 int crtc_disable_count = 0;
e7b07ceef Harry Wentland 2017-08-10 4842
e7b07ceef Harry Wentland 2017-08-10 4843 drm_atomic_helper_update_legacy_modeset_state(dev, state);
e7b07ceef Harry Wentland 2017-08-10 4844
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4845 dm_state = dm_atomic_get_new_state(state);
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4846 if (dm_state && dm_state->context) {
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4847 dc_state = dm_state->context;
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4848 } else {
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4849 /* No state changes, retain current state. */
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4850 dc_state_temp = dc_create_state();
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4851 ASSERT(dc_state_temp);
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4852 dc_state = dc_state_temp;
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4853 dc_resource_state_copy_construct_current(dm->dc, dc_state);
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4854 }

dc_state can't be NULL after this if statement.

e7b07ceef Harry Wentland 2017-08-10 4855
e7b07ceef Harry Wentland 2017-08-10 4856 /* update changed items */
0bc9706db Leo (Sunpeng Li 2017-10-12 4857) for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
e7b07ceef Harry Wentland 2017-08-10 4858 struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
b830ebc91 Harry Wentland 2017-07-26 4859
54d765752 Leo (Sunpeng Li 2017-10-12 4860) dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
54d765752 Leo (Sunpeng Li 2017-10-12 4861) dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
e7b07ceef Harry Wentland 2017-08-10 4862
f1ad2f5ef Harry Wentland 2017-09-12 4863 DRM_DEBUG_DRIVER(
e7b07ceef Harry Wentland 2017-08-10 4864 "amdgpu_crtc id:%d crtc_state_flags: enable:%d, active:%d, "
e7b07ceef Harry Wentland 2017-08-10 4865 "planes_changed:%d, mode_changed:%d,active_changed:%d,"
e7b07ceef Harry Wentland 2017-08-10 4866 "connectors_changed:%d\n",
e7b07ceef Harry Wentland 2017-08-10 4867 acrtc->crtc_id,
0bc9706db Leo (Sunpeng Li 2017-10-12 4868) new_crtc_state->enable,
0bc9706db Leo (Sunpeng Li 2017-10-12 4869) new_crtc_state->active,
0bc9706db Leo (Sunpeng Li 2017-10-12 4870) new_crtc_state->planes_changed,
0bc9706db Leo (Sunpeng Li 2017-10-12 4871) new_crtc_state->mode_changed,
0bc9706db Leo (Sunpeng Li 2017-10-12 4872) new_crtc_state->active_changed,
0bc9706db Leo (Sunpeng Li 2017-10-12 4873) new_crtc_state->connectors_changed);
e7b07ceef Harry Wentland 2017-08-10 4874
27b3f4fc9 Leo (Sunpeng Li 2017-11-10 4875) /* Copy all transient state flags into dc state */
27b3f4fc9 Leo (Sunpeng Li 2017-11-10 4876) if (dm_new_crtc_state->stream) {
27b3f4fc9 Leo (Sunpeng Li 2017-11-10 4877) amdgpu_dm_crtc_copy_transient_flags(&dm_new_crtc_state->base,
27b3f4fc9 Leo (Sunpeng Li 2017-11-10 4878) dm_new_crtc_state->stream);
27b3f4fc9 Leo (Sunpeng Li 2017-11-10 4879) }
27b3f4fc9 Leo (Sunpeng Li 2017-11-10 4880)
e7b07ceef Harry Wentland 2017-08-10 4881 /* handles headless hotplug case, updating new_state and
e7b07ceef Harry Wentland 2017-08-10 4882 * aconnector as needed
e7b07ceef Harry Wentland 2017-08-10 4883 */
e7b07ceef Harry Wentland 2017-08-10 4884
54d765752 Leo (Sunpeng Li 2017-10-12 4885) if (modeset_required(new_crtc_state, dm_new_crtc_state->stream, dm_old_crtc_state->stream)) {
e7b07ceef Harry Wentland 2017-08-10 4886
f1ad2f5ef Harry Wentland 2017-09-12 4887 DRM_DEBUG_DRIVER("Atomic commit: SET crtc id %d: [%p]\n", acrtc->crtc_id, acrtc);
e7b07ceef Harry Wentland 2017-08-10 4888
54d765752 Leo (Sunpeng Li 2017-10-12 4889) if (!dm_new_crtc_state->stream) {
e7b07ceef Harry Wentland 2017-08-10 4890 /*
e7b07ceef Harry Wentland 2017-08-10 4891 * this could happen because of issues with
e7b07ceef Harry Wentland 2017-08-10 4892 * userspace notifications delivery.
e7b07ceef Harry Wentland 2017-08-10 4893 * In this case userspace tries to set mode on
1f6010a96 David Francis 2018-08-15 4894 * display which is disconnected in fact.
1f6010a96 David Francis 2018-08-15 4895 * dc_sink is NULL in this case on aconnector.
e7b07ceef Harry Wentland 2017-08-10 4896 * We expect reset mode will come soon.
e7b07ceef Harry Wentland 2017-08-10 4897 *
e7b07ceef Harry Wentland 2017-08-10 4898 * This can also happen when unplug is done
e7b07ceef Harry Wentland 2017-08-10 4899 * during resume sequence ended
e7b07ceef Harry Wentland 2017-08-10 4900 *
e7b07ceef Harry Wentland 2017-08-10 4901 * In this case, we want to pretend we still
e7b07ceef Harry Wentland 2017-08-10 4902 * have a sink to keep the pipe running so that
e7b07ceef Harry Wentland 2017-08-10 4903 * hw state is consistent with the sw state
e7b07ceef Harry Wentland 2017-08-10 4904 */
f1ad2f5ef Harry Wentland 2017-09-12 4905 DRM_DEBUG_DRIVER("%s: Failed to create new stream for crtc %d\n",
e7b07ceef Harry Wentland 2017-08-10 4906 __func__, acrtc->base.base.id);
e7b07ceef Harry Wentland 2017-08-10 4907 continue;
e7b07ceef Harry Wentland 2017-08-10 4908 }
e7b07ceef Harry Wentland 2017-08-10 4909
54d765752 Leo (Sunpeng Li 2017-10-12 4910) if (dm_old_crtc_state->stream)
54d765752 Leo (Sunpeng Li 2017-10-12 4911) remove_stream(adev, acrtc, dm_old_crtc_state->stream);
e7b07ceef Harry Wentland 2017-08-10 4912
97028037a Lyude Paul 2018-06-04 4913 pm_runtime_get_noresume(dev->dev);
97028037a Lyude Paul 2018-06-04 4914
e7b07ceef Harry Wentland 2017-08-10 4915 acrtc->enabled = true;
0bc9706db Leo (Sunpeng Li 2017-10-12 4916) acrtc->hw_mode = new_crtc_state->mode;
0bc9706db Leo (Sunpeng Li 2017-10-12 4917) crtc->hwmode = new_crtc_state->mode;
0bc9706db Leo (Sunpeng Li 2017-10-12 4918) } else if (modereset_required(new_crtc_state)) {
f1ad2f5ef Harry Wentland 2017-09-12 4919 DRM_DEBUG_DRIVER("Atomic commit: RESET. crtc id %d:[%p]\n", acrtc->crtc_id, acrtc);
e7b07ceef Harry Wentland 2017-08-10 4920
e7b07ceef Harry Wentland 2017-08-10 4921 /* i.e. reset mode */
54d765752 Leo (Sunpeng Li 2017-10-12 4922) if (dm_old_crtc_state->stream)
54d765752 Leo (Sunpeng Li 2017-10-12 4923) remove_stream(adev, acrtc, dm_old_crtc_state->stream);
e7b07ceef Harry Wentland 2017-08-10 4924 }
e7b07ceef Harry Wentland 2017-08-10 4925 } /* for_each_crtc_in_state() */
e7b07ceef Harry Wentland 2017-08-10 4926
eb3dc8978 Nicholas Kazlauskas 2018-11-22 @4927 if (dc_state) {
^^^^^^^^
So this check can be removed.

eb3dc8978 Nicholas Kazlauskas 2018-11-22 4928 dm_enable_per_frame_crtc_master_sync(dc_state);
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4929 WARN_ON(!dc_commit_state(dm->dc, dc_state));
fa2123dbc Mikita Lipski 2017-10-17 4930 }
e7b07ceef Harry Wentland 2017-08-10 4931
0bc9706db Leo (Sunpeng Li 2017-10-12 4932) for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
e7b07ceef Harry Wentland 2017-08-10 4933 struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
b830ebc91 Harry Wentland 2017-07-26 4934
54d765752 Leo (Sunpeng Li 2017-10-12 4935) dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
e7b07ceef Harry Wentland 2017-08-10 4936
54d765752 Leo (Sunpeng Li 2017-10-12 4937) if (dm_new_crtc_state->stream != NULL) {
e7b07ceef Harry Wentland 2017-08-10 4938 const struct dc_stream_status *status =
54d765752 Leo (Sunpeng Li 2017-10-12 4939) dc_stream_get_status(dm_new_crtc_state->stream);
e7b07ceef Harry Wentland 2017-08-10 4940
e7b07ceef Harry Wentland 2017-08-10 4941 if (!status)
eb3dc8978 Nicholas Kazlauskas 2018-11-22 @4942 status = dc_state_get_stream_status(dc_state,
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4943 dm_new_crtc_state->stream);
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4944
eb3dc8978 Nicholas Kazlauskas 2018-11-22 4945 if (!status)
54d765752 Leo (Sunpeng Li 2017-10-12 4946) DC_ERR("got no status for stream %p on acrtc%p\n", dm_new_crtc_state->stream, acrtc);
e7b07ceef Harry Wentland 2017-08-10 4947 else
e7b07ceef Harry Wentland 2017-08-10 4948 acrtc->otg_inst = status->primary_otg_inst;
e7b07ceef Harry Wentland 2017-08-10 4949 }
e7b07ceef Harry Wentland 2017-08-10 4950 }
e7b07ceef Harry Wentland 2017-08-10 4951
c1ee92f94 David Francis 2018-11-26 4952 /* Handle scaling, underscan, and abm changes*/
c2cea7063 Leo (Sunpeng Li 2017-10-12 4953) for_each_oldnew_connector_in_state(state, connector, old_con_state, new_con_state, i) {
54d765752 Leo (Sunpeng Li 2017-10-12 4954) struct dm_connector_state *dm_new_con_state = to_dm_connector_state(new_con_state);
54d765752 Leo (Sunpeng Li 2017-10-12 4955) struct dm_connector_state *dm_old_con_state = to_dm_connector_state(old_con_state);
54d765752 Leo (Sunpeng Li 2017-10-12 4956) struct amdgpu_crtc *acrtc = to_amdgpu_crtc(dm_new_con_state->base.crtc);
e7b07ceef Harry Wentland 2017-08-10 4957 struct dc_stream_status *status = NULL;
e7b07ceef Harry Wentland 2017-08-10 4958
44d09c6a5 Harry Wentland 2018-03-15 4959 if (acrtc) {
0bc9706db Leo (Sunpeng Li 2017-10-12 4960) new_crtc_state = drm_atomic_get_new_crtc_state(state, &acrtc->base);
44d09c6a5 Harry Wentland 2018-03-15 4961 old_crtc_state = drm_atomic_get_old_crtc_state(state, &acrtc->base);
44d09c6a5 Harry Wentland 2018-03-15 4962 }
0bc9706db Leo (Sunpeng Li 2017-10-12 4963)
e7b07ceef Harry Wentland 2017-08-10 4964 /* Skip any modesets/resets */
0bc9706db Leo (Sunpeng Li 2017-10-12 4965) if (!acrtc || drm_atomic_crtc_needs_modeset(new_crtc_state))
e7b07ceef Harry Wentland 2017-08-10 4966 continue;
e7b07ceef Harry Wentland 2017-08-10 4967
e7b07ceef Harry Wentland 2017-08-10 4968
54d765752 Leo (Sunpeng Li 2017-10-12 4969) dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
c1ee92f94 David Francis 2018-11-26 4970 dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
c1ee92f94 David Francis 2018-11-26 4971
c1ee92f94 David Francis 2018-11-26 4972 /* Skip anything that is not scaling or underscan changes */
c1ee92f94 David Francis 2018-11-26 4973 if (!is_scaling_state_different(dm_new_con_state, dm_old_con_state) &&
c1ee92f94 David Francis 2018-11-26 4974 (dm_new_crtc_state->abm_level == dm_old_crtc_state->abm_level))
c1ee92f94 David Francis 2018-11-26 4975 continue;
e7b07ceef Harry Wentland 2017-08-10 4976
54d765752 Leo (Sunpeng Li 2017-10-12 4977) update_stream_scaling_settings(&dm_new_con_state->base.crtc->mode,
54d765752 Leo (Sunpeng Li 2017-10-12 4978) dm_new_con_state, (struct dc_stream_state *)dm_new_crtc_state->stream);
e7b07ceef Harry Wentland 2017-08-10 4979
70e8ffc55 Harry Wentland 2017-11-10 4980 if (!dm_new_crtc_state->stream)
70e8ffc55 Harry Wentland 2017-11-10 4981 continue;
70e8ffc55 Harry Wentland 2017-11-10 4982
54d765752 Leo (Sunpeng Li 2017-10-12 4983) status = dc_stream_get_status(dm_new_crtc_state->stream);
e7b07ceef Harry Wentland 2017-08-10 4984 WARN_ON(!status);
3be5262e3 Harry Wentland 2017-07-27 4985 WARN_ON(!status->plane_count);
e7b07ceef Harry Wentland 2017-08-10 4986
98e6436d3 Anthony Koo 2018-08-21 4987 dm_new_crtc_state->stream->adjust = dm_new_crtc_state->adjust;
98e6436d3 Anthony Koo 2018-08-21 4988 dm_new_crtc_state->stream->vrr_infopacket = dm_new_crtc_state->vrr_infopacket;
c1ee92f94 David Francis 2018-11-26 4989 dm_new_crtc_state->stream->abm_level = dm_new_crtc_state->abm_level;
98e6436d3 Anthony Koo 2018-08-21 4990
e7b07ceef Harry Wentland 2017-08-10 4991 /*TODO How it works with MPO ?*/
44d09c6a5 Harry Wentland 2018-03-15 4992 if (!commit_planes_to_stream(
e7b07ceef Harry Wentland 2017-08-10 4993 dm->dc,
3be5262e3 Harry Wentland 2017-07-27 4994 status->plane_states,
3be5262e3 Harry Wentland 2017-07-27 4995 status->plane_count,
44d09c6a5 Harry Wentland 2018-03-15 4996 dm_new_crtc_state,
44d09c6a5 Harry Wentland 2018-03-15 4997 to_dm_crtc_state(old_crtc_state),
bc6828e0e Bhawanpreet Lakha 2017-09-12 4998 dm_state->context))
e7b07ceef Harry Wentland 2017-08-10 4999 dm_error("%s: Failed to update stream scaling!\n", __func__);
e7b07ceef Harry Wentland 2017-08-10 5000 }
e7b07ceef Harry Wentland 2017-08-10 5001
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5002) for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state,
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5003) new_crtc_state, i) {
e7b07ceef Harry Wentland 2017-08-10 5004 /*
e7b07ceef Harry Wentland 2017-08-10 5005 * loop to enable interrupts on newly arrived crtc
e7b07ceef Harry Wentland 2017-08-10 5006 */
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5007) struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5008) bool modeset_needed;
b830ebc91 Harry Wentland 2017-07-26 5009
fe2a19652 Lyude Paul 2018-06-21 5010 if (old_crtc_state->active && !new_crtc_state->active)
fe2a19652 Lyude Paul 2018-06-21 5011 crtc_disable_count++;
fe2a19652 Lyude Paul 2018-06-21 5012
54d765752 Leo (Sunpeng Li 2017-10-12 5013) dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5014) dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5015) modeset_needed = modeset_required(
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5016) new_crtc_state,
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5017) dm_new_crtc_state->stream,
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5018) dm_old_crtc_state->stream);
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5019)
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5020) if (dm_new_crtc_state->stream == NULL || !modeset_needed)
e1fc2dca1 Leo (Sunpeng Li 2017-10-18 5021) continue;
e7b07ceef Harry Wentland 2017-08-10 5022
e7b07ceef Harry Wentland 2017-08-10 5023 manage_dm_interrupts(adev, acrtc, true);
e7b07ceef Harry Wentland 2017-08-10 5024 }
e7b07ceef Harry Wentland 2017-08-10 5025
e7b07ceef Harry Wentland 2017-08-10 5026 /* update planes when needed per crtc*/
5cc6dcbd4 Leo (Sunpeng Li 2017-10-12 5027) for_each_new_crtc_in_state(state, crtc, new_crtc_state, j) {
54d765752 Leo (Sunpeng Li 2017-10-12 5028) dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
e7b07ceef Harry Wentland 2017-08-10 5029
54d765752 Leo (Sunpeng Li 2017-10-12 5030) if (dm_new_crtc_state->stream)
eb3dc8978 Nicholas Kazlauskas 2018-11-22 5031 amdgpu_dm_commit_planes(state, dc_state, dev,
eb3dc8978 Nicholas Kazlauskas 2018-11-22 5032 dm, crtc, &wait_for_vblank);
e7b07ceef Harry Wentland 2017-08-10 5033 }
e7b07ceef Harry Wentland 2017-08-10 5034
e7b07ceef Harry Wentland 2017-08-10 5035
e7b07ceef Harry Wentland 2017-08-10 5036 /*
e7b07ceef Harry Wentland 2017-08-10 5037 * send vblank event on all events not handled in flip and
e7b07ceef Harry Wentland 2017-08-10 5038 * mark consumed event for drm_atomic_helper_commit_hw_done
e7b07ceef Harry Wentland 2017-08-10 5039 */
e7b07ceef Harry Wentland 2017-08-10 5040 spin_lock_irqsave(&adev->ddev->event_lock, flags);
0bc9706db Leo (Sunpeng Li 2017-10-12 5041) for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
e7b07ceef Harry Wentland 2017-08-10 5042
0bc9706db Leo (Sunpeng Li 2017-10-12 5043) if (new_crtc_state->event)
0bc9706db Leo (Sunpeng Li 2017-10-12 5044) drm_send_event_locked(dev, &new_crtc_state->event->base);
e7b07ceef Harry Wentland 2017-08-10 5045
0bc9706db Leo (Sunpeng Li 2017-10-12 5046) new_crtc_state->event = NULL;
e7b07ceef Harry Wentland 2017-08-10 5047 }
e7b07ceef Harry Wentland 2017-08-10 5048 spin_unlock_irqrestore(&adev->ddev->event_lock, flags);
e7b07ceef Harry Wentland 2017-08-10 5049
e7b07ceef Harry Wentland 2017-08-10 5050
e7b07ceef Harry Wentland 2017-08-10 5051 if (wait_for_vblank)
320a12743 Andrey Grodzovsky 2017-11-14 5052 drm_atomic_helper_wait_for_flip_done(dev, state);
e7b07ceef Harry Wentland 2017-08-10 5053
717276b92 Shirish S 2018-09-24 5054 /*
717276b92 Shirish S 2018-09-24 5055 * FIXME:
717276b92 Shirish S 2018-09-24 5056 * Delay hw_done() until flip_done() is signaled. This is to block
717276b92 Shirish S 2018-09-24 5057 * another commit from freeing the CRTC state while we're still
717276b92 Shirish S 2018-09-24 5058 * waiting on flip_done.
717276b92 Shirish S 2018-09-24 5059 */
717276b92 Shirish S 2018-09-24 5060 drm_atomic_helper_commit_hw_done(state);
717276b92 Shirish S 2018-09-24 5061
e7b07ceef Harry Wentland 2017-08-10 5062 drm_atomic_helper_cleanup_planes(dev, state);
97028037a Lyude Paul 2018-06-04 5063
1f6010a96 David Francis 2018-08-15 5064 /*
1f6010a96 David Francis 2018-08-15 5065 * Finally, drop a runtime PM reference for each newly disabled CRTC,
97028037a Lyude Paul 2018-06-04 5066 * so we can put the GPU into runtime suspend if we're not driving any
97028037a Lyude Paul 2018-06-04 5067 * displays anymore
97028037a Lyude Paul 2018-06-04 5068 */
fe2a19652 Lyude Paul 2018-06-21 5069 for (i = 0; i < crtc_disable_count; i++)
97028037a Lyude Paul 2018-06-04 5070 pm_runtime_put_autosuspend(dev->dev);
fe2a19652 Lyude Paul 2018-06-21 5071 pm_runtime_mark_last_busy(dev->dev);
eb3dc8978 Nicholas Kazlauskas 2018-11-22 5072
eb3dc8978 Nicholas Kazlauskas 2018-11-22 5073 if (dc_state_temp)
eb3dc8978 Nicholas Kazlauskas 2018-11-22 5074 dc_release_state(dc_state_temp);
e7b07ceef Harry Wentland 2017-08-10 5075 }
e7b07ceef Harry Wentland 2017-08-10 5076

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Loading...