Merge "disp: msm: sde: fix state transition and vm release in TUI"

Dieser Commit ist enthalten in:
qctecmdr
2023-12-26 09:15:06 -08:00
committet von Gerrit - the friendly Code Review server
Commit 8ffa8d427b
3 geänderte Dateien mit 21 neuen und 1 gelöschten Zeilen

Datei anzeigen

@@ -1498,6 +1498,11 @@ int sde_kms_vm_trusted_post_commit(struct sde_kms *sde_kms,
vm_ops = sde_vm_get_ops(sde_kms);
crtc = sde_kms_vm_get_vm_crtc(state);
if (sde_kms->vm->lastclose_in_progress && !crtc) {
sde_dbg_set_hw_ownership_status(false);
goto relase_vm;
}
if (!crtc)
return 0;
@@ -1507,6 +1512,7 @@ int sde_kms_vm_trusted_post_commit(struct sde_kms *sde_kms,
if (vm_req != VM_REQ_RELEASE)
return 0;
relase_vm:
sde_kms_vm_pre_release(sde_kms, state, false);
sde_kms_vm_set_sid(sde_kms, 0);
@@ -2915,6 +2921,10 @@ static void sde_kms_lastclose(struct msm_kms *kms)
sde_kms = to_sde_kms(kms);
dev = sde_kms->dev;
if (sde_kms && sde_kms->vm)
sde_kms->vm->lastclose_in_progress = true;
drm_modeset_acquire_init(&ctx, 0);
state = drm_atomic_state_alloc(dev);
@@ -2949,6 +2959,9 @@ out_ctx:
SDE_ERROR("kms lastclose failed: %d\n", ret);
SDE_EVT32(ret, SDE_EVTLOG_FUNC_EXIT);
if (sde_kms && sde_kms->vm)
sde_kms->vm->lastclose_in_progress = false;
return;
backoff:

Datei anzeigen

@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
*/
@@ -188,6 +189,8 @@ struct sde_vm_ops {
* @msgq_listener_thread - handle to msgq receiver thread
* @vm_work - kthread work obj for msgq
* @msgq_handle - handle to display msgq
* @lastclose_in_progress - boolean entry to check if
* lastclose is in progress
*/
struct sde_vm {
struct mutex vm_res_lock;
@@ -199,6 +202,7 @@ struct sde_vm {
struct task_struct *msgq_listener_thread;
struct sde_vm_msg_work vm_work;
void *msgq_handle;
bool lastclose_in_progress;
};
/**

Datei anzeigen

@@ -323,7 +323,10 @@ int sde_vm_request_valid(struct sde_kms *sde_kms,
rc = -EINVAL;
break;
case VM_REQ_ACQUIRE:
if ((old_state != VM_REQ_RELEASE) || (vm_owns_hw && !sde_in_trusted_vm(sde_kms)))
if ((old_state == VM_REQ_ACQUIRE) && sde_in_trusted_vm(sde_kms))
rc = 0;
else if ((old_state != VM_REQ_RELEASE) ||
(vm_owns_hw && !sde_in_trusted_vm(sde_kms)))
rc = -EINVAL;
break;
default: