lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <202508142109.z6QIwr0w-lkp@intel.com>
Date: Thu, 14 Aug 2025 21:54:17 +0800
From: kernel test robot <lkp@...el.com>
To: Cristian Marussi <cristian.marussi@....com>,
	linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
	arm-scmi@...r.kernel.org, linux-pm@...r.kernel.org
Cc: oe-kbuild-all@...ts.linux.dev, sudeep.holla@....com,
	james.quinlan@...adcom.com, f.fainelli@...il.com,
	vincent.guittot@...aro.org, etienne.carriere@...com,
	peng.fan@....nxp.com, michal.simek@....com, quic_sibis@...cinc.com,
	dan.carpenter@...aro.org, d-gole@...com, souvik.chakravarty@....com,
	Cristian Marussi <cristian.marussi@....com>
Subject: Re: [PATCH 4/8] firmware: arm_scmi: Add SCMIv4.0 Powercap basic
 support

Hi Cristian,

kernel test robot noticed the following build warnings:

[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/bleeding-edge soc/for-next trace/for-next linus/master v6.17-rc1 next-20250814]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Cristian-Marussi/firmware-arm_scmi-Add-an-optional-custom-parameter-to-fastchannel-helpers/20250813-195150
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link:    https://lore.kernel.org/r/20250813114609.1305571-5-cristian.marussi%40arm.com
patch subject: [PATCH 4/8] firmware: arm_scmi: Add SCMIv4.0 Powercap basic support
config: arm64-randconfig-r111-20250814 (https://download.01.org/0day-ci/archive/20250814/202508142109.z6QIwr0w-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 14.3.0
reproduce: (https://download.01.org/0day-ci/archive/20250814/202508142109.z6QIwr0w-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508142109.z6QIwr0w-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/firmware/arm_scmi/powercap.c:302:48: sparse: sparse: restricted __le32 degrades to integer
>> drivers/firmware/arm_scmi/powercap.c:353:25: sparse: sparse: incorrect type in initializer (different base types) @@     expected unsigned int [usertype] flags @@     got restricted __le32 [usertype] attributes @@
   drivers/firmware/arm_scmi/powercap.c:353:25: sparse:     expected unsigned int [usertype] flags
   drivers/firmware/arm_scmi/powercap.c:353:25: sparse:     got restricted __le32 [usertype] attributes

vim +302 drivers/firmware/arm_scmi/powercap.c

   289	
   290	static int
   291	iter_powercap_cpls_process_response(const struct scmi_protocol_handle *ph,
   292					    const void *response,
   293					    struct scmi_iterator_state *st, void *priv)
   294	{
   295		const struct scmi_msg_resp_powercap_cpc *r = response;
   296		struct scmi_cpls_priv *p = priv;
   297		struct scmi_powercap_cpl_info *cpl;
   298	
   299		cpl = &p->cpli[st->desc_index + st->loop_idx];
   300	
   301		cpl->id = le32_to_cpu(r->desc[st->loop_idx].cpli);
 > 302		cpl->cap_config = r->desc[st->loop_idx].flags & BIT(0);
   303	
   304		cpl->min_power_cap = le32_to_cpu(r->desc[st->loop_idx].min_power_cap);
   305		cpl->max_power_cap = le32_to_cpu(r->desc[st->loop_idx].max_power_cap);
   306		cpl->power_cap_step = le32_to_cpu(r->desc[st->loop_idx].power_cap_step);
   307		if (!cpl->power_cap_step && cpl->min_power_cap != cpl->max_power_cap)
   308			return -EINVAL;
   309	
   310		cpl->min_avg_ivl = le32_to_cpu(r->desc[st->loop_idx].min_cai);
   311		cpl->max_avg_ivl = le32_to_cpu(r->desc[st->loop_idx].max_cai);
   312		cpl->avg_ivl_step = le32_to_cpu(r->desc[st->loop_idx].cai_step);
   313		if (!cpl->avg_ivl_step && cpl->min_avg_ivl != cpl->max_avg_ivl)
   314			return -EINVAL;
   315	
   316		cpl->avg_ivl_config = cpl->min_avg_ivl != cpl->max_avg_ivl;
   317	
   318		strscpy(cpl->name, r->desc[st->loop_idx].name, SCMI_SHORT_NAME_MAX_SIZE);
   319	
   320		return 0;
   321	}
   322	
   323	static int scmi_powercap_cpls_enumerate(const struct scmi_protocol_handle *ph,
   324						struct scmi_powercap_info *dom_info)
   325	{
   326		void *iter;
   327		struct scmi_iterator_ops ops = {
   328			.prepare_message = iter_powercap_cpls_prepare_message,
   329			.update_state = iter_powercap_cpls_update_state,
   330			.process_response = iter_powercap_cpls_process_response,
   331		};
   332		struct scmi_cpls_priv cpriv = {
   333			.domain_id = dom_info->id,
   334			.cpli = dom_info->cpli,
   335		};
   336	
   337		iter = ph->hops->iter_response_init(ph, &ops, dom_info->num_cpli,
   338						    POWERCAP_CPC_ATTRIBUTES,
   339						    sizeof(struct scmi_msg_powercap_cpc),
   340						    &cpriv);
   341		if (IS_ERR(iter))
   342			return PTR_ERR(iter);
   343	
   344		return ph->hops->iter_response_run(iter);
   345	}
   346	
   347	static int
   348	scmi_powercap_domain_attrs_process(const struct scmi_protocol_handle *ph,
   349					   struct powercap_info *pinfo,
   350					   struct scmi_powercap_info *dom_info, void *r)
   351	{
   352		struct scmi_msg_resp_powercap_domain_attributes *resp = r;
 > 353		u32 flags = resp->attributes;
   354		bool cap_config;
   355		int ret;
   356	
   357		cap_config = SUPPORTS_POWERCAP_CAP_CONFIGURATION(flags);
   358		if (PROTOCOL_REV_MAJOR(pinfo->version) < 0x3) {
   359			dom_info->num_cpli = 1;
   360		} else {
   361			dom_info->num_cpli = le32_get_bits(resp->attributes,
   362							   GENMASK(18, 15));
   363			if (cap_config && !dom_info->num_cpli)
   364				return -EINVAL;
   365		}
   366	
   367		dom_info->cpli = devm_kcalloc(ph->dev, dom_info->num_cpli,
   368					      sizeof(*dom_info->cpli), GFP_KERNEL);
   369		if (!dom_info->cpli)
   370			return -ENOMEM;
   371	
   372		if (pinfo->notify_cap_cmd) {
   373			if (PROTOCOL_REV_MAJOR(pinfo->version) < 0x3)
   374				dom_info->notify_powercap_cap_change =
   375					SUPPORTS_POWERCAP_CAP_CHANGE_NOTIFY(flags);
   376			else
   377				dom_info->notify_powercap_cap_change =
   378					SUPPORTS_POWERCAP_CAP_CHANGE_NOTIFY_V3(flags);
   379		}
   380	
   381		if (pinfo->notify_measurements_cmd)
   382			dom_info->notify_powercap_measurement_change =
   383				SUPPORTS_POWERCAP_MEASUREMENTS_CHANGE_NOTIFY(flags);
   384	
   385	
   386		dom_info->extended_names = SUPPORTS_EXTENDED_NAMES(flags);
   387	
   388		dom_info->async_powercap_cap_set =
   389			SUPPORTS_ASYNC_POWERCAP_CAP_SET(flags);
   390	
   391		dom_info->powercap_monitoring =
   392			SUPPORTS_POWERCAP_MONITORING(flags);
   393		dom_info->powercap_scale_mw =
   394			SUPPORTS_POWER_UNITS_MW(flags);
   395		dom_info->powercap_scale_uw =
   396			SUPPORTS_POWER_UNITS_UW(flags);
   397		dom_info->fastchannels =
   398			SUPPORTS_POWERCAP_FASTCHANNELS(flags);
   399	
   400		strscpy(dom_info->name, resp->name, SCMI_SHORT_NAME_MAX_SIZE);
   401	
   402		dom_info->sustainable_power =
   403			le32_to_cpu(resp->sustainable_power);
   404		dom_info->accuracy = le32_to_cpu(resp->accuracy);
   405	
   406		dom_info->parent_id = le32_to_cpu(resp->parent_id);
   407		if (dom_info->parent_id != SCMI_POWERCAP_ROOT_ZONE_ID &&
   408		    (dom_info->parent_id >= pinfo->num_domains ||
   409		     dom_info->parent_id == dom_info->id)) {
   410			dev_err(ph->dev,
   411				"Platform reported inconsistent parent ID for domain %d - %s\n",
   412				dom_info->id, dom_info->name);
   413			return -ENODEV;
   414		}
   415	
   416		dom_info->cpli[0].id = CPL0;
   417		if (PROTOCOL_REV_MAJOR(pinfo->version) < 0x3)
   418			dom_info->cpli[0].avg_ivl_config =
   419				SUPPORTS_POWERCAP_PAI_CONFIGURATION(flags);
   420		else
   421			dom_info->cpli[0].avg_ivl_config =
   422				SUPPORTS_POWERCAP_CAI_CONFIGURATION(flags);
   423	
   424		if (PROTOCOL_REV_MAJOR(pinfo->version) < 0x3) {
   425			dom_info->cpli[0].min_avg_ivl = le32_to_cpu(resp->min_pai);
   426			dom_info->cpli[0].max_avg_ivl = le32_to_cpu(resp->max_pai);
   427			dom_info->cpli[0].avg_ivl_step = le32_to_cpu(resp->pai_step);
   428		} else {
   429			struct scmi_msg_resp_powercap_domain_attributes_v3 *resp = r;
   430	
   431			dom_info->cpli[0].min_avg_ivl = le32_to_cpu(resp->min_cai);
   432			dom_info->cpli[0].max_avg_ivl = le32_to_cpu(resp->max_cai);
   433			dom_info->cpli[0].avg_ivl_step = le32_to_cpu(resp->cai_step);
   434		}
   435	
   436		ret = scmi_powercap_validate(dom_info->cpli[0].min_avg_ivl,
   437					     dom_info->cpli[0].max_avg_ivl,
   438					     dom_info->cpli[0].avg_ivl_step,
   439					     dom_info->cpli[0].avg_ivl_config);
   440		if (ret) {
   441			dev_err(ph->dev,
   442				"Platform reported inconsistent PAI config for domain %d - %s\n",
   443				dom_info->id, dom_info->name);
   444			return ret;
   445		}
   446	
   447		dom_info->cpli[0].cap_config = cap_config;
   448		dom_info->cpli[0].min_power_cap = le32_to_cpu(resp->min_power_cap);
   449		dom_info->cpli[0].max_power_cap = le32_to_cpu(resp->max_power_cap);
   450		dom_info->cpli[0].power_cap_step = le32_to_cpu(resp->power_cap_step);
   451		ret = scmi_powercap_validate(dom_info->cpli[0].min_power_cap,
   452					     dom_info->cpli[0].max_power_cap,
   453					     dom_info->cpli[0].power_cap_step,
   454					     dom_info->cpli[0].cap_config);
   455		if (ret) {
   456			dev_err(ph->dev,
   457				"Platform reported inconsistent CAP config for domain %d - %s\n",
   458				dom_info->id, dom_info->name);
   459			return ret;
   460		}
   461		/* Just using same short name */
   462		strscpy(dom_info->cpli[0].name, dom_info->name, SCMI_SHORT_NAME_MAX_SIZE);
   463	
   464		return 0;
   465	}
   466	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