BCC: [email protected] CC: [email protected] CC: [email protected] TO: Jakub Kicinski <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 0066f1b0e27556381402db3ff31f85d2a2265858 commit: 4abd7cffc09a38015fa14a22471e3de48a4ca032 ethernet: use eth_hw_addr_set() in unmaintained drivers date: 11 months ago :::::: branch date: 2 days ago :::::: commit date: 11 months ago config: arc-randconfig-m031-20220908 (https://download.01.org/0day-ci/archive/20220908/[email protected]/config) compiler: arceb-elf-gcc (GCC) 12.1.0 If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: drivers/net/ethernet/davicom/dm9000.c:1684 dm9000_probe() error: we previously assumed 'pdata' could be null (see line 1576) vim +/pdata +1684 drivers/net/ethernet/davicom/dm9000.c 0b8bf1baabe56f drivers/net/ethernet/davicom/dm9000.c Tomasz Figa 2013-05-20 1408 a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1409 /* f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1410 * Search DM9000 board, allocate space and register it a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1411 */ 6b6a3e7f65e573 drivers/net/ethernet/davicom/dm9000.c Bill Pemberton 2012-12-03 1412 static int f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1413 dm9000_probe(struct platform_device *pdev) a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1414 { cd4e2e4b368fd5 drivers/net/ethernet/davicom/dm9000.c Jingoo Han 2013-08-30 1415 struct dm9000_plat_data *pdata = dev_get_platdata(&pdev->dev); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1416 struct board_info *db; /* Point a board information structure */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1417 struct net_device *ndev; 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1418 struct device *dev = &pdev->dev; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1419 const unsigned char *mac_src; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1420 int ret = 0; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1421 int iosize; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1422 int i; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1423 u32 id_val; 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1424 int reset_gpios; 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1425 enum of_gpio_flags flags; 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1426 struct regulator *power; 3274940bd3d870 drivers/net/ethernet/davicom/dm9000.c Harvey Hunt 2016-05-17 1427 bool inv_mac_addr = false; 4abd7cffc09a38 drivers/net/ethernet/davicom/dm9000.c Jakub Kicinski 2021-10-15 1428 u8 addr[ETH_ALEN]; 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1429 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1430 power = devm_regulator_get(dev, "vcc"); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1431 if (IS_ERR(power)) { 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1432 if (PTR_ERR(power) == -EPROBE_DEFER) 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1433 return -EPROBE_DEFER; 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1434 dev_dbg(dev, "no regulator provided\n"); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1435 } else { 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1436 ret = regulator_enable(power); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1437 if (ret != 0) { 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1438 dev_err(dev, 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1439 "Failed to enable power regulator: %d\n", ret); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1440 return ret; 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1441 } 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1442 dev_dbg(dev, "regulator enabled\n"); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1443 } 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1444 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1445 reset_gpios = of_get_named_gpio_flags(dev->of_node, "reset-gpios", 0, 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1446 &flags); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1447 if (gpio_is_valid(reset_gpios)) { 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1448 ret = devm_gpio_request_one(dev, reset_gpios, flags, 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1449 "dm9000_reset"); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1450 if (ret) { 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1451 dev_err(dev, "failed to request reset gpio %d: %d\n", 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1452 reset_gpios, ret); ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1453 goto out_regulator_disable; 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1454 } 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1455 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1456 /* According to manual PWRST# Low Period Min 1ms */ 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1457 msleep(2); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1458 gpio_set_value(reset_gpios, 1); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1459 /* Needs 3ms to read eeprom when PWRST is deasserted */ 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1460 msleep(4); 7994fe55a4a200 drivers/net/ethernet/davicom/dm9000.c Zubair Lutfullah Kakakhel 2015-01-15 1461 } a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1462 0b8bf1baabe56f drivers/net/ethernet/davicom/dm9000.c Tomasz Figa 2013-05-20 1463 if (!pdata) { 0b8bf1baabe56f drivers/net/ethernet/davicom/dm9000.c Tomasz Figa 2013-05-20 1464 pdata = dm9000_parse_dt(&pdev->dev); ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1465 if (IS_ERR(pdata)) { ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1466 ret = PTR_ERR(pdata); ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1467 goto out_regulator_disable; ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1468 } 0b8bf1baabe56f drivers/net/ethernet/davicom/dm9000.c Tomasz Figa 2013-05-20 1469 } 0b8bf1baabe56f drivers/net/ethernet/davicom/dm9000.c Tomasz Figa 2013-05-20 1470 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1471 /* Init network device */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1472 ndev = alloc_etherdev(sizeof(struct board_info)); 31457db3750c0b drivers/net/ethernet/davicom/dm9000.c Christophe JAILLET 2021-04-11 1473 if (!ndev) { 31457db3750c0b drivers/net/ethernet/davicom/dm9000.c Christophe JAILLET 2021-04-11 1474 ret = -ENOMEM; 31457db3750c0b drivers/net/ethernet/davicom/dm9000.c Christophe JAILLET 2021-04-11 1475 goto out_regulator_disable; 31457db3750c0b drivers/net/ethernet/davicom/dm9000.c Christophe JAILLET 2021-04-11 1476 } 9a2f037cdbe840 drivers/net/dm9000.c Ben Dooks 2008-02-05 1477 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1478 SET_NETDEV_DEV(ndev, &pdev->dev); 9ef9ac51cc5fa5 drivers/net/dm9000.c Ben Dooks 2005-07-23 1479 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1480 dev_dbg(&pdev->dev, "dm9000_probe()\n"); 9ef9ac51cc5fa5 drivers/net/dm9000.c Ben Dooks 2005-07-23 1481 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1482 /* setup board info structure */ 4cf1653aa90c63 drivers/net/dm9000.c Wang Chen 2008-11-12 1483 db = netdev_priv(ndev); a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1484 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1485 db->dev = &pdev->dev; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1486 db->ndev = ndev; cf9e60aa69ae6c drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1487 if (!IS_ERR(power)) cf9e60aa69ae6c drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1488 db->power_supply = power; 89c8b0e6cd3859 drivers/net/dm9000.c Ben Dooks 2008-02-05 1489 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1490 spin_lock_init(&db->lock); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1491 mutex_init(&db->addr_lock); 89c8b0e6cd3859 drivers/net/dm9000.c Ben Dooks 2008-02-05 1492 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1493 INIT_DELAYED_WORK(&db->phy_poll, dm9000_poll_work); 89c8b0e6cd3859 drivers/net/dm9000.c Ben Dooks 2008-02-05 1494 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1495 db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1496 db->data_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); 89c8b0e6cd3859 drivers/net/dm9000.c Ben Dooks 2008-02-05 1497 b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1498 if (!db->addr_res || !db->data_res) { b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1499 dev_err(db->dev, "insufficient resources addr=%p data=%p\n", b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1500 db->addr_res, db->data_res); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1501 ret = -ENOENT; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1502 goto out; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1503 } a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1504 b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1505 ndev->irq = platform_get_irq(pdev, 0); b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1506 if (ndev->irq < 0) { b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1507 ret = ndev->irq; b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1508 goto out; b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1509 } b5a099c67a1c36 drivers/net/ethernet/davicom/dm9000.c Robert Jarzmik 2016-02-20 1510 2e2696223676d5 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1511 db->irq_wake = platform_get_irq_optional(pdev, 1); c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1512 if (db->irq_wake >= 0) { c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1513 dev_dbg(db->dev, "wakeup irq %d\n", db->irq_wake); c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1514 c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1515 ret = request_irq(db->irq_wake, dm9000_wol_interrupt, c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1516 IRQF_SHARED, dev_name(db->dev), ndev); c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1517 if (ret) { c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1518 dev_err(db->dev, "cannot get wakeup irq (%d)\n", ret); c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1519 } else { c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1520 c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1521 /* test to see if irq is really wakeup capable */ dced35aeb0367d drivers/net/dm9000.c Thomas Gleixner 2011-03-28 1522 ret = irq_set_irq_wake(db->irq_wake, 1); c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1523 if (ret) { c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1524 dev_err(db->dev, "irq %d cannot set wakeup (%d)\n", c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1525 db->irq_wake, ret); c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1526 } else { dced35aeb0367d drivers/net/dm9000.c Thomas Gleixner 2011-03-28 1527 irq_set_irq_wake(db->irq_wake, 0); c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1528 db->wake_supported = 1; c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1529 } c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1530 } c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1531 } c029f4440fd3f0 drivers/net/dm9000.c Ben Dooks 2009-11-10 1532 ec282e9225be92 drivers/net/dm9000.c Tobias Klauser 2009-09-09 1533 iosize = resource_size(db->addr_res); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1534 db->addr_req = request_mem_region(db->addr_res->start, iosize, f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1535 pdev->name); a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1536 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1537 if (db->addr_req == NULL) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1538 dev_err(db->dev, "cannot claim address reg area\n"); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1539 ret = -EIO; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1540 goto out; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1541 } a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1542 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1543 db->io_addr = ioremap(db->addr_res->start, iosize); 37d5dca6af6b62 drivers/net/dm9000.c Enrico Scholz 2008-05-08 1544 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1545 if (db->io_addr == NULL) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1546 dev_err(db->dev, "failed to ioremap address reg\n"); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1547 ret = -EINVAL; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1548 goto out; a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1549 } a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1550 ec282e9225be92 drivers/net/dm9000.c Tobias Klauser 2009-09-09 1551 iosize = resource_size(db->data_res); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1552 db->data_req = request_mem_region(db->data_res->start, iosize, f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1553 pdev->name); a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1554 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1555 if (db->data_req == NULL) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1556 dev_err(db->dev, "cannot claim data reg area\n"); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1557 ret = -EIO; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1558 goto out; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1559 } 9a2f037cdbe840 drivers/net/dm9000.c Ben Dooks 2008-02-05 1560 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1561 db->io_data = ioremap(db->data_res->start, iosize); a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1562 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1563 if (db->io_data == NULL) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1564 dev_err(db->dev, "failed to ioremap data reg\n"); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1565 ret = -EINVAL; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1566 goto out; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1567 } 9ef9ac51cc5fa5 drivers/net/dm9000.c Ben Dooks 2005-07-23 1568 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1569 /* fill in parameters for net-dev structure */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1570 ndev->base_addr = (unsigned long)db->io_addr; a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1571 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1572 /* ensure at least we have a default set of IO routines */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1573 dm9000_set_io(db, iosize); a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1574 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1575 /* check to see if anything is being over-ridden */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 @1576 if (pdata != NULL) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1577 /* check to see if the driver wants to over-ride the f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1578 * default IO width */ 89c8b0e6cd3859 drivers/net/dm9000.c Ben Dooks 2008-02-05 1579 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1580 if (pdata->flags & DM9000_PLATF_8BITONLY) f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1581 dm9000_set_io(db, 1); 89c8b0e6cd3859 drivers/net/dm9000.c Ben Dooks 2008-02-05 1582 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1583 if (pdata->flags & DM9000_PLATF_16BITONLY) f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1584 dm9000_set_io(db, 2); 89c8b0e6cd3859 drivers/net/dm9000.c Ben Dooks 2008-02-05 1585 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1586 if (pdata->flags & DM9000_PLATF_32BITONLY) f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1587 dm9000_set_io(db, 4); 89c8b0e6cd3859 drivers/net/dm9000.c Ben Dooks 2008-02-05 1588 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1589 /* check to see if there are any IO routine f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1590 * over-rides */ a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1591 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1592 if (pdata->inblk != NULL) f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1593 db->inblk = pdata->inblk; 9ef9ac51cc5fa5 drivers/net/dm9000.c Ben Dooks 2005-07-23 1594 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1595 if (pdata->outblk != NULL) f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1596 db->outblk = pdata->outblk; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1597 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1598 if (pdata->dumpblk != NULL) f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1599 db->dumpblk = pdata->dumpblk; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1600 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1601 db->flags = pdata->flags; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1602 } f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1603 f8dd0ecbb74d4b drivers/net/dm9000.c Ben Dooks 2008-06-24 1604 #ifdef CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL f8dd0ecbb74d4b drivers/net/dm9000.c Ben Dooks 2008-06-24 1605 db->flags |= DM9000_PLATF_SIMPLE_PHY; f8dd0ecbb74d4b drivers/net/dm9000.c Ben Dooks 2008-06-24 1606 #endif f8dd0ecbb74d4b drivers/net/dm9000.c Ben Dooks 2008-06-24 1607 751bb6fd80b728 drivers/net/ethernet/davicom/dm9000.c Andrew Ruder 2014-06-04 1608 dm9000_reset(db); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1609 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1610 /* try multiple times, DM9000 sometimes gets the read wrong */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1611 for (i = 0; i < 8; i++) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1612 id_val = ior(db, DM9000_VIDL); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1613 id_val |= (u32)ior(db, DM9000_VIDH) << 8; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1614 id_val |= (u32)ior(db, DM9000_PIDL) << 16; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1615 id_val |= (u32)ior(db, DM9000_PIDH) << 24; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1616 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1617 if (id_val == DM9000_ID) f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1618 break; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1619 dev_err(db->dev, "read wrong id 0x%08x\n", id_val); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1620 } f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1621 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1622 if (id_val != DM9000_ID) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1623 dev_err(db->dev, "wrong id: 0x%08x\n", id_val); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1624 ret = -ENODEV; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1625 goto out; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1626 } f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1627 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1628 /* Identify what type of DM9000 we are working on */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1629 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1630 id_val = ior(db, DM9000_CHIPR); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1631 dev_dbg(db->dev, "dm9000 revision 0x%02x\n", id_val); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1632 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1633 switch (id_val) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1634 case CHIPR_DM9000A: f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1635 db->type = TYPE_DM9000A; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1636 break; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1637 case CHIPR_DM9000B: f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1638 db->type = TYPE_DM9000B; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1639 break; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1640 default: f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1641 dev_dbg(db->dev, "ID %02x => defaulting to DM9000E\n", id_val); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1642 db->type = TYPE_DM9000E; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1643 } f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1644 5dcc60b7188679 drivers/net/dm9000.c Yeasah Pell 2009-07-06 1645 /* dm9000a/b are capable of hardware checksum offload */ 5dcc60b7188679 drivers/net/dm9000.c Yeasah Pell 2009-07-06 1646 if (db->type == TYPE_DM9000A || db->type == TYPE_DM9000B) { c88fcb3d8265cf drivers/net/dm9000.c Michał Mirosław 2011-04-15 1647 ndev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM; c88fcb3d8265cf drivers/net/dm9000.c Michał Mirosław 2011-04-15 1648 ndev->features |= ndev->hw_features; 5dcc60b7188679 drivers/net/dm9000.c Yeasah Pell 2009-07-06 1649 } 5dcc60b7188679 drivers/net/dm9000.c Yeasah Pell 2009-07-06 1650 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1651 /* from this point we assume that we have found a DM9000 */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1652 d88106b70178a8 drivers/net/dm9000.c Alexander Beregalov 2009-04-15 1653 ndev->netdev_ops = &dm9000_netdev_ops; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1654 ndev->watchdog_timeo = msecs_to_jiffies(watchdog); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1655 ndev->ethtool_ops = &dm9000_ethtool_ops; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1656 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1657 db->msg_enable = NETIF_MSG_LINK; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1658 db->mii.phy_id_mask = 0x1f; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1659 db->mii.reg_num_mask = 0x1f; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1660 db->mii.force_media = 0; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1661 db->mii.full_duplex = 0; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1662 db->mii.dev = ndev; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1663 db->mii.mdio_read = dm9000_phy_read; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1664 db->mii.mdio_write = dm9000_phy_write; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1665 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1666 mac_src = "eeprom"; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1667 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1668 /* try reading the node address from the attached EEPROM */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1669 for (i = 0; i < 6; i += 2) 4abd7cffc09a38 drivers/net/ethernet/davicom/dm9000.c Jakub Kicinski 2021-10-15 1670 dm9000_read_eeprom(db, i / 2, addr + i); 4abd7cffc09a38 drivers/net/ethernet/davicom/dm9000.c Jakub Kicinski 2021-10-15 1671 eth_hw_addr_set(ndev, addr); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1672 fe414248551e28 drivers/net/dm9000.c Laurent Pinchart 2008-07-23 1673 if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) { fe414248551e28 drivers/net/dm9000.c Laurent Pinchart 2008-07-23 1674 mac_src = "platform data"; a96d317fb1a30b drivers/net/ethernet/davicom/dm9000.c Jakub Kicinski 2021-10-01 1675 eth_hw_addr_set(ndev, pdata->dev_addr); fe414248551e28 drivers/net/dm9000.c Laurent Pinchart 2008-07-23 1676 } fe414248551e28 drivers/net/dm9000.c Laurent Pinchart 2008-07-23 1677 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1678 if (!is_valid_ether_addr(ndev->dev_addr)) { f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1679 /* try reading from mac */ f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1680 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1681 mac_src = "chip"; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1682 for (i = 0; i < 6; i++) 4abd7cffc09a38 drivers/net/ethernet/davicom/dm9000.c Jakub Kicinski 2021-10-15 1683 addr[i] = ior(db, i + DM9000_PAR); 4abd7cffc09a38 drivers/net/ethernet/davicom/dm9000.c Jakub Kicinski 2021-10-15 @1684 eth_hw_addr_set(ndev, pdata->dev_addr); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1685 } f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1686 85e6b8c5d8be1e drivers/net/dm9000.c Ben Dooks 2011-02-24 1687 if (!is_valid_ether_addr(ndev->dev_addr)) { 3274940bd3d870 drivers/net/ethernet/davicom/dm9000.c Harvey Hunt 2016-05-17 1688 inv_mac_addr = true; f2cedb63df1434 drivers/net/ethernet/davicom/dm9000.c Danny Kukawka 2012-02-15 1689 eth_hw_addr_random(ndev); 85e6b8c5d8be1e drivers/net/dm9000.c Ben Dooks 2011-02-24 1690 mac_src = "random"; 85e6b8c5d8be1e drivers/net/dm9000.c Ben Dooks 2011-02-24 1691 } 85e6b8c5d8be1e drivers/net/dm9000.c Ben Dooks 2011-02-24 1692 85e6b8c5d8be1e drivers/net/dm9000.c Ben Dooks 2011-02-24 1693 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1694 platform_set_drvdata(pdev, ndev); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1695 ret = register_netdev(ndev); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1696 3274940bd3d870 drivers/net/ethernet/davicom/dm9000.c Harvey Hunt 2016-05-17 1697 if (ret == 0) { 3274940bd3d870 drivers/net/ethernet/davicom/dm9000.c Harvey Hunt 2016-05-17 1698 if (inv_mac_addr) 3274940bd3d870 drivers/net/ethernet/davicom/dm9000.c Harvey Hunt 2016-05-17 1699 dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please set using ip\n", 3274940bd3d870 drivers/net/ethernet/davicom/dm9000.c Harvey Hunt 2016-05-17 1700 ndev->name); e174961ca1a0b2 drivers/net/dm9000.c Johannes Berg 2008-10-27 1701 printk(KERN_INFO "%s: dm9000%c at %p,%p IRQ %d MAC: %pM (%s)\n", f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1702 ndev->name, dm9000_type_to_char(db->type), f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1703 db->io_addr, db->io_data, ndev->irq, e174961ca1a0b2 drivers/net/dm9000.c Johannes Berg 2008-10-27 1704 ndev->dev_addr, mac_src); 3274940bd3d870 drivers/net/ethernet/davicom/dm9000.c Harvey Hunt 2016-05-17 1705 } f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1706 return 0; f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1707 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1708 out: f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1709 dev_err(db->dev, "not found (%d).\n", ret); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1710 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1711 dm9000_release_board(pdev, db); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1712 free_netdev(ndev); f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1713 ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1714 out_regulator_disable: ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1715 if (!IS_ERR(power)) ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1716 regulator_disable(power); ac88c531a5b388 drivers/net/ethernet/davicom/dm9000.c Paul Cercueil 2021-03-07 1717 f8d79e79a1700f drivers/net/dm9000.c Ben Dooks 2008-06-24 1718 return ret; a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1719 } a1365275e745bb drivers/net/dm9000.c Sascha Hauer 2005-05-05 1720 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
