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

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

Merge "ARM: dts: msm: Add MDP and VBIF dump registers node for 8909w"

parents 34b9a0d1 679d5af1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
		qcom,mdss-dsi-underflow-color = <0xff>;
		qcom,mdss-dsi-border-color = <0>;
		qcom,mdss-tear-check-frame-rate = <4500>;
		qcom,mdss-dsi-idle-fps = <10>;
		qcom,mdss-dsi-on-command = [
			15 01 00 00 00 00 02 fe 01
			15 01 00 00 00 00 02 0a f0
+15 −0
Original line number Diff line number Diff line
@@ -28,6 +28,21 @@
		clock-names = "iface_clk", "bus_clk", "core_clk_src",
				"core_clk", "vsync_clk";

		qcom,regs-dump-mdp =    <0x0300 0x0358>,
					<0x10000 0x101E0>,
					<0x20004 0x0020044>,
					<0x90000 0x90074>;
		qcom,regs-dump-names-mdp =      "MDP_SYNC",
						"PPP","PPP_FETCH",
						"DMA_P";

		qcom,regs-dump-vbif =   <0x0004 0x0010>,
					<0x0194 0x01b0>,
					<0x0200 0x020c>;

		qcom,regs-dump-names-vbif =     "VBIF_CLK",
						"VBIF_ERR","VBIF_XIN_HALT";

		mdss_fb0: qcom,mdss_fb_primary {
			cell-index = <0>;
			compatible = "qcom,mdss-fb";
+25 −3
Original line number Diff line number Diff line
@@ -1812,7 +1812,8 @@ static int mdp3_continuous_splash_on(struct mdss_panel_data *pdata)
		pr_err("invalid bus handle %d\n", bus_handle->handle);
		return -EINVAL;
	}
	mdp3_calc_dma_res(panel_info, &mdp_clk_rate, &ab, &ib, panel_info->bpp);
	mdp3_calc_dma_res(panel_info, &mdp_clk_rate, &ab,
					&ib, MAX_BPP_SUPPORTED);

	mdp3_clk_set_rate(MDP3_CLK_VSYNC, MDP_VSYNC_CLK_RATE,
			MDP3_CLIENT_DMA_P);
@@ -1968,6 +1969,8 @@ static int mdp3_debug_init(struct platform_device *pdev)
	int rc;
	struct mdss_data_type *mdata;
	struct mdss_debug_data *mdd;
	struct mdss_debug_base *mdp_dbg_blk = NULL;
	struct mdss_debug_base *vbif_dbg_blk = NULL;

	mdata = devm_kzalloc(&pdev->dev, sizeof(*mdata), GFP_KERNEL);
	if (!mdata)
@@ -1996,8 +1999,27 @@ static int mdp3_debug_init(struct platform_device *pdev)
	debugfs_create_file("stat", 0644, mdd->root, mdp3_res,
				&mdp3_debug_dump_stats_fops);

	rc = mdss_debug_register_base(NULL, mdp3_res->mdp_base,
					mdp3_res->mdp_reg_size, NULL);
	/* MDP Debug base registration */
	rc = mdss_debug_register_base("mdp", mdp3_res->mdp_base,
					mdp3_res->mdp_reg_size, &mdp_dbg_blk);
	if (rc)
		return rc;

	mdss_debug_register_dump_range(pdev, mdp_dbg_blk, "qcom,regs-dump-mdp",
		"qcom,regs-dump-names-mdp", "qcom,regs-dump-xin-id-mdp");


	/* VBIF Debug base registration */
	if (mdp3_res->vbif_base) {
		rc = mdss_debug_register_base("vbif", mdp3_res->vbif_base,
					mdp3_res->vbif_reg_size, &vbif_dbg_blk);
		if (rc)
			return rc;

		mdss_debug_register_dump_range(pdev, vbif_dbg_blk,
			 "qcom,regs-dump-vbif", "qcom,regs-dump-names-vbif",
						 "qcom,regs-dump-xin-id-vbif");
	}

	return rc;
}
+51 −34
Original line number Diff line number Diff line
@@ -32,8 +32,6 @@
#include "mdss_spi_panel.h"
#include "mdss_sync.h"

#define VSYNC_EXPIRE_TICK	4

