All of lore.kernel.org
 help / color / mirror / Atom feed
* [intel-lts:4.19/android_t 13367/30000] drivers/of/irq.c:284:73: sparse: sparse: incorrect type in initializer (different base types)
@ 2023-10-14 16:13 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2023-10-14 16:13 UTC (permalink / raw)
  Cc: oe-kbuild-all

tree:   https://github.com/intel/linux-intel-lts.git 4.19/android_t
head:   247bc655e03e4ac3632b21081ca56b813a644dcf
commit: a323430753b95d8ac29fc0b3c2502b50f6073737 [13367/30000] ANDROID: GKI: of: irq: add helper to remap interrupts to another irqdomain
config: x86_64-randconfig-122-20230910 (https://download.01.org/0day-ci/archive/20231015/202310150009.fIktcysF-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231015/202310150009.fIktcysF-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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202310150009.fIktcysF-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/of/irq.c:284:73: sparse: sparse: incorrect type in initializer (different base types) @@     expected restricted __be32 @@     got int @@
   drivers/of/irq.c:284:73: sparse:     expected restricted __be32
   drivers/of/irq.c:284:73: sparse:     got int

vim +284 drivers/of/irq.c

   276	
   277	int of_irq_domain_map(const struct irq_fwspec *in, struct irq_fwspec *out)
   278	{
   279		char *stem_name;
   280		char *cells_name, *map_name = NULL, *mask_name = NULL;
   281		char *pass_name = NULL;
   282		struct device_node *cur, *new = NULL;
   283		const __be32 *map, *mask, *pass;
 > 284		static const __be32 dummy_mask[] = { [0 ... MAX_PHANDLE_ARGS] = ~0 };
   285		static const __be32 dummy_pass[] = { [0 ... MAX_PHANDLE_ARGS] = 0 };
   286		__be32 initial_match_array[MAX_PHANDLE_ARGS];
   287		const __be32 *match_array = initial_match_array;
   288		int i, ret, map_len, match;
   289		u32 in_size, out_size;
   290	
   291		stem_name = "";
   292		cells_name = "#interrupt-cells";
   293	
   294		ret = -ENOMEM;
   295		map_name = kasprintf(GFP_KERNEL, "irqdomain%s-map", stem_name);
   296		if (!map_name)
   297			goto free;
   298	
   299		mask_name = kasprintf(GFP_KERNEL, "irqdomain%s-map-mask", stem_name);
   300		if (!mask_name)
   301			goto free;
   302	
   303		pass_name = kasprintf(GFP_KERNEL, "irqdomain%s-map-pass-thru", stem_name);
   304		if (!pass_name)
   305			goto free;
   306	
   307		/* Get the #interrupt-cells property */
   308		cur = to_of_node(in->fwnode);
   309		ret = of_property_read_u32(cur, cells_name, &in_size);
   310		if (ret < 0)
   311			goto put;
   312	
   313		/* Precalculate the match array - this simplifies match loop */
   314		for (i = 0; i < in_size; i++)
   315			initial_match_array[i] = cpu_to_be32(in->param[i]);
   316	
   317		ret = -EINVAL;
   318		/* Get the irqdomain-map property */
   319		map = of_get_property(cur, map_name, &map_len);
   320		if (!map) {
   321			ret = 0;
   322			goto free;
   323		}
   324		map_len /= sizeof(u32);
   325	
   326		/* Get the irqdomain-map-mask property (optional) */
   327		mask = of_get_property(cur, mask_name, NULL);
   328		if (!mask)
   329			mask = dummy_mask;
   330		/* Iterate through irqdomain-map property */
   331		match = 0;
   332		while (map_len > (in_size + 1) && !match) {
   333			/* Compare specifiers */
   334			match = 1;
   335			for (i = 0; i < in_size; i++, map_len--)
   336				match &= !((match_array[i] ^ *map++) & mask[i]);
   337	
   338			of_node_put(new);
   339			new = of_find_node_by_phandle(be32_to_cpup(map));
   340			map++;
   341			map_len--;
   342	
   343			/* Check if not found */
   344			if (!new)
   345				goto put;
   346	
   347			if (!of_device_is_available(new))
   348				match = 0;
   349	
   350			ret = of_property_read_u32(new, cells_name, &out_size);
   351			if (ret)
   352				goto put;
   353	
   354			/* Check for malformed properties */
   355			if (WARN_ON(out_size > MAX_PHANDLE_ARGS))
   356				goto put;
   357			if (map_len < out_size)
   358				goto put;
   359	
   360			/* Move forward by new node's #interrupt-cells amount */
   361			map += out_size;
   362			map_len -= out_size;
   363		}
   364		if (match) {
   365			/* Get the irqdomain-map-pass-thru property (optional) */
   366			pass = of_get_property(cur, pass_name, NULL);
   367			if (!pass)
   368				pass = dummy_pass;
   369	
   370			/*
   371			 * Successfully parsed a irqdomain-map translation; copy new
   372			 * specifier into the out structure, keeping the
   373			 * bits specified in irqdomain-map-pass-thru.
   374			 */
   375			match_array = map - out_size;
   376			for (i = 0; i < out_size; i++) {
   377				__be32 val = *(map - out_size + i);
   378	
   379				out->param[i] = in->param[i];
   380				if (i < in_size) {
   381					val &= ~pass[i];
   382					val |= cpu_to_be32(out->param[i]) & pass[i];
   383				}
   384	
   385				out->param[i] = be32_to_cpu(val);
   386			}
   387			out->param_count = in_size = out_size;
   388			out->fwnode = of_node_to_fwnode(new);
   389		}
   390	put:
   391		of_node_put(cur);
   392		of_node_put(new);
   393	free:
   394		kfree(mask_name);
   395		kfree(map_name);
   396		kfree(pass_name);
   397	
   398		return ret;
   399	}
   400	EXPORT_SYMBOL(of_irq_domain_map);
   401	

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [intel-lts:4.19/android_t 13367/30000] drivers/of/irq.c:284:73: sparse: sparse: incorrect type in initializer (different base types)
@ 2023-11-11 15:51 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2023-11-11 15:51 UTC (permalink / raw)
  Cc: oe-kbuild-all

tree:   https://github.com/intel/linux-intel-lts.git 4.19/android_t
head:   247bc655e03e4ac3632b21081ca56b813a644dcf
commit: a323430753b95d8ac29fc0b3c2502b50f6073737 [13367/30000] ANDROID: GKI: of: irq: add helper to remap interrupts to another irqdomain
config: x86_64-randconfig-122-20230910 (https://download.01.org/0day-ci/archive/20231111/202311112330.3CITZjfq-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231111/202311112330.3CITZjfq-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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311112330.3CITZjfq-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/of/irq.c:284:73: sparse: sparse: incorrect type in initializer (different base types) @@     expected restricted __be32 @@     got int @@
   drivers/of/irq.c:284:73: sparse:     expected restricted __be32
   drivers/of/irq.c:284:73: sparse:     got int

vim +284 drivers/of/irq.c

   276	
   277	int of_irq_domain_map(const struct irq_fwspec *in, struct irq_fwspec *out)
   278	{
   279		char *stem_name;
   280		char *cells_name, *map_name = NULL, *mask_name = NULL;
   281		char *pass_name = NULL;
   282		struct device_node *cur, *new = NULL;
   283		const __be32 *map, *mask, *pass;
 > 284		static const __be32 dummy_mask[] = { [0 ... MAX_PHANDLE_ARGS] = ~0 };
   285		static const __be32 dummy_pass[] = { [0 ... MAX_PHANDLE_ARGS] = 0 };
   286		__be32 initial_match_array[MAX_PHANDLE_ARGS];
   287		const __be32 *match_array = initial_match_array;
   288		int i, ret, map_len, match;
   289		u32 in_size, out_size;
   290	
   291		stem_name = "";
   292		cells_name = "#interrupt-cells";
   293	
   294		ret = -ENOMEM;
   295		map_name = kasprintf(GFP_KERNEL, "irqdomain%s-map", stem_name);
   296		if (!map_name)
   297			goto free;
   298	
   299		mask_name = kasprintf(GFP_KERNEL, "irqdomain%s-map-mask", stem_name);
   300		if (!mask_name)
   301			goto free;
   302	
   303		pass_name = kasprintf(GFP_KERNEL, "irqdomain%s-map-pass-thru", stem_name);
   304		if (!pass_name)
   305			goto free;
   306	
   307		/* Get the #interrupt-cells property */
   308		cur = to_of_node(in->fwnode);
   309		ret = of_property_read_u32(cur, cells_name, &in_size);
   310		if (ret < 0)
   311			goto put;
   312	
   313		/* Precalculate the match array - this simplifies match loop */
   314		for (i = 0; i < in_size; i++)
   315			initial_match_array[i] = cpu_to_be32(in->param[i]);
   316	
   317		ret = -EINVAL;
   318		/* Get the irqdomain-map property */
   319		map = of_get_property(cur, map_name, &map_len);
   320		if (!map) {
   321			ret = 0;
   322			goto free;
   323		}
   324		map_len /= sizeof(u32);
   325	
   326		/* Get the irqdomain-map-mask property (optional) */
   327		mask = of_get_property(cur, mask_name, NULL);
   328		if (!mask)
   329			mask = dummy_mask;
   330		/* Iterate through irqdomain-map property */
   331		match = 0;
   332		while (map_len > (in_size + 1) && !match) {
   333			/* Compare specifiers */
   334			match = 1;
   335			for (i = 0; i < in_size; i++, map_len--)
   336				match &= !((match_array[i] ^ *map++) & mask[i]);
   337	
   338			of_node_put(new);
   339			new = of_find_node_by_phandle(be32_to_cpup(map));
   340			map++;
   341			map_len--;
   342	
   343			/* Check if not found */
   344			if (!new)
   345				goto put;
   346	
   347			if (!of_device_is_available(new))
   348				match = 0;
   349	
   350			ret = of_property_read_u32(new, cells_name, &out_size);
   351			if (ret)
   352				goto put;
   353	
   354			/* Check for malformed properties */
   355			if (WARN_ON(out_size > MAX_PHANDLE_ARGS))
   356				goto put;
   357			if (map_len < out_size)
   358				goto put;
   359	
   360			/* Move forward by new node's #interrupt-cells amount */
   361			map += out_size;
   362			map_len -= out_size;
   363		}
   364		if (match) {
   365			/* Get the irqdomain-map-pass-thru property (optional) */
   366			pass = of_get_property(cur, pass_name, NULL);
   367			if (!pass)
   368				pass = dummy_pass;
   369	
   370			/*
   371			 * Successfully parsed a irqdomain-map translation; copy new
   372			 * specifier into the out structure, keeping the
   373			 * bits specified in irqdomain-map-pass-thru.
   374			 */
   375			match_array = map - out_size;
   376			for (i = 0; i < out_size; i++) {
   377				__be32 val = *(map - out_size + i);
   378	
   379				out->param[i] = in->param[i];
   380				if (i < in_size) {
   381					val &= ~pass[i];
   382					val |= cpu_to_be32(out->param[i]) & pass[i];
   383				}
   384	
   385				out->param[i] = be32_to_cpu(val);
   386			}
   387			out->param_count = in_size = out_size;
   388			out->fwnode = of_node_to_fwnode(new);
   389		}
   390	put:
   391		of_node_put(cur);
   392		of_node_put(new);
   393	free:
   394		kfree(mask_name);
   395		kfree(map_name);
   396		kfree(pass_name);
   397	
   398		return ret;
   399	}
   400	EXPORT_SYMBOL(of_irq_domain_map);
   401	

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-11-11 15:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-14 16:13 [intel-lts:4.19/android_t 13367/30000] drivers/of/irq.c:284:73: sparse: sparse: incorrect type in initializer (different base types) kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2023-11-11 15:51 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.