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

Commit 701ff481 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: Move msm register bus setup outside of postproc"

parents bb2f0520 ee2b5de9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -160,6 +160,8 @@ struct mdss_data_type {
	u32 *vbif_nrt_qos;
	u32 npriority_lvl;

	u32 reg_bus_hdl;

	struct mdss_fudge_factor ab_factor;
	struct mdss_fudge_factor ib_factor;
	struct mdss_fudge_factor ib_factor_overlap;
@@ -193,7 +195,6 @@ struct mdss_data_type {
	void *video_intf;
	u32 nintf;

	u32 pp_bus_hdl;
	struct mdss_mdp_ad *ad_off;
	struct mdss_ad_info *ad_cfgs;
	u32 nad_cfgs;
+52 −0
Original line number Diff line number Diff line
@@ -122,6 +122,30 @@ struct mdss_hw mdss_mdp_hw = {
	.irq_handler = mdss_mdp_isr,
};

#define MDP_REG_BUS_VECTOR_ENTRY(ab_val, ib_val)		\
	{						\
		.src = MSM_BUS_MASTER_SPDM,		\
		.dst = MSM_BUS_SLAVE_IMEM_CFG,		\
		.ab = (ab_val),				\
		.ib = (ib_val),				\
	}

#define SZ_37_5M (37500000 * 8)
#define SZ_75M (75000000 * 8)

static struct msm_bus_vectors mdp_reg_bus_vectors[] = {
	MDP_REG_BUS_VECTOR_ENTRY(0, 0),
	MDP_REG_BUS_VECTOR_ENTRY(0, SZ_37_5M),
	MDP_REG_BUS_VECTOR_ENTRY(0, SZ_75M),
};
static struct msm_bus_paths mdp_reg_bus_usecases[ARRAY_SIZE(
		mdp_reg_bus_vectors)];
static struct msm_bus_scale_pdata mdp_reg_bus_scale_table = {
	.usecase = mdp_reg_bus_usecases,
	.num_usecases = ARRAY_SIZE(mdp_reg_bus_usecases),
	.name = "mdss_reg",
};

static DEFINE_SPINLOCK(mdss_lock);
struct mdss_hw *mdss_irq_handlers[MDSS_MAX_HW_BLK];

@@ -363,6 +387,9 @@ EXPORT_SYMBOL(mdss_disable_irq_nosync);

static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata)
{
	struct msm_bus_scale_pdata *reg_bus_pdata;
	int i;

	if (!mdata->bus_hdl) {
		mdata->bus_hdl =
			msm_bus_scale_register_client(mdata->bus_scale_table);
@@ -374,6 +401,24 @@ static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata)
		pr_debug("register bus_hdl=%x\n", mdata->bus_hdl);
	}

	if (!mdata->reg_bus_hdl) {
		reg_bus_pdata = &mdp_reg_bus_scale_table;
		for (i = 0; i < reg_bus_pdata->num_usecases; i++) {
			mdp_reg_bus_usecases[i].num_paths = 1;
			mdp_reg_bus_usecases[i].vectors =
				&mdp_reg_bus_vectors[i];
		}

		mdata->reg_bus_hdl =
			msm_bus_scale_register_client(reg_bus_pdata);
		if (!mdata->reg_bus_hdl) {
			/* Continue without reg_bus scaling */
			pr_warn("reg_bus_client register failed\n");
		} else
			pr_debug("register reg_bus_hdl=%x\n",
					mdata->reg_bus_hdl);
	}

	return mdss_mdp_bus_scale_set_quota(AB_QUOTA, IB_QUOTA);
}

@@ -383,6 +428,13 @@ static void mdss_mdp_bus_scale_unregister(struct mdss_data_type *mdata)

	if (mdata->bus_hdl)
		msm_bus_scale_unregister_client(mdata->bus_hdl);

	pr_debug("unregister reg_bus_hdl=%x\n", mdata->reg_bus_hdl);

	if (mdata->reg_bus_hdl) {
		msm_bus_scale_unregister_client(mdata->reg_bus_hdl);
		mdata->reg_bus_hdl = 0;
	}
}

int mdss_mdp_bus_scale_set_quota(u64 ab_quota, u64 ib_quota)
+6 −0
Original line number Diff line number Diff line
@@ -115,6 +115,12 @@ enum mdp_wfd_blk_type {
	MDSS_MDP_WFD_DEDICATED,
};

enum mdss_mdp_reg_bus_cfg {
	REG_CLK_CFG_OFF,
	REG_CLK_CFG_LOW,
	REG_CLK_CFG_HIGH,
};

struct mdss_mdp_ctl;
typedef void (*mdp_vsync_handler_t)(struct mdss_mdp_ctl *, ktime_t);

+13 −13
Original line number Diff line number Diff line
@@ -44,9 +44,6 @@
#define IS_RIGHT_MIXER_OV(flags, dst_x, left_lm_w)	\
	((flags & MDSS_MDP_RIGHT_MIXER) || (dst_x >= left_lm_w))

