فهرست منبع

disp: msm: enable power resources while dumping registers in WQ

Enable sde power resources while dumping the registers in
SDE_DBG_DUMP_IRQ_CTX context after switching to workqueue.
The call is initiated from IRQ context and queued to workqueue
for execution. The extra vote will make sure the resources are
kept enabled through the register dumping.

Change-Id: I938049f6e2f1504ada2ce34ed4f56abb9c564f10
Signed-off-by: Veera Sundaram Sankaran <[email protected]>
Veera Sundaram Sankaran 4 سال پیش
والد
کامیت
031b1b5935
1فایلهای تغییر یافته به همراه12 افزوده شده و 15 حذف شده
  1. 12 15
      msm/sde_dbg.c

+ 12 - 15
msm/sde_dbg.c

@@ -444,17 +444,6 @@ static struct sde_debug_bus_entry dp_dbg_bus[] = {
 	{DPTX_DEBUG_BUS_CTRL, DPTX_DEBUG_BUS_OUTPUT, 0, 1, 0, 145},
 	{DPTX_DEBUG_BUS_CTRL, DPTX_DEBUG_BUS_OUTPUT, 0, 1, 0, 145},
 };
 };
 
 
-/**
- * _sde_power_check - check if power needs to enabled
- * @dump_mode: to check if power need to be enabled
- * Return: true if success; false otherwise
- */
-static inline bool _sde_power_check(enum sde_dbg_dump_context dump_mode)
-{
-	return (dump_mode == SDE_DBG_DUMP_CLK_ENABLED_CTX ||
-		dump_mode == SDE_DBG_DUMP_IRQ_CTX) ? false : true;
-}
-
 /**
 /**
  * _sde_dump_reg - helper function for dumping rotator register set content
  * _sde_dump_reg - helper function for dumping rotator register set content
  * @dump_name: register set name
  * @dump_name: register set name
@@ -972,12 +961,19 @@ static void _sde_dump_array(bool do_panic, const char *name, bool dump_secure, u
 	int rc;
 	int rc;
 	ktime_t start, end;
 	ktime_t start, end;
 	struct sde_dbg_base *dbg_base = &sde_dbg_base;
 	struct sde_dbg_base *dbg_base = &sde_dbg_base;
+	bool skip_power;
 
 
 	mutex_lock(&dbg_base->mutex);
 	mutex_lock(&dbg_base->mutex);
 
 
+	/*
+	 * sde power resources are expected to be enabled in this context and might
+	 * result in deadlock if its called again.
+	 */
+	skip_power = (dbg_base->dump_mode == SDE_DBG_DUMP_CLK_ENABLED_CTX);
+
 	sde_evtlog_dump_all(dbg_base->evtlog);
 	sde_evtlog_dump_all(dbg_base->evtlog);
 
 
-	if (_sde_power_check(dbg_base->dump_mode)) {
+	if (!skip_power) {
 		rc = pm_runtime_get_sync(dbg_base->dev);
 		rc = pm_runtime_get_sync(dbg_base->dev);
 		if (rc < 0) {
 		if (rc < 0) {
 			pr_err("failed to enable power %d\n", rc);
 			pr_err("failed to enable power %d\n", rc);
@@ -989,8 +985,9 @@ static void _sde_dump_array(bool do_panic, const char *name, bool dump_secure, u
 	_sde_dump_reg_mask(dump_blk_mask, dump_secure);
 	_sde_dump_reg_mask(dump_blk_mask, dump_secure);
 	end = ktime_get();
 	end = ktime_get();
 	dev_info(dbg_base->dev,
 	dev_info(dbg_base->dev,
-			"reg-dump logging time start_us:%llu, end_us:%llu , duration_us:%llu\n",
-			ktime_to_us(start), ktime_to_us(end), ktime_us_delta(end, start));
+		"ctx:%d, reg-dump logging time start_us:%llu, end_us:%llu , duration_us:%llu\n",
+		dbg_base->dump_mode, ktime_to_us(start), ktime_to_us(end),
+		ktime_us_delta(end, start));
 
 
 	start = ktime_get();
 	start = ktime_get();
 	if (dump_blk_mask & SDE_DBG_SDE_DBGBUS)
 	if (dump_blk_mask & SDE_DBG_SDE_DBGBUS)
@@ -1016,7 +1013,7 @@ static void _sde_dump_array(bool do_panic, const char *name, bool dump_secure, u
 			"debug-bus logging time start_us:%llu, end_us:%llu , duration_us:%llu\n",
 			"debug-bus logging time start_us:%llu, end_us:%llu , duration_us:%llu\n",
 			ktime_to_us(start), ktime_to_us(end), ktime_us_delta(end, start));
 			ktime_to_us(start), ktime_to_us(end), ktime_us_delta(end, start));
 
 
-	if (_sde_power_check(dbg_base->dump_mode))
+	if (!skip_power)
 		pm_runtime_put_sync(dbg_base->dev);
 		pm_runtime_put_sync(dbg_base->dev);
 
 
 	if (do_panic && dbg_base->panic_on_err)
 	if (do_panic && dbg_base->panic_on_err)