static void mdp3_ctrl_pan_display(struct msm_fb_data_type *mfd);
static int mdp3_overlay_unset(struct msm_fb_data_type *mfd, int ndx);
static int mdp3_histogram_stop(struct mdp3_session_data *session,
@@ -188,7 +186,8 @@ static void mdp3_dispatch_clk_off(struct work_struct *work)
		return;

	mutex_lock(&session->lock);
	MDSS_XLOG(0x111);
	MDSS_XLOG(0x111, atomic_read(&session->vsync_countdown),
			session->dma->vsync_period);
	if (session->vsync_enabled ||
		atomic_read(&session->vsync_countdown) > 0) {
		mutex_unlock(&session->lock);
@@ -206,14 +205,14 @@ static void mdp3_dispatch_clk_off(struct work_struct *work)
	if (session->intf->active) {
retry_dma_done:
		rc = wait_for_completion_timeout(&session->dma_completion,
							WAIT_DMA_TIMEOUT);
		MDSS_XLOG(0x222);
					dma_timeout_value(session->dma));
		if (rc <= 0) {
			struct mdss_panel_data *panel;

			panel = session->panel;
			pr_debug("cmd kickoff timed out (%d)\n", rc);
			dmap_busy = session->dma->busy();
			MDSS_XLOG(0x222, dmap_busy);
			if (dmap_busy) {
				if (--retry_count) {
					pr_err("dmap is busy, retry %d\n",
@@ -222,7 +221,7 @@ static void mdp3_dispatch_clk_off(struct work_struct *work)
					goto retry_dma_done;
				}
				pr_err("dmap is still busy, bug_on\n");
				WARN_ON(1);
				BUG_ON(1);
			} else {
				pr_debug("dmap is not busy, continue\n");
			}
@@ -303,17 +302,22 @@ void vsync_count_down(void *arg)
	struct mdp3_session_data *session = (struct mdp3_session_data *)arg;

	/* We are counting down to turn off clocks */
	if (atomic_read(&session->vsync_countdown) > 0)
	if (atomic_read(&session->vsync_countdown) > 0) {
		atomic_dec(&session->vsync_countdown);
		MDSS_XLOG(atomic_read(&session->vsync_countdown),
				session->dma->vsync_period);
		if (atomic_read(&session->vsync_countdown) == 0)
			schedule_work(&session->clk_off_work);
	}
}

void mdp3_ctrl_reset_countdown(struct mdp3_session_data *session,
		struct msm_fb_data_type *mfd)
{
	if (mdp3_ctrl_get_intf_type(mfd) == MDP3_DMA_OUTPUT_SEL_DSI_CMD)
		atomic_set(&session->vsync_countdown, VSYNC_EXPIRE_TICK);

	MDSS_XLOG(atomic_read(&session->vsync_countdown));
}

static int mdp3_ctrl_vsync_enable(struct msm_fb_data_type *mfd, int enable)
@@ -378,7 +382,7 @@ static int mdp3_ctrl_vsync_enable(struct msm_fb_data_type *mfd, int enable)
	 */
	if (mod_vsync_timer && (intf_type != MDP3_DMA_OUTPUT_SEL_SPI_CMD)) {
		mod_timer(&mdp3_session->vsync_timer,
			jiffies + msecs_to_jiffies(mdp3_session->vsync_period));
		jiffies + msecs_to_jiffies(mdp3_session->dma->vsync_period));
	} else if (enable && !mdp3_session->clk_on) {
		mdp3_ctrl_reset_countdown(mdp3_session, mfd);
		mdp3_ctrl_clk_enable(mfd, 1);
@@ -398,7 +402,7 @@ void mdp3_vsync_timer_func(unsigned long arg)
		pr_debug("mdp3_vsync_timer_func trigger\n");
		vsync_notify_handler(session);
		mod_timer(&session->vsync_timer,
			jiffies + msecs_to_jiffies(session->vsync_period));
			jiffies + msecs_to_jiffies(session->dma->vsync_period));
	}
}

@@ -905,6 +909,7 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd)
	int rc = 0;
	struct mdp3_session_data *mdp3_session;
	struct mdss_panel_data *panel;
	u32 framerate = 0;

	pr_debug("mdp3_ctrl_on\n");
	mdp3_session = (struct mdp3_session_data *)mfd->mdp.private1;
@@ -1027,7 +1032,7 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd)
		mdp3_session->status = 1;

	mdp3_ctrl_pp_resume(mfd);
	MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, mfd->panel_power_state);

on_error:
	if (rc || (mdp3_res->idle_pc_enabled &&
			(mfd->panel_info->type == MIPI_CMD_PANEL))) {
@@ -1038,6 +1043,12 @@ static int mdp3_ctrl_on(struct msm_fb_data_type *mfd)
		pm_runtime_put(&mdp3_res->pdev->dev);
	}
end:
	framerate = mdss_panel_get_framerate(mfd->panel_info,
			FPS_RESOLUTION_HZ);
	if (framerate != 0)
		mdp3_session->dma->vsync_period = DIV_ROUND_UP(1000, framerate);

	MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, mfd->panel_power_state, framerate);
	mutex_unlock(&mdp3_session->lock);
	return rc;
}
@@ -1054,6 +1065,7 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd)
	bool intf_stopped = true;
	struct mdp3_session_data *mdp3_session;
	struct mdss_panel_data *panel;
	u32 framerate = 0;

	pr_debug("mdp3_ctrl_off\n");
	mdp3_session = (struct mdp3_session_data *)mfd->mdp.private1;
