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: <202412211209.zqypWgoc-lkp@intel.com>
Date: Sat, 21 Dec 2024 13:01:23 +0800
From: kernel test robot <lkp@...el.com>
To: Kent Libetario <Kent.Libetario@...log.com>, linux-hwmon@...r.kernel.org,
	devicetree@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: oe-kbuild-all@...ts.linux.dev, Jean Delvare <jdelvare@...e.com>,
	Guenter Roeck <linux@...ck-us.net>, Rob Herring <robh@...nel.org>,
	Krzysztof Kozlowski <krzk@...nel.org>,
	Conor Dooley <conor+dt@...nel.org>
Subject: Re: [PATCH 2/2] drivers: hwmon: add driver for max42500

Hi Kent,

kernel test robot noticed the following build warnings:

[auto build test WARNING on de076198d1e4934c5fc17aa52d5f1884f469ce1a]

url:    https://github.com/intel-lab-lkp/linux/commits/Kent-Libetario/dt-bindings-hwmon-add-adi-max42500-yaml/20241220-092728
base:   de076198d1e4934c5fc17aa52d5f1884f469ce1a
patch link:    https://lore.kernel.org/r/20241220012003.9568-3-Kent.Libetario%40analog.com
patch subject: [PATCH 2/2] drivers: hwmon: add driver for max42500
config: x86_64-randconfig-r072-20241221 (https://download.01.org/0day-ci/archive/20241221/202412211209.zqypWgoc-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241221/202412211209.zqypWgoc-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/202412211209.zqypWgoc-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/hwmon/max42500.c:206: warning: Cannot understand  * @brief Read a raw value from a register.
    on line 206 - I thought it was a doc line
>> drivers/hwmon/max42500.c:251: warning: Cannot understand  * @brief Write a raw value to a register.
    on line 251 - I thought it was a doc line
>> drivers/hwmon/max42500.c:278: warning: Cannot understand  * @brief Update a register's value based on a mask.
    on line 278 - I thought it was a doc line
>> drivers/hwmon/max42500.c:298: warning: Cannot understand  * @brief Set nominal voltage for VM1 to VM5.
    on line 298 - I thought it was a doc line
>> drivers/hwmon/max42500.c:331: warning: Cannot understand  * @brief Get the status of the voltage monitor input.
    on line 331 - I thought it was a doc line
>> drivers/hwmon/max42500.c:390: warning: Cannot understand  * @brief Set the overvoltage threshold of VM1 to VM5.
    on line 390 - I thought it was a doc line
>> drivers/hwmon/max42500.c:418: warning: Cannot understand  * @brief Set the overvoltage threshold of VM6 and VM7.
    on line 418 - I thought it was a doc line
>> drivers/hwmon/max42500.c:446: warning: Cannot understand  * @brief Set the undervoltage threshold of VM1 to VM5.
    on line 446 - I thought it was a doc line
>> drivers/hwmon/max42500.c:473: warning: Cannot understand  * @brief Set the undervoltage threshold of VM6 and VM7.
    on line 473 - I thought it was a doc line
>> drivers/hwmon/max42500.c:501: warning: Cannot understand  * @brief Get the FPS clock divider value.
    on line 501 - I thought it was a doc line
>> drivers/hwmon/max42500.c:520: warning: Cannot understand  * @brief Get power-up timestamp for a specified voltage monitor input.
    on line 520 - I thought it was a doc line
>> drivers/hwmon/max42500.c:551: warning: Cannot understand  * @brief Get power-down timestamp for a specified voltage monitor input.
    on line 551 - I thought it was a doc line
>> drivers/hwmon/max42500.c:582: warning: Cannot understand  * @brief Enable/Disable watchdog
    on line 582 - I thought it was a doc line
>> drivers/hwmon/max42500.c:604: warning: Cannot understand  * @brief 8-bit watchdog key computation.
    on line 604 - I thought it was a doc line
>> drivers/hwmon/max42500.c:630: warning: Cannot understand  * @brief Update the watchdog key based on the mode and current value.
    on line 630 - I thought it was a doc line


vim +206 drivers/hwmon/max42500.c

   203	
   204	/************************ Functions Definitions **************************/
   205	/**
 > 206	 * @brief Read a raw value from a register.
   207	 * @return 0 in case of success, error code otherwise.
   208	 */
   209	static int max42500_reg_read(struct max42500_state *st,
   210									u8 reg_addr, u8 *reg_data)
   211	{
   212		int ret;
   213		u8 i2c_data[MAX42500_I2C_RD_FRAME_SIZE] = {0};
   214		u8 bytes_num;
   215		u8 pece_value;
   216	
   217		/* PEC is computed over entire I2C frame from first START condition */
   218		i2c_data[0] = (st->client->addr << 1);
   219		i2c_data[1] = reg_addr;
   220		i2c_data[2] = (st->client->addr << 1) | 0x1;
   221	
   222		/* I2C write target address */
   223		bytes_num = 1;
   224	
   225		ret = regmap_bulk_write(st->regmap, reg_addr, &i2c_data[1], bytes_num);
   226		if (ret)
   227			return ret;
   228	
   229		/* Change byte count if PECE is enabled (1-byte data. 1-byte PEC) */
   230		bytes_num = (st->config->pece) ? 2 : bytes_num;
   231	
   232		ret = regmap_bulk_read(st->regmap, reg_addr, &i2c_data[3], bytes_num);
   233		if (ret)
   234			return ret;
   235	
   236		if (st->config->pece) {
   237			/* Compute CRC over entire I2C frame */
   238			pece_value = crc8(max42500_crc8, i2c_data,
   239								(MAX42500_I2C_RD_FRAME_SIZE - 1), 0);
   240	
   241			if (i2c_data[4] != pece_value)
   242				return -EIO;
   243		}
   244	
   245		*reg_data = i2c_data[3];
   246	
   247		return 0;
   248	}
   249	
   250	/**
 > 251	 * @brief Write a raw value to a register.
   252	 * @return 0 in case of success, negative error code otherwise.
   253	 */
   254	static int max42500_reg_write(struct max42500_state *st,
   255									u8 reg_addr, u8 data)
   256	{
   257		u8 i2c_data[MAX42500_I2C_WR_FRAME_SIZE] = {0};
   258		u8 bytes_num;
   259		u8 pece_value;
   260	
   261		bytes_num = (st->config->pece) ? (MAX42500_I2C_WR_FRAME_SIZE - 1) : 2;
   262		i2c_data[0] = (st->client->addr << 1);
   263		i2c_data[1] = reg_addr;
   264		i2c_data[2] = (u8)(data & 0xFF);
   265	
   266		pece_value = 0;
   267		if (st->config->pece)
   268			pece_value = crc8(max42500_crc8, i2c_data, bytes_num, 0);
   269	
   270		i2c_data[0] = i2c_data[1];
   271		i2c_data[1] = i2c_data[2];
   272		i2c_data[2] = pece_value;
   273	
   274		return regmap_bulk_write(st->regmap, reg_addr, i2c_data, bytes_num);
   275	}
   276	
   277	/**
 > 278	 * @brief Update a register's value based on a mask.
   279	 * @return 0 in case of success, negative error code otherwise.
   280	 */
   281	static int max42500_reg_update(struct max42500_state *st,
   282									u8 reg_addr, u8 mask, u8 data)
   283	{
   284		int ret;
   285		u8 reg_data;
   286	
   287		ret = max42500_reg_read(st, reg_addr, &reg_data);
   288		if (ret)
   289			return ret;
   290	
   291		reg_data &= ~mask;
   292		reg_data |= mask & data;
   293	
   294		return max42500_reg_write(st, reg_addr, reg_data);
   295	}
   296	
   297	/**
 > 298	 * @brief Set nominal voltage for VM1 to VM5.
   299	 * @return 0 in case of success, negative error code otherwise.
   300	 */
   301	static int max42500_set_nominal_voltage(struct max42500_state *st,
   302		enum max42500_vm_input vm_in, u8 voltage)
   303	{
   304		u8 reg_addr;
   305	
   306		switch (vm_in) {
   307		case MAX42500_VM1:
   308		case MAX42500_VM2:
   309		case MAX42500_VM3:
   310		case MAX42500_VM4:
   311			if (voltage < MAX42500_MIN_VNOM ||
   312				voltage > MAX42500_VNOM_MAX_VM1_VM4)
   313				return -EINVAL;
   314			reg_addr = MAX42500_REG_VIN1 + vm_in;
   315			break;
   316		case MAX42500_VM5:
   317			if (voltage < MAX42500_MIN_VNOM ||
   318				voltage > MAX42500_VNOM_MAX_VM5)
   319				return -EINVAL;
   320			reg_addr = MAX42500_REG_VIN5;
   321			break;
   322		default:
   323			return -EINVAL;
   324		}
   325	
   326		st->nominal_volt[vm_in] = voltage;
   327		return max42500_reg_write(st, reg_addr, voltage);
   328	}
   329	
   330	/**
 > 331	 * @brief Get the status of the voltage monitor input.
   332	 * @return 0 in case of success, negative error code otherwise.
   333	 */
   334	static int max42500_get_comp_status(struct max42500_state *st,
   335										u8 vm_in, u8 *status)
   336	{
   337		int ret;
   338		u8 reg_addr;
   339		u8 vm_in_status;
   340	
   341		switch (vm_in % MAX42500_COMP_STAT_MAX) {
   342		case MAX42500_COMP_STAT_OFF:
   343			reg_addr = MAX42500_REG_STATOFF;
   344			break;
   345		case MAX42500_COMP_STAT_UV:
   346			reg_addr = MAX42500_REG_STATUV;
   347			break;
   348		case MAX42500_COMP_STAT_OV:
   349			reg_addr = MAX42500_REG_STATOV;
   350			break;
   351		default:
   352			return -EINVAL;
   353		}
   354	
   355		ret = max42500_reg_read(st, reg_addr, &vm_in_status);
   356		if (ret)
   357			return ret;
   358	
   359		switch (vm_in % MAX42500_VM_MAX) {
   360		case MAX42500_VM1:
   361			*status = (u8)FIELD_GET(BIT(MAX42500_VM1), vm_in_status);
   362			break;
   363		case MAX42500_VM2:
   364			*status = (u8)FIELD_GET(BIT(MAX42500_VM2), vm_in_status);
   365			break;
   366		case MAX42500_VM3:
   367			*status = (u8)FIELD_GET(BIT(MAX42500_VM3), vm_in_status);
   368			break;
   369		case MAX42500_VM4:
   370			*status = (u8)FIELD_GET(BIT(MAX42500_VM4), vm_in_status);
   371			break;
   372		case MAX42500_VM5:
   373			*status = (u8)FIELD_GET(BIT(MAX42500_VM5), vm_in_status);
   374			break;
   375		case MAX42500_VM6:
   376			*status = (u8)FIELD_GET(BIT(MAX42500_VM6), vm_in_status);
   377			break;
   378		case MAX42500_VM7:
   379			*status = (u8)FIELD_GET(BIT(MAX42500_VM7), vm_in_status);
   380			break;
   381		default:
   382			return -EINVAL;
   383		}
   384		st->comp_status[vm_in] = *status;
   385	
   386		return 0;
   387	}
   388	
   389	/**
 > 390	 * @brief Set the overvoltage threshold of VM1 to VM5.
   391	 * @return 0 in case of success, negative error code otherwise.
   392	 */
   393	static int max42500_set_ov_thresh1(struct max42500_state *st,
   394		enum max42500_vm_input vm_in, u8 thresh)
   395	{
   396		if (thresh < MAX42500_MIN_THRESH_VM1_VM5 ||
   397			thresh > MAX42500_MAX_THRESH_VM1_VM5)
   398			return -EINVAL;
   399	
   400		switch (vm_in) {
   401		case MAX42500_VM1:
   402		case MAX42500_VM2:
   403		case MAX42500_VM3:
   404		case MAX42500_VM4:
   405		case MAX42500_VM5:
   406			st->ov_thresh1[vm_in] = thresh;
   407			return max42500_reg_update(st,
   408									MAX42500_REG_OVUV1 + vm_in,
   409									GENMASK(7, 4),
   410									FIELD_PREP(GENMASK(7, 4),
   411									thresh));
   412		default:
   413			return -EINVAL;
   414		}
   415	}
   416	

-- 
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