Hi Andre,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    
https://github.com/0day-ci/linux/commits/Andre-Edich/Add-PAL-support-to-smsc95xx/20200723-195824
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 
7fc3b978a8971305d456b32d3f2ac13191f5a0d7
config: x86_64-randconfig-a016-20200724 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All errors (new ones prefixed by >>):

   ld: drivers/net/usb/smsc95xx.o: in function `smsc95xx_disconnect_phy':
>> drivers/net/usb/smsc95xx.c:1395: undefined reference to `phy_stop'
>> ld: drivers/net/usb/smsc95xx.c:1396: undefined reference to `phy_disconnect'
   ld: drivers/net/usb/smsc95xx.o: in function `smsc95xx_unbind':
>> drivers/net/usb/smsc95xx.c:1359: undefined reference to `mdiobus_unregister'
>> ld: drivers/net/usb/smsc95xx.c:1360: undefined reference to `mdiobus_free'
   ld: drivers/net/usb/smsc95xx.o: in function `smsc95xx_start_phy':
>> drivers/net/usb/smsc95xx.c:1380: undefined reference to `phy_connect_direct'
>> ld: drivers/net/usb/smsc95xx.c:1388: undefined reference to 
>> `phy_attached_info'
>> ld: drivers/net/usb/smsc95xx.c:1389: undefined reference to `phy_start'
   ld: drivers/net/usb/smsc95xx.o: in function `smsc95xx_resume':
>> drivers/net/usb/smsc95xx.c:1951: undefined reference to `phy_init_hw'
   ld: drivers/net/usb/smsc95xx.o: in function `smsc95xx_handle_link_change':
>> drivers/net/usb/smsc95xx.c:1367: undefined reference to `phy_print_status'
   ld: drivers/net/usb/smsc95xx.o: in function `mdiobus_alloc':
>> include/linux/phy.h:318: undefined reference to `mdiobus_alloc_size'
   ld: drivers/net/usb/smsc95xx.o: in function `smsc95xx_bind':
>> drivers/net/usb/smsc95xx.c:1293: undefined reference to `__mdiobus_register'
>> ld: drivers/net/usb/smsc95xx.c:1299: undefined reference to `phy_find_first'
   ld: drivers/net/usb/smsc95xx.c:1344: undefined reference to 
`mdiobus_unregister'
   ld: drivers/net/usb/smsc95xx.c:1347: undefined reference to `mdiobus_free'

vim +1395 drivers/net/usb/smsc95xx.c

  1222  
  1223  static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
  1224  {
  1225          struct smsc95xx_priv *pdata;
  1226          u32 val;
  1227          int ret;
  1228  
  1229          printk(KERN_INFO SMSC_CHIPNAME " v" SMSC_DRIVER_VERSION "\n");
  1230  
  1231          ret = usbnet_get_endpoints(dev, intf);
  1232          if (ret < 0) {
  1233                  netdev_warn(dev->net, "usbnet_get_endpoints failed: 
%d\n", ret);
  1234                  return ret;
  1235          }
  1236  
  1237          pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
  1238          if (!pdata)
  1239                  return -ENOMEM;
  1240  
  1241          dev->driver_priv = pdata;
  1242  
  1243          spin_lock_init(&pdata->mac_cr_lock);
  1244  
  1245          /* LAN95xx devices do not alter the computed checksum of 0 to 
0xffff.
  1246           * RFC 2460, ipv6 UDP calculated checksum yields a result of 
zero must
  1247           * be changed to 0xffff. RFC 768, ipv4 UDP computed checksum is 
zero,
  1248           * it is transmitted as all ones. The zero transmitted checksum 
means
  1249           * transmitter generated no checksum. Hence, enable csum 
offload only
  1250           * for ipv4 packets.
  1251           */
  1252          if (DEFAULT_TX_CSUM_ENABLE)
  1253                  dev->net->features |= NETIF_F_IP_CSUM;
  1254          if (DEFAULT_RX_CSUM_ENABLE)
  1255                  dev->net->features |= NETIF_F_RXCSUM;
  1256  
  1257          dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
  1258          set_bit(EVENT_NO_IP_ALIGN, &dev->flags);
  1259  
  1260          smsc95xx_init_mac_address(dev);
  1261  
  1262          /* Init all registers */
  1263          ret = smsc95xx_reset(dev);
  1264          if (ret)
  1265                  goto free_pdata;
  1266  
  1267          pdata->mdiobus = mdiobus_alloc();
  1268          if (!pdata->mdiobus) {
  1269                  ret = -ENOMEM;
  1270                  goto free_pdata;
  1271          }
  1272  
  1273          ret = smsc95xx_read_reg(dev, HW_CFG, &val);
  1274          if (ret < 0)
  1275                  goto free_mdio;
  1276  
  1277          pdata->internal_phy = !(val & HW_CFG_PSEL_);
  1278          if (pdata->internal_phy)
  1279                  pdata->mdiobus->phy_mask = ~(1u << 
SMSC95XX_INTERNAL_PHY_ID);
  1280  
  1281          pdata->mdiobus->priv = dev;
  1282          pdata->mdiobus->read = smsc95xx_mdiobus_read;
  1283          pdata->mdiobus->write = smsc95xx_mdiobus_write;
  1284          pdata->mdiobus->name = "smsc95xx-mdiobus";
  1285          pdata->mdiobus->parent = &dev->udev->dev;
  1286  
  1287          dev->mii.phy_id_mask = 0x1f;
  1288          dev->mii.reg_num_mask = 0x1f;
  1289  
  1290          snprintf(pdata->mdiobus->id, ARRAY_SIZE(pdata->mdiobus->id),
  1291                   "usb-%03d:%03d", dev->udev->bus->busnum, 
dev->udev->devnum);
  1292  
> 1293          ret = mdiobus_register(pdata->mdiobus);
  1294          if (ret) {
  1295                  netdev_err(dev->net, "Could not register MDIO bus\n");
  1296                  goto free_mdio;
  1297          }
  1298  
> 1299          pdata->phydev = phy_find_first(pdata->mdiobus);
  1300          if (!pdata->phydev) {
  1301                  netdev_err(dev->net, "no PHY found\n");
  1302                  ret = -ENODEV;
  1303                  goto unregister_mdio;
  1304          }
  1305  
  1306          dev->mii.dev = dev->net;
  1307          dev->mii.mdio_read = smsc95xx_mdio_read;
  1308          dev->mii.mdio_write = smsc95xx_mdio_write;
  1309          dev->mii.phy_id = pdata->phydev->mdio.addr;
  1310  
  1311          /* detect device revision as different features may be 
available */
  1312          ret = smsc95xx_read_reg(dev, ID_REV, &val);
  1313          if (ret < 0)
  1314                  goto unregister_mdio;
  1315  
  1316          val >>= 16;
  1317          pdata->chip_id = val;
  1318          if (pdata->internal_phy)
  1319                  pdata->mdix_ctrl = get_mdix_status(dev->net);
  1320  
  1321          if ((val == ID_REV_CHIP_ID_9500A_) || (val == 
ID_REV_CHIP_ID_9530_) ||
  1322              (val == ID_REV_CHIP_ID_89530_) || (val == 
ID_REV_CHIP_ID_9730_))
  1323                  pdata->features = (FEATURE_8_WAKEUP_FILTERS |
  1324                          FEATURE_PHY_NLP_CROSSOVER |
  1325                          FEATURE_REMOTE_WAKEUP);
  1326          else if (val == ID_REV_CHIP_ID_9512_)
  1327                  pdata->features = FEATURE_8_WAKEUP_FILTERS;
  1328  
  1329          dev->net->netdev_ops = &smsc95xx_netdev_ops;
  1330          dev->net->ethtool_ops = &smsc95xx_ethtool_ops;
  1331          dev->net->flags |= IFF_MULTICAST;
  1332          dev->net->hard_header_len += SMSC95XX_TX_OVERHEAD_CSUM;
  1333          dev->net->min_mtu = ETH_MIN_MTU;
  1334          dev->net->max_mtu = ETH_DATA_LEN;
  1335          dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
  1336  
  1337          pdata->dev = dev;
  1338          INIT_DELAYED_WORK(&pdata->carrier_check, check_carrier);
  1339          schedule_delayed_work(&pdata->carrier_check, 
CARRIER_CHECK_DELAY);
  1340  
  1341          return 0;
  1342  
  1343  unregister_mdio:
  1344          mdiobus_unregister(pdata->mdiobus);
  1345  
  1346  free_mdio:
  1347          mdiobus_free(pdata->mdiobus);
  1348  
  1349  free_pdata:
  1350          kfree(pdata);
  1351          return ret;
  1352  }
  1353  
  1354  static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface 
*intf)
  1355  {
  1356          struct smsc95xx_priv *pdata = dev->driver_priv;
  1357  
  1358          cancel_delayed_work_sync(&pdata->carrier_check);
> 1359          mdiobus_unregister(pdata->mdiobus);
> 1360          mdiobus_free(pdata->mdiobus);
  1361          netif_dbg(dev, ifdown, dev->net, "free pdata\n");
  1362          kfree(pdata);
  1363  }
  1364  
  1365  static void smsc95xx_handle_link_change(struct net_device *net)
  1366  {
> 1367          phy_print_status(net->phydev);
  1368  }
  1369  
  1370  static int smsc95xx_start_phy(struct usbnet *dev)
  1371  {
  1372          struct smsc95xx_priv *pdata = dev->driver_priv;
  1373          struct net_device *net = dev->net;
  1374          int ret;
  1375  
  1376          ret = smsc95xx_reset(dev);
  1377          if (ret < 0)
  1378                  return ret;
  1379  
> 1380          ret = phy_connect_direct(net, pdata->phydev,
  1381                                   &smsc95xx_handle_link_change,
  1382                                   PHY_INTERFACE_MODE_MII);
  1383          if (ret) {
  1384                  netdev_err(net, "can't attach PHY to %s\n", 
pdata->mdiobus->id);
  1385                  return ret;
  1386          }
  1387  
> 1388          phy_attached_info(net->phydev);
> 1389          phy_start(net->phydev);
  1390          return 0;
  1391  }
  1392  
  1393  static int smsc95xx_disconnect_phy(struct usbnet *dev)
  1394  {
> 1395          phy_stop(dev->net->phydev);
> 1396          phy_disconnect(dev->net->phydev);
  1397          return 0;
  1398  }
  1399  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to