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

Commit 9ec78e33 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "disp: msm: sde: dump clock state before entering suspend"

parents be0ebcb2 8479ed72
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -322,4 +322,11 @@ int dsi_clk_prepare_enable(struct dsi_clk_link_set *clk);
 * @clk:       list of src clocks.
 */
void dsi_clk_disable_unprepare(struct dsi_clk_link_set *clk);

/**
 * dsi_display_dump_clk_handle_state() - dump client clock state
 * @client:       DSI clock client pointer.
 */
int dsi_display_dump_clk_handle_state(void *client);

#endif /* _DSI_CLK_H_ */
+21 −0
Original line number Diff line number Diff line
@@ -1396,6 +1396,27 @@ void dsi_display_clk_mngr_update_splash_status(void *clk_mgr, bool status)
	mngr->is_cont_splash_enabled = status;
}

int dsi_display_dump_clk_handle_state(void *client)
{
	struct dsi_clk_mngr *mngr;
	struct dsi_clk_client_info *c = client;

	if (!c || !c->mngr) {
		DSI_ERR("Invalid params\n");
		return -EINVAL;
	}

	mngr = c->mngr;
	mutex_lock(&mngr->clk_mutex);
	DSI_INFO("[%s]%s: Core (ref=%d, state=%d), Link (ref=%d, state=%d)\n",
			mngr->name, c->name, c->core_refcount,
			c->core_clk_state, c->link_refcount,
			c->link_clk_state);
	mutex_unlock(&mngr->clk_mutex);

	return 0;
}

void *dsi_display_clk_mngr_register(struct dsi_clk_info *info)
{
	struct dsi_clk_mngr *mngr;
+38 −0
Original line number Diff line number Diff line
@@ -7811,6 +7811,44 @@ int dsi_display_update_pps(char *pps_cmd, void *disp)
	return 0;
}

int dsi_display_dump_clks_state(struct dsi_display *display)
{
	int rc = 0;

	if (!display) {
		DSI_ERR("invalid display argument\n");
		return -EINVAL;
	}

	if (!display->clk_mngr) {
		DSI_ERR("invalid clk manager\n");
		return -EINVAL;
	}

	if (!display->dsi_clk_handle || !display->mdp_clk_handle) {
		DSI_ERR("invalid clk handles\n");
		return -EINVAL;
	}

	mutex_lock(&display->display_lock);
	rc = dsi_display_dump_clk_handle_state(display->dsi_clk_handle);
	if (rc) {
		DSI_ERR("failed to dump dsi clock state\n");
		goto end;
	}

	rc = dsi_display_dump_clk_handle_state(display->mdp_clk_handle);
	if (rc) {
		DSI_ERR("failed to dump mdp clock state\n");
		goto end;
	}

end:
	mutex_unlock(&display->display_lock);

	return rc;
}

int dsi_display_unprepare(struct dsi_display *display)
{
	int rc = 0, i;
+8 −0
Original line number Diff line number Diff line
@@ -732,4 +732,12 @@ int dsi_display_cont_splash_config(void *display);
int dsi_display_get_panel_vfp(void *display,
	int h_active, int v_active);

/**
 * dsi_display_dump_clks_state() - dump clocks state to console
 * @display:         Handle to display
 *
 * Return: Zero on Success
 */
int dsi_display_dump_clks_state(struct dsi_display *display);

#endif /* _DSI_DISPLAY_H_ */
+26 −0
Original line number Diff line number Diff line
@@ -154,6 +154,9 @@ static int _sde_debugfs_init(struct sde_kms *sde_kms)
		debugfs_create_u32("qdss", 0600, debugfs_root,
				(u32 *)&sde_kms->qdss_enabled);

	debugfs_create_u32("pm_suspend_clk_dump", 0600, debugfs_root,
			(u32 *)&sde_kms->pm_suspend_clk_dump);

	return 0;
}

@@ -165,6 +168,20 @@ static void _sde_debugfs_destroy(struct sde_kms *sde_kms)
		sde_debugfs_core_irq_destroy(sde_kms);
	}
}

static int _sde_kms_dump_clks_state(struct sde_kms *sde_kms)
{
	int i;
	struct device *dev = sde_kms->dev->dev;

	SDE_INFO("runtime PM suspended:%d", pm_runtime_suspended(dev));

	for (i = 0; i < sde_kms->dsi_display_count; i++)
		dsi_display_dump_clks_state(sde_kms->dsi_displays[i]);

	return 0;
}

#else
static int _sde_debugfs_init(struct sde_kms *sde_kms)
{
@@ -174,6 +191,11 @@ static int _sde_debugfs_init(struct sde_kms *sde_kms)
static void _sde_debugfs_destroy(struct sde_kms *sde_kms)
{
}

static int _sde_kms_dump_clks_state(struct sde_kms *sde_kms)
{
	return 0;
}
#endif

static int sde_kms_enable_vblank(struct msm_kms *kms, struct drm_crtc *crtc)
@@ -2820,6 +2842,10 @@ static int sde_kms_pm_suspend(struct device *dev)
	pm_runtime_put_sync(dev);
	pm_runtime_get_noresume(dev);

	/* dump clock state before entering suspend */
	if (sde_kms->pm_suspend_clk_dump)
		_sde_kms_dump_clks_state(sde_kms);

	return ret;
}

Loading