Re: [PATCH 04/12] i3c: master: Support ACPI enumeration

kernel test robot <[email protected]>
Newsgroups dev.linux.lists.acpica-devel,dev.linux.lists.llvm,dev.linux.lists.oe-kbuild-all,org.infradead.lists.linux-i3c,org.kernel.vger.linux-acpi,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-hwmon,org.kernel.vger.linux-kernel,org.kernel.vger.linux-tegra
Message-ID <[email protected]>
Hi Akhil,

kernel test robot noticed the following build errors:

[auto build test ERROR on next-20260320]
[also build test ERROR on linus/master v7.0-rc4]
[cannot apply to i3c/i3c/next rafael-pm/linux-next rafael-pm/bleeding-edge groeck-staging/hwmon-next v7.0-rc4 v7.0-rc3 v7.0-rc2]
[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/Akhil-R/dt-bindings-i3c-Add-mipi-i3c-static-method-to-support-SETAASA/20260322-174037
base:   next-20260320
patch link:    https://lore.kernel.org/r/20260318172820.13771-5-akhilrajeev%40nvidia.com
patch subject: [PATCH 04/12] i3c: master: Support ACPI enumeration
config: hexagon-randconfig-002-20260322 (https://download.01.org/0day-ci/archive/20260323/[email protected]/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 4abb927bacf37f18f6359a41639a6d1b3bffffb5)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260323/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

>> drivers/i3c/master.c:2449:9: error: call to undeclared function 'acpi_dev_get_resources'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    2449 |                 ret = acpi_dev_get_resources(adev, &resources,
         |                       ^
   drivers/i3c/master.c:2449:9: note: did you mean 'acpi_get_event_resources'?
   include/acpi/acpixf.h:816:9: note: 'acpi_get_event_resources' declared here
     816 |                              acpi_get_event_resources(acpi_handle device_handle,
         |                              ^
   include/acpi/platform/aclinux.h:93:21: note: expanded from macro 'ACPI_EXTERNAL_RETURN_STATUS'
      93 |         static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);}
         |                            ^
>> drivers/i3c/master.c:2455:3: error: call to undeclared function 'acpi_dev_free_resource_list'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    2455 |                 acpi_dev_free_resource_list(&resources);
         |                 ^
   drivers/i3c/master.c:2556:2: error: unknown type name 'acpi_bus_address'; did you mean 'acpi_io_address'?
    2556 |         acpi_bus_address adr;
         |         ^~~~~~~~~~~~~~~~
         |         acpi_io_address
   include/acpi/actypes.h:187:13: note: 'acpi_io_address' declared here
     187 | typedef u64 acpi_io_address;
         |             ^
>> drivers/i3c/master.c:2563:7: error: call to undeclared function 'acpi_has_method'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    2563 |         if (!acpi_has_method(adev->handle, "_ADR"))
         |              ^
   drivers/i3c/master.c:2563:7: note: did you mean 'acpi_has_watchdog'?
   include/linux/acpi.h:1504:20: note: 'acpi_has_watchdog' declared here
    1504 | static inline bool acpi_has_watchdog(void) { return false; }
         |                    ^
>> drivers/i3c/master.c:2563:27: error: incomplete definition of type 'struct acpi_device'
    2563 |         if (!acpi_has_method(adev->handle, "_ADR"))
         |                              ~~~~^
   include/linux/device/bus.h:224:8: note: forward declaration of 'struct acpi_device'
     224 | struct acpi_device;
         |        ^
>> drivers/i3c/master.c:2566:8: error: call to undeclared function 'acpi_device_adr'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    2566 |         adr = acpi_device_adr(adev);
         |               ^
   drivers/i3c/master.c:2566:8: note: did you mean 'acpi_device_handle'?
   include/linux/acpi.h:883:27: note: 'acpi_device_handle' declared here
     883 | static inline acpi_handle acpi_device_handle(struct acpi_device *adev)
         |                           ^
   drivers/i3c/master.c:2674:9: error: call to undeclared function 'acpi_dev_get_resources'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    2674 |                 ret = acpi_dev_get_resources(adev, &resources,
         |                       ^
   drivers/i3c/master.c:2683:3: error: call to undeclared function 'acpi_dev_free_resource_list'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    2683 |                 acpi_dev_free_resource_list(&resources);
         |                 ^
   8 errors generated.


vim +/acpi_dev_get_resources +2449 drivers/i3c/master.c

  2423	
  2424	static int
  2425	i3c_master_add_i2c_boardinfo(struct i3c_master_controller *master,
  2426				     struct fwnode_handle *fwnode, u32 *reg)
  2427	{
  2428		struct i2c_dev_boardinfo *boardinfo;
  2429		struct device *dev = &master->dev;
  2430		struct acpi_device *adev;
  2431		LIST_HEAD(resources);
  2432		int ret;
  2433	
  2434		boardinfo = devm_kzalloc(dev, sizeof(*boardinfo), GFP_KERNEL);
  2435		if (!boardinfo)
  2436			return -ENOMEM;
  2437	
  2438		if (is_of_node(fwnode)) {
  2439			ret = of_i2c_get_board_info(dev, to_of_node(fwnode), &boardinfo->base);
  2440			if (ret)
  2441				return ret;
  2442	
  2443			/* LVR is encoded in reg[2] for Device Tree. */
  2444			boardinfo->lvr = reg[2];
  2445		} else if (is_acpi_device_node(fwnode)) {
  2446			adev = to_acpi_device_node(fwnode);
  2447			boardinfo->base.fwnode = acpi_fwnode_handle(adev);
  2448	
> 2449			ret = acpi_dev_get_resources(adev, &resources,
  2450						     i3c_acpi_get_i2c_resource, boardinfo);
  2451	
  2452			if (ret < 0)
  2453				return ret;
  2454	
> 2455			acpi_dev_free_resource_list(&resources);
  2456	
  2457			if (!boardinfo->base.addr)
  2458				return -ENODEV;
  2459		} else {
  2460			return -EINVAL;
  2461		}
  2462	
  2463		/*
  2464		 * The I3C Specification does not clearly say I2C devices with 10-bit
  2465		 * address are supported. These devices can't be passed properly through
  2466		 * DEFSLVS command.
  2467		 */
  2468		if (boardinfo->base.flags & I2C_CLIENT_TEN) {
  2469			dev_err(dev, "I2C device with 10 bit address not supported.");
  2470			return -EOPNOTSUPP;
  2471		}
  2472	
  2473		list_add_tail(&boardinfo->node, &master->boardinfo.i2c);
  2474		fwnode_handle_get(fwnode);
  2475	
  2476		return 0;
  2477	}
  2478	
  2479	static int
  2480	i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master,
  2481				     struct fwnode_handle *fwnode, u32 *reg)
  2482	{
  2483		struct i3c_dev_boardinfo *boardinfo;
  2484		struct device *dev = &master->dev;
  2485		enum i3c_addr_slot_status addrstatus;
  2486		u32 init_dyn_addr = 0;
  2487	
  2488		boardinfo = devm_kzalloc(dev, sizeof(*boardinfo), GFP_KERNEL);
  2489		if (!boardinfo)
  2490			return -ENOMEM;
  2491	
  2492		if (reg[0]) {
  2493			if (reg[0] > I3C_MAX_ADDR)
  2494				return -EINVAL;
  2495	
  2496			addrstatus = i3c_bus_get_addr_slot_status(&master->bus,
  2497								  reg[0]);
  2498			if (addrstatus != I3C_ADDR_SLOT_FREE)
  2499				return -EINVAL;
  2500		}
  2501	
  2502		boardinfo->static_addr = reg[0];
  2503	
  2504		if (!fwnode_property_read_u32(fwnode, "assigned-address", &init_dyn_addr)) {
  2505			if (init_dyn_addr > I3C_MAX_ADDR)
  2506				return -EINVAL;
  2507	
  2508			addrstatus = i3c_bus_get_addr_slot_status(&master->bus,
  2509								  init_dyn_addr);
  2510			if (addrstatus != I3C_ADDR_SLOT_FREE)
  2511				return -EINVAL;
  2512		}
  2513	
  2514		boardinfo->pid = ((u64)reg[1] << 32) | reg[2];
  2515	
  2516		if ((boardinfo->pid & GENMASK_ULL(63, 48)) ||
  2517		    I3C_PID_RND_LOWER_32BITS(boardinfo->pid))
  2518			return -EINVAL;
  2519	
  2520		boardinfo->init_dyn_addr = init_dyn_addr;
  2521		boardinfo->fwnode = fwnode_handle_get(fwnode);
  2522		list_add_tail(&boardinfo->node, &master->boardinfo.i3c);
  2523	
  2524		return 0;
  2525	}
  2526	
  2527	static int i3c_master_add_of_dev(struct i3c_master_controller *master,
  2528					 struct fwnode_handle *fwnode)
  2529	{
  2530		u32 reg[3];
  2531		int ret;
  2532	
  2533		if (!master)
  2534			return -EINVAL;
  2535	
  2536		ret = fwnode_property_read_u32_array(fwnode, "reg", reg, ARRAY_SIZE(reg));
  2537		if (ret)
  2538			return ret;
  2539	
  2540		/*
  2541		 * The manufacturer ID can't be 0. If reg[1] == 0 that means we're
  2542		 * dealing with an I2C device.
  2543		 */
  2544		if (!reg[1])
  2545			ret = i3c_master_add_i2c_boardinfo(master, fwnode, reg);
  2546		else
  2547			ret = i3c_master_add_i3c_boardinfo(master, fwnode, reg);
  2548	
  2549		return ret;
  2550	}
  2551	
  2552	static int i3c_master_add_acpi_dev(struct i3c_master_controller *master,
  2553					   struct fwnode_handle *fwnode)
  2554	{
  2555		struct acpi_device *adev = to_acpi_device_node(fwnode);
> 2556		acpi_bus_address adr;
  2557		u32 reg[3] = { 0 };
  2558	
  2559		/*
  2560		 * If the ACPI table entry does not have _ADR method, it's an I2C device
  2561		 * If the ACPI table entry has _ADR method, it's an I3C device
  2562		 */
> 2563		if (!acpi_has_method(adev->handle, "_ADR"))
  2564			return i3c_master_add_i2c_boardinfo(master, fwnode, reg);
  2565	
> 2566		adr = acpi_device_adr(adev);
  2567	
  2568		/* For I3C devices, _ADR will have the 48 bit PID of the device  */
  2569		reg[1] = upper_32_bits(adr);
  2570		reg[2] = lower_32_bits(adr);
  2571	
  2572		fwnode_property_read_u32(fwnode, "mipi-i3c-static-address", &reg[0]);
  2573	
  2574		return i3c_master_add_i3c_boardinfo(master, fwnode, reg);
  2575	}
  2576	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.