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

Attachment: .config.gz
Description: application/gzip

Reply via email to