Re: [PATCH 2/2] drivers: soc: Add LLCC driver

From: kbuild test robot
Date: Mon Jan 29 2018 - 20:58:54 EST


Hi Channagoud,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.15 next-20180126]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Channagoud-Kadabi/SDM845-System-Cache-Driver/20180119-223446
config: arm64-allmodconfig (attached as .config)
compiler: aarch64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm64

All errors (new ones prefixed by >>):

>> drivers/soc/qcom/llcc-slice.c:138:25: error: redefinition of 'llcc_slice_getd'
struct llcc_slice_desc *llcc_slice_getd(struct device *dev, const char *name)
^~~~~~~~~~~~~~~
In file included from drivers/soc/qcom/llcc-slice.c:28:0:
include/linux/soc/qcom/llcc-qcom.h:111:39: note: previous definition of 'llcc_slice_getd' was here
static inline struct llcc_slice_desc *llcc_slice_getd(struct device *dev,
^~~~~~~~~~~~~~~
>> drivers/soc/qcom/llcc-slice.c:171:6: error: redefinition of 'llcc_slice_putd'
void llcc_slice_putd(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~
In file included from drivers/soc/qcom/llcc-slice.c:28:0:
include/linux/soc/qcom/llcc-qcom.h:117:20: note: previous definition of 'llcc_slice_putd' was here
static inline void llcc_slice_putd(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~
>> drivers/soc/qcom/llcc-slice.c:214:5: error: redefinition of 'llcc_slice_activate'
int llcc_slice_activate(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~~~~~
In file included from drivers/soc/qcom/llcc-slice.c:28:0:
include/linux/soc/qcom/llcc-qcom.h:131:19: note: previous definition of 'llcc_slice_activate' was here
static inline int llcc_slice_activate(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~~~~~
>> drivers/soc/qcom/llcc-slice.c:257:5: error: redefinition of 'llcc_slice_deactivate'
int llcc_slice_deactivate(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~~~~~~~
In file included from drivers/soc/qcom/llcc-slice.c:28:0:
include/linux/soc/qcom/llcc-qcom.h:136:19: note: previous definition of 'llcc_slice_deactivate' was here
static inline int llcc_slice_deactivate(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~~~~~~~
>> drivers/soc/qcom/llcc-slice.c:299:5: error: redefinition of 'llcc_get_slice_id'
int llcc_get_slice_id(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~~~
In file included from drivers/soc/qcom/llcc-slice.c:28:0:
include/linux/soc/qcom/llcc-qcom.h:122:19: note: previous definition of 'llcc_get_slice_id' was here
static inline int llcc_get_slice_id(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~~~
>> drivers/soc/qcom/llcc-slice.c:315:8: error: redefinition of 'llcc_get_slice_size'
size_t llcc_get_slice_size(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~~~~~
In file included from drivers/soc/qcom/llcc-slice.c:28:0:
include/linux/soc/qcom/llcc-qcom.h:127:22: note: previous definition of 'llcc_get_slice_size' was here
static inline size_t llcc_get_slice_size(struct llcc_slice_desc *desc)
^~~~~~~~~~~~~~~~~~~
>> drivers/soc/qcom/llcc-slice.c:384:5: error: redefinition of 'qcom_llcc_probe'
int qcom_llcc_probe(struct platform_device *pdev,
^~~~~~~~~~~~~~~
In file included from drivers/soc/qcom/llcc-slice.c:28:0:
include/linux/soc/qcom/llcc-qcom.h:140:19: note: previous definition of 'qcom_llcc_probe' was here
static inline int qcom_llcc_probe(struct platform_device *pdev,
^~~~~~~~~~~~~~~
>> drivers/soc/qcom/llcc-slice.c:443:5: error: redefinition of 'qcom_llcc_remove'
int qcom_llcc_remove(struct platform_device *pdev)
^~~~~~~~~~~~~~~~
In file included from drivers/soc/qcom/llcc-slice.c:28:0:
include/linux/soc/qcom/llcc-qcom.h:146:19: note: previous definition of 'qcom_llcc_remove' was here
static inline int qcom_llcc_remove(struct platform_device *pdev)
^~~~~~~~~~~~~~~~

vim +/llcc_slice_getd +138 drivers/soc/qcom/llcc-slice.c

129
130 /**
131 * llcc_slice_getd - get llcc slice descriptor
132 * @dev: Device pointer of the client
133 * @name: Name of the use case
134 *
135 * A pointer to llcc slice descriptor will be returned on success and
136 * and error pointer is returned on failure
137 */
> 138 struct llcc_slice_desc *llcc_slice_getd(struct device *dev, const char *name)
139 {
140 struct device_node *np = dev->of_node;
141 int index = 0;
142 const char *slice_name;
143 struct property *prop;
144
145 if (!np) {
146 dev_err(dev, "%s() currently only supports DT\n", __func__);
147 return ERR_PTR(-ENOENT);
148 }
149
150 if (!of_get_property(np, "cache-slice-names", NULL)) {
151 dev_err(dev,
152 "%s() requires a \"cache-slice-names\" property\n",
153 __func__);
154 return ERR_PTR(-ENOENT);
155 }
156
157 of_property_for_each_string(np, "cache-slice-names", prop, slice_name) {
158 if (!strcmp(name, slice_name))
159 break;
160 index++;
161 }
162
163 return llcc_slice_get_entry(dev, index);
164 }
165 EXPORT_SYMBOL(llcc_slice_getd);
166
167 /**
168 * llcc_slice_putd - llcc slice descritpor
169 * @desc: Pointer to llcc slice descriptor
170 */
> 171 void llcc_slice_putd(struct llcc_slice_desc *desc)
172 {
173 kfree(desc);
174 }
175 EXPORT_SYMBOL(llcc_slice_putd);
176
177 static int llcc_update_act_ctrl(struct llcc_drv_data *drv, u32 sid,
178 u32 act_ctrl_reg_val, u32 status)
179 {
180 u32 act_ctrl_reg;
181 u32 status_reg;
182 u32 slice_status;
183 unsigned long timeout;
184
185 act_ctrl_reg = drv->b_off + LLCC_TRP_ACT_CTRLn(sid);
186 status_reg = drv->b_off + LLCC_TRP_STATUSn(sid);
187
188 regmap_write(drv->llcc_map, act_ctrl_reg, act_ctrl_reg_val);
189
190 /* Make sure the activate trigger is applied before clearing it */
191 mb();
192
193 /* Clear the ACTIVE trigger */
194 act_ctrl_reg_val &= ~ACT_CTRL_ACT_TRIG;
195 regmap_write(drv->llcc_map, act_ctrl_reg, act_ctrl_reg_val);
196
197 timeout = jiffies + usecs_to_jiffies(LLCC_STATUS_READ_DELAY);
198 while (time_before(jiffies, timeout)) {
199 regmap_read(drv->llcc_map, status_reg, &slice_status);
200 if (!(slice_status & status))
201 return 0;
202 }
203
204 return -ETIMEDOUT;
205 }
206
207 /**
208 * llcc_slice_activate - Activate the llcc slice
209 * @desc: Pointer to llcc slice descriptor
210 *
211 * A value zero will be returned on success and a negative errno will
212 * be returned in error cases
213 */
> 214 int llcc_slice_activate(struct llcc_slice_desc *desc)
215 {
216 int rc = -EINVAL;
217 u32 act_ctrl_val;
218 struct llcc_drv_data *drv;
219
220 if (desc == NULL) {
221 pr_err("Input descriptor supplied is invalid\n");
222 return rc;
223 }
224
225 drv = dev_get_drvdata(desc->dev);
226 if (!drv) {
227 pr_err("Invalid device pointer in the desc\n");
228 return rc;
229 }
230
231 mutex_lock(&drv->slice_mutex);
232 if (test_bit(desc->llcc_slice_id, drv->llcc_slice_map)) {
233 mutex_unlock(&drv->slice_mutex);
234 return 0;
235 }
236
237 act_ctrl_val = ACT_CTRL_OPCODE_ACTIVATE << ACT_CTRL_OPCODE_SHIFT;
238 act_ctrl_val |= ACT_CTRL_ACT_TRIG;
239
240 rc = llcc_update_act_ctrl(drv, desc->llcc_slice_id, act_ctrl_val,
241 DEACTIVATE);
242
243 __set_bit(desc->llcc_slice_id, drv->llcc_slice_map);
244 mutex_unlock(&drv->slice_mutex);
245
246 return rc;
247 }
248 EXPORT_SYMBOL(llcc_slice_activate);
249
250 /**
251 * llcc_slice_deactivate - Deactivate the llcc slice
252 * @desc: Pointer to llcc slice descriptor
253 *
254 * A value zero will be returned on success and a negative errno will
255 * be returned in error cases
256 */
> 257 int llcc_slice_deactivate(struct llcc_slice_desc *desc)
258 {
259 u32 act_ctrl_val;
260 int rc = -EINVAL;
261 struct llcc_drv_data *drv;
262
263 if (desc == NULL) {
264 pr_err("Input descriptor supplied is invalid\n");
265 return rc;
266 }
267
268 drv = dev_get_drvdata(desc->dev);
269 if (!drv) {
270 pr_err("Invalid device pointer in the desc\n");
271 return rc;
272 }
273
274 mutex_lock(&drv->slice_mutex);
275 if (!test_bit(desc->llcc_slice_id, drv->llcc_slice_map)) {
276 mutex_unlock(&drv->slice_mutex);
277 return 0;
278 }
279 act_ctrl_val = ACT_CTRL_OPCODE_DEACTIVATE << ACT_CTRL_OPCODE_SHIFT;
280 act_ctrl_val |= ACT_CTRL_ACT_TRIG;
281
282 rc = llcc_update_act_ctrl(drv, desc->llcc_slice_id, act_ctrl_val,
283 ACTIVATE);
284
285 __clear_bit(desc->llcc_slice_id, drv->llcc_slice_map);
286 mutex_unlock(&drv->slice_mutex);
287
288 return rc;
289 }
290 EXPORT_SYMBOL(llcc_slice_deactivate);
291
292 /**
293 * llcc_get_slice_id - return the slice id
294 * @desc: Pointer to llcc slice descriptor
295 *
296 * A positive value will be returned on success and a negative errno will
297 * be returned on error
298 */
> 299 int llcc_get_slice_id(struct llcc_slice_desc *desc)
300 {
301 if (!desc)
302 return -EINVAL;
303
304 return desc->llcc_slice_id;
305 }
306 EXPORT_SYMBOL(llcc_get_slice_id);
307
308 /**
309 * llcc_get_slice_size - return the slice id
310 * @desc: Pointer to llcc slice descriptor
311 *
312 * A positive value will be returned on success and zero will returned on
313 * error
314 */
> 315 size_t llcc_get_slice_size(struct llcc_slice_desc *desc)
316 {
317 if (!desc)
318 return 0;
319
320 return desc->llcc_slice_size;
321 }
322 EXPORT_SYMBOL(llcc_get_slice_size);
323

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip