Loading msm/sde/sde_crtc.c +2 −1 Original line number Diff line number Diff line /* * Copyright (c) 2014-2021 The Linux Foundation. All rights reserved. * Copyright (c) 2014-2022 The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <robdclark@gmail.com> * Loading Loading @@ -3194,6 +3194,7 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc, if (encoder->crtc != crtc) continue; sde_encoder_trigger_rsc_state_change(encoder); /* encoder will trigger pending mask now */ sde_encoder_trigger_kickoff_pending(encoder); } Loading msm/sde/sde_encoder.c +41 −1 Original line number Diff line number Diff line /* * Copyright (c) 2014-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2014-2022, The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <robdclark@gmail.com> * Loading Loading @@ -4398,6 +4398,46 @@ bool sde_encoder_check_curr_mode(struct drm_encoder *drm_enc, u32 mode) return (disp_info->curr_panel_mode == mode); } void sde_encoder_trigger_rsc_state_change(struct drm_encoder *drm_enc) { struct sde_encoder_virt *sde_enc = NULL; int ret = 0; sde_enc = to_sde_encoder_virt(drm_enc); if (!sde_enc) return; mutex_lock(&sde_enc->rc_lock); /* * In dual display case when secondary comes out of * idle make sure RSC solver mode is disabled before * setting CTL_PREPARE. */ if (!sde_enc->cur_master || !sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE) || sde_enc->disp_info.display_type == SDE_CONNECTOR_PRIMARY || sde_enc->rc_state != SDE_ENC_RC_STATE_IDLE) goto end; /* enable all the clks and resources */ ret = _sde_encoder_resource_control_helper(drm_enc, true); if (ret) { SDE_ERROR_ENC(sde_enc, "rc in state %d\n", sde_enc->rc_state); SDE_EVT32(DRMID(drm_enc), sde_enc->rc_state, SDE_EVTLOG_ERROR); goto end; } _sde_encoder_update_rsc_client(drm_enc, true); SDE_EVT32(DRMID(drm_enc), sde_enc->rc_state, SDE_ENC_RC_STATE_ON); sde_enc->rc_state = SDE_ENC_RC_STATE_ON; end: mutex_unlock(&sde_enc->rc_lock); } void sde_encoder_trigger_kickoff_pending(struct drm_encoder *drm_enc) { struct sde_encoder_virt *sde_enc; Loading msm/sde/sde_encoder.h +7 −1 Original line number Diff line number Diff line /* * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2015-2022, The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <robdclark@gmail.com> * Loading Loading @@ -96,6 +96,12 @@ void sde_encoder_get_hw_resources(struct drm_encoder *encoder, struct sde_encoder_hw_resources *hw_res, struct drm_connector_state *conn_state); /** * sde_encoder_trigger_rsc_state_change - rsc state change. * @encoder: encoder pointer */ void sde_encoder_trigger_rsc_state_change(struct drm_encoder *drm_enc); /** * sde_encoder_register_vblank_callback - provide callback to encoder that * will be called on the next vblank. Loading msm/sde/sde_kms.h +5 −1 Original line number Diff line number Diff line Loading @@ -464,7 +464,11 @@ void *sde_debugfs_get_root(struct sde_kms *sde_kms); * These functions/definitions allow for building up a 'sde_info' structure * containing one or more "key=value\n" entries. */ #define SDE_KMS_INFO_MAX_SIZE 4096 #if IS_ENABLED(CONFIG_DRM_LOW_MSM_MEM_FOOTPRINT) #define SDE_KMS_INFO_MAX_SIZE (1 << 12) #else #define SDE_KMS_INFO_MAX_SIZE (1 << 14) #endif /** * struct sde_kms_info - connector information structure container Loading Loading
msm/sde/sde_crtc.c +2 −1 Original line number Diff line number Diff line /* * Copyright (c) 2014-2021 The Linux Foundation. All rights reserved. * Copyright (c) 2014-2022 The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <robdclark@gmail.com> * Loading Loading @@ -3194,6 +3194,7 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc, if (encoder->crtc != crtc) continue; sde_encoder_trigger_rsc_state_change(encoder); /* encoder will trigger pending mask now */ sde_encoder_trigger_kickoff_pending(encoder); } Loading
msm/sde/sde_encoder.c +41 −1 Original line number Diff line number Diff line /* * Copyright (c) 2014-2021, The Linux Foundation. All rights reserved. * Copyright (c) 2014-2022, The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <robdclark@gmail.com> * Loading Loading @@ -4398,6 +4398,46 @@ bool sde_encoder_check_curr_mode(struct drm_encoder *drm_enc, u32 mode) return (disp_info->curr_panel_mode == mode); } void sde_encoder_trigger_rsc_state_change(struct drm_encoder *drm_enc) { struct sde_encoder_virt *sde_enc = NULL; int ret = 0; sde_enc = to_sde_encoder_virt(drm_enc); if (!sde_enc) return; mutex_lock(&sde_enc->rc_lock); /* * In dual display case when secondary comes out of * idle make sure RSC solver mode is disabled before * setting CTL_PREPARE. */ if (!sde_enc->cur_master || !sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE) || sde_enc->disp_info.display_type == SDE_CONNECTOR_PRIMARY || sde_enc->rc_state != SDE_ENC_RC_STATE_IDLE) goto end; /* enable all the clks and resources */ ret = _sde_encoder_resource_control_helper(drm_enc, true); if (ret) { SDE_ERROR_ENC(sde_enc, "rc in state %d\n", sde_enc->rc_state); SDE_EVT32(DRMID(drm_enc), sde_enc->rc_state, SDE_EVTLOG_ERROR); goto end; } _sde_encoder_update_rsc_client(drm_enc, true); SDE_EVT32(DRMID(drm_enc), sde_enc->rc_state, SDE_ENC_RC_STATE_ON); sde_enc->rc_state = SDE_ENC_RC_STATE_ON; end: mutex_unlock(&sde_enc->rc_lock); } void sde_encoder_trigger_kickoff_pending(struct drm_encoder *drm_enc) { struct sde_encoder_virt *sde_enc; Loading
msm/sde/sde_encoder.h +7 −1 Original line number Diff line number Diff line /* * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2015-2022, The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <robdclark@gmail.com> * Loading Loading @@ -96,6 +96,12 @@ void sde_encoder_get_hw_resources(struct drm_encoder *encoder, struct sde_encoder_hw_resources *hw_res, struct drm_connector_state *conn_state); /** * sde_encoder_trigger_rsc_state_change - rsc state change. * @encoder: encoder pointer */ void sde_encoder_trigger_rsc_state_change(struct drm_encoder *drm_enc); /** * sde_encoder_register_vblank_callback - provide callback to encoder that * will be called on the next vblank. Loading
msm/sde/sde_kms.h +5 −1 Original line number Diff line number Diff line Loading @@ -464,7 +464,11 @@ void *sde_debugfs_get_root(struct sde_kms *sde_kms); * These functions/definitions allow for building up a 'sde_info' structure * containing one or more "key=value\n" entries. */ #define SDE_KMS_INFO_MAX_SIZE 4096 #if IS_ENABLED(CONFIG_DRM_LOW_MSM_MEM_FOOTPRINT) #define SDE_KMS_INFO_MAX_SIZE (1 << 12) #else #define SDE_KMS_INFO_MAX_SIZE (1 << 14) #endif /** * struct sde_kms_info - connector information structure container Loading