Merge "msm: mdss: fix mdp vbif qos priorities"

This commit is contained in:
Linux Build Service Account 2017-02-08 17:48:01 -08:00 committed by Gerrit - the friendly Code Review server
commit 74717404f7
2 changed files with 20 additions and 7 deletions

View file

@ -4159,6 +4159,7 @@ static int mdss_mdp_parse_dt_prefill(struct platform_device *pdev)
static void mdss_mdp_parse_vbif_qos(struct platform_device *pdev) static void mdss_mdp_parse_vbif_qos(struct platform_device *pdev)
{ {
struct mdss_data_type *mdata = platform_get_drvdata(pdev); struct mdss_data_type *mdata = platform_get_drvdata(pdev);
u32 npriority_lvl_nrt;
int rc; int rc;
mdata->npriority_lvl = mdss_mdp_parse_dt_prop_len(pdev, mdata->npriority_lvl = mdss_mdp_parse_dt_prop_len(pdev,
@ -4184,8 +4185,20 @@ static void mdss_mdp_parse_vbif_qos(struct platform_device *pdev)
return; return;
} }
mdata->npriority_lvl = mdss_mdp_parse_dt_prop_len(pdev, npriority_lvl_nrt = mdss_mdp_parse_dt_prop_len(pdev,
"qcom,mdss-vbif-qos-nrt-setting"); "qcom,mdss-vbif-qos-nrt-setting");
if (!npriority_lvl_nrt) {
pr_debug("no vbif nrt priorities found rt:%d\n",
mdata->npriority_lvl);
return;
} else if (npriority_lvl_nrt != mdata->npriority_lvl) {
/* driver expects same number for both nrt and rt */
pr_err("invalid nrt settings nrt(%d) != rt(%d)\n",
npriority_lvl_nrt, mdata->npriority_lvl);
return;
}
if (mdata->npriority_lvl == MDSS_VBIF_QOS_REMAP_ENTRIES) { if (mdata->npriority_lvl == MDSS_VBIF_QOS_REMAP_ENTRIES) {
mdata->vbif_nrt_qos = kzalloc(sizeof(u32) * mdata->vbif_nrt_qos = kzalloc(sizeof(u32) *
mdata->npriority_lvl, GFP_KERNEL); mdata->npriority_lvl, GFP_KERNEL);
@ -4203,7 +4216,7 @@ static void mdss_mdp_parse_vbif_qos(struct platform_device *pdev)
} }
} else { } else {
mdata->npriority_lvl = 0; mdata->npriority_lvl = 0;
pr_debug("Invalid or no vbif qos nrt seting\n"); pr_debug("Invalid or no vbif qos nrt setting\n");
} }
} }

View file

@ -1011,8 +1011,10 @@ static void mdss_mdp_qos_vbif_remapper_setup(struct mdss_data_type *mdata,
u32 mask, reg_val, reg_val_lvl, i, vbif_qos; u32 mask, reg_val, reg_val_lvl, i, vbif_qos;
u32 reg_high; u32 reg_high;
bool is_nrt_vbif = mdss_mdp_is_nrt_vbif_client(mdata, pipe); bool is_nrt_vbif = mdss_mdp_is_nrt_vbif_client(mdata, pipe);
u32 *vbif_qos_ptr = is_realtime ? mdata->vbif_rt_qos :
mdata->vbif_nrt_qos;
if (mdata->npriority_lvl == 0) if ((mdata->npriority_lvl == 0) || !vbif_qos_ptr)
return; return;
if (test_bit(MDSS_QOS_REMAPPER, mdata->mdss_qos_map)) { if (test_bit(MDSS_QOS_REMAPPER, mdata->mdss_qos_map)) {
@ -1028,8 +1030,7 @@ static void mdss_mdp_qos_vbif_remapper_setup(struct mdss_data_type *mdata,
is_nrt_vbif); is_nrt_vbif);
mask = 0x3 << (pipe->xin_id * 4); mask = 0x3 << (pipe->xin_id * 4);
vbif_qos = is_realtime ? vbif_qos = vbif_qos_ptr[i];
mdata->vbif_rt_qos[i] : mdata->vbif_nrt_qos[i];
reg_val &= ~(mask); reg_val &= ~(mask);
reg_val |= vbif_qos << (pipe->xin_id * 4); reg_val |= vbif_qos << (pipe->xin_id * 4);
@ -1053,8 +1054,7 @@ static void mdss_mdp_qos_vbif_remapper_setup(struct mdss_data_type *mdata,
mask = 0x3 << (pipe->xin_id * 2); mask = 0x3 << (pipe->xin_id * 2);
reg_val &= ~(mask); reg_val &= ~(mask);
vbif_qos = is_realtime ? vbif_qos = vbif_qos_ptr[i];
mdata->vbif_rt_qos[i] : mdata->vbif_nrt_qos[i];
reg_val |= vbif_qos << (pipe->xin_id * 2); reg_val |= vbif_qos << (pipe->xin_id * 2);
MDSS_VBIF_WRITE(mdata, MDSS_VBIF_QOS_REMAP_BASE + i*4, MDSS_VBIF_WRITE(mdata, MDSS_VBIF_QOS_REMAP_BASE + i*4,
reg_val, is_nrt_vbif); reg_val, is_nrt_vbif);