Hi Dan, Thank you for the report. On Mon, Jun 17, 2024 at 10:35 AM Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote: > > Hello Lad Prabhakar, > > Commit 13a8cae6e561 ("pinctrl: renesas: rzg2l: Drop struct > rzg2l_variable_pin_cfg") from May 30, 2024 (linux-next), leads to the > following Smatch static checker warning: > > drivers/pinctrl/renesas/pinctrl-rzg2l.c:374 rzg2l_pinctrl_get_variable_pin_cfg() > warn: was expecting a 64 bit value instead of '~((((1))) << (16))' > Is there any way I can replicate the same on my setup? I tried the kcehker utility but it didn't print the above warning. > drivers/pinctrl/renesas/pinctrl-rzg2l.c > 362 static u64 rzg2l_pinctrl_get_variable_pin_cfg(struct rzg2l_pinctrl *pctrl, > 363 u64 pincfg, > 364 unsigned int port, > 365 u8 pin) > 366 { > 367 unsigned int i; > 368 > 369 for (i = 0; i < pctrl->data->n_variable_pin_cfg; i++) { > 370 u64 cfg = pctrl->data->variable_pin_cfg[i]; > 371 > 372 if (FIELD_GET(VARIABLE_PIN_CFG_PORT_MASK, cfg) == port && > 373 FIELD_GET(VARIABLE_PIN_CFG_PIN_MASK, cfg) == pin) > --> 374 return (pincfg & ~PIN_CFG_VARIABLE) | FIELD_GET(PIN_CFG_MASK, cfg); > > pincfg is a u64 and we're returning a u64. The code here is trying to > mask out PIN_CFG_VARIABLE which is BIT(16). But because it's BIT() > instead of BIT_ULL(16) then it ends up masking the high 32 bits as well. > Thanks, I'll update the macro to use BIT_ULL(). @Geert, shal I update the PIN_CFG_* macros to use BIT_ULL to avoid such issues further in the same patch? Cheers, Prabhakar