KBASE_TL_NDEP_ATOM_ATOM,
KBASE_TL_RDEP_ATOM_ATOM,
KBASE_TL_ATTRIB_ATOM_CONFIG,
+ KBASE_TL_ATTRIB_ATOM_PRIORITY,
+ KBASE_TL_ATTRIB_ATOM_STATE,
+ KBASE_TL_ATTRIB_ATOM_PRIORITY_CHANGE,
KBASE_TL_ATTRIB_AS_CONFIG,
+ KBASE_TL_EVENT_LPU_SOFTSTOP,
+ KBASE_TL_EVENT_ATOM_SOFTSTOP_EX,
+ KBASE_TL_EVENT_ATOM_SOFTSTOP_ISSUE,
/* Job dump specific events. */
KBASE_JD_GPU_SOFT_RESET
/* Message ids of trace events that are recorded in the auxiliary stream. */
enum tl_msg_id_aux {
KBASE_AUX_PM_STATE,
- KBASE_AUX_ISSUE_JOB_SOFTSTOP,
- KBASE_AUX_JOB_SOFTSTOP,
- KBASE_AUX_JOB_SOFTSTOP_EX,
KBASE_AUX_PAGEFAULT,
- KBASE_AUX_PAGESALLOC
+ KBASE_AUX_PAGESALLOC,
+ KBASE_AUX_DEVFREQ_TARGET
};
/*****************************************************************************/
"@pLLI",
"atom,descriptor,affinity,config"
},
+ {
+ KBASE_TL_ATTRIB_ATOM_PRIORITY,
+ __stringify(KBASE_TL_ATTRIB_ATOM_PRIORITY),
+ "atom priority",
+ "@pI",
+ "atom,prio"
+ },
+ {
+ KBASE_TL_ATTRIB_ATOM_STATE,
+ __stringify(KBASE_TL_ATTRIB_ATOM_STATE),
+ "atom state",
+ "@pI",
+ "atom,state"
+ },
+ {
+ KBASE_TL_ATTRIB_ATOM_PRIORITY_CHANGE,
+ __stringify(KBASE_TL_ATTRIB_ATOM_PRIORITY_CHANGE),
+ "atom caused priority change",
+ "@p",
+ "atom"
+ },
{
KBASE_TL_ATTRIB_AS_CONFIG,
__stringify(KBASE_TL_ATTRIB_AS_CONFIG),
"@pLLL",
"address_space,transtab,memattr,transcfg"
},
+ {
+ KBASE_TL_EVENT_LPU_SOFTSTOP,
+ __stringify(KBASE_TL_EVENT_LPU_SOFTSTOP),
+ "softstop event on given lpu",
+ "@p",
+ "lpu"
+ },
+ {
+ KBASE_TL_EVENT_ATOM_SOFTSTOP_EX,
+ __stringify(KBASE_TL_EVENT_ATOM_SOFTSTOP_EX),
+ "atom softstopped",
+ "@p",
+ "atom"
+ },
+ {
+ KBASE_TL_EVENT_ATOM_SOFTSTOP_ISSUE,
+ __stringify(KBASE_TL_EVENT_SOFTSTOP_ISSUE),
+ "atom softstop issued",
+ "@p",
+ "atom"
+ },
{
KBASE_JD_GPU_SOFT_RESET,
__stringify(KBASE_JD_GPU_SOFT_RESET),
"@IL",
"core_type,core_state_bitset"
},
- {
- KBASE_AUX_ISSUE_JOB_SOFTSTOP,
- __stringify(KBASE_AUX_ISSUE_JOB_SOFTSTOP),
- "Issuing job soft stop",
- "@p",
- "atom"
- },
- {
- KBASE_AUX_JOB_SOFTSTOP,
- __stringify(KBASE_AUX_JOB_SOFTSTOP),
- "Job soft stop",
- "@I",
- "tag_id"
- },
- {
- KBASE_AUX_JOB_SOFTSTOP_EX,
- __stringify(KBASE_AUX_JOB_SOFTSTOP_EX),
- "Job soft stop, more details",
- "@pI",
- "atom,job_type"
- },
{
KBASE_AUX_PAGEFAULT,
__stringify(KBASE_AUX_PAGEFAULT),
"Total alloc pages change",
"@IL",
"ctx_nr,page_cnt"
+ },
+ {
+ KBASE_AUX_DEVFREQ_TARGET,
+ __stringify(KBASE_AUX_DEVFREQ_TARGET),
+ "New device frequency target",
+ "@L",
+ "target_freq"
}
};
ssize_t copy_len = 0;
KBASE_DEBUG_ASSERT(filp);
- KBASE_DEBUG_ASSERT(buffer);
KBASE_DEBUG_ASSERT(f_pos);
- CSTD_UNUSED(filp);
+
+ if (!buffer)
+ return -EINVAL;
if ((0 > *f_pos) || (PACKET_SIZE > size))
return -EINVAL;
}
}
-int kbase_tlstream_acquire(struct kbase_context *kctx, int *fd)
+int kbase_tlstream_acquire(struct kbase_context *kctx, int *fd, u32 flags)
{
- if (0 == atomic_cmpxchg(&kbase_tlstream_enabled, 0, 1)) {
+ u32 tlstream_enabled = TLSTREAM_ENABLED | flags;
+
+ if (0 == atomic_cmpxchg(&kbase_tlstream_enabled, 0, tlstream_enabled)) {
int rcode;
*fd = anon_inode_getfd(
void __kbase_tlstream_tl_new_atom(void *atom, u32 nr)
{
const u32 msg_id = KBASE_TL_NEW_ATOM;
- const size_t msg_size =
- sizeof(msg_id) + sizeof(u64) + sizeof(atom) + sizeof(nr);
+ const size_t msg_size = sizeof(msg_id) + sizeof(u64) + sizeof(atom) +
+ sizeof(nr);
unsigned long flags;
char *buffer;
size_t pos = 0;
kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
}
+void __kbase_tlstream_tl_attrib_atom_priority(void *atom, u32 prio)
+{
+ const u32 msg_id = KBASE_TL_ATTRIB_ATOM_PRIORITY;
+ const size_t msg_size =
+ sizeof(msg_id) + sizeof(u64) + sizeof(atom) + sizeof(prio);
+ unsigned long flags;
+ char *buffer;
+ size_t pos = 0;
+
+ buffer = kbasep_tlstream_msgbuf_acquire(
+ TL_STREAM_TYPE_OBJ,
+ msg_size, &flags);
+ KBASE_DEBUG_ASSERT(buffer);
+
+ pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
+ pos = kbasep_tlstream_write_timestamp(buffer, pos);
+ pos = kbasep_tlstream_write_bytes(
+ buffer, pos, &atom, sizeof(atom));
+ pos = kbasep_tlstream_write_bytes(
+ buffer, pos, &prio, sizeof(prio));
+ KBASE_DEBUG_ASSERT(msg_size == pos);
+
+ kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
+}
+
+void __kbase_tlstream_tl_attrib_atom_state(void *atom, u32 state)
+{
+ const u32 msg_id = KBASE_TL_ATTRIB_ATOM_STATE;
+ const size_t msg_size =
+ sizeof(msg_id) + sizeof(u64) + sizeof(atom) + sizeof(state);
+ unsigned long flags;
+ char *buffer;
+ size_t pos = 0;
+
+ buffer = kbasep_tlstream_msgbuf_acquire(
+ TL_STREAM_TYPE_OBJ,
+ msg_size, &flags);
+ KBASE_DEBUG_ASSERT(buffer);
+
+ pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
+ pos = kbasep_tlstream_write_timestamp(buffer, pos);
+ pos = kbasep_tlstream_write_bytes(
+ buffer, pos, &atom, sizeof(atom));
+ pos = kbasep_tlstream_write_bytes(
+ buffer, pos, &state, sizeof(state));
+ KBASE_DEBUG_ASSERT(msg_size == pos);
+
+ kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
+}
+
+void __kbase_tlstream_tl_attrib_atom_priority_change(void *atom)
+{
+ const u32 msg_id = KBASE_TL_ATTRIB_ATOM_PRIORITY_CHANGE;
+ const size_t msg_size =
+ sizeof(msg_id) + sizeof(u64) + sizeof(atom);
+ unsigned long flags;
+ char *buffer;
+ size_t pos = 0;
+
+ buffer = kbasep_tlstream_msgbuf_acquire(
+ TL_STREAM_TYPE_OBJ,
+ msg_size, &flags);
+ KBASE_DEBUG_ASSERT(buffer);
+
+ pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
+ pos = kbasep_tlstream_write_timestamp(buffer, pos);
+ pos = kbasep_tlstream_write_bytes(
+ buffer, pos, &atom, sizeof(atom));
+ KBASE_DEBUG_ASSERT(msg_size == pos);
+
+ kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
+}
+
void __kbase_tlstream_tl_attrib_as_config(
void *as, u64 transtab, u64 memattr, u64 transcfg)
{
kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
}
-void __kbase_tlstream_jd_gpu_soft_reset(void *gpu)
+void __kbase_tlstream_tl_event_lpu_softstop(void *lpu)
{
- const u32 msg_id = KBASE_JD_GPU_SOFT_RESET;
+ const u32 msg_id = KBASE_TL_EVENT_LPU_SOFTSTOP;
const size_t msg_size =
- sizeof(msg_id) + sizeof(u64) + sizeof(gpu);
+ sizeof(msg_id) + sizeof(u64) + sizeof(lpu);
unsigned long flags;
char *buffer;
size_t pos = 0;
pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
pos = kbasep_tlstream_write_timestamp(buffer, pos);
pos = kbasep_tlstream_write_bytes(
- buffer, pos, &gpu, sizeof(gpu));
+ buffer, pos, &lpu, sizeof(lpu));
KBASE_DEBUG_ASSERT(msg_size == pos);
kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
}
-/*****************************************************************************/
-
-void __kbase_tlstream_aux_pm_state(u32 core_type, u64 state)
+void __kbase_tlstream_tl_event_atom_softstop_ex(void *atom)
{
- const u32 msg_id = KBASE_AUX_PM_STATE;
+ const u32 msg_id = KBASE_TL_EVENT_ATOM_SOFTSTOP_EX;
const size_t msg_size =
- sizeof(msg_id) + sizeof(u64) + sizeof(core_type) +
- sizeof(state);
+ sizeof(msg_id) + sizeof(u64) + sizeof(atom);
unsigned long flags;
char *buffer;
size_t pos = 0;
buffer = kbasep_tlstream_msgbuf_acquire(
- TL_STREAM_TYPE_AUX,
+ TL_STREAM_TYPE_OBJ,
msg_size, &flags);
KBASE_DEBUG_ASSERT(buffer);
pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
pos = kbasep_tlstream_write_timestamp(buffer, pos);
pos = kbasep_tlstream_write_bytes(
- buffer, pos, &core_type, sizeof(core_type));
- pos = kbasep_tlstream_write_bytes(buffer, pos, &state, sizeof(state));
+ buffer, pos, &atom, sizeof(atom));
KBASE_DEBUG_ASSERT(msg_size == pos);
- kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags);
+ kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
}
-void __kbase_tlstream_aux_issue_job_softstop(void *katom)
+void __kbase_tlstream_tl_event_atom_softstop_issue(void *atom)
{
- const u32 msg_id = KBASE_AUX_ISSUE_JOB_SOFTSTOP;
+ const u32 msg_id = KBASE_TL_EVENT_ATOM_SOFTSTOP_ISSUE;
const size_t msg_size =
- sizeof(msg_id) + sizeof(u64) + sizeof(katom);
+ sizeof(msg_id) + sizeof(u64) + sizeof(atom);
unsigned long flags;
char *buffer;
size_t pos = 0;
buffer = kbasep_tlstream_msgbuf_acquire(
- TL_STREAM_TYPE_AUX, msg_size, &flags);
+ TL_STREAM_TYPE_OBJ,
+ msg_size, &flags);
KBASE_DEBUG_ASSERT(buffer);
pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
pos = kbasep_tlstream_write_timestamp(buffer, pos);
- pos = kbasep_tlstream_write_bytes(buffer, pos, &katom, sizeof(katom));
+ pos = kbasep_tlstream_write_bytes(
+ buffer, pos, &atom, sizeof(atom));
KBASE_DEBUG_ASSERT(msg_size == pos);
- kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags);
+ kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
}
-void __kbase_tlstream_aux_job_softstop(u32 js_id)
+void __kbase_tlstream_jd_gpu_soft_reset(void *gpu)
{
- const u32 msg_id = KBASE_AUX_JOB_SOFTSTOP;
+ const u32 msg_id = KBASE_JD_GPU_SOFT_RESET;
const size_t msg_size =
- sizeof(msg_id) + sizeof(u64) + sizeof(js_id);
+ sizeof(msg_id) + sizeof(u64) + sizeof(gpu);
unsigned long flags;
char *buffer;
size_t pos = 0;
buffer = kbasep_tlstream_msgbuf_acquire(
- TL_STREAM_TYPE_AUX,
+ TL_STREAM_TYPE_OBJ,
msg_size, &flags);
KBASE_DEBUG_ASSERT(buffer);
pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
pos = kbasep_tlstream_write_timestamp(buffer, pos);
- pos = kbasep_tlstream_write_bytes(buffer, pos, &js_id, sizeof(js_id));
+ pos = kbasep_tlstream_write_bytes(
+ buffer, pos, &gpu, sizeof(gpu));
KBASE_DEBUG_ASSERT(msg_size == pos);
- kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags);
+ kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags);
}
-/**
- * __kbase_tlstream_aux_job_softstop_ex_record - record the trace point
- * @katom: the atom that has been soft-stopped
- * @job_type: the job type
- */
-static void __kbase_tlstream_aux_job_softstop_ex_record(
- void *katom, u32 job_type)
+/*****************************************************************************/
+
+void __kbase_tlstream_aux_pm_state(u32 core_type, u64 state)
{
- const u32 msg_id = KBASE_AUX_JOB_SOFTSTOP_EX;
+ const u32 msg_id = KBASE_AUX_PM_STATE;
const size_t msg_size =
- sizeof(msg_id) + sizeof(u64) + sizeof(katom) + sizeof(job_type);
+ sizeof(msg_id) + sizeof(u64) + sizeof(core_type) +
+ sizeof(state);
unsigned long flags;
char *buffer;
size_t pos = 0;
buffer = kbasep_tlstream_msgbuf_acquire(
- TL_STREAM_TYPE_AUX, msg_size, &flags);
+ TL_STREAM_TYPE_AUX,
+ msg_size, &flags);
KBASE_DEBUG_ASSERT(buffer);
pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
pos = kbasep_tlstream_write_timestamp(buffer, pos);
- pos = kbasep_tlstream_write_bytes(buffer, pos, &katom, sizeof(katom));
pos = kbasep_tlstream_write_bytes(
- buffer, pos, &job_type, sizeof(job_type));
+ buffer, pos, &core_type, sizeof(core_type));
+ pos = kbasep_tlstream_write_bytes(buffer, pos, &state, sizeof(state));
KBASE_DEBUG_ASSERT(msg_size == pos);
kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags);
}
-void __kbase_tlstream_aux_job_softstop_ex(struct kbase_jd_atom *katom)
-{
- struct kbase_context *kctx = katom->kctx;
- u64 jd = katom->jc;
-
- while (jd != 0) {
- struct job_descriptor_header *job;
- struct kbase_vmap_struct map;
-
- job = kbase_vmap(kctx, jd, sizeof(*job), &map);
- if (!job) {
- dev_err(kctx->kbdev->dev,
- "__kbase_tlstream_aux_job_softstop_ex: failed to map job descriptor 0x%llx for atom 0x%p\n",
- jd, (void *)katom);
- break;
- }
- if (job->exception_status != BASE_JD_EVENT_STOPPED) {
- kbase_vunmap(kctx, &map);
- break;
- }
-
- __kbase_tlstream_aux_job_softstop_ex_record(
- katom, job->job_type);
-
- jd = job->job_descriptor_size ?
- job->next_job._64 : job->next_job._32;
- kbase_vunmap(kctx, &map);
- }
-}
-
void __kbase_tlstream_aux_pagefault(u32 ctx_nr, u64 page_count_change)
{
const u32 msg_id = KBASE_AUX_PAGEFAULT;
kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags);
}
+void __kbase_tlstream_aux_devfreq_target(u64 target_freq)
+{
+ const u32 msg_id = KBASE_AUX_DEVFREQ_TARGET;
+ const size_t msg_size =
+ sizeof(msg_id) + sizeof(u64) + sizeof(target_freq);
+ unsigned long flags;
+ char *buffer;
+ size_t pos = 0;
+
+ buffer = kbasep_tlstream_msgbuf_acquire(
+ TL_STREAM_TYPE_AUX, msg_size, &flags);
+ KBASE_DEBUG_ASSERT(buffer);
+
+ pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id));
+ pos = kbasep_tlstream_write_timestamp(buffer, pos);
+ pos = kbasep_tlstream_write_bytes(
+ buffer, pos, &target_freq, sizeof(target_freq));
+ KBASE_DEBUG_ASSERT(msg_size == pos);
+
+ kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags);
+}
+