mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 15:11:48 -04:00
Merge a245be26e4 on remote branch
Change-Id: I6487bb9bb5a4301622ebcb85b6faebb352d870e8
This commit is contained in:
commit
2ae2aed006
17 changed files with 122 additions and 67 deletions
|
|
@ -3051,7 +3051,7 @@ static int dp_display_setup_colospace(struct dp_display *dp_display,
|
|||
struct dp_display_private *dp;
|
||||
|
||||
if (!dp_display || !panel) {
|
||||
pr_err("invalid input\n");
|
||||
DP_ERR("invalid input\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
|
|
@ -336,7 +336,7 @@ int dp_connector_set_colorspace(struct drm_connector *connector,
|
|||
|
||||
sde_conn = to_sde_connector(connector);
|
||||
if (!sde_conn->drv_panel) {
|
||||
pr_err("invalid dp panel\n");
|
||||
DP_ERR("invalid dp panel\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "dp_panel.h"
|
||||
|
|
@ -2571,7 +2571,7 @@ static int dp_panel_set_colorspace(struct dp_panel *dp_panel,
|
|||
struct dp_panel_private *panel;
|
||||
|
||||
if (!dp_panel) {
|
||||
pr_err("invalid input\n");
|
||||
DP_ERR("invalid input\n");
|
||||
rc = -EINVAL;
|
||||
goto end;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -657,34 +657,34 @@ static int dsi_ctrl_clocks_deinit(struct dsi_ctrl *ctrl)
|
|||
struct dsi_link_hs_clk_info *hs_link = &ctrl->clk_info.hs_link_clks;
|
||||
struct dsi_clk_link_set *rcg = &ctrl->clk_info.rcg_clks;
|
||||
|
||||
if (core->mdp_core_clk)
|
||||
if (!IS_ERR_OR_NULL(core->mdp_core_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, core->mdp_core_clk);
|
||||
if (core->iface_clk)
|
||||
if (!IS_ERR_OR_NULL(core->iface_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, core->iface_clk);
|
||||
if (core->core_mmss_clk)
|
||||
if (!IS_ERR_OR_NULL(core->core_mmss_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, core->core_mmss_clk);
|
||||
if (core->bus_clk)
|
||||
if (!IS_ERR_OR_NULL(core->bus_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, core->bus_clk);
|
||||
if (core->mnoc_clk)
|
||||
if (!IS_ERR_OR_NULL(core->mnoc_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, core->mnoc_clk);
|
||||
|
||||
memset(core, 0x0, sizeof(*core));
|
||||
|
||||
if (hs_link->byte_clk)
|
||||
if (!IS_ERR_OR_NULL(hs_link->byte_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, hs_link->byte_clk);
|
||||
if (hs_link->pixel_clk)
|
||||
if (!IS_ERR_OR_NULL(hs_link->pixel_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, hs_link->pixel_clk);
|
||||
if (lp_link->esc_clk)
|
||||
if (!IS_ERR_OR_NULL(lp_link->esc_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, lp_link->esc_clk);
|
||||
if (hs_link->byte_intf_clk)
|
||||
if (!IS_ERR_OR_NULL(hs_link->byte_intf_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, hs_link->byte_intf_clk);
|
||||
|
||||
memset(hs_link, 0x0, sizeof(*hs_link));
|
||||
memset(lp_link, 0x0, sizeof(*lp_link));
|
||||
|
||||
if (rcg->byte_clk)
|
||||
if (!IS_ERR_OR_NULL(rcg->byte_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, rcg->byte_clk);
|
||||
if (rcg->pixel_clk)
|
||||
if (!IS_ERR_OR_NULL(rcg->pixel_clk))
|
||||
devm_clk_put(&ctrl->pdev->dev, rcg->pixel_clk);
|
||||
|
||||
memset(rcg, 0x0, sizeof(*rcg));
|
||||
|
|
|
|||
|
|
@ -1488,7 +1488,7 @@ void msm_mode_object_event_notify(struct drm_mode_object *obj,
|
|||
|
||||
static int msm_release(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct drm_file *file_priv = filp->private_data;
|
||||
struct drm_file *file_priv;
|
||||
struct drm_minor *minor;
|
||||
struct drm_device *dev;
|
||||
struct msm_drm_private *priv;
|
||||
|
|
@ -1500,6 +1500,7 @@ static int msm_release(struct inode *inode, struct file *filp)
|
|||
|
||||
mutex_lock(&msm_release_lock);
|
||||
|
||||
file_priv = filp->private_data;
|
||||
if (!file_priv) {
|
||||
ret = -EINVAL;
|
||||
goto end;
|
||||
|
|
|
|||
|
|
@ -1833,7 +1833,7 @@ static int _sde_connector_lm_preference(struct sde_connector *sde_conn,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
sde_hw_mixer_set_preference(sde_kms->catalog, num_lm, disp_type);
|
||||
sde_conn->lm_mask = sde_hw_mixer_set_preference(sde_kms->catalog, num_lm, disp_type);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -547,6 +547,7 @@ struct sde_connector {
|
|||
bool hdr_supported;
|
||||
|
||||
u32 color_enc_fmt;
|
||||
u32 lm_mask;
|
||||
|
||||
u8 hdr_plus_app_ver;
|
||||
u32 qsync_mode;
|
||||
|
|
|
|||
|
|
@ -267,13 +267,11 @@ static int _sde_encoder_wait_timeout(int32_t drm_id, int32_t hw_id,
|
|||
return rc;
|
||||
}
|
||||
|
||||
bool sde_encoder_is_primary_display(struct drm_encoder *drm_enc)
|
||||
u32 sde_encoder_get_display_type(struct drm_encoder *drm_enc)
|
||||
{
|
||||
struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc);
|
||||
|
||||
return sde_enc &&
|
||||
(sde_enc->disp_info.display_type ==
|
||||
SDE_CONNECTOR_PRIMARY);
|
||||
return sde_enc ? sde_enc->disp_info.display_type : 0;
|
||||
}
|
||||
|
||||
bool sde_encoder_is_dsi_display(struct drm_encoder *drm_enc)
|
||||
|
|
|
|||
|
|
@ -523,12 +523,12 @@ bool sde_encoder_is_cwb_disabling(struct drm_encoder *drm_enc,
|
|||
struct drm_crtc *drm_crtc);
|
||||
|
||||
/**
|
||||
* sde_encoder_is_primary_display - checks if underlying display is primary
|
||||
* display or not.
|
||||
* sde_encoder_get_display_type - returns the display_type of underlying
|
||||
* display
|
||||
* @drm_enc: Pointer to drm encoder structure
|
||||
* @Return: true if it is primary display. false if secondary display
|
||||
* @Return: display_type
|
||||
*/
|
||||
bool sde_encoder_is_primary_display(struct drm_encoder *enc);
|
||||
u32 sde_encoder_get_display_type(struct drm_encoder *enc);
|
||||
|
||||
/**
|
||||
* sde_encoder_is_dsi_display - checks if underlying display is DSI
|
||||
|
|
|
|||
|
|
@ -1727,6 +1727,9 @@ static void sde_encoder_phys_wb_disable(struct sde_encoder_phys *phys_enc)
|
|||
}
|
||||
|
||||
if (phys_enc->in_clone_mode) {
|
||||
if (hw_wb->ops.setup_crop)
|
||||
hw_wb->ops.setup_crop(hw_wb, NULL, false);
|
||||
|
||||
_sde_encoder_phys_wb_setup_cwb(phys_enc, false);
|
||||
_sde_encoder_phys_wb_update_cwb_flush(phys_enc, false);
|
||||
phys_enc->enable_state = SDE_ENC_DISABLING;
|
||||
|
|
|
|||
|
|
@ -425,6 +425,7 @@ enum {
|
|||
MIXER_BLOCKS,
|
||||
MIXER_DISP,
|
||||
MIXER_CWB,
|
||||
MIXER_CWB_MASK,
|
||||
MIXER_PROP_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -710,6 +711,7 @@ static struct sde_prop_type mixer_prop[] = {
|
|||
PROP_TYPE_STRING_ARRAY},
|
||||
{MIXER_CWB, "qcom,sde-mixer-cwb-pref", false,
|
||||
PROP_TYPE_STRING_ARRAY},
|
||||
{MIXER_CWB_MASK, "qcom,sde-mixer-cwb-mask", false, PROP_TYPE_U32_ARRAY},
|
||||
};
|
||||
|
||||
static struct sde_prop_type mixer_blocks_prop[] = {
|
||||
|
|
@ -1976,10 +1978,10 @@ void sde_hw_ctl_set_preference(struct sde_mdss_cfg *sde_cfg,
|
|||
}
|
||||
}
|
||||
|
||||
void sde_hw_mixer_set_preference(struct sde_mdss_cfg *sde_cfg, u32 num_lm,
|
||||
u32 sde_hw_mixer_set_preference(struct sde_mdss_cfg *sde_cfg, u32 num_lm,
|
||||
uint32_t disp_type)
|
||||
{
|
||||
u32 i, cnt = 0, sec_cnt = 0;
|
||||
u32 i, cnt = 0, sec_cnt = 0, lm_mask = 0;
|
||||
|
||||
if (disp_type == SDE_CONNECTOR_PRIMARY) {
|
||||
for (i = 0; i < sde_cfg->mixer_count; i++) {
|
||||
|
|
@ -1998,6 +2000,7 @@ void sde_hw_mixer_set_preference(struct sde_mdss_cfg *sde_cfg, u32 num_lm,
|
|||
if (cnt < num_lm) {
|
||||
set_bit(SDE_DISP_PRIMARY_PREF,
|
||||
&sde_cfg->mixer[i].features);
|
||||
lm_mask |= BIT(sde_cfg->mixer[i].id - 1);
|
||||
cnt++;
|
||||
}
|
||||
|
||||
|
|
@ -2036,10 +2039,13 @@ void sde_hw_mixer_set_preference(struct sde_mdss_cfg *sde_cfg, u32 num_lm,
|
|||
BIT(SDE_DISP_PRIMARY_PREF))) {
|
||||
set_bit(SDE_DISP_SECONDARY_PREF,
|
||||
&sde_cfg->mixer[i].features);
|
||||
lm_mask |= BIT(sde_cfg->mixer[i].id - 1);
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return lm_mask;
|
||||
}
|
||||
|
||||
static int sde_mixer_parse_dt(struct device_node *np,
|
||||
|
|
@ -2151,6 +2157,9 @@ static int sde_mixer_parse_dt(struct device_node *np,
|
|||
if (BIT(mixer->id - LM_0) & sde_cfg->cwb_virtual_mixers_mask)
|
||||
set_bit(SDE_MIXER_IS_VIRTUAL, &mixer->features);
|
||||
|
||||
mixer->cwb_mask = !props->exists[MIXER_CWB_MASK] ? 0x0 :
|
||||
PROP_VALUE_ACCESS(props->values, MIXER_CWB_MASK, i);
|
||||
|
||||
mixer->pingpong = pp_count > 0 ? pp_idx + PINGPONG_0
|
||||
: PINGPONG_MAX;
|
||||
mixer->dspp = dspp_count > 0 ? dspp_idx + DSPP_0
|
||||
|
|
|
|||
|
|
@ -977,6 +977,7 @@ struct sde_sspp_cfg {
|
|||
* @pingpong: ID of connected PingPong, PINGPONG_MAX if unsupported
|
||||
* @ds: ID of connected DS, DS_MAX if unsupported
|
||||
* @lm_pair_mask: Bitmask of LMs that can be controlled by same CTL
|
||||
* @cwb_mask: Bitmask of LMs connected to cwb mux from this LM id
|
||||
*/
|
||||
struct sde_lm_cfg {
|
||||
SDE_HW_BLK_INFO;
|
||||
|
|
@ -985,6 +986,7 @@ struct sde_lm_cfg {
|
|||
u32 pingpong;
|
||||
u32 ds;
|
||||
unsigned long lm_pair_mask;
|
||||
u32 cwb_mask;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -1641,8 +1643,10 @@ struct sde_mdss_hw_cfg_handler {
|
|||
* @sde_cfg: pointer to sspp cfg
|
||||
* @num_lm: num lms to set preference
|
||||
* @disp_type: is the given display primary/secondary
|
||||
*
|
||||
* Return: layer mixer mask allocated for the disp_type
|
||||
*/
|
||||
void sde_hw_mixer_set_preference(struct sde_mdss_cfg *sde_cfg, u32 num_lm,
|
||||
u32 sde_hw_mixer_set_preference(struct sde_mdss_cfg *sde_cfg, u32 num_lm,
|
||||
uint32_t disp_type);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -215,9 +215,8 @@ static void sde_hw_wb_crop(struct sde_hw_wb *ctx, struct sde_hw_wb_cfg *wb, bool
|
|||
struct sde_hw_blk_reg_map *c = &ctx->hw;
|
||||
u32 crop_xy;
|
||||
|
||||
crop_xy = (wb->crop.y << 16) | wb->crop.x;
|
||||
|
||||
if (crop) {
|
||||
crop_xy = (wb->crop.y << 16) | wb->crop.x;
|
||||
SDE_REG_WRITE(c, WB_CROP_CTRL, 0x1);
|
||||
SDE_REG_WRITE(c, WB_CROP_OFFSET, crop_xy);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ struct sde_rm_requirements {
|
|||
uint64_t top_ctrl;
|
||||
const struct sde_rm_topology_def *topology;
|
||||
struct sde_encoder_hw_resources hw_res;
|
||||
u32 cwb_requested_disp_type;
|
||||
u32 conn_lm_mask;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -981,7 +983,8 @@ static bool _sde_rm_check_lm_and_get_connected_blks(
|
|||
struct sde_rm_hw_blk **dspp,
|
||||
struct sde_rm_hw_blk **ds,
|
||||
struct sde_rm_hw_blk **pp,
|
||||
struct sde_rm_hw_blk *primary_lm)
|
||||
struct sde_rm_hw_blk *primary_lm,
|
||||
u32 conn_lm_mask)
|
||||
{
|
||||
const struct sde_lm_cfg *lm_cfg = to_sde_hw_mixer(lm->hw)->cap;
|
||||
const struct sde_pingpong_cfg *pp_cfg;
|
||||
|
|
@ -1038,6 +1041,13 @@ static bool _sde_rm_check_lm_and_get_connected_blks(
|
|||
SDE_DEBUG("fail: cwb supported lm not allocated\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (lm_cfg->cwb_mask && RM_RQ_CWB(reqs) &&
|
||||
!(BIT(ffs(conn_lm_mask) - 1) & lm_cfg->cwb_mask)) {
|
||||
SDE_DEBUG("cwb mixer not compatible id:%d cwb_mask:0x%x lm_mask:0x%x\n",
|
||||
lm_cfg->id, lm_cfg->cwb_mask, conn_lm_mask);
|
||||
return false;
|
||||
}
|
||||
} else if ((!is_conn_primary && lm_primary_pref) ||
|
||||
(!is_conn_secondary && lm_secondary_pref)) {
|
||||
SDE_DEBUG(
|
||||
|
|
@ -1083,7 +1093,7 @@ static int _sde_rm_reserve_lms(
|
|||
struct sde_rm_hw_blk *ds[MAX_BLOCKS];
|
||||
struct sde_rm_hw_blk *pp[MAX_BLOCKS];
|
||||
struct sde_rm_hw_iter iter_i, iter_j;
|
||||
u32 lm_mask = 0;
|
||||
u32 lm_mask = 0, conn_lm_mask = 0;
|
||||
int lm_count = 0;
|
||||
int i, rc = 0;
|
||||
|
||||
|
|
@ -1092,6 +1102,9 @@ static int _sde_rm_reserve_lms(
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (RM_RQ_CWB(reqs))
|
||||
conn_lm_mask = reqs->conn_lm_mask;
|
||||
|
||||
/* Find a primary mixer */
|
||||
sde_rm_init_hw_iter(&iter_i, 0, SDE_HW_BLK_LM);
|
||||
while (lm_count != reqs->topology->num_lm &&
|
||||
|
|
@ -1115,12 +1128,15 @@ static int _sde_rm_reserve_lms(
|
|||
if (!_sde_rm_check_lm_and_get_connected_blks(
|
||||
rm, rsvp, reqs, lm[lm_count],
|
||||
&dspp[lm_count], &ds[lm_count],
|
||||
&pp[lm_count], NULL))
|
||||
&pp[lm_count], NULL, conn_lm_mask))
|
||||
continue;
|
||||
|
||||
lm_mask |= (1 << iter_i.blk->id);
|
||||
++lm_count;
|
||||
|
||||
if (RM_RQ_CWB(reqs))
|
||||
conn_lm_mask = conn_lm_mask & ~BIT(ffs(conn_lm_mask) - 1);
|
||||
|
||||
/* Return if peer is not needed */
|
||||
if (lm_count == reqs->topology->num_lm)
|
||||
break;
|
||||
|
|
@ -1140,7 +1156,7 @@ static int _sde_rm_reserve_lms(
|
|||
if (!_sde_rm_check_lm_and_get_connected_blks(
|
||||
rm, rsvp, reqs, iter_j.blk,
|
||||
&dspp[lm_count], &ds[lm_count],
|
||||
&pp[lm_count], iter_i.blk))
|
||||
&pp[lm_count], iter_i.blk, conn_lm_mask))
|
||||
continue;
|
||||
|
||||
SDE_DEBUG("blk id = %d, _lm_ids[%d] = %d\n",
|
||||
|
|
@ -1153,6 +1169,10 @@ static int _sde_rm_reserve_lms(
|
|||
|
||||
lm_mask |= (1 << iter_j.blk->id);
|
||||
++lm_count;
|
||||
|
||||
if (RM_RQ_CWB(reqs))
|
||||
conn_lm_mask = conn_lm_mask & ~BIT(ffs(conn_lm_mask) - 1);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -2005,6 +2025,26 @@ int sde_rm_cont_splash_res_init(struct msm_drm_private *priv,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct drm_connector *_sde_rm_get_connector(
|
||||
struct drm_encoder *enc)
|
||||
{
|
||||
struct drm_connector *conn = NULL, *conn_search;
|
||||
struct sde_connector *c_conn = NULL;
|
||||
struct drm_connector_list_iter conn_iter;
|
||||
|
||||
drm_connector_list_iter_begin(enc->dev, &conn_iter);
|
||||
drm_for_each_connector_iter(conn_search, &conn_iter) {
|
||||
c_conn = to_sde_connector(conn_search);
|
||||
if (c_conn->encoder == enc) {
|
||||
conn = conn_search;
|
||||
break;
|
||||
}
|
||||
}
|
||||
drm_connector_list_iter_end(&conn_iter);
|
||||
|
||||
return conn;
|
||||
}
|
||||
|
||||
static int _sde_rm_populate_requirements(
|
||||
struct sde_rm *rm,
|
||||
struct drm_encoder *enc,
|
||||
|
|
@ -2013,6 +2053,8 @@ static int _sde_rm_populate_requirements(
|
|||
struct sde_rm_requirements *reqs)
|
||||
{
|
||||
const struct drm_display_mode *mode = &crtc_state->mode;
|
||||
struct drm_encoder *encoder_iter;
|
||||
struct drm_connector *conn;
|
||||
int i, num_lm;
|
||||
|
||||
reqs->top_ctrl = sde_connector_get_property(conn_state,
|
||||
|
|
@ -2041,7 +2083,7 @@ static int _sde_rm_populate_requirements(
|
|||
reqs->top_ctrl |= BIT(SDE_RM_TOPCTL_DSPP);
|
||||
|
||||
if (!RM_RQ_DS(reqs) && rm->hw_mdp->caps->has_dest_scaler &&
|
||||
sde_encoder_is_primary_display(enc))
|
||||
(sde_encoder_get_display_type(enc) == SDE_CONNECTOR_PRIMARY))
|
||||
reqs->top_ctrl |= BIT(SDE_RM_TOPCTL_DS);
|
||||
}
|
||||
|
||||
|
|
@ -2075,8 +2117,22 @@ static int _sde_rm_populate_requirements(
|
|||
reqs->topology->top_name, reqs->topology->num_ctl);
|
||||
}
|
||||
|
||||
SDE_DEBUG("top_ctrl: 0x%llX num_h_tiles: %d\n", reqs->top_ctrl,
|
||||
reqs->hw_res.display_num_of_h_tiles);
|
||||
if (RM_RQ_CWB(reqs)) {
|
||||
drm_for_each_encoder_mask(encoder_iter, enc->dev,
|
||||
crtc_state->encoder_mask) {
|
||||
if (drm_encoder_mask(encoder_iter) == drm_encoder_mask(enc))
|
||||
continue;
|
||||
|
||||
reqs->cwb_requested_disp_type = sde_encoder_get_display_type(encoder_iter);
|
||||
conn = _sde_rm_get_connector(encoder_iter);
|
||||
if (conn)
|
||||
reqs->conn_lm_mask = to_sde_connector(conn)->lm_mask;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SDE_DEBUG("top_ctrl: 0x%llX num_h_tiles: %d cwb_req_disp_type:%d\n", reqs->top_ctrl,
|
||||
reqs->hw_res.display_num_of_h_tiles, reqs->cwb_requested_disp_type);
|
||||
SDE_DEBUG("num_lm: %d num_ctl: %d topology: %d split_display: %d\n",
|
||||
reqs->topology->num_lm, reqs->topology->num_ctl,
|
||||
reqs->topology->top_name,
|
||||
|
|
@ -2120,26 +2176,6 @@ static struct sde_rm_rsvp *_sde_rm_get_rsvp_cur(struct sde_rm *rm,
|
|||
return _sde_rm_get_rsvp(rm, enc, false);
|
||||
}
|
||||
|
||||
static struct drm_connector *_sde_rm_get_connector(
|
||||
struct drm_encoder *enc)
|
||||
{
|
||||
struct drm_connector *conn = NULL, *conn_search;
|
||||
struct sde_connector *c_conn = NULL;
|
||||
struct drm_connector_list_iter conn_iter;
|
||||
|
||||
drm_connector_list_iter_begin(enc->dev, &conn_iter);
|
||||
drm_for_each_connector_iter(conn_search, &conn_iter) {
|
||||
c_conn = to_sde_connector(conn_search);
|
||||
if (c_conn->encoder == enc) {
|
||||
conn = conn_search;
|
||||
break;
|
||||
}
|
||||
}
|
||||
drm_connector_list_iter_end(&conn_iter);
|
||||
|
||||
return conn;
|
||||
}
|
||||
|
||||
int sde_rm_update_topology(struct sde_rm *rm,
|
||||
struct drm_connector_state *conn_state,
|
||||
struct msm_display_topology *topology)
|
||||
|
|
|
|||
|
|
@ -352,6 +352,8 @@ static u32 sde_rsc_timer_calculate(struct sde_rsc_priv *rsc,
|
|||
line_time_ns, prefill_time_ns);
|
||||
pr_debug("static wakeup time:%lld cxo:%u\n", total, cxo_period_ns);
|
||||
|
||||
SDE_EVT32(rsc->cmd_config.fps, rsc->cmd_config.vtotal, total);
|
||||
|
||||
pdc_backoff_time_ns = rsc_backoff_time_ns;
|
||||
rsc_backoff_time_ns = div_u64(rsc_backoff_time_ns, cxo_period_ns);
|
||||
rsc->timer_config.rsc_backoff_time_ns = (u32) rsc_backoff_time_ns;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2012, 2015-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012, 2015-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ u32 sde_apply_comp_ratio_factor(u32 quota,
|
|||
return quota;
|
||||
}
|
||||
|
||||
#define RES_1080p (1088*1920)
|
||||
#define RES_1080p (1088*1920)
|
||||
#define RES_UHD (3840*2160)
|
||||
#define RES_WQXGA (2560*1600)
|
||||
#define XIN_HALT_TIMEOUT_US 0x4000
|
||||
|
|
@ -507,10 +507,10 @@ int sde_update_reg_bus_vote(struct reg_bus_client *bus_client, u32 usecase_ndx)
|
|||
}
|
||||
|
||||
if (ret) {
|
||||
pr_err("rotator: reg_bus_hdl set failed ab=%llu, ib=%llu\n",
|
||||
SDEROT_ERR("rotator: reg_bus_hdl set failed ab=%llu, ib=%llu\n",
|
||||
reg_bus_value->ab, reg_bus_value->ib);
|
||||
if (sde_res->reg_bus_usecase_ndx == VOTE_INDEX_DISABLE)
|
||||
pr_err("rotator: reg_bus_hdl was disabled\n");
|
||||
SDEROT_ERR("rotator: reg_bus_hdl was disabled\n");
|
||||
} else {
|
||||
sde_res->reg_bus_usecase_ndx = max_usecase_ndx;
|
||||
}
|
||||
|
|
@ -841,7 +841,7 @@ static int sde_mdp_bus_scale_register(struct sde_rot_data_type *mdata)
|
|||
mdata->reg_bus_hdl = of_icc_get(&mdata->pdev->dev, "qcom,sde-reg-bus");
|
||||
|
||||
if (mdata->reg_bus_hdl == NULL) {
|
||||
pr_err("rotator: reg bus dt node missing\n");
|
||||
SDEROT_ERR("rotator: reg bus dt node missing\n");
|
||||
return 0;
|
||||
} else if (IS_ERR(mdata->reg_bus_hdl)) {
|
||||
SDEROT_ERR("reg bus handle parsing failed\n");
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||
|
|
@ -249,11 +249,13 @@ void sde_rotator_resync_timeline(struct sde_rot_timeline *tl)
|
|||
|
||||
spin_lock_irqsave(&tl->lock, flags);
|
||||
val = tl->next_value - tl->curr_value;
|
||||
if (val > 0) {
|
||||
SDEROT_WARN("flush %s:%d\n", tl->name, val);
|
||||
if (val > 0)
|
||||
sde_rotator_inc_timeline_locked(tl, val);
|
||||
}
|
||||
spin_unlock_irqrestore(&tl->lock, flags);
|
||||
|
||||
if (val > 0)
|
||||
SDEROT_WARN("flush %s:%d\n", tl->name, val);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue