All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/net/ethernet/davicom/dm9000.c:1684 dm9000_probe() error: we previously assumed 'pdata' could be null (see line 1576)
@ 2022-01-19 15:46 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2022-01-19 15:46 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 39335 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Jakub Kicinski <kuba@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   1d1df41c5a33359a00e919d54eaebfb789711fdc
commit: 4abd7cffc09a38015fa14a22471e3de48a4ca032 ethernet: use eth_hw_addr_set() in unmaintained drivers
date:   3 months ago
:::::: branch date: 6 hours ago
:::::: commit date: 3 months ago
config: microblaze-randconfig-m031-20220119 (https://download.01.org/0day-ci/archive/20220119/202201192350.uMsraGrb-lkp(a)intel.com/config)
compiler: microblaze-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

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, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 2+ messages in thread

* drivers/net/ethernet/davicom/dm9000.c:1684 dm9000_probe() error: we previously assumed 'pdata' could be null (see line 1576)
@ 2022-09-08 15:51 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2022-09-08 15:51 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 39283 bytes --]

BCC: lkp(a)intel.com
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Jakub Kicinski <kuba@kernel.org>

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/202209082321.zrPS5yWh-lkp(a)intel.com/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 <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-09-08 15:51 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-19 15:46 drivers/net/ethernet/davicom/dm9000.c:1684 dm9000_probe() error: we previously assumed 'pdata' could be null (see line 1576) kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2022-09-08 15:51 kernel test robot

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.