static int profiling_events_show(struct seq_file *seq_file, void *v) { loff_t *spos = v; u32 index; u64 timestamp; u32 event_id; u32 data[5]; index = (u32)*spos; /* Retrieve all events */ if (_MALI_OSK_ERR_OK == _mali_internal_profiling_get_event(index, ×tamp, &event_id, data)) { seq_printf(seq_file, "%llu %u %u %u %u %u %u\n", timestamp, event_id, data[0], data[1], data[2], data[3], data[4]); return 0; } return 0; }
static int profiling_events_show_human_readable(struct seq_file *seq_file, void *v) { #define MALI_EVENT_ID_IS_HW(event_id) (((event_id & 0x00FF0000) >= MALI_PROFILING_EVENT_CHANNEL_GP0) && ((event_id & 0x00FF0000) <= MALI_PROFILING_EVENT_CHANNEL_PP7)) static u64 start_time = 0; loff_t *spos = v; u32 index; u64 timestamp; u32 event_id; u32 data[5]; index = (u32) * spos; /* Retrieve all events */ if (_MALI_OSK_ERR_OK == _mali_internal_profiling_get_event(index, ×tamp, &event_id, data)) { seq_printf(seq_file, "%llu %u %u %u %u %u %u # ", timestamp, event_id, data[0], data[1], data[2], data[3], data[4]); if (0 == index) { start_time = timestamp; } seq_printf(seq_file, "[%06u] ", index); switch (event_id & 0x0F000000) { case MALI_PROFILING_EVENT_TYPE_SINGLE: seq_printf(seq_file, "SINGLE | "); break; case MALI_PROFILING_EVENT_TYPE_START: seq_printf(seq_file, "START | "); break; case MALI_PROFILING_EVENT_TYPE_STOP: seq_printf(seq_file, "STOP | "); break; case MALI_PROFILING_EVENT_TYPE_SUSPEND: seq_printf(seq_file, "SUSPEND | "); break; case MALI_PROFILING_EVENT_TYPE_RESUME: seq_printf(seq_file, "RESUME | "); break; default: seq_printf(seq_file, "0x%01X | ", (event_id & 0x0F000000) >> 24); break; } switch (event_id & 0x00FF0000) { case MALI_PROFILING_EVENT_CHANNEL_SOFTWARE: seq_printf(seq_file, "SW | "); break; case MALI_PROFILING_EVENT_CHANNEL_GP0: seq_printf(seq_file, "GP0 | "); break; case MALI_PROFILING_EVENT_CHANNEL_PP0: seq_printf(seq_file, "PP0 | "); break; case MALI_PROFILING_EVENT_CHANNEL_PP1: seq_printf(seq_file, "PP1 | "); break; case MALI_PROFILING_EVENT_CHANNEL_PP2: seq_printf(seq_file, "PP2 | "); break; case MALI_PROFILING_EVENT_CHANNEL_PP3: seq_printf(seq_file, "PP3 | "); break; case MALI_PROFILING_EVENT_CHANNEL_PP4: seq_printf(seq_file, "PP4 | "); break; case MALI_PROFILING_EVENT_CHANNEL_PP5: seq_printf(seq_file, "PP5 | "); break; case MALI_PROFILING_EVENT_CHANNEL_PP6: seq_printf(seq_file, "PP6 | "); break; case MALI_PROFILING_EVENT_CHANNEL_PP7: seq_printf(seq_file, "PP7 | "); break; case MALI_PROFILING_EVENT_CHANNEL_GPU: seq_printf(seq_file, "GPU | "); break; default: seq_printf(seq_file, "0x%02X | ", (event_id & 0x00FF0000) >> 16); break; } if (MALI_EVENT_ID_IS_HW(event_id)) { if (((event_id & 0x0F000000) == MALI_PROFILING_EVENT_TYPE_START) || ((event_id & 0x0F000000) == MALI_PROFILING_EVENT_TYPE_STOP)) { switch (event_id & 0x0000FFFF) { case MALI_PROFILING_EVENT_REASON_START_STOP_HW_PHYSICAL: seq_printf(seq_file, "PHYSICAL | "); break; case MALI_PROFILING_EVENT_REASON_START_STOP_HW_VIRTUAL: seq_printf(seq_file, "VIRTUAL | "); break; default: seq_printf(seq_file, "0x%04X | ", event_id & 0x0000FFFF); break; } } else { seq_printf(seq_file, "0x%04X | ", event_id & 0x0000FFFF); } } else { seq_printf(seq_file, "0x%04X | ", event_id & 0x0000FFFF); } seq_printf(seq_file, "T0 + 0x%016llX\n", timestamp - start_time); return 0; }