lkml.org 
[lkml]   [2018]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] [SCHEME 2]powernv/cpuidle: Add support for new idle state device-tree format
Hi Akshay,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on v4.17-rc7 next-20180531]
[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/Akshay-Adiga/powernv-cpuidle-Add-support-for-new-idle-state-device-tree-format/20180601-202708
base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: powerpc-allmodconfig (attached as .config)
compiler: powerpc64-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=powerpc

All errors (new ones prefixed by >>):

drivers//cpuidle/cpuidle-powernv.c: In function 'powernv_add_idle_states':
>> drivers//cpuidle/cpuidle-powernv.c:403:36: error: 'versions' undeclared (first use in this function)
"ibm,cpu-idle-state-versions", versions, additional_states) < 0) {
^~~~~~~~
drivers//cpuidle/cpuidle-powernv.c:403:36: note: each undeclared identifier is reported only once for each function it appears in
>> drivers//cpuidle/cpuidle-powernv.c:436:17: error: 'version' undeclared (first use in this function); did you mean 'versions'?
if (!( strcmp(version[i] , "ibm,idle-state-v1"))
^~~~~~~
versions
>> drivers//cpuidle/cpuidle-powernv.c:437:5: error: expected ')' before 'continue'
continue;
^~~~~~~~
>> drivers//cpuidle/cpuidle-powernv.c:511:2: error: expected expression before '}' token
}
^
drivers//cpuidle/cpuidle-powernv.c:426:8: warning: unused variable 'stops_timebase' [-Wunused-variable]
bool stops_timebase = false;
^~~~~~~~~~~~~~
drivers//cpuidle/cpuidle-powernv.c:425:30: warning: unused variable 'target_residency' [-Wunused-variable]
unsigned int exit_latency, target_residency;
^~~~~~~~~~~~~~~~
drivers//cpuidle/cpuidle-powernv.c:425:16: warning: unused variable 'exit_latency' [-Wunused-variable]
unsigned int exit_latency, target_residency;
^~~~~~~~~~~~
At top level:
drivers//cpuidle/cpuidle-powernv.c:121:12: warning: 'stop_loop' defined but not used [-Wunused-function]
static int stop_loop(struct cpuidle_device *dev,
^~~~~~~~~
drivers//cpuidle/cpuidle-powernv.c:95:12: warning: 'fastsleep_loop' defined but not used [-Wunused-function]
static int fastsleep_loop(struct cpuidle_device *dev,
^~~~~~~~~~~~~~
drivers//cpuidle/cpuidle-powernv.c:84:12: warning: 'nap_loop' defined but not used [-Wunused-function]
static int nap_loop(struct cpuidle_device *dev,
^~~~~~~~

vim +/versions +403 drivers//cpuidle/cpuidle-powernv.c

240
241 extern u32 pnv_get_supported_cpuidle_states(void);
242 static int powernv_add_idle_states(void)
243 {
244 struct device_node *power_mgt,*np_new;
245 int nr_idle_states = 1; /* Snooze */
246 int dt_idle_states, count, additional_states;
247 u32 latency_ns[CPUIDLE_STATE_MAX];
248 u32 residency_ns[CPUIDLE_STATE_MAX];
249 u32 flags[CPUIDLE_STATE_MAX];
250 u64 psscr_val[CPUIDLE_STATE_MAX];
251 u64 psscr_mask[CPUIDLE_STATE_MAX];
252 const char *names[CPUIDLE_STATE_MAX];
253 u32 has_stop_states = 0;
254 int i, rc;
255 u32 supported_flags = pnv_get_supported_cpuidle_states();
256
257
258 /* Currently we have snooze statically defined */
259
260 power_mgt = of_find_node_by_path("/ibm,opal/power-mgt");
261 if (!power_mgt) {
262 pr_warn("opal: PowerMgmt Node not found\n");
263 goto out;
264 }
265
266 /* Read values of any property to determine the num of idle states */
267 dt_idle_states = of_property_count_u32_elems(power_mgt, "ibm,cpu-idle-state-flags");
268 if (dt_idle_states < 0) {
269 pr_warn("cpuidle-powernv: no idle states found in the DT\n");
270 goto out;
271 }
272
273 count = of_property_count_u32_elems(power_mgt,
274 "ibm,cpu-idle-state-latencies-ns");
275
276 if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags", dt_idle_states,
277 "ibm,cpu-idle-state-latencies-ns",
278 count) != 0)
279 goto out;
280
281 count = of_property_count_strings(power_mgt,
282 "ibm,cpu-idle-state-names");
283 if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags", dt_idle_states,
284 "ibm,cpu-idle-state-names",
285 count) != 0)
286 goto out;
287
288 /*
289 * Since snooze is used as first idle state, max idle states allowed is
290 * CPUIDLE_STATE_MAX -1
291 */
292 if (dt_idle_states > CPUIDLE_STATE_MAX - 1) {
293 pr_warn("cpuidle-powernv: discovered idle states more than allowed");
294 dt_idle_states = CPUIDLE_STATE_MAX - 1;
295 }
296
297 if (of_property_read_u32_array(power_mgt,
298 "ibm,cpu-idle-state-flags", flags, dt_idle_states)) {
299 pr_warn("cpuidle-powernv : missing ibm,cpu-idle-state-flags in DT\n");
300 goto out;
301 }
302
303 if (of_property_read_u32_array(power_mgt,
304 "ibm,cpu-idle-state-latencies-ns", latency_ns,
305 dt_idle_states)) {
306 pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-latencies-ns in DT\n");
307 goto out;
308 }
309 if (of_property_read_string_array(power_mgt,
310 "ibm,cpu-idle-state-names", names, dt_idle_states) < 0) {
311 pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-names in DT\n");
312 goto out;
313 }
314
315 /*
316 * If the idle states use stop instruction, probe for psscr values
317 * and psscr mask which are necessary to specify required stop level.
318 */
319 has_stop_states = (flags[0] &
320 (OPAL_PM_STOP_INST_FAST | OPAL_PM_STOP_INST_DEEP));
321 if (has_stop_states) {
322 count = of_property_count_u64_elems(power_mgt,
323 "ibm,cpu-idle-state-psscr");
324 if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags",
325 dt_idle_states,
326 "ibm,cpu-idle-state-psscr",
327 count) != 0)
328 goto out;
329
330 count = of_property_count_u64_elems(power_mgt,
331 "ibm,cpu-idle-state-psscr-mask");
332 if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags",
333 dt_idle_states,
334 "ibm,cpu-idle-state-psscr-mask",
335 count) != 0)
336 goto out;
337
338 if (of_property_read_u64_array(power_mgt,
339 "ibm,cpu-idle-state-psscr", psscr_val, dt_idle_states)) {
340 pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-psscr in DT\n");
341 goto out;
342 }
343
344 if (of_property_read_u64_array(power_mgt,
345 "ibm,cpu-idle-state-psscr-mask",
346 psscr_mask, dt_idle_states)) {
347 pr_warn("cpuidle-powernv:Missing ibm,cpu-idle-state-psscr-mask in DT\n");
348 goto out;
349 }
350 }
351
352 count = of_property_count_u32_elems(power_mgt,
353 "ibm,cpu-idle-state-residency-ns");
354
355 if (count < 0) {
356 rc = count;
357 } else if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags",
358 dt_idle_states,
359 "ibm,cpu-idle-state-residency-ns",
360 count) != 0) {
361 goto out;
362 } else {
363 rc = of_property_read_u32_array(power_mgt,
364 "ibm,cpu-idle-state-residency-ns",
365 residency_ns, dt_idle_states);
366 }
367
368 /* Support new dt format for idle states */
369
370 np_new = of_find_node_by_path("/ibm,opal/power-mgt/ibm,idle-states");
371 if (!np_new) {
372 pr_info("opal: PowerMgmt/ibm,idle-states Node not found\n");
373 } else {
374 additional_states = of_property_count_u32_elems(np_new,
375 "ibm,cpu-idle-state-flags");
376 if (additional_states < 0)
377 pr_info("cpuidle-powernv: no idle states found in the DT\n");
378 else {
379 if (of_property_read_u32_array(np_new,
380 "ibm,cpu-idle-state-flags", flags+dt_idle_states, additional_states)) {
381 pr_warn("cpuidle-powernv : missing ibm,cpu-idle-state-flags in DT\n");
382 goto out;
383 }
384
385 if (of_property_read_u32_array(np_new,
386 "ibm,cpu-idle-state-latencies-ns", latency_ns+dt_idle_states,
387 additional_states)) {
388 pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-latencies-ns in DT\n");
389 goto out;
390 }
391 if (of_property_read_u32_array(np_new,
392 "ibm,cpu-idle-state-residencies-ns", residency_ns+dt_idle_states,
393 additional_states)) {
394 pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-residencies-ns in DT\n");
395 goto out;
396 }
397 if (of_property_read_string_array(np_new,
398 "ibm,cpu-idle-state-names", names+dt_idle_states, additional_states) < 0) {
399 pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-names in DT\n");
400 goto out;
401 }
402 if (of_property_read_string_array(np_new,
> 403 "ibm,cpu-idle-state-versions", versions, additional_states) < 0) {
404 pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-names in DT\n");
405 goto out;
406 }
407 if (of_property_read_u64_array(np_new,
408 "ibm,cpu-idle-state-psscr", psscr_val+ dt_idle_states, additional_states)) {
409 pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-psscr in DT\n");
410 goto out;
411 }
412
413 if (of_property_read_u64_array(power_mgt,
414 "ibm,cpu-idle-state-psscr-mask",
415 psscr_mask + dt_idle_states,additional_states)) {
416 pr_warn("cpuidle-powernv:Missing ibm,cpu-idle-state-psscr-mask in DT\n");
417 goto out;
418 }
419
420
421 dt_idle_states += additional_states;
422 }
423 }
424 for (i = 0; i < dt_idle_states; i++) {
425 unsigned int exit_latency, target_residency;
426 bool stops_timebase = false;
427
428 /*
429 * Skip the platform idle state whose flag isn't in
430 * the supported_cpuidle_states flag mask.
431 */
432 if ((flags[i] & supported_flags) != flags[i])
433 continue;
434
435 /* Supported version */
> 436 if (!( strcmp(version[i] , "ibm,idle-state-v1"))
> 437 continue;
438
439 /*
440 * If an idle state has exit latency beyond
441 * POWERNV_THRESHOLD_LATENCY_NS then don't use it
442 * in cpu-idle.
443 */
444 if (latency_ns[i] > POWERNV_THRESHOLD_LATENCY_NS)
445 continue;
446 /*
447 * Firmware passes residency and latency values in ns.
448 * cpuidle expects it in us.
449 */
450 exit_latency = DIV_ROUND_UP(latency_ns[i], 1000);
451 if (!rc)
452 target_residency = DIV_ROUND_UP(residency_ns[i], 1000);
453 else
454 target_residency = 0;
455
456 if (has_stop_states) {
457 int err = validate_psscr_val_mask(&psscr_val[i],
458 &psscr_mask[i],
459 flags[i]);
460 if (err) {
461 report_invalid_psscr_val(psscr_val[i], err);
462 continue;
463 }
464 }
465
466 if (flags[i] & OPAL_PM_TIMEBASE_STOP)
467 stops_timebase = true;
468
469 /*
470 * For nap and fastsleep, use default target_residency
471 * values if f/w does not expose it.
472 */
473 if (flags[i] & OPAL_PM_NAP_ENABLED) {
474 if (!rc)
475 target_residency = 100;
476 /* Add NAP state */
477 add_powernv_state(nr_idle_states, "Nap",
478 CPUIDLE_FLAG_NONE, nap_loop,
479 target_residency, exit_latency, 0, 0);
480 } else if (has_stop_states && !stops_timebase) {
481 add_powernv_state(nr_idle_states, names[i],
482 CPUIDLE_FLAG_NONE, stop_loop,
483 target_residency, exit_latency,
484 psscr_val[i], psscr_mask[i]);
485 }
486
487 /*
488 * All cpuidle states with CPUIDLE_FLAG_TIMER_STOP set must come
489 * within this config dependency check.
490 */
491 #ifdef CONFIG_TICK_ONESHOT
492 else if (flags[i] & OPAL_PM_SLEEP_ENABLED ||
493 flags[i] & OPAL_PM_SLEEP_ENABLED_ER1) {
494 if (!rc)
495 target_residency = 300000;
496 /* Add FASTSLEEP state */
497 add_powernv_state(nr_idle_states, "FastSleep",
498 CPUIDLE_FLAG_TIMER_STOP,
499 fastsleep_loop,
500 target_residency, exit_latency, 0, 0);
501 } else if (has_stop_states && stops_timebase) {
502 add_powernv_state(nr_idle_states, names[i],
503 CPUIDLE_FLAG_TIMER_STOP, stop_loop,
504 target_residency, exit_latency,
505 psscr_val[i], psscr_mask[i]);
506 }
507 #endif
508 else
509 continue;
510 nr_idle_states++;
> 511 }
512 out:
513 return nr_idle_states;
514 }
515

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[unhandled content-type:application/gzip]
\
 
 \ /
  Last update: 2018-06-01 18:41    [W:0.076 / U:0.244 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site