linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: kbuild test robot <lkp@intel.com>
To: Andrea Greco <andrea.greco.gapmilano@gmail.com>
Cc: kbuild-all@01.org, davem@davemloft.net, tobin@apporbit.com,
	Andrea Greco <a.greco@4sigma.it>,
	Michael Grzeschik <m.grzeschik@pengutronix.de>,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version
Date: Tue, 12 Jun 2018 00:35:27 +0800	[thread overview]
Message-ID: <201806120034.bUpoIKOC%fengguang.wu@intel.com> (raw)
In-Reply-To: <20180611142635.20712-1-andrea.greco.gapmilano@gmail.com>

Hi Andrea,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on v4.17 next-20180608]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Andrea-Greco/arcnet-leds-Removed-leds-dependecy/20180611-222941
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/net/arcnet/com20020-io.c:34:45: sparse: incorrect type in argument 1 (different address spaces) @@    expected void [noderef] <asn:2>*<noident> @@    got sn:2>*<noident> @@
   drivers/net/arcnet/com20020-io.c:34:45:    expected void [noderef] <asn:2>*<noident>
   drivers/net/arcnet/com20020-io.c:34:45:    got void *
   drivers/net/arcnet/com20020-io.c:39:45: sparse: incorrect type in argument 2 (different address spaces) @@    expected void [noderef] <asn:2>*<noident> @@    got sn:2>*<noident> @@
   drivers/net/arcnet/com20020-io.c:39:45:    expected void [noderef] <asn:2>*<noident>
   drivers/net/arcnet/com20020-io.c:39:45:    got void *
>> drivers/net/arcnet/com20020-io.c:44:22: sparse: incorrect type in argument 1 (different address spaces) @@    expected void [noderef] <asn:2>*port @@    got void [noderef] <asn:2>*port @@
   drivers/net/arcnet/com20020-io.c:44:22:    expected void [noderef] <asn:2>*port
   drivers/net/arcnet/com20020-io.c:44:22:    got void *[noderef] <asn:2><noident>
   drivers/net/arcnet/com20020-io.c:49:23: sparse: incorrect type in argument 1 (different address spaces) @@    expected void [noderef] <asn:2>*port @@    got void [noderef] <asn:2>*port @@
   drivers/net/arcnet/com20020-io.c:49:23:    expected void [noderef] <asn:2>*port
   drivers/net/arcnet/com20020-io.c:49:23:    got void *[noderef] <asn:2><noident>