#define PP_CLK_CFG_OFF 0
#define PP_CLK_CFG_ON 1

#define MEM_PROTECT_SD_CTRL 0xF

#define OVERLAY_MAX 10
@@ -2526,8 +2523,8 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
	int ret = -ENOSYS;
	struct mdp_histogram_data hist;
	struct mdp_histogram_start_req hist_req;
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();
	u32 block;
	u32 pp_bus_handle;
	static int req = -1;

	switch (cmd) {
@@ -2535,11 +2532,14 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
		if (!mfd->panel_power_on)
			return -EPERM;

		pp_bus_handle = mdss_mdp_get_mdata()->pp_bus_hdl;
		req = msm_bus_scale_client_update_request(pp_bus_handle,
				PP_CLK_CFG_ON);
		if (mdata->reg_bus_hdl) {
			req = msm_bus_scale_client_update_request(
					mdata->reg_bus_hdl,
					REG_CLK_CFG_LOW);
			if (req)
			pr_err("Updated pp_bus_scale failed, ret = %d", req);
				pr_err("Updated pp_bus_scale failed, ret = %d",
						req);
		}

		ret = copy_from_user(&hist_req, argp, sizeof(hist_req));
		if (ret)
@@ -2557,10 +2557,10 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
		if (ret)
			return ret;

		if (!req) {
			pp_bus_handle = mdss_mdp_get_mdata()->pp_bus_hdl;
			req = msm_bus_scale_client_update_request(pp_bus_handle,
				 PP_CLK_CFG_OFF);
		if (mdata->reg_bus_hdl && !req) {
			req = msm_bus_scale_client_update_request(
				mdata->reg_bus_hdl,
				REG_CLK_CFG_OFF);
			if (req)
				pr_err("Updated pp_bus_scale failed, ret = %d",
					req);
+0 −47
Original line number Diff line number Diff line
@@ -288,26 +288,6 @@ static int mdss_mdp_hscl_filter[] = {
#define SHARP_SMOOTH_THR_DEFAULT	8
#define SHARP_NOISE_THR_DEFAULT	2

#define MDP_PP_BUS_VECTOR_ENTRY(ab_val, ib_val)		\
	{						\
		.src = MSM_BUS_MASTER_SPDM,		\
		.dst = MSM_BUS_SLAVE_IMEM_CFG,		\
		.ab = (ab_val),				\
		.ib = (ib_val),				\
	}

#define SZ_37_5M (37500000 * 8)

static struct msm_bus_vectors mdp_pp_bus_vectors[] = {
	MDP_PP_BUS_VECTOR_ENTRY(0, 0),
	MDP_PP_BUS_VECTOR_ENTRY(0, SZ_37_5M),
};
static struct msm_bus_paths mdp_pp_bus_usecases[ARRAY_SIZE(mdp_pp_bus_vectors)];
static struct msm_bus_scale_pdata mdp_pp_bus_scale_table = {
	.usecase = mdp_pp_bus_usecases,
	.num_usecases = ARRAY_SIZE(mdp_pp_bus_usecases),
	.name = "mdss_pp",
};

struct mdss_pp_res_type {
	/* logical info */
@@ -1898,7 +1878,6 @@ int mdss_mdp_pp_init(struct device *dev)
	int i, ret = 0;
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();
	struct mdss_mdp_pipe *vig;
	struct msm_bus_scale_pdata *pp_bus_pdata;
	struct pp_hist_col_info *hist;

	if (!mdata)
@@ -1949,23 +1928,6 @@ int mdss_mdp_pp_init(struct device *dev)
			init_completion(&vig[i].pp_res.hist.comp);
			init_completion(&vig[i].pp_res.hist.first_kick);
		}
		if (!mdata->pp_bus_hdl) {
			pp_bus_pdata = &mdp_pp_bus_scale_table;
			for (i = 0; i < pp_bus_pdata->num_usecases; i++) {
				mdp_pp_bus_usecases[i].num_paths = 1;
				mdp_pp_bus_usecases[i].vectors =
					&mdp_pp_bus_vectors[i];
			}

			mdata->pp_bus_hdl =
				msm_bus_scale_register_client(pp_bus_pdata);
			if (!mdata->pp_bus_hdl) {
				pr_err("not able to register pp_bus_scale\n");
				ret = -ENOMEM;
			}
			pr_debug("register pp_bus_hdl=%x\n", mdata->pp_bus_hdl);
		}

	}
	mutex_unlock(&mdss_pp_mutex);
	return ret;
@@ -1973,15 +1935,6 @@ int mdss_mdp_pp_init(struct device *dev)

void mdss_mdp_pp_term(struct device *dev)
{
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();

	if (!mdata)
		return;

	if (mdata->pp_bus_hdl) {
		msm_bus_scale_unregister_client(mdata->pp_bus_hdl);
		mdata->pp_bus_hdl = 0;
	}
	if (mdss_pp_res) {
		mutex_lock(&mdss_pp_mutex);
		devm_kfree(dev, mdss_pp_res->dspp_hist);