Hello Nandor Han, The patch c50b21b70523: "bootcount: add a new driver with syscon as backend" from Jun 10, 2021 , leads to the following Smatch static checker warning:
drivers/bootcount/bootcount_syscon.c:56 bootcount_syscon_set() warn: double left shift '(regval & 65535) << ((priv->size) << 3)' drivers/bootcount/bootcount_syscon.c 44 static int bootcount_syscon_set(struct udevice *dev, const u32 val) 45 { 46 struct bootcount_syscon_priv *priv = dev_get_priv(dev); 47 u32 regval; 48 49 if ((val & priv->magic_mask) != 0) 50 return -EINVAL; 51 52 regval = (priv->magic & priv->magic_mask) | (val & ~priv->magic_mask); 53 54 if (priv->size == 2) { 55 regval &= 0xffff; --> 56 regval |= (regval & 0xffff) << BYTES_TO_BITS(priv->size); I don't understand what's going on here but it doesn't look correct. The 0xffff mask is a no-op because we already masked it on the previous line. priv->size is either 2 or 4. So in bits that's 16 or 32. But regval is a u32 and so shifting by 32 is undefined. 57 } 58 59 debug("%s: Prepare to write reg value: 0x%08x with register mask: 0x%08x\n", 60 __func__, regval, priv->reg_mask); 61 62 return regmap_update_bits(priv->regmap, priv->reg_addr, priv->reg_mask, 63 regval); 64 } regards, dan carpenter