@@ -1242,7 +1254,13 @@ static int mdp3_ctrl_off(struct msm_fb_data_type *mfd)
		mdp3_session->overlay.id = MSMFB_NEW_REQUEST;
		mdp3_bufq_deinit(&mdp3_session->bufq_in, client);
	}
	MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__);

	framerate = mdss_panel_get_framerate(mfd->panel_info,
			FPS_RESOLUTION_HZ);
	if (framerate != 0)
		mdp3_session->dma->vsync_period = DIV_ROUND_UP(1000, framerate);

	MDSS_XLOG(XLOG_FUNC_EXIT, __LINE__, framerate);
	mutex_unlock(&mdp3_session->lock);
	/* Release the last reference to the runtime device */
	pm_runtime_put(&mdp3_res->pdev->dev);
@@ -1511,6 +1529,7 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd,
	struct mdss_panel_data *panel;
	int frame_rate = DEFAULT_FRAME_RATE;
	int stride;
	int prev_bl;

	if (!mfd || !mfd->mdp.private1)
		return -EINVAL;
@@ -1528,22 +1547,6 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd,
		return -EPERM;
	}

	if (panel_info->partial_update_enabled &&
		is_roi_valid(mdp3_session->dma->source_config,
			     cmt_data->l_roi) &&
		update_roi(mdp3_session->dma->roi, cmt_data->l_roi)) {
		mdp3_session->dma->roi.x = cmt_data->l_roi.x;
		mdp3_session->dma->roi.y = cmt_data->l_roi.y;
		mdp3_session->dma->roi.w = cmt_data->l_roi.w;
		mdp3_session->dma->roi.h = cmt_data->l_roi.h;
		mdp3_session->dma->update_src_cfg = true;
		pr_debug("%s: ROI: x=%d y=%d w=%d h=%d\n", __func__,
			mdp3_session->dma->roi.x,
			mdp3_session->dma->roi.y,
			mdp3_session->dma->roi.w,
			mdp3_session->dma->roi.h);
	}

	panel = mdp3_session->panel;
	mutex_lock(&mdp3_res->fs_idle_pc_lock);
	if (mdp3_session->in_splash_screen ||
@@ -1556,6 +1559,9 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd,
			mutex_unlock(&mdp3_res->fs_idle_pc_lock);
			return -EINVAL;
		}
		if ((mdp3_session->dma->roi.x || mdp3_session->dma->roi.y) &&
			panel_info->partial_update_enabled)
			mdp3_session->dma->update_src_cfg = true;
	}
	mutex_unlock(&mdp3_res->fs_idle_pc_lock);

@@ -1567,7 +1573,8 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd,
		mutex_unlock(&mdp3_session->lock);
		return -EPERM;
	}
	MDSS_XLOG(0x111);
	MDSS_XLOG(0x111, mdp3_session->dma->vsync_period);

	mdp3_ctrl_notify(mdp3_session, MDP_NOTIFY_FRAME_BEGIN);
	data = mdp3_bufq_pop(&mdp3_session->bufq_in);
	if (data) {
@@ -1637,9 +1644,15 @@ static int mdp3_ctrl_display_commit_kickoff(struct msm_fb_data_type *mfd,
	}

	mdp3_session->vsync_before_commit = 0;
	prev_bl = mfd->bl_level;
	if (!splash_done || mdp3_session->esd_recovery == true) {
		if (panel && panel->set_backlight)
			panel->set_backlight(panel, panel->panel_info.bl_max);
		if (panel && panel->set_backlight) {
			if (mdp3_session->esd_recovery == true && prev_bl > 0)
				panel->set_backlight(panel, prev_bl);
			else
				panel->set_backlight(panel,
					panel->panel_info.bl_max);
		}
		splash_done = true;
		mdp3_session->esd_recovery = false;
	}
@@ -2894,7 +2907,7 @@ int mdp3_wait_for_dma_done(struct mdp3_session_data *session)

	if (session->dma_active) {
		rc = wait_for_completion_timeout(&session->dma_completion,
			KOFF_TIMEOUT);
			 dma_timeout_value(session->dma));
		if (rc > 0) {
			session->dma_active = 0;
			rc = 0;
@@ -3071,7 +3084,11 @@ int mdp3_ctrl_init(struct msm_fb_data_type *mfd)
	init_timer(&mdp3_session->vsync_timer);
	mdp3_session->vsync_timer.function = mdp3_vsync_timer_func;
	mdp3_session->vsync_timer.data = (u32)mdp3_session;
	mdp3_session->vsync_period = 1000 / frame_rate;

	if (frame_rate != 0)
		mdp3_session->dma->vsync_period =
				DIV_ROUND_UP(1000, frame_rate);

	mfd->mdp.private1 = mdp3_session;
	init_completion(&mdp3_session->dma_completion);
	if (intf_type != MDP3_DMA_OUTPUT_SEL_DSI_VIDEO ||
+0 −1
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ struct mdp3_session_data {
	struct msm_fb_data_type *mfd;
	ktime_t vsync_time;
	struct timer_list vsync_timer;
	int vsync_period;
	struct kernfs_node *vsync_event_sd;
	struct kernfs_node *bl_event_sd;
	struct mdp_overlay overlay;
Loading