msm: kgsl: Log retired timestamps on device wake
Knowing the retired timestamp on wake-up is useful to debug hangs that are caused due to clock instability. When we request for clock ON, the clock may/may-not be turned ON, but we go ahead assuming it is ON. This can be caught by printing the timestamp on wake. The timestamp we print, can be compared against the timestamp in postmortem dump (assuming a hang happens). If there is a difference, we can say that GPU has run for sometime after wake. So, we needn't suspect clocks. If there is no difference, we can say that GPU has hung immediately after wake. So, we can positively suspect the clocks. Change-Id: Iedf49977adbb0e61a9b71bbe23acc81f2a75162d Signed-off-by: Ranjhith Kalisamy <ranjhith@codeaurora.org> Signed-off-by: Sakshi Agrawal <sakshia@codeaurora.org>
This commit is contained in:
committed by
Iliyan Malchev
parent
876f03ab66
commit
b708abd0a4
@@ -23,6 +23,7 @@
|
||||
#include "kgsl_pwrscale.h"
|
||||
#include "kgsl_device.h"
|
||||
#include "kgsl_trace.h"
|
||||
#include "kgsl_sharedmem.h"
|
||||
|
||||
#define KGSL_PWRFLAGS_POWER_ON 0
|
||||
#define KGSL_PWRFLAGS_CLK_ON 1
|
||||
@@ -1226,6 +1227,11 @@ EXPORT_SYMBOL(kgsl_pwrctrl_sleep);
|
||||
void kgsl_pwrctrl_wake(struct kgsl_device *device)
|
||||
{
|
||||
int status;
|
||||
unsigned int context_id;
|
||||
unsigned int state = device->state;
|
||||
unsigned int ts_processed = 0xdeaddead;
|
||||
struct kgsl_context *context;
|
||||
|
||||
kgsl_pwrctrl_request_state(device, KGSL_STATE_ACTIVE);
|
||||
switch (device->state) {
|
||||
case KGSL_STATE_SLUMBER:
|
||||
@@ -1239,6 +1245,17 @@ void kgsl_pwrctrl_wake(struct kgsl_device *device)
|
||||
case KGSL_STATE_SLEEP:
|
||||
kgsl_pwrctrl_axi(device, KGSL_PWRFLAGS_ON);
|
||||
kgsl_pwrscale_wake(device);
|
||||
kgsl_sharedmem_readl(&device->memstore,
|
||||
(unsigned int *) &context_id,
|
||||
KGSL_MEMSTORE_OFFSET(KGSL_MEMSTORE_GLOBAL,
|
||||
current_context));
|
||||
context = idr_find(&device->context_idr, context_id);
|
||||
if (context)
|
||||
ts_processed = kgsl_readtimestamp(device, context,
|
||||
KGSL_TIMESTAMP_RETIRED);
|
||||
KGSL_PWR_INFO(device, "Wake from %s state. CTXT: %d RTRD TS: %08X\n",
|
||||
kgsl_pwrstate_to_str(state),
|
||||
context ? context->id : -1, ts_processed);
|
||||
/* fall through */
|
||||
case KGSL_STATE_NAP:
|
||||
/* Turn on the core clocks */
|
||||
|
||||
Reference in New Issue
Block a user