Loading msm/sde/sde_crtc.c +37 −0 Original line number Diff line number Diff line Loading @@ -4757,6 +4757,43 @@ static int sde_crtc_atomic_check(struct drm_crtc *crtc, return rc; } /** * sde_crtc_get_num_datapath - get the number of datapath active * of primary connector * @crtc: Pointer to DRM crtc object * @connector: Pointer to DRM connector object of WB in CWB case */ int sde_crtc_get_num_datapath(struct drm_crtc *crtc, struct drm_connector *connector) { struct sde_crtc *sde_crtc = to_sde_crtc(crtc); struct sde_connector_state *sde_conn_state = NULL; struct drm_connector *conn; struct drm_connector_list_iter conn_iter; if (!sde_crtc || !connector) { SDE_DEBUG("Invalid argument\n"); return 0; } if (sde_crtc->num_mixers) return sde_crtc->num_mixers; drm_connector_list_iter_begin(crtc->dev, &conn_iter); drm_for_each_connector_iter(conn, &conn_iter) { if (conn->state && conn->state->crtc == crtc && conn != connector) sde_conn_state = to_sde_connector_state(conn->state); } drm_connector_list_iter_end(&conn_iter); if (sde_conn_state) return sde_conn_state->mode_info.topology.num_lm; return 0; } int sde_crtc_vblank(struct drm_crtc *crtc, bool en) { struct sde_crtc *sde_crtc; Loading msm/sde/sde_crtc.h +10 −12 Original line number Diff line number Diff line /* * Copyright (c) 2015-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2015-2020 The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <robdclark@gmail.com> * Loading Loading @@ -479,17 +479,6 @@ static inline int sde_crtc_get_mixer_height(struct sde_crtc *sde_crtc, cstate->ds_cfg[0].lm_height : mode->vdisplay); } /** * sde_crtc_get_num_datapath - get the number of datapath active * @crtc: Pointer to drm crtc object */ static inline int sde_crtc_get_num_datapath(struct drm_crtc *crtc) { struct sde_crtc *sde_crtc = to_sde_crtc(crtc); return sde_crtc ? sde_crtc->num_mixers : 0; } /** * sde_crtc_frame_pending - retun the number of pending frames * @crtc: Pointer to drm crtc object Loading Loading @@ -834,4 +823,13 @@ void sde_crtc_misr_setup(struct drm_crtc *crtc, bool enable, u32 frame_count); void sde_crtc_get_misr_info(struct drm_crtc *crtc, struct sde_crtc_misr_info *crtc_misr_info); /** * sde_crtc_get_num_datapath - get the number of datapath active * of primary connector * @crtc: Pointer to DRM crtc object * @connector: Pointer to DRM connector object of WB in CWB case */ int sde_crtc_get_num_datapath(struct drm_crtc *crtc, struct drm_connector *connector); #endif /* _SDE_CRTC_H_ */ msm/sde/sde_rm.c +11 −2 Original line number Diff line number Diff line Loading @@ -1750,7 +1750,7 @@ static int _sde_rm_populate_requirements( struct sde_rm_requirements *reqs) { const struct drm_display_mode *mode = &crtc_state->mode; int i; int i, num_lm; memset(reqs, 0, sizeof(*reqs)); Loading Loading @@ -1800,9 +1800,18 @@ static int _sde_rm_populate_requirements( */ reqs->topology = &rm->topology_tbl[SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE]; if (sde_crtc_get_num_datapath(crtc_state->crtc) == 1) num_lm = sde_crtc_get_num_datapath(crtc_state->crtc, conn_state->connector); if (num_lm == 1) reqs->topology = &rm->topology_tbl[SDE_RM_TOPOLOGY_SINGLEPIPE]; else if (num_lm == 0) SDE_ERROR("Primary layer mixer is not set\n"); SDE_EVT32(num_lm, reqs->topology->num_lm, reqs->topology->top_name, reqs->topology->num_ctl); } SDE_DEBUG("top_ctrl: 0x%llX num_h_tiles: %d\n", reqs->top_ctrl, Loading Loading
msm/sde/sde_crtc.c +37 −0 Original line number Diff line number Diff line Loading @@ -4757,6 +4757,43 @@ static int sde_crtc_atomic_check(struct drm_crtc *crtc, return rc; } /** * sde_crtc_get_num_datapath - get the number of datapath active * of primary connector * @crtc: Pointer to DRM crtc object * @connector: Pointer to DRM connector object of WB in CWB case */ int sde_crtc_get_num_datapath(struct drm_crtc *crtc, struct drm_connector *connector) { struct sde_crtc *sde_crtc = to_sde_crtc(crtc); struct sde_connector_state *sde_conn_state = NULL; struct drm_connector *conn; struct drm_connector_list_iter conn_iter; if (!sde_crtc || !connector) { SDE_DEBUG("Invalid argument\n"); return 0; } if (sde_crtc->num_mixers) return sde_crtc->num_mixers; drm_connector_list_iter_begin(crtc->dev, &conn_iter); drm_for_each_connector_iter(conn, &conn_iter) { if (conn->state && conn->state->crtc == crtc && conn != connector) sde_conn_state = to_sde_connector_state(conn->state); } drm_connector_list_iter_end(&conn_iter); if (sde_conn_state) return sde_conn_state->mode_info.topology.num_lm; return 0; } int sde_crtc_vblank(struct drm_crtc *crtc, bool en) { struct sde_crtc *sde_crtc; Loading
msm/sde/sde_crtc.h +10 −12 Original line number Diff line number Diff line /* * Copyright (c) 2015-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2015-2020 The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <robdclark@gmail.com> * Loading Loading @@ -479,17 +479,6 @@ static inline int sde_crtc_get_mixer_height(struct sde_crtc *sde_crtc, cstate->ds_cfg[0].lm_height : mode->vdisplay); } /** * sde_crtc_get_num_datapath - get the number of datapath active * @crtc: Pointer to drm crtc object */ static inline int sde_crtc_get_num_datapath(struct drm_crtc *crtc) { struct sde_crtc *sde_crtc = to_sde_crtc(crtc); return sde_crtc ? sde_crtc->num_mixers : 0; } /** * sde_crtc_frame_pending - retun the number of pending frames * @crtc: Pointer to drm crtc object Loading Loading @@ -834,4 +823,13 @@ void sde_crtc_misr_setup(struct drm_crtc *crtc, bool enable, u32 frame_count); void sde_crtc_get_misr_info(struct drm_crtc *crtc, struct sde_crtc_misr_info *crtc_misr_info); /** * sde_crtc_get_num_datapath - get the number of datapath active * of primary connector * @crtc: Pointer to DRM crtc object * @connector: Pointer to DRM connector object of WB in CWB case */ int sde_crtc_get_num_datapath(struct drm_crtc *crtc, struct drm_connector *connector); #endif /* _SDE_CRTC_H_ */
msm/sde/sde_rm.c +11 −2 Original line number Diff line number Diff line Loading @@ -1750,7 +1750,7 @@ static int _sde_rm_populate_requirements( struct sde_rm_requirements *reqs) { const struct drm_display_mode *mode = &crtc_state->mode; int i; int i, num_lm; memset(reqs, 0, sizeof(*reqs)); Loading Loading @@ -1800,9 +1800,18 @@ static int _sde_rm_populate_requirements( */ reqs->topology = &rm->topology_tbl[SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE]; if (sde_crtc_get_num_datapath(crtc_state->crtc) == 1) num_lm = sde_crtc_get_num_datapath(crtc_state->crtc, conn_state->connector); if (num_lm == 1) reqs->topology = &rm->topology_tbl[SDE_RM_TOPOLOGY_SINGLEPIPE]; else if (num_lm == 0) SDE_ERROR("Primary layer mixer is not set\n"); SDE_EVT32(num_lm, reqs->topology->num_lm, reqs->topology->top_name, reqs->topology->num_ctl); } SDE_DEBUG("top_ctrl: 0x%llX num_h_tiles: %d\n", reqs->top_ctrl, Loading