aboutsummaryrefslogtreecommitdiff
path: root/include/linux/npk.h
blob: f3cb5b9aeb5543b5a3ad5363f077c819efb50b34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#ifndef _NPK_H_
#define _NPK_H_

#include <linux/ioctl.h>

#define NPK_IOCTL_MAGIC 'n'

/* ioctl commands to allocate/release an STH channel for SVEN instrumentation in user-space */
#define NPKIOC_ALLOC_PAGE_SVEN  _IOWR(NPK_IOCTL_MAGIC, 1, struct sth_page_request_info)
#define NPKIOC_FREE_PAGE_SVEN	_IOW(NPK_IOCTL_MAGIC, 1, struct sth_page_request_info)

/* ioctl commands to allocate/release a CSR-driven mode buffer for NPK trace */
#define NPKIOC_ALLOC_BUFF       _IOWR(NPK_IOCTL_MAGIC, 2, struct npk_csr_info)
#define NPKIOC_FREE_BUFF	_IOW(NPK_IOCTL_MAGIC, 2, u32)

/* ioctl commands to allocate/release a linked-list mode buffer for NPK trace */
#define NPKIOC_ALLOC_WINDOW	_IOWR(NPK_IOCTL_MAGIC, 3, struct npk_win_info)
#define NPKIOC_FREE_WINDOW	_IOW(NPK_IOCTL_MAGIC, 3, u32)

/* ioctl commands to read/write NPK registers */
#define NPKIOC_REG_READ         _IOWR(NPK_IOCTL_MAGIC, 4, struct npk_reg_cmd)
#define NPKIOC_REG_WRITE	_IOW(NPK_IOCTL_MAGIC, 4, struct npk_reg_cmd)
#define NPKIOC_PCI_REG_READ	_IOWR(NPK_IOCTL_MAGIC, 5, struct pci_cfg_cmd)
#define NPKIOC_PCI_REG_WRITE	_IOW(NPK_IOCTL_MAGIC, 5, struct pci_cfg_cmd)
#define NPKIOC_MEM_READ         _IOWR(NPK_IOCTL_MAGIC, 6, struct npk_mem_cmd)
#define NPKIOC_MEM_WRITE	_IOW(NPK_IOCTL_MAGIC, 6, struct npk_mem_cmd)

/* ioctl command to print debug info on NPK trace buffer */
#define NPKIOC_PRINT_MSU_INFO   _IOW(NPK_IOCTL_MAGIC, 7, u32)

/* ioctl commands to start/stop/configure trace */
#define NPKIOC_START_TRACE      _IO(NPK_IOCTL_MAGIC, 1)
#define NPKIOC_STOP_TRACE       _IO(NPK_IOCTL_MAGIC, 2)
#define NPKIOC_CONFIGURE_TRACE  _IOW(NPK_IOCTL_MAGIC, 8, struct npk_cfg)

union dn_sth_reg {
	u8 d8;
	u16 d16;
	u32 d32;
	u64 d64;
} __packed;

/* SW master/channel memory map (MIPI STPv2) */
struct sven_sth_channel {
	union dn_sth_reg Dn;
	union dn_sth_reg DnM;
	union dn_sth_reg DnTS;
	union dn_sth_reg DnMTS;
	u64 USER;
	u64 USER_TS;
	u32 FLAG;
	u32 FLAG_TS;
	u32 MERR;
	u32 reserved;
} __packed;

struct sth_page_request_info {
	u32 info_size;
	u32 channel_size;
	u32 offset;
	u32 length;
};

struct npk_csr_info {
	u32 idx;
	u32 size;
};

struct npk_win_info {
	u32 idx;
	u32 num_windows;
	u32 window_size;
	u32 num_blks;
	u32 blk_size;
	u32 pad;
};

struct npk_reg_cmd {
	u32 offset;
	u32 data;
};

struct pci_cfg_cmd {
	u32 offset;
	u32 data;
	u32 size;
};

struct npk_mem_cmd {
	u64 addr;
	u64 data;
	u32 size;
	u32 pad;
};

/* npk_cfg struct holds the NPK trace configuration (sources, destination):
 *   - swdest_bmp[n], n in [0..31], is a bitmap for Master IDs [8n..(8n+7)]
 *     to enable Master ID N, do swdest_bmp[N << 3] |= (1 << (N & 0x7))
 *   - gswtdest: indicates if SW Master IDs 256+ shall be enabled (0: no, 1:yes)
 *   - output_port: indicates the destination port (0: MSC0, 1: MSC1, 2: PTI)
 *   - pti_clk_divider: for PTI clock, use NorthPeak clock divided by 2^n, n in [0..3]
 *   - pti_mode: PTI port output mode (1: 4-bit, 2: 8-bit, 3: 12-bit, 4: 16-bit)
 *   - pti_pattern: PTI training/calibration pattern ID to use (0 means no pattern)
 *   - msc_mode: MSCn mode (0: CSR, 1: multi-block, 2: ExI, 3: MTB)
 *   - msc_wrap_en: indicates if wrapping is enabled for MSCn
 */
struct npk_cfg {
	u8 swdest_bmp[32];
	u8 gswtdest;
	u8 output_port;
	u8 pti_clk_divider;
	u8 pti_mode;
	u8 pti_pattern;
	u8 msc_mode;
	u8 msc_wrap_en;
};

void *npk_alloc_sth_sven_ptr(int cpu);
void npk_free_sth_sven_ptr(int cpu, void __iomem *channel);

#endif /* _NPK_H_ */