.. | .. |
---|
6 | 6 | #ifndef _CORESIGHT_PRIV_H |
---|
7 | 7 | #define _CORESIGHT_PRIV_H |
---|
8 | 8 | |
---|
| 9 | +#include <linux/amba/bus.h> |
---|
9 | 10 | #include <linux/bitops.h> |
---|
10 | 11 | #include <linux/io.h> |
---|
11 | 12 | #include <linux/coresight.h> |
---|
.. | .. |
---|
21 | 22 | #define CORESIGHT_CLAIMCLR 0xfa4 |
---|
22 | 23 | #define CORESIGHT_LAR 0xfb0 |
---|
23 | 24 | #define CORESIGHT_LSR 0xfb4 |
---|
| 25 | +#define CORESIGHT_DEVARCH 0xfbc |
---|
24 | 26 | #define CORESIGHT_AUTHSTATUS 0xfb8 |
---|
25 | 27 | #define CORESIGHT_DEVID 0xfc8 |
---|
26 | 28 | #define CORESIGHT_DEVTYPE 0xfcc |
---|
.. | .. |
---|
64 | 66 | #define coresight_simple_reg64(type, name, lo_off, hi_off) \ |
---|
65 | 67 | __coresight_simple_func(type, NULL, name, lo_off, hi_off) |
---|
66 | 68 | |
---|
67 | | -extern const u32 barrier_pkt[4]; |
---|
68 | | -#define CORESIGHT_BARRIER_PKT_SIZE (sizeof(barrier_pkt)) |
---|
| 69 | +extern const u32 coresight_barrier_pkt[4]; |
---|
| 70 | +#define CORESIGHT_BARRIER_PKT_SIZE (sizeof(coresight_barrier_pkt)) |
---|
69 | 71 | |
---|
70 | 72 | enum etm_addr_type { |
---|
71 | 73 | ETM_ADDR_TYPE_NONE, |
---|
.. | .. |
---|
85 | 87 | * struct cs_buffer - keep track of a recording session' specifics |
---|
86 | 88 | * @cur: index of the current buffer |
---|
87 | 89 | * @nr_pages: max number of pages granted to us |
---|
| 90 | + * @pid: PID this cs_buffer belongs to |
---|
88 | 91 | * @offset: offset within the current buffer |
---|
89 | 92 | * @data_size: how much we collected in this run |
---|
90 | 93 | * @snapshot: is this run in snapshot mode |
---|
.. | .. |
---|
93 | 96 | struct cs_buffers { |
---|
94 | 97 | unsigned int cur; |
---|
95 | 98 | unsigned int nr_pages; |
---|
| 99 | + pid_t pid; |
---|
96 | 100 | unsigned long offset; |
---|
97 | 101 | local_t data_size; |
---|
98 | 102 | bool snapshot; |
---|
.. | .. |
---|
102 | 106 | static inline void coresight_insert_barrier_packet(void *buf) |
---|
103 | 107 | { |
---|
104 | 108 | if (buf) |
---|
105 | | - memcpy(buf, barrier_pkt, CORESIGHT_BARRIER_PKT_SIZE); |
---|
| 109 | + memcpy(buf, coresight_barrier_pkt, CORESIGHT_BARRIER_PKT_SIZE); |
---|
106 | 110 | } |
---|
107 | | - |
---|
108 | 111 | |
---|
109 | 112 | static inline void CS_LOCK(void __iomem *addr) |
---|
110 | 113 | { |
---|
.. | .. |
---|
146 | 149 | void coresight_disable_path(struct list_head *path); |
---|
147 | 150 | int coresight_enable_path(struct list_head *path, u32 mode, void *sink_data); |
---|
148 | 151 | struct coresight_device *coresight_get_sink(struct list_head *path); |
---|
149 | | -struct coresight_device *coresight_get_enabled_sink(bool reset); |
---|
| 152 | +struct coresight_device * |
---|
| 153 | +coresight_get_enabled_sink(struct coresight_device *source); |
---|
150 | 154 | struct coresight_device *coresight_get_sink_by_id(u32 id); |
---|
| 155 | +struct coresight_device * |
---|
| 156 | +coresight_find_default_sink(struct coresight_device *csdev); |
---|
151 | 157 | struct list_head *coresight_build_path(struct coresight_device *csdev, |
---|
152 | 158 | struct coresight_device *sink); |
---|
153 | 159 | void coresight_release_path(struct list_head *path); |
---|
| 160 | +int coresight_add_sysfs_link(struct coresight_sysfs_link *info); |
---|
| 161 | +void coresight_remove_sysfs_link(struct coresight_sysfs_link *info); |
---|
| 162 | +int coresight_create_conns_sysfs_group(struct coresight_device *csdev); |
---|
| 163 | +void coresight_remove_conns_sysfs_group(struct coresight_device *csdev); |
---|
| 164 | +int coresight_make_links(struct coresight_device *orig, |
---|
| 165 | + struct coresight_connection *conn, |
---|
| 166 | + struct coresight_device *target); |
---|
| 167 | +void coresight_remove_links(struct coresight_device *orig, |
---|
| 168 | + struct coresight_connection *conn); |
---|
154 | 169 | |
---|
155 | | -#ifdef CONFIG_CORESIGHT_SOURCE_ETM3X |
---|
| 170 | +#if IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM3X) |
---|
156 | 171 | extern int etm_readl_cp14(u32 off, unsigned int *val); |
---|
157 | 172 | extern int etm_writel_cp14(u32 off, u32 val); |
---|
158 | 173 | #else |
---|
.. | .. |
---|
160 | 175 | static inline int etm_writel_cp14(u32 off, u32 val) { return 0; } |
---|
161 | 176 | #endif |
---|
162 | 177 | |
---|
| 178 | +struct cti_assoc_op { |
---|
| 179 | + void (*add)(struct coresight_device *csdev); |
---|
| 180 | + void (*remove)(struct coresight_device *csdev); |
---|
| 181 | +}; |
---|
| 182 | + |
---|
| 183 | +extern void coresight_set_cti_ops(const struct cti_assoc_op *cti_op); |
---|
| 184 | +extern void coresight_remove_cti_ops(void); |
---|
| 185 | + |
---|
| 186 | +/* |
---|
| 187 | + * Macros and inline functions to handle CoreSight UCI data and driver |
---|
| 188 | + * private data in AMBA ID table entries, and extract data values. |
---|
| 189 | + */ |
---|
| 190 | + |
---|
| 191 | +/* coresight AMBA ID, no UCI, no driver data: id table entry */ |
---|
| 192 | +#define CS_AMBA_ID(pid) \ |
---|
| 193 | + { \ |
---|
| 194 | + .id = pid, \ |
---|
| 195 | + .mask = 0x000fffff, \ |
---|
| 196 | + } |
---|
| 197 | + |
---|
| 198 | +/* coresight AMBA ID, UCI with driver data only: id table entry. */ |
---|
| 199 | +#define CS_AMBA_ID_DATA(pid, dval) \ |
---|
| 200 | + { \ |
---|
| 201 | + .id = pid, \ |
---|
| 202 | + .mask = 0x000fffff, \ |
---|
| 203 | + .data = (void *)&(struct amba_cs_uci_id) \ |
---|
| 204 | + { \ |
---|
| 205 | + .data = (void *)dval, \ |
---|
| 206 | + } \ |
---|
| 207 | + } |
---|
| 208 | + |
---|
| 209 | +/* coresight AMBA ID, full UCI structure: id table entry. */ |
---|
| 210 | +#define CS_AMBA_UCI_ID(pid, uci_ptr) \ |
---|
| 211 | + { \ |
---|
| 212 | + .id = pid, \ |
---|
| 213 | + .mask = 0x000fffff, \ |
---|
| 214 | + .data = (void *)uci_ptr \ |
---|
| 215 | + } |
---|
| 216 | + |
---|
| 217 | +/* extract the data value from a UCI structure given amba_id pointer. */ |
---|
| 218 | +static inline void *coresight_get_uci_data(const struct amba_id *id) |
---|
| 219 | +{ |
---|
| 220 | + struct amba_cs_uci_id *uci_id = id->data; |
---|
| 221 | + |
---|
| 222 | + if (!uci_id) |
---|
| 223 | + return NULL; |
---|
| 224 | + |
---|
| 225 | + return uci_id->data; |
---|
| 226 | +} |
---|
| 227 | + |
---|
| 228 | +void coresight_release_platform_data(struct coresight_device *csdev, |
---|
| 229 | + struct coresight_platform_data *pdata); |
---|
| 230 | +struct coresight_device * |
---|
| 231 | +coresight_find_csdev_by_fwnode(struct fwnode_handle *r_fwnode); |
---|
| 232 | +void coresight_set_assoc_ectdev_mutex(struct coresight_device *csdev, |
---|
| 233 | + struct coresight_device *ect_csdev); |
---|
| 234 | + |
---|
| 235 | +void coresight_set_percpu_sink(int cpu, struct coresight_device *csdev); |
---|
| 236 | +struct coresight_device *coresight_get_percpu_sink(int cpu); |
---|
| 237 | + |
---|
163 | 238 | #endif |
---|