1c46ab9dbSGeorgi Djakov /* SPDX-License-Identifier: GPL-2.0 */ 2c46ab9dbSGeorgi Djakov /* 3c46ab9dbSGeorgi Djakov * Interconnect framework tracepoints 4c46ab9dbSGeorgi Djakov * Copyright (c) 2019, Linaro Ltd. 5c46ab9dbSGeorgi Djakov * Author: Georgi Djakov <georgi.djakov@linaro.org> 6c46ab9dbSGeorgi Djakov */ 7c46ab9dbSGeorgi Djakov 8c46ab9dbSGeorgi Djakov #undef TRACE_SYSTEM 9c46ab9dbSGeorgi Djakov #define TRACE_SYSTEM interconnect 10c46ab9dbSGeorgi Djakov 11c46ab9dbSGeorgi Djakov #if !defined(_TRACE_INTERCONNECT_H) || defined(TRACE_HEADER_MULTI_READ) 12c46ab9dbSGeorgi Djakov #define _TRACE_INTERCONNECT_H 13c46ab9dbSGeorgi Djakov 14c46ab9dbSGeorgi Djakov #include <linux/interconnect.h> 15c46ab9dbSGeorgi Djakov #include <linux/tracepoint.h> 16c46ab9dbSGeorgi Djakov 17c46ab9dbSGeorgi Djakov TRACE_EVENT(icc_set_bw, 18c46ab9dbSGeorgi Djakov 19c46ab9dbSGeorgi Djakov TP_PROTO(struct icc_path *p, struct icc_node *n, int i, 20c46ab9dbSGeorgi Djakov u32 avg_bw, u32 peak_bw), 21c46ab9dbSGeorgi Djakov 22c46ab9dbSGeorgi Djakov TP_ARGS(p, n, i, avg_bw, peak_bw), 23c46ab9dbSGeorgi Djakov 24c46ab9dbSGeorgi Djakov TP_STRUCT__entry( 25c46ab9dbSGeorgi Djakov __string(path_name, p->name) 26c46ab9dbSGeorgi Djakov __string(dev, dev_name(p->reqs[i].dev)) 27c46ab9dbSGeorgi Djakov __string(node_name, n->name) 28c46ab9dbSGeorgi Djakov __field(u32, avg_bw) 29c46ab9dbSGeorgi Djakov __field(u32, peak_bw) 30c46ab9dbSGeorgi Djakov __field(u32, node_avg_bw) 31c46ab9dbSGeorgi Djakov __field(u32, node_peak_bw) 32c46ab9dbSGeorgi Djakov ), 33c46ab9dbSGeorgi Djakov 34c46ab9dbSGeorgi Djakov TP_fast_assign( 35c46ab9dbSGeorgi Djakov __assign_str(path_name, p->name); 36c46ab9dbSGeorgi Djakov __assign_str(dev, dev_name(p->reqs[i].dev)); 37c46ab9dbSGeorgi Djakov __assign_str(node_name, n->name); 38c46ab9dbSGeorgi Djakov __entry->avg_bw = avg_bw; 39c46ab9dbSGeorgi Djakov __entry->peak_bw = peak_bw; 40c46ab9dbSGeorgi Djakov __entry->node_avg_bw = n->avg_bw; 41c46ab9dbSGeorgi Djakov __entry->node_peak_bw = n->peak_bw; 42c46ab9dbSGeorgi Djakov ), 43c46ab9dbSGeorgi Djakov 44c46ab9dbSGeorgi Djakov TP_printk("path=%s dev=%s node=%s avg_bw=%u peak_bw=%u agg_avg=%u agg_peak=%u", 45c46ab9dbSGeorgi Djakov __get_str(path_name), 46c46ab9dbSGeorgi Djakov __get_str(dev), 47c46ab9dbSGeorgi Djakov __get_str(node_name), 48c46ab9dbSGeorgi Djakov __entry->avg_bw, 49c46ab9dbSGeorgi Djakov __entry->peak_bw, 50c46ab9dbSGeorgi Djakov __entry->node_avg_bw, 51c46ab9dbSGeorgi Djakov __entry->node_peak_bw) 52c46ab9dbSGeorgi Djakov ); 53c46ab9dbSGeorgi Djakov 54c46ab9dbSGeorgi Djakov TRACE_EVENT(icc_set_bw_end, 55c46ab9dbSGeorgi Djakov 56c46ab9dbSGeorgi Djakov TP_PROTO(struct icc_path *p, int ret), 57c46ab9dbSGeorgi Djakov 58c46ab9dbSGeorgi Djakov TP_ARGS(p, ret), 59c46ab9dbSGeorgi Djakov 60c46ab9dbSGeorgi Djakov TP_STRUCT__entry( 61c46ab9dbSGeorgi Djakov __string(path_name, p->name) 62c46ab9dbSGeorgi Djakov __string(dev, dev_name(p->reqs[0].dev)) 63c46ab9dbSGeorgi Djakov __field(int, ret) 64c46ab9dbSGeorgi Djakov ), 65c46ab9dbSGeorgi Djakov 66c46ab9dbSGeorgi Djakov TP_fast_assign( 67c46ab9dbSGeorgi Djakov __assign_str(path_name, p->name); 68c46ab9dbSGeorgi Djakov __assign_str(dev, dev_name(p->reqs[0].dev)); 69c46ab9dbSGeorgi Djakov __entry->ret = ret; 70c46ab9dbSGeorgi Djakov ), 71c46ab9dbSGeorgi Djakov 72c46ab9dbSGeorgi Djakov TP_printk("path=%s dev=%s ret=%d", 73c46ab9dbSGeorgi Djakov __get_str(path_name), 74c46ab9dbSGeorgi Djakov __get_str(dev), 75c46ab9dbSGeorgi Djakov __entry->ret) 76c46ab9dbSGeorgi Djakov ); 77c46ab9dbSGeorgi Djakov 78c46ab9dbSGeorgi Djakov #endif /* _TRACE_INTERCONNECT_H */ 79c46ab9dbSGeorgi Djakov 80c46ab9dbSGeorgi Djakov /* This part must be outside protection */ 81c46ab9dbSGeorgi Djakov 82c46ab9dbSGeorgi Djakov #undef TRACE_INCLUDE_PATH 83c46ab9dbSGeorgi Djakov #define TRACE_INCLUDE_PATH . 84c46ab9dbSGeorgi Djakov 85c46ab9dbSGeorgi Djakov #undef TRACE_INCLUDE_FILE 86c46ab9dbSGeorgi Djakov #define TRACE_INCLUDE_FILE trace 87c46ab9dbSGeorgi Djakov 88c46ab9dbSGeorgi Djakov #include <trace/define_trace.h> 89