From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [net-next RFC v3 4/6] net: marvell: prestera: Add ethtool interface support
Date: Thu, 28 May 2020 13:12:02 +0800 [thread overview]
Message-ID: <202005281327.lAS3b2uC%lkp@intel.com> (raw)
In-Reply-To: <20200526171302.28649-5-vadym.kochan@plvision.eu>
[-- Attachment #1: Type: text/plain, Size: 12092 bytes --]
Hi Vadym,
[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on net-next/master]
[also build test WARNING on net/master sparc-next/master linus/master v5.7-rc7 next-20200526]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Vadym-Kochan/net-marvell-prestera-Add-Switchdev-driver-for-Prestera-family-ASIC-device-98DX326x-AC3x/20200527-014008
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git d52caf0404e625bcda352ebea53be25e91f9de02
config: riscv-allyesconfig (attached as .config)
compiler: riscv64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
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
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=riscv
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
All warnings (new ones prefixed by >>, old ones prefixed by <<):
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:296:6: warning: no previous prototype for 'prestera_ethtool_get_drvinfo' [-Wmissing-prototypes]
296 | void prestera_ethtool_get_drvinfo(struct net_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:473:5: warning: no previous prototype for 'prestera_ethtool_get_link_ksettings' [-Wmissing-prototypes]
473 | int prestera_ethtool_get_link_ksettings(struct net_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:598:5: warning: no previous prototype for 'prestera_ethtool_set_link_ksettings' [-Wmissing-prototypes]
598 | int prestera_ethtool_set_link_ksettings(struct net_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:634:5: warning: no previous prototype for 'prestera_ethtool_get_fecparam' [-Wmissing-prototypes]
634 | int prestera_ethtool_get_fecparam(struct net_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:661:5: warning: no previous prototype for 'prestera_ethtool_set_fecparam' [-Wmissing-prototypes]
661 | int prestera_ethtool_set_fecparam(struct net_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:696:5: warning: no previous prototype for 'prestera_ethtool_get_sset_count' [-Wmissing-prototypes]
696 | int prestera_ethtool_get_sset_count(struct net_device *dev, int sset)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:706:6: warning: no previous prototype for 'prestera_ethtool_get_strings' [-Wmissing-prototypes]
706 | void prestera_ethtool_get_strings(struct net_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:715:6: warning: no previous prototype for 'prestera_ethtool_get_stats' [-Wmissing-prototypes]
715 | void prestera_ethtool_get_stats(struct net_device *dev,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/prestera/prestera_ethtool.c:726:5: warning: no previous prototype for 'prestera_ethtool_nway_reset' [-Wmissing-prototypes]
726 | int prestera_ethtool_nway_reset(struct net_device *dev)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/prestera_ethtool_get_drvinfo +296 drivers/net/ethernet/marvell/prestera/prestera_ethtool.c
295
> 296 void prestera_ethtool_get_drvinfo(struct net_device *dev,
297 struct ethtool_drvinfo *drvinfo)
298 {
299 struct prestera_port *port = netdev_priv(dev);
300 struct prestera_switch *sw = port->sw;
301
302 strlcpy(drvinfo->driver, driver_kind, sizeof(drvinfo->driver));
303 strlcpy(drvinfo->bus_info, dev_name(prestera_dev(sw)),
304 sizeof(drvinfo->bus_info));
305 snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version),
306 "%d.%d.%d",
307 sw->dev->fw_rev.maj,
308 sw->dev->fw_rev.min,
309 sw->dev->fw_rev.sub);
310 }
311
312 static u8 prestera_port_type_get(struct prestera_port *port)
313 {
314 if (port->caps.type < PRESTERA_PORT_TYPE_MAX)
315 return port_types[port->caps.type].eth_type;
316 return PORT_OTHER;
317 }
318
319 static int prestera_port_type_set(const struct ethtool_link_ksettings *ecmd,
320 struct prestera_port *port)
321 {
322 u32 new_mode = PRESTERA_LINK_MODE_MAX;
323 u32 type, mode;
324 int err;
325
326 for (type = 0; type < PRESTERA_PORT_TYPE_MAX; type++) {
327 if (port_types[type].eth_type == ecmd->base.port &&
328 test_bit(port_types[type].eth_mode,
329 ecmd->link_modes.supported)) {
330 break;
331 }
332 }
333
334 if (type == port->caps.type)
335 return 0;
336 if (type != port->caps.type && ecmd->base.autoneg == AUTONEG_ENABLE)
337 return -EINVAL;
338 if (type == PRESTERA_PORT_TYPE_MAX)
339 return -EOPNOTSUPP;
340
341 for (mode = 0; mode < PRESTERA_LINK_MODE_MAX; mode++) {
342 if ((port_link_modes[mode].pr_mask &
343 port->caps.supp_link_modes) &&
344 type == port_link_modes[mode].port_type) {
345 new_mode = mode;
346 }
347 }
348
349 if (new_mode < PRESTERA_LINK_MODE_MAX)
350 err = prestera_hw_port_link_mode_set(port, new_mode);
351 else
352 err = -EINVAL;
353
354 if (!err) {
355 port->caps.type = type;
356 port->autoneg = false;
357 }
358
359 return err;
360 }
361
362 static void prestera_modes_to_eth(unsigned long *eth_modes, u64 link_modes,
363 u8 fec, u8 type)
364 {
365 u32 mode;
366
367 for (mode = 0; mode < PRESTERA_LINK_MODE_MAX; mode++) {
368 if ((port_link_modes[mode].pr_mask & link_modes) == 0)
369 continue;
370 if (type != PRESTERA_PORT_TYPE_NONE &&
371 port_link_modes[mode].port_type != type)
372 continue;
373 __set_bit(port_link_modes[mode].eth_mode, eth_modes);
374 }
375
376 for (mode = 0; mode < PRESTERA_PORT_FEC_MAX; mode++) {
377 if ((port_fec_caps[mode].pr_fec & fec) == 0)
378 continue;
379 __set_bit(port_fec_caps[mode].eth_mode, eth_modes);
380 }
381 }
382
383 static void prestera_modes_from_eth(const unsigned long *eth_modes,
384 u64 *link_modes, u8 *fec, u8 type)
385 {
386 u32 mode;
387
388 for (mode = 0; mode < PRESTERA_LINK_MODE_MAX; mode++) {
389 if (!test_bit(port_link_modes[mode].eth_mode, eth_modes))
390 continue;
391 if (port_link_modes[mode].port_type != type)
392 continue;
393 *link_modes |= port_link_modes[mode].pr_mask;
394 }
395
396 for (mode = 0; mode < PRESTERA_PORT_FEC_MAX; mode++) {
397 if (!test_bit(port_fec_caps[mode].eth_mode, eth_modes))
398 continue;
399 *fec |= port_fec_caps[mode].pr_fec;
400 }
401 }
402
403 static void prestera_port_supp_types_get(struct ethtool_link_ksettings *ecmd,
404 struct prestera_port *port)
405 {
406 u32 mode;
407 u8 ptype;
408
409 for (mode = 0; mode < PRESTERA_LINK_MODE_MAX; mode++) {
410 if ((port_link_modes[mode].pr_mask &
411 port->caps.supp_link_modes) == 0)
412 continue;
413 ptype = port_link_modes[mode].port_type;
414 __set_bit(port_types[ptype].eth_mode,
415 ecmd->link_modes.supported);
416 }
417 }
418
419 static void prestera_port_remote_cap_get(struct ethtool_link_ksettings *ecmd,
420 struct prestera_port *port)
421 {
422 bool asym_pause;
423 bool pause;
424 u64 bitmap;
425
426 if (!prestera_hw_port_remote_cap_get(port, &bitmap)) {
427 prestera_modes_to_eth(ecmd->link_modes.lp_advertising,
428 bitmap, 0, PRESTERA_PORT_TYPE_NONE);
429
430 if (!bitmap_empty(ecmd->link_modes.lp_advertising,
431 __ETHTOOL_LINK_MODE_MASK_NBITS)) {
432 ethtool_link_ksettings_add_link_mode(ecmd,
433 lp_advertising,
434 Autoneg);
435 }
436 }
437
438 if (prestera_hw_port_remote_fc_get(port, &pause, &asym_pause))
439 return;
440 if (pause)
441 ethtool_link_ksettings_add_link_mode(ecmd,
442 lp_advertising,
443 Pause);
444 if (asym_pause)
445 ethtool_link_ksettings_add_link_mode(ecmd,
446 lp_advertising,
447 Asym_Pause);
448 }
449
450 static void prestera_port_speed_get(struct ethtool_link_ksettings *ecmd,
451 struct prestera_port *port)
452 {
453 u32 speed;
454 int err;
455
456 err = prestera_hw_port_speed_get(port, &speed);
457 ecmd->base.speed = !err ? speed : SPEED_UNKNOWN;
458 }
459
460 static void prestera_port_duplex_get(struct ethtool_link_ksettings *ecmd,
461 struct prestera_port *port)
462 {
463 u8 duplex;
464
465 if (!prestera_hw_port_duplex_get(port, &duplex)) {
466 ecmd->base.duplex = duplex == PRESTERA_PORT_DUPLEX_FULL ?
467 DUPLEX_FULL : DUPLEX_HALF;
468 } else {
469 ecmd->base.duplex = DUPLEX_UNKNOWN;
470 }
471 }
472
> 473 int prestera_ethtool_get_link_ksettings(struct net_device *dev,
474 struct ethtool_link_ksettings *ecmd)
475 {
476 struct prestera_port *port = netdev_priv(dev);
477
478 ethtool_link_ksettings_zero_link_mode(ecmd, supported);
479 ethtool_link_ksettings_zero_link_mode(ecmd, advertising);
480 ethtool_link_ksettings_zero_link_mode(ecmd, lp_advertising);
481
482 ecmd->base.autoneg = port->autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE;
483
484 if (port->caps.type == PRESTERA_PORT_TYPE_TP) {
485 ethtool_link_ksettings_add_link_mode(ecmd, supported, Autoneg);
486
487 if (netif_running(dev) &&
488 (port->autoneg ||
489 port->caps.transceiver == PRESTERA_PORT_TCVR_COPPER))
490 ethtool_link_ksettings_add_link_mode(ecmd, advertising,
491 Autoneg);
492 }
493
494 prestera_modes_to_eth(ecmd->link_modes.supported,
495 port->caps.supp_link_modes,
496 port->caps.supp_fec,
497 port->caps.type);
498
499 prestera_port_supp_types_get(ecmd, port);
500
501 if (netif_carrier_ok(dev)) {
502 prestera_port_speed_get(ecmd, port);
503 prestera_port_duplex_get(ecmd, port);
504 } else {
505 ecmd->base.speed = SPEED_UNKNOWN;
506 ecmd->base.duplex = DUPLEX_UNKNOWN;
507 }
508
509 ecmd->base.port = prestera_port_type_get(port);
510
511 if (port->autoneg) {
512 if (netif_running(dev))
513 prestera_modes_to_eth(ecmd->link_modes.advertising,
514 port->adver_link_modes,
515 port->adver_fec,
516 port->caps.type);
517
518 if (netif_carrier_ok(dev) &&
519 port->caps.transceiver == PRESTERA_PORT_TCVR_COPPER)
520 prestera_port_remote_cap_get(ecmd, port);
521 }
522
523 if (port->caps.type == PRESTERA_PORT_TYPE_TP &&
524 port->caps.transceiver == PRESTERA_PORT_TCVR_COPPER)
525 prestera_hw_port_mdix_get(port, &ecmd->base.eth_tp_mdix,
526 &ecmd->base.eth_tp_mdix_ctrl);
527
528 return 0;
529 }
530
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 63484 bytes --]
next prev parent reply other threads:[~2020-05-28 5:12 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-26 17:12 [net-next RFC v3 0/6] net: marvell: prestera: Add Switchdev driver for Prestera family ASIC device 98DX326x (AC3x) Vadym Kochan
2020-05-26 17:12 ` [net-next RFC v3 1/6] net: marvell: prestera: Add driver for Prestera family ASIC devices Vadym Kochan
2020-05-27 17:57 ` kbuild test robot
2020-05-26 17:12 ` [net-next RFC v3 2/6] net: marvell: prestera: Add PCI interface support Vadym Kochan
2020-05-26 18:33 ` Jakub Kicinski
2020-05-27 21:26 ` kbuild test robot
2020-05-26 17:12 ` [net-next RFC v3 3/6] net: marvell: prestera: Add basic devlink support Vadym Kochan
2020-05-28 1:11 ` kbuild test robot
2020-05-26 17:13 ` [net-next RFC v3 4/6] net: marvell: prestera: Add ethtool interface support Vadym Kochan
2020-05-28 5:12 ` kbuild test robot [this message]
2020-05-26 17:13 ` [net-next RFC v3 5/6] net: marvell: prestera: Add Switchdev driver implementation Vadym Kochan
2020-05-26 17:13 ` [net-next RFC v3 6/6] dt-bindings: marvell,prestera: Add description for device-tree bindings Vadym Kochan
2020-05-26 18:35 ` [net-next RFC v3 0/6] net: marvell: prestera: Add Switchdev driver for Prestera family ASIC device 98DX326x (AC3x) Jakub Kicinski
2020-05-26 20:33 ` Vadym Kochan
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=202005281327.lAS3b2uC%lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.