Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9dcf7f0 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: add property to set from device tree the overlap BW fudge factor"

parents d848954b 6e3bed01
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -307,6 +307,10 @@ Fudge Factors: Fudge factors are used to boost demand for
				FUDGE(x, a, b) = ((x * a) / b)
- qcom,mdss-ib-factor:		This fudge factor is applied to calculated ib
				values in default conditions.
- qcom,mdss-ib-factor-overlap:	This fudge factor is applied to calculated ib
				values when the overlap bandwidth is the
				predominant value compared to prefill bandwidth
				value.
- qcom,mdss-clk-factor:		This fudge factor is applied to calculated mdp
				clk rate in default conditions.

+1 −0
Original line number Diff line number Diff line
@@ -152,6 +152,7 @@ struct mdss_data_type {

	struct mdss_fudge_factor ab_factor;
	struct mdss_fudge_factor ib_factor;
	struct mdss_fudge_factor ib_factor_overlap;
	struct mdss_fudge_factor clk_factor;

	struct mdss_hw_settings *hw_settings;
+11 −0
Original line number Diff line number Diff line
@@ -2349,6 +2349,17 @@ static int mdss_mdp_parse_dt_misc(struct platform_device *pdev)
	mdss_mdp_parse_dt_fudge_factors(pdev, "qcom,mdss-ib-factor",
		&mdata->ib_factor);

	/*
	 * Set overlap ib value equal to ib by default. This value can
	 * be tuned in device tree to be different from ib.
	 * This factor apply when the max bandwidth per pipe
	 * is the overlap BW.
	 */
	mdata->ib_factor_overlap.numer = mdata->ib_factor.numer;
	mdata->ib_factor_overlap.denom = mdata->ib_factor.denom;
	mdss_mdp_parse_dt_fudge_factors(pdev, "qcom,mdss-ib-factor-overlap",
		&mdata->ib_factor_overlap);

	mdata->clk_factor.numer = 1;
	mdata->clk_factor.denom = 1;
	mdss_mdp_parse_dt_fudge_factors(pdev, "qcom,mdss-clk-factor",
+18 −15
Original line number Diff line number Diff line
@@ -30,14 +30,11 @@ static inline u64 fudge_factor(u64 val, u32 numer, u32 denom)
	return result;
}

#define AB_FUDGE_FACTOR(val)		fudge_factor((val),		\
	(mdss_res->ab_factor.numer), (mdss_res->ab_factor.denom))

#define IB_FUDGE_FACTOR(val)		fudge_factor((val),		\
	(mdss_res->ib_factor.numer), (mdss_res->ib_factor.denom))

#define CLK_FUDGE_FACTOR(val)		fudge_factor((val),		\
	(mdss_res->clk_factor.numer), (mdss_res->clk_factor.denom))
static inline u64 apply_fudge_factor(u64 val,
	struct mdss_fudge_factor *factor)
{
		return fudge_factor(val, factor->numer, factor->denom);
}

static DEFINE_MUTEX(mdss_mdp_ctl_lock);

@@ -58,7 +55,7 @@ static inline u32 mdss_mdp_clk_fudge_factor(struct mdss_mdp_mixer *mixer,
{
	struct mdss_panel_info *pinfo = &mixer->ctl->panel_data->panel_info;

	rate = CLK_FUDGE_FACTOR(rate);
	rate = apply_fudge_factor(rate, &mdss_res->clk_factor);

	/*
	 * If the panel is video mode and its back porch period is
@@ -67,7 +64,7 @@ static inline u32 mdss_mdp_clk_fudge_factor(struct mdss_mdp_mixer *mixer,
	 */
	if (mixer->ctl->is_video_mode && pinfo &&
		(pinfo->lcdc.v_back_porch < MDP_MIN_VBP))
		rate = CLK_FUDGE_FACTOR(rate);
		rate = apply_fudge_factor(rate, &mdss_res->clk_factor);

	return rate;
}
@@ -735,11 +732,16 @@ static void mdss_mdp_perf_calc_ctl(struct mdss_mdp_ctl *ctl,
			left_plist, (left_plist ? MAX_PIPES_PER_LM : 0),
			right_plist, (right_plist ? MAX_PIPES_PER_LM : 0));

	if (ctl->is_video_mode)
		perf->bw_ctl = IB_FUDGE_FACTOR(perf->bw_ctl);

	if (ctl->is_video_mode) {
		if (perf->bw_overlap > perf->bw_prefill)
			perf->bw_ctl = apply_fudge_factor(perf->bw_ctl,
				&mdss_res->ib_factor_overlap);
		else
			perf->bw_ctl = apply_fudge_factor(perf->bw_ctl,
				&mdss_res->ib_factor);
	}
	pr_debug("ctl=%d clk_rate=%u\n", ctl->num, perf->mdp_clk_rate);
	pr_debug("bw_overlap=%llu bw_prefill=%llu prefill_byptes=%d\n",
	pr_debug("bw_overlap=%llu bw_prefill=%llu prefill_bytes=%d\n",
		 perf->bw_overlap, perf->bw_prefill, perf->prefill_bytes);
}

@@ -863,7 +865,8 @@ static inline void mdss_mdp_ctl_perf_update_bus(struct mdss_mdp_ctl *ctl)
		}
	}
	bus_ib_quota = bw_sum_of_intfs;
	bus_ab_quota = AB_FUDGE_FACTOR(bw_sum_of_intfs);
	bus_ab_quota = apply_fudge_factor(bw_sum_of_intfs,
		&mdss_res->ab_factor);
	mdss_mdp_bus_scale_set_quota(bus_ab_quota, bus_ib_quota);
	pr_debug("ab=%llu ib=%llu\n", bus_ab_quota, bus_ib_quota);
}