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

Commit a98d38bf 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 iommu and bandwidth changes for dsi 6G"

parents fa702f57 500fd73c
Loading
Loading
Loading
Loading
+23 −4
Original line number Diff line number Diff line
@@ -346,7 +346,8 @@ static void mdp3_bus_scale_unregister(void)
	}
}

int mdp3_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota)
int mdp3_bus_scale_set_quota(int client, u64 ab_quota, u64 ab_quota_nrt,
								u64 ib_quota)
{
	struct mdp3_bus_handle_map *bus_handle;
	int cur_bus_idx;
@@ -365,6 +366,9 @@ int mdp3_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota)
		return -EINVAL;
	}

	if (ab_quota_nrt != 0)
		pr_err("Ignoring non zero NRT bus voting on mdp3\n");

	bus_handle->ab[client] = ab_quota;
	bus_handle->ib[client] = ib_quota;

@@ -620,9 +624,9 @@ void mdp3_bus_bw_iommu_enable(int enable, int client)
			ab += bus_handle->restore_ab[i];
			ib += bus_handle->restore_ib[i];
		}
		mdp3_bus_scale_set_quota(client, ab, ib);
		mdp3_bus_scale_set_quota(client, ab, 0, ib);
	} else if (!enable && ref_cnt == 0) {
		mdp3_bus_scale_set_quota(client, 0, 0);
		mdp3_bus_scale_set_quota(client, 0, 0, 0);
		mdp3_iommu_disable();
	} else if (ref_cnt < 0) {
		pr_err("Ref count < 0, bus client=%d, ref_cnt=%d",
@@ -1370,6 +1374,17 @@ int mdp3_iommu_disable()
	return rc;
}

int mdp3_iommu_ctrl(int enable)
{
	int rc;

	if (enable)
		rc = mdp3_iommu_enable();
	else
		rc = mdp3_iommu_disable();
	return rc;
}

int mdp3_iommu_is_attached()
{
	struct mdp3_iommu_ctx_map *context_map;
@@ -1616,7 +1631,7 @@ static int mdp3_continuous_splash_on(struct mdss_panel_data *pdata)
	ab = panel_info->xres * panel_info->yres * 4;
	ab *= panel_info->mipi.frame_rate;
	ib = (ab * 3) / 2;
	rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_DMA_P, ab, ib);
	rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_DMA_P, ab, 0, ib);
	bus_handle->restore_ab[MDP3_CLIENT_DMA_P] = ab;
	bus_handle->restore_ib[MDP3_CLIENT_DMA_P] = ib;

@@ -1938,6 +1953,9 @@ static int mdp3_probe(struct platform_device *pdev)
		rc =  -ENODEV;
		goto get_util_fail;
	}
	mdp3_res->mdss_util->iommu_attached = mdp3_iommu_is_attached;
	mdp3_res->mdss_util->iommu_ctrl = mdp3_iommu_ctrl;
	mdp3_res->mdss_util->bus_scale_set_quota = mdp3_bus_scale_set_quota;

	rc = mdp3_parse_dt(pdev);
	if (rc)
@@ -1973,6 +1991,7 @@ static int mdp3_probe(struct platform_device *pdev)
					&underrun_cb);
	if (rc)
		pr_err("unable to configure interrupt callback\n");
	mdp3_res->mdss_util->mdp_probe_done = true;

probe_done:
	if (IS_ERR_VALUE(rc))
+2 −1
Original line number Diff line number Diff line
@@ -173,7 +173,8 @@ void mdp3_irq_deregister(void);
int mdp3_clk_set_rate(int clk_type, unsigned long clk_rate, int client);
int mdp3_clk_enable(int enable, int dsi_clk);
int mdp3_res_update(int enable, int dsi_clk, int client);
int mdp3_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota);
int mdp3_bus_scale_set_quota(int client, u64 ab_quota, u64 ab_quota_nrt,
								u64 ib_quota);
int mdp3_put_img(struct mdp3_img_data *data);
int mdp3_get_img(struct msmfb_data *img, struct mdp3_img_data *data);
int mdp3_iommu_enable(void);
+2 −2
Original line number Diff line number Diff line
@@ -354,9 +354,9 @@ static int mdp3_ctrl_res_req_bus(struct msm_fb_data_type *mfd, int status)
		ab = panel_info->xres * panel_info->yres * 4;
		ab *= panel_info->mipi.frame_rate;
		ib = (ab * 3) / 2;
		rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_DMA_P, ab, ib);
		rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_DMA_P, ab, 0, ib);
	} else {
		rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_DMA_P, 0, 0);
		rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_DMA_P, 0, 0, 0);
	}
	return rc;
}
+2 −2
Original line number Diff line number Diff line
@@ -347,7 +347,7 @@ int mdp3_ppp_vote_update(struct msm_fb_data_type *mfd)
		ab = ib / 2;
	else
		ab = req_bw;
	rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_PPP, ab, ib);
	rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_PPP, ab, 0, ib);
	if (rc < 0) {
		pr_err("%s: scale_set_quota failed\n", __func__);
		return rc;
@@ -381,7 +381,7 @@ int mdp3_ppp_turnon(struct msm_fb_data_type *mfd, int on_off)
		pr_err("%s: mdp3_clk_enable failed\n", __func__);
		return rc;
	}
	rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_PPP, ab, ib);
	rc = mdp3_bus_scale_set_quota(MDP3_CLIENT_PPP, ab, 0, ib);
	if (rc < 0) {
		mdp3_res_update(!on_off, 0, MDP3_CLIENT_PPP);
		pr_err("%s: scale_set_quota failed\n", __func__);
+6 −7
Original line number Diff line number Diff line
@@ -272,11 +272,17 @@ int mdss_bus_scale_set_quota(int client, u64 ab_quota_rt, u64 ab_quota_nrt,
		u64 ib_quota);

struct mdss_util_intf {
	bool mdp_probe_done;
	int (*register_irq)(struct mdss_hw *hw);
	void (*enable_irq)(struct mdss_hw *hw);
	void (*disable_irq)(struct mdss_hw *hw);
	void (*disable_irq_nosync)(struct mdss_hw *hw);
	int (*irq_dispatch)(u32 hw_ndx, int irq, void *ptr);
	int (*iommu_attached)(void);
	int (*iommu_ctrl)(int enable);
	void (*bus_bandwidth_ctrl)(int enable);
	int (*bus_scale_set_quota)(int client, u64 ab_quota,
					u64 ab_quote_nrt, u64 ib_quota);
};

struct mdss_util_intf *mdss_get_util_intf(void);
@@ -288,13 +294,6 @@ static inline struct ion_client *mdss_get_ionclient(void)
	return mdss_res->iclient;
}

static inline int is_mdss_iommu_attached(void)
{
	if (!mdss_res)
		return false;
	return mdss_res->iommu_attached;
}

static inline int mdss_get_iommu_domain(u32 type)
{
	if (type >= MDSS_IOMMU_MAX_DOMAIN)
Loading