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

Commit fd2a5f84 authored by Adrian Salido-Moreno's avatar Adrian Salido-Moreno
Browse files

msm: mdss: stub bus scaling functions if driver is disabled



Add proper checks to disable bus scaling functions if the bus scaling
driver is not properly enabled. This allows driver to continue
operations even if bus driver is not enabled and bandwidth is voted
obtained in a different way.

CRs-Fixed: 987761
Change-Id: Ic5b0610ca2603b1f3a192ac5d777a512ad94f1b9
Signed-off-by: default avatarAdrian Salido-Moreno <adrianm@codeaurora.org>
parent 30a4a975
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -876,7 +876,7 @@ void *mdss_dsi_clk_init(struct mdss_dsi_clk_info *info)
	mngr->post_clkoff_cb = info->post_clkoff_cb;
	mngr->priv_data = info->priv_data;
	mngr->reg_bus_clt = mdss_reg_bus_vote_client_create(info->name);
	if (IS_ERR_OR_NULL(mngr->reg_bus_clt)) {
	if (IS_ERR(mngr->reg_bus_clt)) {
		pr_err("Unable to get handle for reg bus vote\n");
		kfree(mngr);
		mngr = ERR_PTR(-EINVAL);
+1 −1
Original line number Diff line number Diff line
@@ -2797,7 +2797,7 @@ static int hdmi_tx_config_power(struct hdmi_tx_ctrl *hdmi_ctrl,
		snprintf(name, MAX_CLIENT_NAME_LEN, "hdmi:%u", module);
		hdmi_ctrl->pdata.reg_bus_clt[module] =
			mdss_reg_bus_vote_client_create(name);
		if (IS_ERR_OR_NULL(hdmi_ctrl->pdata.reg_bus_clt[module])) {
		if (IS_ERR(hdmi_ctrl->pdata.reg_bus_clt[module])) {
			pr_err("reg bus client create failed\n");
			msm_dss_config_vreg(&hdmi_ctrl->pdev->dev,
			power_data->vreg_config, power_data->num_vreg, 0);
+48 −1
Original line number Diff line number Diff line
@@ -117,6 +117,7 @@ struct mdss_hw mdss_misc_hw = {
	.irq_handler = NULL,
};

#ifdef CONFIG_MSM_BUS_SCALING
#define MDP_REG_BUS_VECTOR_ENTRY(ab_val, ib_val)	\
	{						\
		.src = MSM_BUS_MASTER_AMPSS_M0,		\
@@ -143,6 +144,7 @@ static struct msm_bus_scale_pdata mdp_reg_bus_scale_table = {
	.name = "mdss_reg",
	.active_only = true,
};
#endif

u32 invalid_mdp107_wb_output_fmts[] = {
	MDP_XRGB_8888,
@@ -294,6 +296,7 @@ static irqreturn_t mdss_irq_handler(int irq, void *ptr)
	return IRQ_HANDLED;
}

#ifdef CONFIG_MSM_BUS_SCALING
static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata)
{
	struct msm_bus_scale_pdata *reg_bus_pdata;
@@ -571,6 +574,42 @@ int mdss_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota)

	return rc;
}
#else
static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata)
{
	return 0;
}

static void mdss_mdp_bus_scale_unregister(struct mdss_data_type *mdata)
{
}

int mdss_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota)
{
	pr_debug("No bus scaling! client=%d ab=%llu ib=%llu\n",
			client, ab_quota, ib_quota);

	return 0;
}

struct reg_bus_client *mdss_reg_bus_vote_client_create(char *client_name)
{
	return NULL;
}

void mdss_reg_bus_vote_client_destroy(struct reg_bus_client *client)
{
}

int mdss_update_reg_bus_vote(struct reg_bus_client *bus_client, u32 usecase_ndx)
{
	pr_debug("%pS: No reg scaling! usecase=%u\n",
			__builtin_return_address(0), usecase_ndx);

	return 0;
}
#endif


static inline u32 mdss_mdp_irq_mask(u32 intr_type, u32 intf_num)
{
@@ -1271,7 +1310,7 @@ static int mdss_mdp_irq_clk_setup(struct mdss_data_type *mdata)
	}

	mdata->reg_bus_clt = mdss_reg_bus_vote_client_create("mdp\0");
	if (IS_ERR_OR_NULL(mdata->reg_bus_clt)) {
	if (IS_ERR(mdata->reg_bus_clt)) {
		pr_err("bus client register failed\n");
		return PTR_ERR(mdata->reg_bus_clt);
	}
@@ -3899,6 +3938,7 @@ static int mdss_mdp_parse_dt_ppb_off(struct platform_device *pdev)
	return -EINVAL;
}

#ifdef CONFIG_MSM_BUS_SCALING
static int mdss_mdp_parse_dt_bus_scale(struct platform_device *pdev)
{
	int rc, paths;
@@ -3957,6 +3997,13 @@ static int mdss_mdp_parse_dt_bus_scale(struct platform_device *pdev)

	return rc;
}
#else
static int mdss_mdp_parse_dt_bus_scale(struct platform_device *pdev)
{
	return 0;
}

#endif

static int mdss_mdp_parse_dt_handler(struct platform_device *pdev,
		char *prop_name, u32 *offsets, int len)
+1 −1
Original line number Diff line number Diff line
@@ -2778,7 +2778,7 @@ int mdss_mdp_pp_init(struct device *dev)


	mdata->pp_reg_bus_clt = mdss_reg_bus_vote_client_create("pp\0");
	if (IS_ERR_OR_NULL(mdata->pp_reg_bus_clt))
	if (IS_ERR(mdata->pp_reg_bus_clt))
		pr_err("bus client register failed\n");

	mutex_lock(&mdss_pp_mutex);
+1 −1
Original line number Diff line number Diff line
@@ -604,7 +604,7 @@ int mdss_smmu_probe(struct platform_device *pdev)

	snprintf(name, MAX_CLIENT_NAME_LEN, "smmu:%u", smmu_domain.domain);
	mdss_smmu->reg_bus_clt = mdss_reg_bus_vote_client_create(name);
	if (IS_ERR_OR_NULL(mdss_smmu->reg_bus_clt)) {
	if (IS_ERR(mdss_smmu->reg_bus_clt)) {
		pr_err("mdss bus client register failed\n");
		msm_dss_config_vreg(&pdev->dev, mp->vreg_config, mp->num_vreg,
			false);