>> drivers/net/arcnet/com20020-io.c:219:19: sparse: cast removes address space of expression
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_inb':
   drivers/net/arcnet/com20020-io.c:34:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     return ioread8((void *__iomem) addr + offset);
                    ^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_outb':
   drivers/net/arcnet/com20020-io.c:39:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     iowrite8(value, (void *__iomem)addr + offset);
                     ^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_insb':
   drivers/net/arcnet/com20020-io.c:44:14: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8_rep((void *__iomem) (addr + offset), buffer, count);
                 ^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_outsb':
   drivers/net/arcnet/com20020-io.c:49:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
                  ^
   drivers/net/arcnet/com20020-io.c: In function 'com20020_probe':
   drivers/net/arcnet/com20020-io.c:219:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
     ioaddr = (int)devm_ioremap(&pdev->dev, iores->start,
              ^
   drivers/net/arcnet/com20020-io.c:288:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     devm_iounmap(&pdev->dev, (void __iomem *)ioaddr);
                              ^

vim +34 drivers/net/arcnet/com20020-io.c

    31	
    32	static unsigned int io_arc_inb(int addr, int offset)
    33	{
  > 34		return ioread8((void *__iomem) addr + offset);
    35	}
    36	
    37	static void io_arc_outb(int value, int addr, int offset)
    38	{
  > 39		iowrite8(value, (void *__iomem)addr + offset);
    40	}
    41	
    42	static void io_arc_insb(int  addr, int offset, void *buffer, int count)
    43	{
  > 44		ioread8_rep((void *__iomem) (addr + offset), buffer, count);
    45	}
    46	
    47	static void io_arc_outsb(int addr, int offset, void *buffer, int count)
    48	{
    49		iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
    50	}
    51	
    52	enum com20020_xtal_freq {
    53		freq_10Mhz = 10,
    54		freq_20Mhz = 20,
    55	};
    56	
    57	enum com20020_arcnet_speed {
    58		arc_speed_10M_bps = 10000000,
    59		arc_speed_5M_bps = 5000000,
    60		arc_speed_2M50_bps = 2500000,
    61		arc_speed_1M25_bps = 1250000,
    62		arc_speed_625K_bps = 625000,
    63		arc_speed_312K5_bps = 312500,
    64		arc_speed_156K25_bps = 156250,
    65	};
    66	
    67	enum com20020_timeout {
    68		arc_timeout_328us =   328000,
    69		arc_timeout_164us = 164000,
    70		arc_timeout_82us =  82000,
    71		arc_timeout_20u5s =  20500,
    72	};
    73	
    74	static int setup_clock(int *clockp, int *clockm, int xtal, int arcnet_speed)
    75	{
    76		int pll_factor, req_clock_frq = 20;
    77	
    78		switch (arcnet_speed) {
    79		case arc_speed_10M_bps:
    80			req_clock_frq = 80;
    81			*clockp = 0;
    82			break;
    83		case arc_speed_5M_bps:
    84			req_clock_frq = 40;
    85			*clockp = 0;
    86			break;
    87		case arc_speed_2M50_bps:
    88			*clockp = 0;
    89			break;
    90		case arc_speed_1M25_bps:
    91			*clockp = 1;
    92			break;
    93		case arc_speed_625K_bps:
    94			*clockp = 2;
    95			break;
    96		case arc_speed_312K5_bps:
    97			*clockp = 3;
    98			break;
    99		case arc_speed_156K25_bps:
   100			*clockp = 4;
   101			break;
   102		default:
   103			return -EINVAL;
   104		}
   105	
   106		if (xtal != freq_10Mhz && xtal != freq_20Mhz)
   107			return -EINVAL;
   108	
   109		pll_factor = (unsigned int)req_clock_frq / xtal;
   110	
   111		switch (pll_factor) {
   112		case 1:
   113			*clockm = 0;
   114			break;
   115		case 2:
   116			*clockm = 1;
   117			break;
   118		case 4:
   119			*clockm = 3;
   120			break;
   121		default:
   122			return -EINVAL;
   123		}
   124	
   125		return 0;
   126	}
   127	
   128	static int setup_timeout(int *timeout)
   129	{
   130		switch (*timeout) {
   131		case arc_timeout_328us:
   132			*timeout = 0;
   133			break;
   134		case arc_timeout_164us:
   135			*timeout = 1;
   136			break;
   137		case arc_timeout_82us:
   138			*timeout = 2;
   139			break;
   140		case arc_timeout_20u5s:
   141			*timeout = 3;
   142			break;
   143		default:
   144			return -EINVAL;
   145		}
   146	
   147		return 0;
   148	}
   149	
   150	static int com20020_probe(struct platform_device *pdev)
   151	{
   152		struct device_node *np;
   153		struct net_device *dev;
   154		struct arcnet_local *lp;
   155		struct resource res, *iores;
   156		int ret, phy_reset;
   157		u32 timeout, xtal, arc_speed;
   158		int clockp, clockm;
   159		bool backplane = false;
   160		int ioaddr;
   161	
   162		np = pdev->dev.of_node;
   163	
   164		iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
   165	
   166		ret = of_address_to_resource(np, 0, &res);
   167		if (ret)
   168			return ret;
   169	
   170		ret = of_property_read_u32(np, "timeout-ns", &timeout);
   171		if (ret) {
   172			dev_err(&pdev->dev, "timeout is required param");
   173			return ret;
   174		}
   175	
   176		ret = of_property_read_u32(np, "smsc,xtal-mhz", &xtal);
   177		if (ret) {
   178			dev_err(&pdev->dev, "xtal-mhz is required param");
   179			return ret;
   180		}
   181	
   182		ret = of_property_read_u32(np, "bus-speed-bps", &arc_speed);
   183		if (ret) {
   184			dev_err(&pdev->dev, "Bus speed is required param");
   185			return ret;
   186		}
   187	
   188		if (of_property_read_bool(np, "smsc,backplane-enabled"))
   189			backplane = true;
   190	
   191		phy_reset = of_get_named_gpio(np, "reset-gpios", 0);
   192		if (!gpio_is_valid(phy_reset)) {
   193			dev_err(&pdev->dev, "reset gpio not valid");
   194			return phy_reset;
   195		}
   196	
   197		ret = devm_gpio_request_one(&pdev->dev, phy_reset, GPIOF_OUT_INIT_LOW,
   198					    "arcnet-reset");
   199		if (ret) {
   200			dev_err(&pdev->dev, "failed to get phy reset gpio: %d\n", ret);
   201			return ret;
   202		}
   203	
   204		dev = alloc_arcdev(NULL);
   205		dev->netdev_ops = &com20020_netdev_ops;
   206		lp = netdev_priv(dev);
   207	
   208		lp->card_flags = ARC_CAN_10MBIT;
   209	
   210		/* Peak random address,
   211		 * if required user could set a new-one in userspace
   212		 */
   213		get_random_bytes(dev->dev_addr, dev->addr_len);
   214	
   215		if (!devm_request_mem_region(&pdev->dev, res.start, resource_size(&res),
   216					     lp->card_name))
   217			return -EBUSY;
   218	
 > 219		ioaddr = (int)devm_ioremap(&pdev->dev, iores->start,
   220					 resource_size(iores));
   221		if (!ioaddr) {
   222			dev_err(&pdev->dev, "ioremap fallied\n");
   223			return -ENOMEM;
   224		}
   225	
   226		gpio_set_value_cansleep(phy_reset, 0);
   227		ndelay(RESET_DELAY);
   228		gpio_set_value_cansleep(phy_reset, 1);
   229	
   230		lp->hw.arc_inb = io_arc_inb;
   231		lp->hw.arc_outb = io_arc_outb;
   232		lp->hw.arc_insb = io_arc_insb;
   233		lp->hw.arc_outsb = io_arc_outsb;
   234	
   235		/* ARCNET controller needs this access to detect bustype */
   236		lp->hw.arc_outb(0x00, ioaddr, COM20020_REG_W_COMMAND);
   237		lp->hw.arc_inb(ioaddr, COM20020_REG_R_DIAGSTAT);
   238	
   239		dev->base_addr = (unsigned long)ioaddr;
   240	
   241		dev->irq = of_get_named_gpio(np, "interrupts", 0);
   242		if (dev->irq == -EPROBE_DEFER) {
   243			return dev->irq;
   244		} else if (!gpio_is_valid(dev->irq)) {
   245			dev_err(&pdev->dev, "irq-gpios not valid !");
   246			return -EIO;
   247		}
   248		dev->irq = gpio_to_irq(dev->irq);
   249	
   250		ret = setup_clock(&clockp, &clockm, xtal, arc_speed);
   251		if (ret) {
   252			dev_err(&pdev->dev,
   253				"Impossible use oscillator:%dMhz and arcnet bus speed:%dKbps",
   254				xtal, arc_speed / 1000);
   255			return ret;
   256		}
   257	
   258		ret = setup_timeout(&timeout);
   259		if (ret) {
   260			dev_err(&pdev->dev, "Timeout:%d is not valid value", timeout);
   261			return ret;
   262		}
   263	
   264		lp->backplane = (int)backplane;
   265		lp->timeout = timeout;
   266		lp->clockm = clockm;
   267		lp->clockp = clockp;
   268		lp->hw.owner = THIS_MODULE;
   269	
   270		if (lp->hw.arc_inb(ioaddr, COM20020_REG_R_STATUS) == 0xFF) {
   271			ret = -EIO;
   272			goto err_release_mem;
   273		}
   274	
   275		if (com20020_check(dev)) {
   276			ret = -EIO;
   277			goto err_release_mem;
   278		}
   279	
   280		ret = com20020_found(dev, IRQF_TRIGGER_FALLING);
   281		if (ret)
   282			goto err_release_mem;
   283	
   284		dev_dbg(&pdev->dev, "probe Done\n");
   285		return 0;
   286	
   287	err_release_mem:
   288		devm_iounmap(&pdev->dev, (void __iomem *)ioaddr);
   289		devm_release_mem_region(&pdev->dev, res.start, resource_size(&res));
   290		dev_err(&pdev->dev, "probe failed!\n");
   291		return ret;
   292	}
   293	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

  parent reply	other threads:[~2018-06-11 16:36 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-11 14:26 [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version Andrea Greco
2018-06-11 16:15 ` kbuild test robot
2018-06-11 16:35 ` kbuild test robot [this message]
2018-06-18 12:51   ` Andrea Greco
2018-06-22  8:11 ` kbuild test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201806120034.bUpoIKOC%fengguang.wu@intel.com \
    --to=lkp@intel.com \
    --cc=a.greco@4sigma.it \
    --cc=andrea.greco.gapmilano@gmail.com \
    --cc=davem@davemloft.net \
    --cc=kbuild-all@01.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.grzeschik@pengutronix.de \
    --cc=netdev@vger.kernel.org \
    --cc=tobin@apporbit.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).