Re: [PATCH v5] net: can: Introduce MEN 16Z192-00 CAN controller driver

From: Marc Kleine-Budde
Date: Fri Oct 16 2020 - 03:56:03 EST


On 10/16/20 1:49 AM, kernel test robot wrote:
> Hi Abhijeet,
>
> Thank you for the patch! Perhaps something to improve:
>
> [auto build test WARNING on 549738f15da0e5a00275977623be199fbbf7df50]
>
> url: https://github.com/0day-ci/linux/commits/Abhijeet-Badurkar/net-can-Introduce-MEN-16Z192-00-CAN-controller-driver/20201005-192132
> base: 549738f15da0e5a00275977623be199fbbf7df50
> config: openrisc-randconfig-s031-20201015 (attached as .config)
> compiler: or1k-linux-gcc (GCC) 9.3.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.3-rc1-dirty
> # https://github.com/0day-ci/linux/commit/267876771a434b2be3278c2c87d36146c0fac77d
> git remote add linux-review https://github.com/0day-ci/linux
> git fetch --no-tags linux-review Abhijeet-Badurkar/net-can-Introduce-MEN-16Z192-00-CAN-controller-driver/20201005-192132
> git checkout 267876771a434b2be3278c2c87d36146c0fac77d
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=openrisc

I think it's the openrisc arch to blame^w ask here, since their iounmap doesn't
have __iomem annotation.

>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@xxxxxxxxx>
>
>
> "sparse warnings: (new ones prefixed by >>)"
>>> drivers/net/can/men_z192_can.c:1057:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *addr @@ got void [noderef] __iomem *[assigned] dev_base @@
>>> drivers/net/can/men_z192_can.c:1057:17: sparse: expected void *addr
>>> drivers/net/can/men_z192_can.c:1057:17: sparse: got void [noderef] __iomem *[assigned] dev_base
>>> drivers/net/can/men_z192_can.c:1071:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *addr @@ got void [noderef] __iomem *dev_base @@
> drivers/net/can/men_z192_can.c:1071:21: sparse: expected void *addr
>>> drivers/net/can/men_z192_can.c:1071:21: sparse: got void [noderef] __iomem *dev_base
>
> vim +1057 drivers/net/can/men_z192_can.c
>
> 962
> 963 static int men_z192_probe(struct mcb_device *mdev,
> 964 const struct mcb_device_id *id)
> 965 {
> 966 struct device *dev = &mdev->dev;
> 967 struct men_z192 *priv;
> 968 struct net_device *ndev;
> 969 void __iomem *dev_base;
> 970 struct resource *mem;
> 971 u32 timebase;
> 972 int ret = 0;
> 973 int irq;
> 974
> 975 mem = mcb_request_mem(mdev, dev_name(dev));
> 976 if (IS_ERR(mem)) {
> 977 dev_err(dev, "failed to request device memory");
> 978 return PTR_ERR(mem);
> 979 }
> 980
> 981 dev_base = ioremap(mem->start, resource_size(mem));
> 982 if (!dev_base) {
> 983 dev_err(dev, "failed to ioremap device memory");
> 984 ret = -ENXIO;
> 985 goto out_release;
> 986 }
> 987
> 988 irq = mcb_get_irq(mdev);
> 989 if (irq <= 0) {
> 990 ret = -ENODEV;
> 991 goto out_unmap;
> 992 }
> 993
> 994 ndev = alloc_candev(sizeof(struct men_z192), 0);
> 995 if (!ndev) {
> 996 dev_err(dev, "failed to allocat the can device");
> 997 ret = -ENOMEM;
> 998 goto out_unmap;
> 999 }
> 1000
> 1001 ndev->netdev_ops = &men_z192_netdev_ops;
> 1002 ndev->irq = irq;
> 1003 ndev->flags |= IFF_ECHO;
> 1004
> 1005 priv = netdev_priv(ndev);
> 1006 priv->ndev = ndev;
> 1007 priv->dev = dev;
> 1008
> 1009 priv->mem = mem;
> 1010 priv->dev_base = dev_base;
> 1011 priv->regs = priv->dev_base + MEN_Z192_REGS_OFFS;
> 1012
> 1013 timebase = readl(&priv->regs->timebase);
> 1014 if (!timebase) {
> 1015 dev_err(dev, "invalid timebase configured (timebase=%d)\n",
> 1016 timebase);
> 1017 ret = -EINVAL;
> 1018 goto out_free_candev;
> 1019 }
> 1020
> 1021 priv->can.clock.freq = timebase;
> 1022 priv->can.bittiming_const = &men_z192_bittiming_const;
> 1023 priv->can.do_set_mode = men_z192_set_mode;
> 1024 priv->can.do_get_berr_counter = men_z192_get_berr_counter;
> 1025 priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY |
> 1026 CAN_CTRLMODE_3_SAMPLES |
> 1027 CAN_CTRLMODE_LOOPBACK;
> 1028
> 1029 spin_lock_init(&priv->lock);
> 1030
> 1031 netif_napi_add(ndev, &priv->napi, men_z192_poll,
> 1032 NAPI_POLL_WEIGHT);
> 1033
> 1034 skb_queue_head_init(&priv->echoq);
> 1035
> 1036 mcb_set_drvdata(mdev, ndev);
> 1037 SET_NETDEV_DEV(ndev, dev);
> 1038
> 1039 ndev->ethtool_ops = &men_z192_ethtool_ops;
> 1040
> 1041 ret = men_z192_register(ndev);
> 1042 if (ret) {
> 1043 dev_err(dev, "failed to register CAN device");
> 1044 goto out_free_candev;
> 1045 }
> 1046
> 1047 devm_can_led_init(ndev);
> 1048
> 1049 dev_info(dev, "MEN 16z192 CAN driver successfully registered\n");
> 1050
> 1051 return 0;
> 1052
> 1053 out_free_candev:
> 1054 netif_napi_del(&priv->napi);
> 1055 free_candev(ndev);
> 1056 out_unmap:
>> 1057 iounmap(dev_base);
> 1058 out_release:
> 1059 mcb_release_mem(mem);
> 1060 return ret;
> 1061 }
> 1062
> 1063 static void men_z192_remove(struct mcb_device *mdev)
> 1064 {
> 1065 struct net_device *ndev = mcb_get_drvdata(mdev);
> 1066 struct men_z192 *priv = netdev_priv(ndev);
> 1067
> 1068 unregister_candev(ndev);
> 1069 netif_napi_del(&priv->napi);
> 1070
>> 1071 iounmap(priv->dev_base);
> 1072 mcb_release_mem(priv->mem);
> 1073
> 1074 free_candev(ndev);
> 1075 }
> 1076
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
>

Marc

--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |

Attachment: signature.asc
Description: OpenPGP digital signature