Re: [PATCH v2] i2c: hisi: Add I2C bus recovery support
From: kernel test robot
Date: Wed Sep 02 2026 - 07:49:03 EST
Hi Bowen,
kernel test robot noticed the following build warnings:
[auto build test WARNING on andi-shyti/i2c/i2c-host]
[also build test WARNING on linus/master v7.3-rc1 next-20260901]
[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/Bowen-Yu/i2c-hisi-Add-I2C-bus-recovery-support/20260901-143116
base: https://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git i2c/i2c-host
patch link: https://lore.kernel.org/r/20260901063116.3438094-1-yubowen8%40huawei.com
patch subject: [PATCH v2] i2c: hisi: Add I2C bus recovery support
config: csky-randconfig-r064-20260902 (https://download.01.org/0day-ci/archive/20260902/202609021937.s2FqKDO3-lkp@xxxxxxxxx/config)
compiler: csky-linux-gcc (GCC) 13.4.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260902/202609021937.s2FqKDO3-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609021937.s2FqKDO3-lkp@xxxxxxxxx/
All warnings (new ones prefixed by >>):
>> drivers/i2c/busses/i2c-hisi.c:249:12: warning: 'hisi_i2c_get_bus_recovery_res' defined but not used [-Wunused-function]
249 | static int hisi_i2c_get_bus_recovery_res(struct hisi_i2c_controller *ctlr,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-hisi.c:222:13: warning: 'hisi_i2c_unprepare_recovery' defined but not used [-Wunused-function]
222 | static void hisi_i2c_unprepare_recovery(struct i2c_adapter *adap)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-hisi.c:210:13: warning: 'hisi_i2c_prepare_recovery' defined but not used [-Wunused-function]
210 | static void hisi_i2c_prepare_recovery(struct i2c_adapter *adap)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-hisi.c:197:13: warning: 'hisi_i2c_recovery_set_scl' defined but not used [-Wunused-function]
197 | static void hisi_i2c_recovery_set_scl(struct i2c_adapter *adap, int val)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-hisi.c:189:12: warning: 'hisi_i2c_recovery_get_sda' defined but not used [-Wunused-function]
189 | static int hisi_i2c_recovery_get_sda(struct i2c_adapter *adap)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/i2c/busses/i2c-hisi.c:181:12: warning: 'hisi_i2c_recovery_get_scl' defined but not used [-Wunused-function]
181 | static int hisi_i2c_recovery_get_scl(struct i2c_adapter *adap)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
vim +/hisi_i2c_get_bus_recovery_res +249 drivers/i2c/busses/i2c-hisi.c
180
> 181 static int hisi_i2c_recovery_get_scl(struct i2c_adapter *adap)
182 {
183 struct hisi_i2c_controller *ctlr = i2c_get_adapdata(adap);
184 u32 reg = readl(ctlr->iobase + HISI_I2C_TRANS_STATE);
185
186 return !!(reg & HISI_I2C_TRANS_STATE_SCL_LEVEL);
187 }
188
> 189 static int hisi_i2c_recovery_get_sda(struct i2c_adapter *adap)
190 {
191 struct hisi_i2c_controller *ctlr = i2c_get_adapdata(adap);
192 u32 reg = readl(ctlr->iobase + HISI_I2C_TRANS_STATE);
193
194 return !!(reg & HISI_I2C_TRANS_STATE_SDA_LEVEL);
195 }
196
> 197 static void hisi_i2c_recovery_set_scl(struct i2c_adapter *adap, int val)
198 {
199 struct hisi_i2c_controller *ctlr = i2c_get_adapdata(adap);
200 u32 reg;
201
202 reg = readl(ctlr->sctrl_addr);
203 if (val)
204 reg |= HISI_I2C_CTRL_SCL_OUT;
205 else
206 reg &= ~HISI_I2C_CTRL_SCL_OUT;
207 writel(reg, ctlr->sctrl_addr);
208 }
209
> 210 static void hisi_i2c_prepare_recovery(struct i2c_adapter *adap)
211 {
212 struct hisi_i2c_controller *ctlr = i2c_get_adapdata(adap);
213 u32 reg;
214
215 reg = readl(ctlr->sctrl_addr);
216 reg |= HISI_I2C_CTRL_SCL_CFG_EN | HISI_I2C_CTRL_DAT_CFG_EN |
217 HISI_I2C_CTRL_CLK_OE | HISI_I2C_CTRL_SCL_OUT;
218 reg &= ~HISI_I2C_CTRL_DAT_OE;
219 writel(reg, ctlr->sctrl_addr);
220 }
221
> 222 static void hisi_i2c_unprepare_recovery(struct i2c_adapter *adap)
223 {
224 struct hisi_i2c_controller *ctlr = i2c_get_adapdata(adap);
225 u32 reg;
226
227 reg = readl(ctlr->sctrl_addr);
228 reg &= ~(HISI_I2C_CTRL_SCL_CFG_EN | HISI_I2C_CTRL_DAT_CFG_EN);
229 writel(reg, ctlr->sctrl_addr);
230
231 /*
232 * Invokes the specific ACPI method "_RST" to trigger a soft reset
233 * of the I2C controller to help the I2C controller recover from
234 * the abnormal state after the bus recovery process.
235 */
236 #ifdef CONFIG_ACPI
237 if (ctlr->acpi_handle && acpi_has_method(ctlr->acpi_handle, "_RST")) {
238 acpi_status status;
239
240 status = acpi_evaluate_object(ctlr->acpi_handle, "_RST", NULL, NULL);
241 if (ACPI_FAILURE(status))
242 dev_err(ctlr->dev, "_RST method failed: %s\n",
243 acpi_format_exception(status));
244 }
245 #endif
246 hisi_i2c_configure_bus(ctlr);
247 }
248
> 249 static int hisi_i2c_get_bus_recovery_res(struct hisi_i2c_controller *ctlr,
250 struct platform_device *pdev)
251 {
252 struct resource *res0;
253
254 res0 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
255
256 if (!res0 || resource_size(res0) != HISI_I2C_RECOVERY_REG_SIZE)
257 return -ENODEV;
258
259 ctlr->sctrl_addr = devm_ioremap_resource(&pdev->dev, res0);
260 if (IS_ERR(ctlr->sctrl_addr)) {
261 ctlr->sctrl_addr = NULL;
262 return -ENOMEM;
263 }
264
265 return 0;
266 }
267
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki