|
@@ -378,6 +378,8 @@ struct msm_gpu_state *adreno_gpu_state_get(struct msm_gpu *gpu)
|
|
if (!state)
|
|
if (!state)
|
|
return ERR_PTR(-ENOMEM);
|
|
return ERR_PTR(-ENOMEM);
|
|
|
|
|
|
|
|
+ kref_init(&state->ref);
|
|
|
|
+
|
|
do_gettimeofday(&state->time);
|
|
do_gettimeofday(&state->time);
|
|
|
|
|
|
for (i = 0; i < gpu->nr_rings; i++) {
|
|
for (i = 0; i < gpu->nr_rings; i++) {
|
|
@@ -414,18 +416,28 @@ struct msm_gpu_state *adreno_gpu_state_get(struct msm_gpu *gpu)
|
|
return state;
|
|
return state;
|
|
}
|
|
}
|
|
|
|
|
|
-void adreno_gpu_state_put(struct msm_gpu_state *state)
|
|
|
|
|
|
+static void adreno_gpu_state_destroy(struct kref *kref)
|
|
{
|
|
{
|
|
- if (IS_ERR_OR_NULL(state))
|
|
|
|
- return;
|
|
|
|
|
|
+ struct msm_gpu_state *state = container_of(kref,
|
|
|
|
+ struct msm_gpu_state, ref);
|
|
|
|
|
|
|
|
+ kfree(state->comm);
|
|
|
|
+ kfree(state->cmd);
|
|
kfree(state->registers);
|
|
kfree(state->registers);
|
|
kfree(state);
|
|
kfree(state);
|
|
}
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_DEBUG_FS
|
|
|
|
|
|
+int adreno_gpu_state_put(struct msm_gpu_state *state)
|
|
|
|
+{
|
|
|
|
+ if (IS_ERR_OR_NULL(state))
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
|
|
+ return kref_put(&state->ref, adreno_gpu_state_destroy);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
|
void adreno_show(struct msm_gpu *gpu, struct msm_gpu_state *state,
|
|
void adreno_show(struct msm_gpu *gpu, struct msm_gpu_state *state,
|
|
- struct seq_file *m)
|
|
|
|
|
|
+ struct drm_printer *p)
|
|
{
|
|
{
|
|
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
|
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
|
int i;
|
|
int i;
|
|
@@ -433,23 +445,23 @@ void adreno_show(struct msm_gpu *gpu, struct msm_gpu_state *state,
|
|
if (IS_ERR_OR_NULL(state))
|
|
if (IS_ERR_OR_NULL(state))
|
|
return;
|
|
return;
|
|
|
|
|
|
- seq_printf(m, "status: %08x\n", state->rbbm_status);
|
|
|
|
- seq_printf(m, "revision: %d (%d.%d.%d.%d)\n",
|
|
|
|
|
|
+ drm_printf(p, "status: %08x\n", state->rbbm_status);
|
|
|
|
+ drm_printf(p, "revision: %d (%d.%d.%d.%d)\n",
|
|
adreno_gpu->info->revn, adreno_gpu->rev.core,
|
|
adreno_gpu->info->revn, adreno_gpu->rev.core,
|
|
adreno_gpu->rev.major, adreno_gpu->rev.minor,
|
|
adreno_gpu->rev.major, adreno_gpu->rev.minor,
|
|
adreno_gpu->rev.patchid);
|
|
adreno_gpu->rev.patchid);
|
|
|
|
|
|
for (i = 0; i < gpu->nr_rings; i++) {
|
|
for (i = 0; i < gpu->nr_rings; i++) {
|
|
- seq_printf(m, "rb %d: fence: %d/%d\n", i,
|
|
|
|
|
|
+ drm_printf(p, "rb %d: fence: %d/%d\n", i,
|
|
state->ring[i].fence, state->ring[i].seqno);
|
|
state->ring[i].fence, state->ring[i].seqno);
|
|
|
|
|
|
- seq_printf(m, " rptr: %d\n", state->ring[i].rptr);
|
|
|
|
- seq_printf(m, "rb wptr: %d\n", state->ring[i].wptr);
|
|
|
|
|
|
+ drm_printf(p, " rptr: %d\n", state->ring[i].rptr);
|
|
|
|
+ drm_printf(p, "rb wptr: %d\n", state->ring[i].wptr);
|
|
}
|
|
}
|
|
|
|
|
|
- seq_printf(m, "IO:region %s 00000000 00020000\n", gpu->name);
|
|
|
|
|
|
+ drm_printf(p, "IO:region %s 00000000 00020000\n", gpu->name);
|
|
for (i = 0; i < state->nr_registers; i++) {
|
|
for (i = 0; i < state->nr_registers; i++) {
|
|
- seq_printf(m, "IO:R %08x %08x\n",
|
|
|
|
|
|
+ drm_printf(p, "IO:R %08x %08x\n",
|
|
state->registers[i * 2] << 2,
|
|
state->registers[i * 2] << 2,
|
|
state->registers[(i * 2) + 1]);
|
|
state->registers[(i * 2) + 1]);
|
|
}
|
|
}
|