FILE
css_trace.h
File preview with syntax highlighting.
linux-6.19.14/drivers/staging/media/atomisp/pci/css_trace.h
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Support for Intel Camera Imaging ISP subsystem. 4 * Copyright (c) 2015, Intel Corporation. 5 */ 6 7#ifndef __CSS_TRACE_H_ 8#define __CSS_TRACE_H_ 9 10#include <type_support.h> 11#include "sh_css_internal.h" /* for SH_CSS_MAX_SP_THREADS */ 12 13/* 14 structs and constants for tracing 15*/ 16 17/* one tracer item: major, minor and counter. The counter value can be used for GP data */ 18struct trace_item_t { 19 u8 major; 20 u8 minor; 21 u16 counter; 22}; 23 24#define MAX_SCRATCH_DATA 4 25#define MAX_CMD_DATA 2 26 27/* trace header: holds the version and the topology of the tracer. */ 28struct trace_header_t { 29 /* 1st dword: descriptor */ 30 u8 version; 31 u8 max_threads; 32 u16 max_tracer_points; 33 /* 2nd field: command + data */ 34 /* 2nd dword */ 35 u32 command; 36 /* 3rd & 4th dword */ 37 u32 data[MAX_CMD_DATA]; 38 /* 3rd field: debug pointer */ 39 /* 5th & 6th dword: debug pointer mechanism */ 40 u32 debug_ptr_signature; 41 u32 debug_ptr_value; 42 /* Rest of the header: status & scratch data */ 43 u8 thr_status_byte[SH_CSS_MAX_SP_THREADS]; 44 u16 thr_status_word[SH_CSS_MAX_SP_THREADS]; 45 u32 thr_status_dword[SH_CSS_MAX_SP_THREADS]; 46 u32 scratch_debug[MAX_SCRATCH_DATA]; 47}; 48 49/* offsets for master_port read/write */ 50#define HDR_HDR_OFFSET 0 /* offset of the header */ 51#define HDR_COMMAND_OFFSET offsetof(struct trace_header_t, command) 52#define HDR_DATA_OFFSET offsetof(struct trace_header_t, data) 53#define HDR_DEBUG_SIGNATURE_OFFSET offsetof(struct trace_header_t, debug_ptr_signature) 54#define HDR_DEBUG_POINTER_OFFSET offsetof(struct trace_header_t, debug_ptr_value) 55#define HDR_STATUS_OFFSET offsetof(struct trace_header_t, thr_status_byte) 56#define HDR_STATUS_OFFSET_BYTE offsetof(struct trace_header_t, thr_status_byte) 57#define HDR_STATUS_OFFSET_WORD offsetof(struct trace_header_t, thr_status_word) 58#define HDR_STATUS_OFFSET_DWORD offsetof(struct trace_header_t, thr_status_dword) 59#define HDR_STATUS_OFFSET_SCRATCH offsetof(struct trace_header_t, scratch_debug) 60 61/* 62Trace version history: 63 1: initial version, hdr = descr, command & ptr. 64 2: added ISP + 24-bit fields. 65 3: added thread ID. 66 4: added status in header. 67*/ 68#define TRACER_VER 4 69 70#define TRACE_BUFF_ADDR 0xA000 71#define TRACE_BUFF_SIZE 0x1000 /* 4K allocated */ 72 73#define TRACE_ENABLE_SP0 0 74#define TRACE_ENABLE_SP1 0 75#define TRACE_ENABLE_ISP 0 76 77enum TRACE_CORE_ID { 78 TRACE_SP0_ID, 79 TRACE_SP1_ID, 80 TRACE_ISP_ID 81}; 82 83/* TODO: add timing format? */ 84enum TRACE_DUMP_FORMAT { 85 TRACE_DUMP_FORMAT_POINT_NO_TID, 86 TRACE_DUMP_FORMAT_VALUE24, 87 TRACE_DUMP_FORMAT_VALUE24_TIMING, 88 TRACE_DUMP_FORMAT_VALUE24_TIMING_DELTA, 89 TRACE_DUMP_FORMAT_POINT 90}; 91 92/* currently divided as follows:*/ 93#if (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 3) 94/* can be divided as needed */ 95#define TRACE_SP0_SIZE (TRACE_BUFF_SIZE / 4) 96#define TRACE_SP1_SIZE (TRACE_BUFF_SIZE / 4) 97#define TRACE_ISP_SIZE (TRACE_BUFF_SIZE / 2) 98#elif (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 2) 99#if TRACE_ENABLE_SP0 100#define TRACE_SP0_SIZE (TRACE_BUFF_SIZE / 2) 101#else 102#define TRACE_SP0_SIZE (0) 103#endif 104#if TRACE_ENABLE_SP1 105#define TRACE_SP1_SIZE (TRACE_BUFF_SIZE / 2) 106#else 107#define TRACE_SP1_SIZE (0) 108#endif 109#if TRACE_ENABLE_ISP 110#define TRACE_ISP_SIZE (TRACE_BUFF_SIZE / 2) 111#else 112#define TRACE_ISP_SIZE (0) 113#endif 114#elif (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 1) 115#if TRACE_ENABLE_SP0 116#define TRACE_SP0_SIZE (TRACE_BUFF_SIZE) 117#else 118#define TRACE_SP0_SIZE (0) 119#endif 120#if TRACE_ENABLE_SP1 121#define TRACE_SP1_SIZE (TRACE_BUFF_SIZE) 122#else 123#define TRACE_SP1_SIZE (0) 124#endif 125#if TRACE_ENABLE_ISP 126#define TRACE_ISP_SIZE (TRACE_BUFF_SIZE) 127#else 128#define TRACE_ISP_SIZE (0) 129#endif 130#else 131#define TRACE_SP0_SIZE (0) 132#define TRACE_SP1_SIZE (0) 133#define TRACE_ISP_SIZE (0) 134#endif 135 136#define TRACE_SP0_ADDR (TRACE_BUFF_ADDR) 137#define TRACE_SP1_ADDR (TRACE_SP0_ADDR + TRACE_SP0_SIZE) 138#define TRACE_ISP_ADDR (TRACE_SP1_ADDR + TRACE_SP1_SIZE) 139 140/* check if it's a legal division */ 141#if (TRACE_BUFF_SIZE < TRACE_SP0_SIZE + TRACE_SP1_SIZE + TRACE_ISP_SIZE) 142#error trace sizes are not divided correctly and are above limit 143#endif 144 145#define TRACE_SP0_HEADER_ADDR (TRACE_SP0_ADDR) 146#define TRACE_SP0_HEADER_SIZE (sizeof(struct trace_header_t)) 147#define TRACE_SP0_ITEM_SIZE (sizeof(struct trace_item_t)) 148#define TRACE_SP0_DATA_ADDR (TRACE_SP0_HEADER_ADDR + TRACE_SP0_HEADER_SIZE) 149#define TRACE_SP0_DATA_SIZE (TRACE_SP0_SIZE - TRACE_SP0_HEADER_SIZE) 150#define TRACE_SP0_MAX_POINTS (TRACE_SP0_DATA_SIZE / TRACE_SP0_ITEM_SIZE) 151 152#define TRACE_SP1_HEADER_ADDR (TRACE_SP1_ADDR) 153#define TRACE_SP1_HEADER_SIZE (sizeof(struct trace_header_t)) 154#define TRACE_SP1_ITEM_SIZE (sizeof(struct trace_item_t)) 155#define TRACE_SP1_DATA_ADDR (TRACE_SP1_HEADER_ADDR + TRACE_SP1_HEADER_SIZE) 156#define TRACE_SP1_DATA_SIZE (TRACE_SP1_SIZE - TRACE_SP1_HEADER_SIZE) 157#define TRACE_SP1_MAX_POINTS (TRACE_SP1_DATA_SIZE / TRACE_SP1_ITEM_SIZE) 158 159#define TRACE_ISP_HEADER_ADDR (TRACE_ISP_ADDR) 160#define TRACE_ISP_HEADER_SIZE (sizeof(struct trace_header_t)) 161#define TRACE_ISP_ITEM_SIZE (sizeof(struct trace_item_t)) 162#define TRACE_ISP_DATA_ADDR (TRACE_ISP_HEADER_ADDR + TRACE_ISP_HEADER_SIZE) 163#define TRACE_ISP_DATA_SIZE (TRACE_ISP_SIZE - TRACE_ISP_HEADER_SIZE) 164#define TRACE_ISP_MAX_POINTS (TRACE_ISP_DATA_SIZE / TRACE_ISP_ITEM_SIZE) 165 166/* common majors */ 167/* SP0 */ 168#define MAJOR_MAIN 1 169#define MAJOR_ISP_STAGE_ENTRY 2 170#define MAJOR_DMA_PRXY 3 171#define MAJOR_START_ISP 4 172/* SP1 */ 173#define MAJOR_OBSERVER_ISP0_EVENT 21 174#define MAJOR_OBSERVER_OUTPUT_FORM_EVENT 22 175#define MAJOR_OBSERVER_OUTPUT_SCAL_EVENT 23 176#define MAJOR_OBSERVER_IF_ACK 24 177#define MAJOR_OBSERVER_SP0_EVENT 25 178#define MAJOR_OBSERVER_SP_TERMINATE_EVENT 26 179#define MAJOR_OBSERVER_DMA_ACK 27 180#define MAJOR_OBSERVER_ACC_ACK 28 181 182#define DEBUG_PTR_SIGNATURE 0xABCD /* signature for the debug parameter pointer */ 183 184/* command codes (1st byte) */ 185typedef enum { 186 CMD_SET_ONE_MAJOR = 1, /* mask in one major. 2nd byte in the command is the major code */ 187 CMD_UNSET_ONE_MAJOR = 2, /* mask out one major. 2nd byte in the command is the major code */ 188 CMD_SET_ALL_MAJORS = 3, /* set the major print mask. the full mask is in the data DWORD */ 189 CMD_SET_VERBOSITY = 4 /* set verbosity level */ 190} DBG_commands; 191 192/* command signature */ 193#define CMD_SIGNATURE 0xAABBCC00 194 195/* shared macros in traces infrastructure */ 196/* increment the pointer cyclicly */ 197#define DBG_NEXT_ITEM(x, max_items) (((x + 1) >= max_items) ? 0 : x + 1) 198#define DBG_PREV_ITEM(x, max_items) ((x) ? x - 1 : max_items - 1) 199 200#define FIELD_MASK(width) (((1 << (width)) - 1)) 201#define FIELD_PACK(value, mask, offset) (((value) & (mask)) << (offset)) 202#define FIELD_UNPACK(value, mask, offset) (((value) >> (offset)) & (mask)) 203 204#define FIELD_VALUE_OFFSET (0) 205#define FIELD_VALUE_WIDTH (16) 206#define FIELD_VALUE_MASK FIELD_MASK(FIELD_VALUE_WIDTH) 207#define FIELD_VALUE_PACK(f) FIELD_PACK(f, FIELD_VALUE_MASK, FIELD_VALUE_OFFSET) 208#define FIELD_VALUE_UNPACK(f) FIELD_UNPACK(f, FIELD_VALUE_MASK, FIELD_VALUE_OFFSET) 209 210#define FIELD_MINOR_OFFSET (FIELD_VALUE_OFFSET + FIELD_VALUE_WIDTH) 211#define FIELD_MINOR_WIDTH (8) 212#define FIELD_MINOR_MASK FIELD_MASK(FIELD_MINOR_WIDTH) 213#define FIELD_MINOR_PACK(f) FIELD_PACK(f, FIELD_MINOR_MASK, FIELD_MINOR_OFFSET) 214#define FIELD_MINOR_UNPACK(f) FIELD_UNPACK(f, FIELD_MINOR_MASK, FIELD_MINOR_OFFSET) 215 216#define FIELD_MAJOR_OFFSET (FIELD_MINOR_OFFSET + FIELD_MINOR_WIDTH) 217#define FIELD_MAJOR_WIDTH (5) 218#define FIELD_MAJOR_MASK FIELD_MASK(FIELD_MAJOR_WIDTH) 219#define FIELD_MAJOR_PACK(f) FIELD_PACK(f, FIELD_MAJOR_MASK, FIELD_MAJOR_OFFSET) 220#define FIELD_MAJOR_UNPACK(f) FIELD_UNPACK(f, FIELD_MAJOR_MASK, FIELD_MAJOR_OFFSET) 221 222/* for quick traces - only insertion, compatible with the regular point */ 223#define FIELD_FULL_MAJOR_WIDTH (8) 224#define FIELD_FULL_MAJOR_MASK FIELD_MASK(FIELD_FULL_MAJOR_WIDTH) 225#define FIELD_FULL_MAJOR_PACK(f) FIELD_PACK(f, FIELD_FULL_MAJOR_MASK, FIELD_MAJOR_OFFSET) 226 227/* The following 2 fields are used only when FIELD_TID value is 111b. 228 * it means we don't want to use thread id, but format. In this case, 229 * the last 2 MSB bits of the major field will indicates the format 230 */ 231#define FIELD_MAJOR_W_FMT_OFFSET FIELD_MAJOR_OFFSET 232#define FIELD_MAJOR_W_FMT_WIDTH (3) 233#define FIELD_MAJOR_W_FMT_MASK FIELD_MASK(FIELD_MAJOR_W_FMT_WIDTH) 234#define FIELD_MAJOR_W_FMT_PACK(f) FIELD_PACK(f, FIELD_MAJOR_W_FMT_MASK, FIELD_MAJOR_W_FMT_OFFSET) 235#define FIELD_MAJOR_W_FMT_UNPACK(f) FIELD_UNPACK(f, FIELD_MAJOR_W_FMT_MASK, FIELD_MAJOR_W_FMT_OFFSET) 236 237#define FIELD_FORMAT_OFFSET (FIELD_MAJOR_OFFSET + FIELD_MAJOR_W_FMT_WIDTH) 238#define FIELD_FORMAT_WIDTH (2) 239#define FIELD_FORMAT_MASK FIELD_MASK(FIELD_MAJOR_W_FMT_WIDTH) 240#define FIELD_FORMAT_PACK(f) FIELD_PACK(f, FIELD_FORMAT_MASK, FIELD_FORMAT_OFFSET) 241#define FIELD_FORMAT_UNPACK(f) FIELD_UNPACK(f, FIELD_FORMAT_MASK, FIELD_FORMAT_OFFSET) 242 243#define FIELD_TID_SEL_FORMAT_PAT (7) 244 245#define FIELD_TID_OFFSET (FIELD_MAJOR_OFFSET + FIELD_MAJOR_WIDTH) 246#define FIELD_TID_WIDTH (3) 247#define FIELD_TID_MASK FIELD_MASK(FIELD_TID_WIDTH) 248#define FIELD_TID_PACK(f) FIELD_PACK(f, FIELD_TID_MASK, FIELD_TID_OFFSET) 249#define FIELD_TID_UNPACK(f) FIELD_UNPACK(f, FIELD_TID_MASK, FIELD_TID_OFFSET) 250 251#define FIELD_VALUE_24_OFFSET (0) 252#define FIELD_VALUE_24_WIDTH (24) 253#define FIELD_VALUE_24_MASK FIELD_MASK(FIELD_VALUE_24_WIDTH) 254#define FIELD_VALUE_24_PACK(f) FIELD_PACK(f, FIELD_VALUE_24_MASK, FIELD_VALUE_24_OFFSET) 255#define FIELD_VALUE_24_UNPACK(f) FIELD_UNPACK(f, FIELD_VALUE_24_MASK, FIELD_VALUE_24_OFFSET) 256 257#define PACK_TRACEPOINT(tid, major, minor, value) \ 258 (FIELD_TID_PACK(tid) | FIELD_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor) | FIELD_VALUE_PACK(value)) 259 260#define PACK_QUICK_TRACEPOINT(major, minor) \ 261 (FIELD_FULL_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor)) 262 263#define PACK_FORMATTED_TRACEPOINT(format, major, minor, value) \ 264 (FIELD_TID_PACK(FIELD_TID_SEL_FORMAT_PAT) | FIELD_FORMAT_PACK(format) | FIELD_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor) | FIELD_VALUE_PACK(value)) 265 266#define PACK_TRACE_VALUE24(major, value) \ 267 (FIELD_TID_PACK(FIELD_TID_SEL_FORMAT_PAT) | FIELD_MAJOR_PACK(major) | FIELD_VALUE_24_PACK(value)) 268 269#endif /* __CSS_TRACE_H_ */
~/
Read-only file preview.