[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <201907071323.DJuUlAXP%lkp@intel.com>
Date: Sun, 7 Jul 2019 13:21:30 +0800
From: kbuild test robot <lkp@...el.com>
To: josua@...id-run.com
Cc: kbuild-all@...org, netdev@...r.kernel.org,
Josua Mayer <josua@...id-run.com>,
"David S. Miller" <davem@...emloft.net>
Subject: Re: [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is
not ready
Hi,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v5.2-rc7 next-20190705]
[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/josua-solid-run-com/Fix-hang-of-Armada-8040-SoC-in-orion-mdio/20190707-111919
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 7.4.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.4.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@...el.com>
All warnings (new ones prefixed by >>):
drivers/net/ethernet/marvell/mvmdio.c: In function 'orion_mdio_probe':
>> drivers/net/ethernet/marvell/mvmdio.c:324:30: warning: passing argument 1 of 'PTR_ERR' makes pointer from integer without a cast [-Wint-conversion]
if (dev->clk[i] == PTR_ERR(-EPROBE_DEFER)) {
^
In file included from include/linux/clk.h:12:0,
from drivers/net/ethernet/marvell/mvmdio.c:20:
include/linux/err.h:29:33: note: expected 'const void *' but argument is of type 'int'
static inline long __must_check PTR_ERR(__force const void *ptr)
^~~~~~~
>> drivers/net/ethernet/marvell/mvmdio.c:324:19: warning: comparison between pointer and integer
if (dev->clk[i] == PTR_ERR(-EPROBE_DEFER)) {
^~
In file included from include/linux/node.h:18:0,
from include/linux/cpu.h:17,
from include/linux/of_device.h:5,
from drivers/net/ethernet/marvell/mvmdio.c:26:
drivers/net/ethernet/marvell/mvmdio.c:334:12: error: passing argument 1 of '_dev_warn' from incompatible pointer type [-Werror=incompatible-pointer-types]
dev_warn(dev, "unsupported number of clocks, limiting to the first "
^
include/linux/device.h:1487:12: note: in definition of macro 'dev_warn'
_dev_warn(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/device.h:1425:6: note: expected 'const struct device *' but argument is of type 'struct orion_mdio_dev *'
void _dev_warn(const struct device *dev, const char *fmt, ...);
^~~~~~~~~
cc1: some warnings being treated as errors
vim +/PTR_ERR +324 drivers/net/ethernet/marvell/mvmdio.c
275
276 static int orion_mdio_probe(struct platform_device *pdev)
277 {
278 enum orion_mdio_bus_type type;
279 struct resource *r;
280 struct mii_bus *bus;
281 struct orion_mdio_dev *dev;
282 int i, ret;
283
284 type = (enum orion_mdio_bus_type)of_device_get_match_data(&pdev->dev);
285
286 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
287 if (!r) {
288 dev_err(&pdev->dev, "No SMI register address given\n");
289 return -ENODEV;
290 }
291
292 bus = devm_mdiobus_alloc_size(&pdev->dev,
293 sizeof(struct orion_mdio_dev));
294 if (!bus)
295 return -ENOMEM;
296
297 switch (type) {
298 case BUS_TYPE_SMI:
299 bus->read = orion_mdio_smi_read;
300 bus->write = orion_mdio_smi_write;
301 break;
302 case BUS_TYPE_XSMI:
303 bus->read = orion_mdio_xsmi_read;
304 bus->write = orion_mdio_xsmi_write;
305 break;
306 }
307
308 bus->name = "orion_mdio_bus";
309 snprintf(bus->id, MII_BUS_ID_SIZE, "%s-mii",
310 dev_name(&pdev->dev));
311 bus->parent = &pdev->dev;
312
313 dev = bus->priv;
314 dev->regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
315 if (!dev->regs) {
316 dev_err(&pdev->dev, "Unable to remap SMI register\n");
317 return -ENODEV;
318 }
319
320 init_waitqueue_head(&dev->smi_busy_wait);
321
322 for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
323 dev->clk[i] = of_clk_get(pdev->dev.of_node, i);
> 324 if (dev->clk[i] == PTR_ERR(-EPROBE_DEFER)) {
325 ret = -EPROBE_DEFER;
326 goto out_clk;
327 }
328 if (IS_ERR(dev->clk[i]))
329 break;
330 clk_prepare_enable(dev->clk[i]);
331 }
332
333 if (!IS_ERR(of_clk_get(pdev->dev.of_node, i)))
334 dev_warn(dev, "unsupported number of clocks, limiting to the first "
335 __stringify(ARRAY_SIZE(dev->clk)) "\n");
336
337 dev->err_interrupt = platform_get_irq(pdev, 0);
338 if (dev->err_interrupt > 0 &&
339 resource_size(r) < MVMDIO_ERR_INT_MASK + 4) {
340 dev_err(&pdev->dev,
341 "disabling interrupt, resource size is too small\n");
342 dev->err_interrupt = 0;
343 }
344 if (dev->err_interrupt > 0) {
345 ret = devm_request_irq(&pdev->dev, dev->err_interrupt,
346 orion_mdio_err_irq,
347 IRQF_SHARED, pdev->name, dev);
348 if (ret)
349 goto out_mdio;
350
351 writel(MVMDIO_ERR_INT_SMI_DONE,
352 dev->regs + MVMDIO_ERR_INT_MASK);
353
354 } else if (dev->err_interrupt == -EPROBE_DEFER) {
355 ret = -EPROBE_DEFER;
356 goto out_mdio;
357 }
358
359 ret = of_mdiobus_register(bus, pdev->dev.of_node);
360 if (ret < 0) {
361 dev_err(&pdev->dev, "Cannot register MDIO bus (%d)\n", ret);
362 goto out_mdio;
363 }
364
365 platform_set_drvdata(pdev, bus);
366
367 return 0;
368
369 out_mdio:
370 if (dev->err_interrupt > 0)
371 writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
372
373 out_clk:
374 for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
375 if (IS_ERR(dev->clk[i]))
376 break;
377 clk_disable_unprepare(dev->clk[i]);
378 clk_put(dev->clk[i]);
379 }
380
381 return ret;
382 }
383
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Download attachment ".config.gz" of type "application/gzip" (70930 bytes)
Powered by blists - more mailing lists