Merge tag 'dmaengine-5.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul...
[linux-2.6-microblaze.git] / include / linux / soc / qcom / llcc-qcom.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
4  *
5  */
6
7 #include <linux/platform_device.h>
8 #ifndef __LLCC_QCOM__
9 #define __LLCC_QCOM__
10
11 #define LLCC_CPUSS       1
12 #define LLCC_VIDSC0      2
13 #define LLCC_VIDSC1      3
14 #define LLCC_ROTATOR     4
15 #define LLCC_VOICE       5
16 #define LLCC_AUDIO       6
17 #define LLCC_MDMHPGRW    7
18 #define LLCC_MDM         8
19 #define LLCC_MODHW       9
20 #define LLCC_CMPT        10
21 #define LLCC_GPUHTW      11
22 #define LLCC_GPU         12
23 #define LLCC_MMUHWT      13
24 #define LLCC_CMPTDMA     15
25 #define LLCC_DISP        16
26 #define LLCC_VIDFW       17
27 #define LLCC_MDMHPFX     20
28 #define LLCC_MDMPNG      21
29 #define LLCC_AUDHW       22
30 #define LLCC_NPU         23
31 #define LLCC_WLHW        24
32 #define LLCC_MODPE       29
33 #define LLCC_APTCM       30
34 #define LLCC_WRCACHE     31
35
36 /**
37  * llcc_slice_desc - Cache slice descriptor
38  * @slice_id: llcc slice id
39  * @slice_size: Size allocated for the llcc slice
40  */
41 struct llcc_slice_desc {
42         u32 slice_id;
43         size_t slice_size;
44 };
45
46 /**
47  * llcc_edac_reg_data - llcc edac registers data for each error type
48  * @name: Name of the error
49  * @synd_reg: Syndrome register address
50  * @count_status_reg: Status register address to read the error count
51  * @ways_status_reg: Status register address to read the error ways
52  * @reg_cnt: Number of registers
53  * @count_mask: Mask value to get the error count
54  * @ways_mask: Mask value to get the error ways
55  * @count_shift: Shift value to get the error count
56  * @ways_shift: Shift value to get the error ways
57  */
58 struct llcc_edac_reg_data {
59         char *name;
60         u64 synd_reg;
61         u64 count_status_reg;
62         u64 ways_status_reg;
63         u32 reg_cnt;
64         u32 count_mask;
65         u32 ways_mask;
66         u8  count_shift;
67         u8  ways_shift;
68 };
69
70 /**
71  * llcc_drv_data - Data associated with the llcc driver
72  * @regmap: regmap associated with the llcc device
73  * @bcast_regmap: regmap associated with llcc broadcast offset
74  * @cfg: pointer to the data structure for slice configuration
75  * @lock: mutex associated with each slice
76  * @cfg_size: size of the config data table
77  * @max_slices: max slices as read from device tree
78  * @num_banks: Number of llcc banks
79  * @bitmap: Bit map to track the active slice ids
80  * @offsets: Pointer to the bank offsets array
81  * @ecc_irq: interrupt for llcc cache error detection and reporting
82  */
83 struct llcc_drv_data {
84         struct regmap *regmap;
85         struct regmap *bcast_regmap;
86         const struct llcc_slice_config *cfg;
87         struct mutex lock;
88         u32 cfg_size;
89         u32 max_slices;
90         u32 num_banks;
91         unsigned long *bitmap;
92         u32 *offsets;
93         int ecc_irq;
94 };
95
96 #if IS_ENABLED(CONFIG_QCOM_LLCC)
97 /**
98  * llcc_slice_getd - get llcc slice descriptor
99  * @uid: usecase_id of the client
100  */
101 struct llcc_slice_desc *llcc_slice_getd(u32 uid);
102
103 /**
104  * llcc_slice_putd - llcc slice descritpor
105  * @desc: Pointer to llcc slice descriptor
106  */
107 void llcc_slice_putd(struct llcc_slice_desc *desc);
108
109 /**
110  * llcc_get_slice_id - get slice id
111  * @desc: Pointer to llcc slice descriptor
112  */
113 int llcc_get_slice_id(struct llcc_slice_desc *desc);
114
115 /**
116  * llcc_get_slice_size - llcc slice size
117  * @desc: Pointer to llcc slice descriptor
118  */
119 size_t llcc_get_slice_size(struct llcc_slice_desc *desc);
120
121 /**
122  * llcc_slice_activate - Activate the llcc slice
123  * @desc: Pointer to llcc slice descriptor
124  */
125 int llcc_slice_activate(struct llcc_slice_desc *desc);
126
127 /**
128  * llcc_slice_deactivate - Deactivate the llcc slice
129  * @desc: Pointer to llcc slice descriptor
130  */
131 int llcc_slice_deactivate(struct llcc_slice_desc *desc);
132
133 #else
134 static inline struct llcc_slice_desc *llcc_slice_getd(u32 uid)
135 {
136         return NULL;
137 }
138
139 static inline void llcc_slice_putd(struct llcc_slice_desc *desc)
140 {
141
142 };
143
144 static inline int llcc_get_slice_id(struct llcc_slice_desc *desc)
145 {
146         return -EINVAL;
147 }
148
149 static inline size_t llcc_get_slice_size(struct llcc_slice_desc *desc)
150 {
151         return 0;
152 }
153 static inline int llcc_slice_activate(struct llcc_slice_desc *desc)
154 {
155         return -EINVAL;
156 }
157
158 static inline int llcc_slice_deactivate(struct llcc_slice_desc *desc)
159 {
160         return -EINVAL;
161 }
162 #endif
163
164 #endif