Merge "disp: msm: sde: dump clock state before entering suspend"
This commit is contained in:

کامیت شده توسط
Gerrit - the friendly Code Review server

کامیت
9ec78e3339
@@ -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_ */
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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_ */
|
||||
|
@@ -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 @@ unlock:
|
||||
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;
|
||||
}
|
||||
|
||||
|
@@ -305,6 +305,7 @@ struct sde_kms {
|
||||
|
||||
bool first_kickoff;
|
||||
bool qdss_enabled;
|
||||
bool pm_suspend_clk_dump;
|
||||
|
||||
cpumask_t irq_cpu_mask;
|
||||
struct dev_pm_qos_request pm_qos_irq_req[NR_CPUS];
|
||||
|
مرجع در شماره جدید
Block a user