tree: https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git for-5.19/wacom head: 6ff1cae2e30a79265bcce85f617663c480936ab0 commit: 6d09085b38e5ace0001cf4f3cdbd4bf247533b61 [1/2] HID: wacom: Adding Support for new usages config: riscv-randconfig-r026-20220420 (https://download.01.org/0day-ci/archive/20220421/202204212217.M2efI2Po-lkp@xxxxxxxxx/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project bac6cd5bf85669e3376610cfc4c4f9ca015e7b9b) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git/commit/?id=6d09085b38e5ace0001cf4f3cdbd4bf247533b61 git remote add hid https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git git fetch --no-tags hid for-5.19/wacom git checkout 6d09085b38e5ace0001cf4f3cdbd4bf247533b61 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash drivers/hid/ kernel/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): In file included from drivers/hid/wacom_wac.c:11: In file included from drivers/hid/wacom_wac.h:10: In file included from include/linux/kfifo.h:42: In file included from include/linux/scatterlist.h:9: In file included from arch/riscv/include/asm/io.h:136: include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __raw_readb(PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) ^ In file included from drivers/hid/wacom_wac.c:11: In file included from drivers/hid/wacom_wac.h:10: In file included from include/linux/kfifo.h:42: In file included from include/linux/scatterlist.h:9: In file included from arch/riscv/include/asm/io.h:136: include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) ^ In file included from drivers/hid/wacom_wac.c:11: In file included from drivers/hid/wacom_wac.h:10: In file included from include/linux/kfifo.h:42: In file included from include/linux/scatterlist.h:9: In file included from arch/riscv/include/asm/io.h:136: include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writeb(value, PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:1024:55: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port; ~~~~~~~~~~ ^ >> drivers/hid/wacom_wac.c:2411:42: warning: format specifies type 'unsigned short' but the argument has type 'int' [-Wformat] hid_warn(hdev, "Dropped %hu packets", value - wacom_wac->hid_data.sequence_number); ~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %d include/linux/hid.h:1210:31: note: expanded from macro 'hid_warn' dev_warn(&(hid)->dev, fmt, ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dev_printk.h:146:70: note: expanded from macro 'dev_warn' dev_printk_index_wrap(_dev_warn, KERN_WARNING, dev, dev_fmt(fmt), ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dev_printk.h:110:23: note: expanded from macro 'dev_printk_index_wrap' _p_func(dev, fmt, ##__VA_ARGS__); \ ~~~ ^~~~~~~~~~~ 8 warnings generated. vim +2411 drivers/hid/wacom_wac.c 2292 2293 static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field, 2294 struct hid_usage *usage, __s32 value) 2295 { 2296 struct wacom *wacom = hid_get_drvdata(hdev); 2297 struct wacom_wac *wacom_wac = &wacom->wacom_wac; 2298 struct wacom_features *features = &wacom_wac->features; 2299 struct input_dev *input = wacom_wac->pen_input; 2300 unsigned equivalent_usage = wacom_equivalent_usage(usage->hid); 2301 2302 if (wacom_wac->is_invalid_bt_frame) 2303 return; 2304 2305 switch (equivalent_usage) { 2306 case HID_GD_Z: 2307 /* 2308 * HID_GD_Z "should increase as the control's position is 2309 * moved from high to low", while ABS_DISTANCE instead 2310 * increases in value as the tool moves from low to high. 2311 */ 2312 value = field->logical_maximum - value; 2313 break; 2314 case HID_DG_INRANGE: 2315 wacom_wac->hid_data.inrange_state = value; 2316 if (!(features->quirks & WACOM_QUIRK_SENSE)) 2317 wacom_wac->hid_data.sense_state = value; 2318 return; 2319 case HID_DG_INVERT: 2320 wacom_wac->hid_data.invert_state = value; 2321 return; 2322 case HID_DG_ERASER: 2323 case HID_DG_TIPSWITCH: 2324 wacom_wac->hid_data.tipswitch |= value; 2325 return; 2326 case HID_DG_BARRELSWITCH: 2327 wacom_wac->hid_data.barrelswitch = value; 2328 return; 2329 case HID_DG_BARRELSWITCH2: 2330 wacom_wac->hid_data.barrelswitch2 = value; 2331 return; 2332 case HID_DG_TOOLSERIALNUMBER: 2333 if (value) { 2334 wacom_wac->serial[0] = (wacom_wac->serial[0] & ~0xFFFFFFFFULL); 2335 wacom_wac->serial[0] |= wacom_s32tou(value, field->report_size); 2336 } 2337 return; 2338 case HID_DG_TWIST: 2339 /* 2340 * Userspace expects pen twist to have its zero point when 2341 * the buttons/finger is on the tablet's left. HID values 2342 * are zero when buttons are toward the top. 2343 */ 2344 value = wacom_offset_rotation(input, usage, value, 1, 4); 2345 break; 2346 case WACOM_HID_WD_SENSE: 2347 wacom_wac->hid_data.sense_state = value; 2348 return; 2349 case WACOM_HID_WD_SERIALHI: 2350 if (value) { 2351 __u32 raw_value = wacom_s32tou(value, field->report_size); 2352 2353 wacom_wac->serial[0] = (wacom_wac->serial[0] & 0xFFFFFFFF); 2354 wacom_wac->serial[0] |= ((__u64)raw_value) << 32; 2355 /* 2356 * Non-USI EMR devices may contain additional tool type 2357 * information here. See WACOM_HID_WD_TOOLTYPE case for 2358 * more details. 2359 */ 2360 if (value >> 20 == 1) { 2361 wacom_wac->id[0] |= raw_value & 0xFFFFF; 2362 } 2363 } 2364 return; 2365 case WACOM_HID_WD_TOOLTYPE: 2366 /* 2367 * Some devices (MobileStudio Pro, and possibly later 2368 * devices as well) do not return the complete tool 2369 * type in their WACOM_HID_WD_TOOLTYPE usage. Use a 2370 * bitwise OR so the complete value can be built 2371 * up over time :( 2372 */ 2373 wacom_wac->id[0] |= wacom_s32tou(value, field->report_size); 2374 return; 2375 case WACOM_HID_WD_OFFSETLEFT: 2376 if (features->offset_left && value != features->offset_left) 2377 hid_warn(hdev, "%s: overriding existing left offset " 2378 "%d -> %d\n", __func__, value, 2379 features->offset_left); 2380 features->offset_left = value; 2381 return; 2382 case WACOM_HID_WD_OFFSETRIGHT: 2383 if (features->offset_right && value != features->offset_right) 2384 hid_warn(hdev, "%s: overriding existing right offset " 2385 "%d -> %d\n", __func__, value, 2386 features->offset_right); 2387 features->offset_right = value; 2388 return; 2389 case WACOM_HID_WD_OFFSETTOP: 2390 if (features->offset_top && value != features->offset_top) 2391 hid_warn(hdev, "%s: overriding existing top offset " 2392 "%d -> %d\n", __func__, value, 2393 features->offset_top); 2394 features->offset_top = value; 2395 return; 2396 case WACOM_HID_WD_OFFSETBOTTOM: 2397 if (features->offset_bottom && value != features->offset_bottom) 2398 hid_warn(hdev, "%s: overriding existing bottom offset " 2399 "%d -> %d\n", __func__, value, 2400 features->offset_bottom); 2401 features->offset_bottom = value; 2402 return; 2403 case WACOM_HID_WD_REPORT_VALID: 2404 wacom_wac->is_invalid_bt_frame = !value; 2405 return; 2406 case WACOM_HID_WD_BARRELSWITCH3: 2407 wacom_wac->hid_data.barrelswitch3 = value; 2408 return; 2409 case WACOM_HID_WD_SEQUENCENUMBER: 2410 if (wacom_wac->hid_data.sequence_number != value) > 2411 hid_warn(hdev, "Dropped %hu packets", value - wacom_wac->hid_data.sequence_number); 2412 wacom_wac->hid_data.sequence_number = value + 1; 2413 return; 2414 } 2415 2416 /* send pen events only when touch is up or forced out 2417 * or touch arbitration is off 2418 */ 2419 if (!usage->type || delay_pen_events(wacom_wac)) 2420 return; 2421 2422 /* send pen events only when the pen is in range */ 2423 if (wacom_wac->hid_data.inrange_state) 2424 input_event(input, usage->type, usage->code, value); 2425 else if (wacom_wac->shared->stylus_in_proximity && !wacom_wac->hid_data.sense_state) 2426 input_event(input, usage->type, usage->code, 0); 2427 } 2428 -- 0-DAY CI Kernel Test Service https://01.org/lkp