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
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel