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

Commit cd14029c authored by Clarence Ip's avatar Clarence Ip Committed by Gerrit - the friendly Code Review server
Browse files

msm: sde: print more rot status on mdp panic



Add debug bus and multiple snapshots to inline rotation
debug dump.

Change-Id: I6950bed8d25e484bdb97d26de7689c4425c8fe89
Signed-off-by: default avatarClarence Ip <cip@codeaurora.org>
parent 58df09ae
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -3182,6 +3182,26 @@ void sde_rotator_core_destroy(struct sde_rot_mgr *mgr)
	devm_kfree(dev, mgr);
}

void sde_rotator_core_dump(struct sde_rot_mgr *mgr)
{
	if (!mgr) {
		SDEROT_ERR("null parameters\n");
		return;
	}

	sde_rotator_resource_ctrl(mgr, true);
	/* dump first snapshot */
	if (mgr->ops_hw_dump_status)
		mgr->ops_hw_dump_status(mgr->hw_data);

	SDEROT_EVTLOG_TOUT_HANDLER("rot", "rot_dbg_bus", "vbif_dbg_bus");

	/* dump second snapshot for comparison */
	if (mgr->ops_hw_dump_status)
		mgr->ops_hw_dump_status(mgr->hw_data);
	sde_rotator_resource_ctrl(mgr, false);
}

static void sde_rotator_suspend_cancel_rot_work(struct sde_rot_mgr *mgr)
{
	struct sde_rot_file_private *priv, *priv_next;
+7 −0
Original line number Diff line number Diff line
@@ -478,6 +478,7 @@ struct sde_rot_mgr {
	int (*ops_hw_get_downscale_caps)(struct sde_rot_mgr *mgr, char *caps,
			int len);
	int (*ops_hw_get_maxlinewidth)(struct sde_rot_mgr *mgr);
	void (*ops_hw_dump_status)(struct sde_rot_mgr *mgr);

	void *hw_data;
};
@@ -569,6 +570,12 @@ int sde_rotator_core_init(struct sde_rot_mgr **pmgr,
 */
void sde_rotator_core_destroy(struct sde_rot_mgr *mgr);

/*
 * sde_rotator_core_dump - perform register dump
 * @mgr: Pointer to rotator manager
 */
void sde_rotator_core_dump(struct sde_rot_mgr *mgr);

/*
 * sde_rotator_session_open - open a new rotator per file session
 * @mgr: Pointer to rotator manager
+0 −12
Original line number Diff line number Diff line
@@ -637,18 +637,6 @@ static void sde_rot_evtlog_debug_work(struct work_struct *work)
		sde_rot_dbg_evtlog.work_rot_dbgbus);
}

/*
 * sde_rot_dump_panic - Issue evtlog dump and generic panic
 */
void sde_rot_dump_panic(bool do_panic)
{
	sde_rot_evtlog_dump_all();
	sde_rot_dump_reg_all();

	if (do_panic)
		panic("sde_rotator");
}

/*
 * sde_rot_evtlog_tout_handler - log dump timeout handler
 * @queue: boolean indicate putting log dump into queue
+0 −1
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@ enum sde_rot_dbg_evtlog_flag {
		SDE_ROT_EVTLOG_TOUT_DATA_LIMITER)

void sde_rot_evtlog(const char *name, int line, int flag, ...);
void sde_rot_dump_panic(bool do_panic);
void sde_rot_evtlog_tout_handler(bool queue, const char *name, ...);

struct sde_rotator_device;
+16 −1
Original line number Diff line number Diff line
@@ -1762,7 +1762,22 @@ EXPORT_SYMBOL(sde_rotator_inline_commit);

void sde_rotator_inline_reg_dump(struct platform_device *pdev)
{
	sde_rot_dump_panic(false);
	struct sde_rotator_device *rot_dev;

	if (!pdev) {
		SDEROT_ERR("invalid platform device\n");
		return;
	}

	rot_dev = (struct sde_rotator_device *) platform_get_drvdata(pdev);
	if (!rot_dev || !rot_dev->mgr) {
		SDEROT_ERR("invalid rotator device\n");
		return;
	}

	sde_rot_mgr_lock(rot_dev->mgr);
	sde_rotator_core_dump(rot_dev->mgr);
	sde_rot_mgr_unlock(rot_dev->mgr);
}
EXPORT_SYMBOL(sde_rotator_inline_reg_dump);

Loading