tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 736b6d81d93cf61a0601af90bd552103ef997b3f commit: f73f88acbc18a679def4c16eb8648cc279995075 [7518/10068] pinctrl: pinctrl-loongson2: add pinctrl driver support config: loongarch-randconfig-s053-20221124 compiler: loongarch64-linux-gcc (GCC) 12.1.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-39-gce1a6720-dirty # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=f73f88acbc18a679def4c16eb8648cc279995075 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout f73f88acbc18a679def4c16eb8648cc279995075 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=loongarch SHELL=/bin/bash drivers/pinctrl/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) >> drivers/pinctrl/pinctrl-loongson2.c:212:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void *[noderef] __iomem reg @@ drivers/pinctrl/pinctrl-loongson2.c:212:21: sparse: expected void const volatile [noderef] __iomem *addr drivers/pinctrl/pinctrl-loongson2.c:212:21: sparse: got void *[noderef] __iomem reg >> drivers/pinctrl/pinctrl-loongson2.c:217:21: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void *[noderef] __iomem reg @@ drivers/pinctrl/pinctrl-loongson2.c:217:21: sparse: expected void volatile [noderef] __iomem *addr drivers/pinctrl/pinctrl-loongson2.c:217:21: sparse: got void *[noderef] __iomem reg >> drivers/pinctrl/pinctrl-loongson2.c:261:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void *[noderef] reg_base @@ got void [noderef] __iomem * @@ drivers/pinctrl/pinctrl-loongson2.c:261:25: sparse: expected void *[noderef] reg_base drivers/pinctrl/pinctrl-loongson2.c:261:25: sparse: got void [noderef] __iomem * >> drivers/pinctrl/pinctrl-loongson2.c:205:30: sparse: sparse: dereference of noderef expression drivers/pinctrl/pinctrl-loongson2.c:212:21: sparse: sparse: dereference of noderef expression drivers/pinctrl/pinctrl-loongson2.c:212:21: sparse: sparse: dereference of noderef expression drivers/pinctrl/pinctrl-loongson2.c:217:21: sparse: sparse: dereference of noderef expression drivers/pinctrl/pinctrl-loongson2.c:217:21: sparse: sparse: dereference of noderef expression drivers/pinctrl/pinctrl-loongson2.c:262:20: sparse: sparse: dereference of noderef expression drivers/pinctrl/pinctrl-loongson2.c:262:20: sparse: sparse: dereference of noderef expression drivers/pinctrl/pinctrl-loongson2.c:263:32: sparse: sparse: dereference of noderef expression drivers/pinctrl/pinctrl-loongson2.c:263:32: sparse: sparse: dereference of noderef expression vim +212 drivers/pinctrl/pinctrl-loongson2.c 200 201 static int loongson2_pmx_set_mux(struct pinctrl_dev *pcdev, unsigned int func_num, 202 unsigned int group_num) 203 { 204 struct loongson2_pinctrl *pctrl = pinctrl_dev_get_drvdata(pcdev); > 205 void * __iomem reg = pctrl->reg_base + 206 loongson2_pmx_groups[group_num].reg; 207 unsigned int mux_bit = loongson2_pmx_groups[group_num].bit; 208 unsigned int val; 209 unsigned long flags; 210 211 spin_lock_irqsave(&pctrl->lock, flags); > 212 val = readl(reg); 213 if (func_num == 0) 214 val &= ~BIT(mux_bit); 215 else 216 val |= BIT(mux_bit); > 217 writel(val, reg); 218 spin_unlock_irqrestore(&pctrl->lock, flags); 219 220 return 0; 221 } 222 223 static int loongson2_pmx_get_funcs_count(struct pinctrl_dev *pcdev) 224 { 225 return ARRAY_SIZE(loongson2_pmx_functions); 226 } 227 228 static const char *loongson2_pmx_get_func_name(struct pinctrl_dev *pcdev, 229 unsigned int selector) 230 { 231 return loongson2_pmx_functions[selector].name; 232 } 233 234 static int loongson2_pmx_get_groups(struct pinctrl_dev *pcdev, 235 unsigned int selector, 236 const char * const **groups, 237 unsigned int * const num_groups) 238 { 239 *groups = loongson2_pmx_functions[selector].groups; 240 *num_groups = loongson2_pmx_functions[selector].num_groups; 241 242 return 0; 243 } 244 245 static const struct pinmux_ops loongson2_pmx_ops = { 246 .set_mux = loongson2_pmx_set_mux, 247 .get_functions_count = loongson2_pmx_get_funcs_count, 248 .get_function_name = loongson2_pmx_get_func_name, 249 .get_function_groups = loongson2_pmx_get_groups, 250 }; 251 252 static int loongson2_pinctrl_probe(struct platform_device *pdev) 253 { 254 struct device *dev = &pdev->dev; 255 struct loongson2_pinctrl *pctrl; 256 257 pctrl = devm_kzalloc(dev, sizeof(*pctrl), GFP_KERNEL); 258 if (!pctrl) 259 return -ENOMEM; 260 > 261 pctrl->reg_base = devm_platform_ioremap_resource(pdev, 0); 262 if (IS_ERR(pctrl->reg_base)) 263 return PTR_ERR(pctrl->reg_base); 264 265 spin_lock_init(&pctrl->lock); 266 267 pctrl->dev = dev; 268 pctrl->desc.name = "pinctrl-loongson2"; 269 pctrl->desc.owner = THIS_MODULE; 270 pctrl->desc.pctlops = &loongson2_pctrl_ops; 271 pctrl->desc.pmxops = &loongson2_pmx_ops; 272 pctrl->desc.pins = loongson2_pctrl_pins; 273 pctrl->desc.npins = ARRAY_SIZE(loongson2_pctrl_pins); 274 275 pctrl->pcdev = devm_pinctrl_register(pctrl->dev, &pctrl->desc, pctrl); 276 if (IS_ERR(pctrl->pcdev)) 277 return dev_err_probe(pctrl->dev, PTR_ERR(pctrl->pcdev), 278 "can't register pinctrl device"); 279 280 return 0; 281 } 282 -- 0-DAY CI Kernel Test Service https://01.org/lkp