/*
|
* Copyright (C) 2013, 2015-2017 ARM Limited. All rights reserved.
|
*
|
* This program is free software and is provided to you under the terms of the GNU General Public License version 2
|
* as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence.
|
*
|
* A copy of the licence is included with the program, and can also be obtained from Free Software
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
*/
|
|
#ifndef __MALI_UTGARD_PROFILING_GATOR_API_H__
|
#define __MALI_UTGARD_PROFILING_GATOR_API_H__
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
#define MALI_PROFILING_API_VERSION 4
|
|
#define MAX_NUM_L2_CACHE_CORES 3
|
#define MAX_NUM_FP_CORES 8
|
#define MAX_NUM_VP_CORES 1
|
|
#define _MALI_SPCIAL_COUNTER_DESCRIPTIONS \
|
{ \
|
"Filmstrip_cnt0", \
|
"Frequency", \
|
"Voltage", \
|
"vertex", \
|
"fragment", \
|
"Total_alloc_pages", \
|
};
|
|
#define _MALI_MEM_COUTNER_DESCRIPTIONS \
|
{ \
|
"untyped_memory", \
|
"vertex_index_buffer", \
|
"texture_buffer", \
|
"varying_buffer", \
|
"render_target", \
|
"pbuffer_buffer", \
|
"plbu_heap", \
|
"pointer_array_buffer", \
|
"slave_tilelist", \
|
"untyped_gp_cmdlist", \
|
"polygon_cmdlist", \
|
"texture_descriptor", \
|
"render_state_word", \
|
"shader", \
|
"stream_buffer", \
|
"fragment_stack", \
|
"uniform", \
|
"untyped_frame_pool", \
|
"untyped_surface", \
|
};
|
|
/** The list of events supported by the Mali DDK. */
|
typedef enum {
|
/* Vertex processor activity */
|
ACTIVITY_VP_0 = 0,
|
|
/* Fragment processor activity */
|
ACTIVITY_FP_0,
|
ACTIVITY_FP_1,
|
ACTIVITY_FP_2,
|
ACTIVITY_FP_3,
|
ACTIVITY_FP_4,
|
ACTIVITY_FP_5,
|
ACTIVITY_FP_6,
|
ACTIVITY_FP_7,
|
|
/* L2 cache counters */
|
COUNTER_L2_0_C0,
|
COUNTER_L2_0_C1,
|
COUNTER_L2_1_C0,
|
COUNTER_L2_1_C1,
|
COUNTER_L2_2_C0,
|
COUNTER_L2_2_C1,
|
|
/* Vertex processor counters */
|
COUNTER_VP_0_C0,
|
COUNTER_VP_0_C1,
|
|
/* Fragment processor counters */
|
COUNTER_FP_0_C0,
|
COUNTER_FP_0_C1,
|
COUNTER_FP_1_C0,
|
COUNTER_FP_1_C1,
|
COUNTER_FP_2_C0,
|
COUNTER_FP_2_C1,
|
COUNTER_FP_3_C0,
|
COUNTER_FP_3_C1,
|
COUNTER_FP_4_C0,
|
COUNTER_FP_4_C1,
|
COUNTER_FP_5_C0,
|
COUNTER_FP_5_C1,
|
COUNTER_FP_6_C0,
|
COUNTER_FP_6_C1,
|
COUNTER_FP_7_C0,
|
COUNTER_FP_7_C1,
|
|
/*
|
* If more hardware counters are added, the _mali_osk_hw_counter_table
|
* below should also be updated.
|
*/
|
|
/* EGL software counters */
|
COUNTER_EGL_BLIT_TIME,
|
|
/* GLES software counters */
|
COUNTER_GLES_DRAW_ELEMENTS_CALLS,
|
COUNTER_GLES_DRAW_ELEMENTS_NUM_INDICES,
|
COUNTER_GLES_DRAW_ELEMENTS_NUM_TRANSFORMED,
|
COUNTER_GLES_DRAW_ARRAYS_CALLS,
|
COUNTER_GLES_DRAW_ARRAYS_NUM_TRANSFORMED,
|
COUNTER_GLES_DRAW_POINTS,
|
COUNTER_GLES_DRAW_LINES,
|
COUNTER_GLES_DRAW_LINE_LOOP,
|
COUNTER_GLES_DRAW_LINE_STRIP,
|
COUNTER_GLES_DRAW_TRIANGLES,
|
COUNTER_GLES_DRAW_TRIANGLE_STRIP,
|
COUNTER_GLES_DRAW_TRIANGLE_FAN,
|
COUNTER_GLES_NON_VBO_DATA_COPY_TIME,
|
COUNTER_GLES_UNIFORM_BYTES_COPIED_TO_MALI,
|
COUNTER_GLES_UPLOAD_TEXTURE_TIME,
|
COUNTER_GLES_UPLOAD_VBO_TIME,
|
COUNTER_GLES_NUM_FLUSHES,
|
COUNTER_GLES_NUM_VSHADERS_GENERATED,
|
COUNTER_GLES_NUM_FSHADERS_GENERATED,
|
COUNTER_GLES_VSHADER_GEN_TIME,
|
COUNTER_GLES_FSHADER_GEN_TIME,
|
COUNTER_GLES_INPUT_TRIANGLES,
|
COUNTER_GLES_VXCACHE_HIT,
|
COUNTER_GLES_VXCACHE_MISS,
|
COUNTER_GLES_VXCACHE_COLLISION,
|
COUNTER_GLES_CULLED_TRIANGLES,
|
COUNTER_GLES_CULLED_LINES,
|
COUNTER_GLES_BACKFACE_TRIANGLES,
|
COUNTER_GLES_GBCLIP_TRIANGLES,
|
COUNTER_GLES_GBCLIP_LINES,
|
COUNTER_GLES_TRIANGLES_DRAWN,
|
COUNTER_GLES_DRAWCALL_TIME,
|
COUNTER_GLES_TRIANGLES_COUNT,
|
COUNTER_GLES_INDEPENDENT_TRIANGLES_COUNT,
|
COUNTER_GLES_STRIP_TRIANGLES_COUNT,
|
COUNTER_GLES_FAN_TRIANGLES_COUNT,
|
COUNTER_GLES_LINES_COUNT,
|
COUNTER_GLES_INDEPENDENT_LINES_COUNT,
|
COUNTER_GLES_STRIP_LINES_COUNT,
|
COUNTER_GLES_LOOP_LINES_COUNT,
|
|
/* Special counter */
|
|
/* Framebuffer capture pseudo-counter */
|
COUNTER_FILMSTRIP,
|
COUNTER_FREQUENCY,
|
COUNTER_VOLTAGE,
|
COUNTER_VP_ACTIVITY,
|
COUNTER_FP_ACTIVITY,
|
COUNTER_TOTAL_ALLOC_PAGES,
|
|
/* Memory usage counter */
|
COUNTER_MEM_UNTYPED,
|
COUNTER_MEM_VB_IB,
|
COUNTER_MEM_TEXTURE,
|
COUNTER_MEM_VARYING,
|
COUNTER_MEM_RT,
|
COUNTER_MEM_PBUFFER,
|
/* memory usages for gp command */
|
COUNTER_MEM_PLBU_HEAP,
|
COUNTER_MEM_POINTER_ARRAY,
|
COUNTER_MEM_SLAVE_TILELIST,
|
COUNTER_MEM_UNTYPE_GP_CMDLIST,
|
/* memory usages for polygon list command */
|
COUNTER_MEM_POLYGON_CMDLIST,
|
/* memory usages for pp command */
|
COUNTER_MEM_TD,
|
COUNTER_MEM_RSW,
|
/* other memory usages */
|
COUNTER_MEM_SHADER,
|
COUNTER_MEM_STREAMS,
|
COUNTER_MEM_FRAGMENT_STACK,
|
COUNTER_MEM_UNIFORM,
|
/* Special mem usage, which is used for mem pool allocation */
|
COUNTER_MEM_UNTYPE_MEM_POOL,
|
COUNTER_MEM_UNTYPE_SURFACE,
|
|
NUMBER_OF_EVENTS
|
} _mali_osk_counter_id;
|
|
#define FIRST_ACTIVITY_EVENT ACTIVITY_VP_0
|
#define LAST_ACTIVITY_EVENT ACTIVITY_FP_7
|
|
#define FIRST_HW_COUNTER COUNTER_L2_0_C0
|
#define LAST_HW_COUNTER COUNTER_FP_7_C1
|
|
#define FIRST_SW_COUNTER COUNTER_EGL_BLIT_TIME
|
#define LAST_SW_COUNTER COUNTER_GLES_LOOP_LINES_COUNT
|
|
#define FIRST_SPECIAL_COUNTER COUNTER_FILMSTRIP
|
#define LAST_SPECIAL_COUNTER COUNTER_TOTAL_ALLOC_PAGES
|
|
#define FIRST_MEM_COUNTER COUNTER_MEM_UNTYPED
|
#define LAST_MEM_COUNTER COUNTER_MEM_UNTYPE_SURFACE
|
|
#define MALI_PROFILING_MEM_COUNTERS_NUM (LAST_MEM_COUNTER - FIRST_MEM_COUNTER + 1)
|
#define MALI_PROFILING_SPECIAL_COUNTERS_NUM (LAST_SPECIAL_COUNTER - FIRST_SPECIAL_COUNTER + 1)
|
#define MALI_PROFILING_SW_COUNTERS_NUM (LAST_SW_COUNTER - FIRST_SW_COUNTER + 1)
|
|
/**
|
* Define the stream header type for porfiling stream.
|
*/
|
#define STREAM_HEADER_FRAMEBUFFER 0x05 /* The stream packet header type for framebuffer dumping. */
|
#define STREAM_HEADER_COUNTER_VALUE 0x09 /* The stream packet header type for hw/sw/memory counter sampling. */
|
#define STREAM_HEADER_CORE_ACTIVITY 0x0a /* The stream packet header type for activity counter sampling. */
|
#define STREAM_HEADER_SIZE 5
|
|
/**
|
* Define the packet header type of profiling control packet.
|
*/
|
#define PACKET_HEADER_ERROR 0x80 /* The response packet header type if error. */
|
#define PACKET_HEADER_ACK 0x81 /* The response packet header type if OK. */
|
#define PACKET_HEADER_COUNTERS_REQUEST 0x82 /* The control packet header type to request counter information from ddk. */
|
#define PACKET_HEADER_COUNTERS_ACK 0x83 /* The response packet header type to send out counter information. */
|
#define PACKET_HEADER_COUNTERS_ENABLE 0x84 /* The control packet header type to enable counters. */
|
#define PACKET_HEADER_START_CAPTURE_VALUE 0x85 /* The control packet header type to start capture values. */
|
|
#define PACKET_HEADER_SIZE 5
|
|
/**
|
* Structure to pass performance counter data of a Mali core
|
*/
|
typedef struct _mali_profiling_core_counters {
|
u32 source0;
|
u32 value0;
|
u32 source1;
|
u32 value1;
|
} _mali_profiling_core_counters;
|
|
/**
|
* Structure to pass performance counter data of Mali L2 cache cores
|
*/
|
typedef struct _mali_profiling_l2_counter_values {
|
struct _mali_profiling_core_counters cores[MAX_NUM_L2_CACHE_CORES];
|
} _mali_profiling_l2_counter_values;
|
|
/**
|
* Structure to pass data defining Mali instance in use:
|
*
|
* mali_product_id - Mali product id
|
* mali_version_major - Mali version major number
|
* mali_version_minor - Mali version minor number
|
* num_of_l2_cores - number of L2 cache cores
|
* num_of_fp_cores - number of fragment processor cores
|
* num_of_vp_cores - number of vertex processor cores
|
*/
|
typedef struct _mali_profiling_mali_version {
|
u32 mali_product_id;
|
u32 mali_version_major;
|
u32 mali_version_minor;
|
u32 num_of_l2_cores;
|
u32 num_of_fp_cores;
|
u32 num_of_vp_cores;
|
} _mali_profiling_mali_version;
|
|
/**
|
* Structure to define the mali profiling counter struct.
|
*/
|
typedef struct mali_profiling_counter {
|
char counter_name[40];
|
u32 counter_id;
|
u32 counter_event;
|
u32 prev_counter_value;
|
u32 current_counter_value;
|
u32 key;
|
int enabled;
|
} mali_profiling_counter;
|
|
/*
|
* List of possible actions to be controlled by Streamline.
|
* The following numbers are used by gator to control the frame buffer dumping and s/w counter reporting.
|
* We cannot use the enums in mali_uk_types.h because they are unknown inside gator.
|
*/
|
#define FBDUMP_CONTROL_ENABLE (1)
|
#define FBDUMP_CONTROL_RATE (2)
|
#define SW_COUNTER_ENABLE (3)
|
#define FBDUMP_CONTROL_RESIZE_FACTOR (4)
|
#define MEM_COUNTER_ENABLE (5)
|
#define ANNOTATE_PROFILING_ENABLE (6)
|
|
void _mali_profiling_control(u32 action, u32 value);
|
|
u32 _mali_profiling_get_l2_counters(_mali_profiling_l2_counter_values *values);
|
|
int _mali_profiling_set_event(u32 counter_id, s32 event_id);
|
|
u32 _mali_profiling_get_api_version(void);
|
|
void _mali_profiling_get_mali_version(struct _mali_profiling_mali_version *values);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif /* __MALI_UTGARD_PROFILING_GATOR_API_H__ */
|