Hi Lorenzo,
[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on bpf-next/master]
url:
https://github.com/0day-ci/linux/commits/Lorenzo-Bianconi/bpf-devmap-move...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: c6x-randconfig-r011-20210209 (attached as .config)
compiler: c6x-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
#
https://github.com/0day-ci/linux/commit/96ef538bb5cf75f19f3973722e4f66c7f...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Lorenzo-Bianconi/bpf-devmap-move-drop-error-path-to-devmpap-for-XDP_REDIRECT/20210210-222154
git checkout 96ef538bb5cf75f19f3973722e4f66c7f65781db
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=c6x
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
drivers/net/ethernet/socionext/netsec.c: In function 'netsec_xdp_xmit':
> drivers/net/ethernet/socionext/netsec.c:1787:12: error: invalid
storage class for function 'netsec_xdp_setup'
1787 | static int
netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
| ^~~~~~~~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:1787:1: warning: ISO C90
forbids mixed declarations and code [-Wdeclaration-after-statement]
1787 |
static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog,
| ^~~~~~
> drivers/net/ethernet/socionext/netsec.c:1813:12: error: invalid
storage class for function 'netsec_xdp'
1813 | static int
netsec_xdp(struct net_device *ndev, struct netdev_bpf *xdp)
| ^~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:1836:14: error:
initializer element is not constant
1836 | .ndo_bpf = netsec_xdp,
| ^~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:1836:14: note: (near initialization for
'netsec_netdev_ops.ndo_bpf')
> drivers/net/ethernet/socionext/netsec.c:1839:12: error: invalid
storage class for function 'netsec_of_probe'
1839 | static int
netsec_of_probe(struct platform_device *pdev,
| ^~~~~~~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:1868:12: error: invalid
storage class for function 'netsec_acpi_probe'
1868 | static int
netsec_acpi_probe(struct platform_device *pdev,
| ^~~~~~~~~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:1900:13: error: invalid
storage class for function 'netsec_unregister_mdio'
1900 | static void
netsec_unregister_mdio(struct netsec_priv *priv)
| ^~~~~~~~~~~~~~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:1912:12: error: invalid
storage class for function 'netsec_register_mdio'
1912 | static int
netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
| ^~~~~~~~~~~~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:1977:12: error: invalid
storage class for function 'netsec_probe'
1977 | static int
netsec_probe(struct platform_device *pdev)
| ^~~~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:2140:12: error: invalid
storage class for function 'netsec_remove'
2140 | static int
netsec_remove(struct platform_device *pdev)
| ^~~~~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:2189:1: warning:
'alias' attribute ignored [-Wattributes]
2189 | MODULE_DEVICE_TABLE(of,
netsec_dt_ids);
| ^~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2200:11: error: initializer element is not
constant
2200 | .probe = netsec_probe,
| ^~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2200:11: note: (near initialization for
'netsec_driver.probe')
drivers/net/ethernet/socionext/netsec.c:2201:12: error: initializer element is not
constant
2201 | .remove = netsec_remove,
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2201:12: note: (near initialization for
'netsec_driver.remove')
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
> drivers/net/ethernet/socionext/netsec.c:2209:24: error: invalid
storage class for function 'netsec_driver_init'
2209 |
module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~
include/linux/device/driver.h:259:19: note: in definition of macro
'module_driver'
259 | static int __init __driver##_init(void) \
| ^~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro
'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
> include/linux/module.h:132:42: error: invalid storage class for
function '__inittest'
132 | static inline initcall_t __maybe_unused
__inittest(void) \
| ^~~~~~~~~~
include/linux/device/driver.h:263:1: note: in expansion of macro 'module_init'
263 | module_init(__driver##_init); \
| ^~~~~~~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro
'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro
'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: warning: 'alias' attribute
ignored [-Wattributes]
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/net/ethernet/socionext/netsec.c:5:
> drivers/net/ethernet/socionext/netsec.c:2209:24: error: invalid
storage class for function 'netsec_driver_exit'
2209 |
module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~
include/linux/device/driver.h:264:20: note: in definition of macro
'module_driver'
264 | static void __exit __driver##_exit(void) \
| ^~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro
'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
> include/linux/device/driver.h:264:1: warning: ISO C90 forbids
mixed declarations and code [-Wdeclaration-after-statement]
264 | static void
__exit __driver##_exit(void) \
| ^~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro
'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro
'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
> include/linux/module.h:138:42: error: invalid storage class for
function '__exittest'
138 | static inline exitcall_t __maybe_unused
__exittest(void) \
| ^~~~~~~~~~
include/linux/device/driver.h:268:1: note: in expansion of macro 'module_exit'
268 | module_exit(__driver##_exit);
| ^~~~~~~~~~~
include/linux/platform_device.h:257:2: note: in expansion of macro
'module_driver'
257 | module_driver(__platform_driver, platform_driver_register, \
| ^~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: note: in expansion of macro
'module_platform_driver'
2209 | module_platform_driver(netsec_driver);
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2209:1: warning: 'alias' attribute
ignored [-Wattributes]
In file included from include/linux/module.h:21,
from include/linux/phy.h:22,
from include/linux/of_mdio.h:12,
from drivers/net/ethernet/socionext/netsec.c:8:
> include/linux/moduleparam.h:24:2: warning: ISO C90 forbids mixed
declarations and code [-Wdeclaration-after-statement]
24 | static const char
__UNIQUE_ID(name)[] \
| ^~~~~~
include/linux/module.h:163:32: note: in expansion of macro '__MODULE_INFO'
163 | #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
| ^~~~~~~~~~~~~
include/linux/module.h:233:32: note: in expansion of macro 'MODULE_INFO'
233 | #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
| ^~~~~~~~~~~
drivers/net/ethernet/socionext/netsec.c:2211:1: note: in expansion of macro
'MODULE_AUTHOR'
2211 | MODULE_AUTHOR("Jassi Brar <jaswinder.singh(a)linaro.org>");
| ^~~~~~~~~~~~~
> drivers/net/ethernet/socionext/netsec.c:2214:1: error: expected
declaration or statement at end of input
2214 |
MODULE_LICENSE("GPL");
| ^~~~~~~~~~~~~~
At top level:
drivers/net/ethernet/socionext/netsec.c:1755:12: warning: 'netsec_xdp_xmit'
defined but not used [-Wunused-function]
1755 | static int netsec_xdp_xmit(struct net_device *ndev, int n,
| ^~~~~~~~~~~~~~~
vim +/netsec_xdp_setup +1787 drivers/net/ethernet/socionext/netsec.c
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1786
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1787 static int netsec_xdp_setup(struct
netsec_priv *priv, struct bpf_prog *prog,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1788 struct netlink_ext_ack *extack)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1789 {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1790 struct net_device *dev =
priv->ndev;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1791 struct bpf_prog *old_prog;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1792
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1793 /* For now just support only the usual
MTU sized frames */
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1794 if (prog && dev->mtu >
1500) {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1795 NL_SET_ERR_MSG_MOD(extack,
"Jumbo frames not supported on XDP");
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1796 return -EOPNOTSUPP;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1797 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1798
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1799 if (netif_running(dev))
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1800 netsec_netdev_stop(dev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1801
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1802 /* Detach old prog, if any */
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1803 old_prog =
xchg(&priv->xdp_prog, prog);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1804 if (old_prog)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1805 bpf_prog_put(old_prog);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1806
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1807 if (netif_running(dev))
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1808 netsec_netdev_open(dev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1809
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1810 return 0;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1811 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1812
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1813 static int netsec_xdp(struct net_device
*ndev, struct netdev_bpf *xdp)
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1814 {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1815 struct netsec_priv *priv =
netdev_priv(ndev);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1816
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1817 switch (xdp->command) {
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1818 case XDP_SETUP_PROG:
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1819 return netsec_xdp_setup(priv,
xdp->prog, xdp->extack);
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1820 default:
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1821 return -EINVAL;
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1822 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1823 }
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1824
533dd11a12f698c Jassi Brar 2018-01-06 1825 static const struct net_device_ops
netsec_netdev_ops = {
533dd11a12f698c Jassi Brar 2018-01-06 1826 .ndo_init = netsec_netdev_init,
533dd11a12f698c Jassi Brar 2018-01-06 1827 .ndo_uninit = netsec_netdev_uninit,
533dd11a12f698c Jassi Brar 2018-01-06 1828 .ndo_open = netsec_netdev_open,
533dd11a12f698c Jassi Brar 2018-01-06 1829 .ndo_stop = netsec_netdev_stop,
533dd11a12f698c Jassi Brar 2018-01-06 1830 .ndo_start_xmit =
netsec_netdev_start_xmit,
533dd11a12f698c Jassi Brar 2018-01-06 1831 .ndo_set_features =
netsec_netdev_set_features,
533dd11a12f698c Jassi Brar 2018-01-06 1832 .ndo_set_mac_address =
eth_mac_addr,
533dd11a12f698c Jassi Brar 2018-01-06 1833 .ndo_validate_addr =
eth_validate_addr,
c5d19a6ecfce72d Heiner Kallweit 2020-01-21 1834 .ndo_do_ioctl = phy_do_ioctl,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 1835 .ndo_xdp_xmit = netsec_xdp_xmit,
ba2b232108d3c29 Ilias Apalodimas 2019-06-29 @1836 .ndo_bpf = netsec_xdp,
533dd11a12f698c Jassi Brar 2018-01-06 1837 };
533dd11a12f698c Jassi Brar 2018-01-06 1838
533dd11a12f698c Jassi Brar 2018-01-06 @1839 static int netsec_of_probe(struct
platform_device *pdev,
8e850f25b5812ae Masahisa Kojima 2018-10-23 1840 struct netsec_priv *priv, u32
*phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1841 {
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1842 int err;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1843
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1844 err =
of_get_phy_mode(pdev->dev.of_node, &priv->phy_interface);
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1845 if (err) {
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1846 dev_err(&pdev->dev,
"missing required property 'phy-mode'\n");
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1847 return err;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1848 }
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1849
533dd11a12f698c Jassi Brar 2018-01-06 1850 priv->phy_np =
of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
533dd11a12f698c Jassi Brar 2018-01-06 1851 if (!priv->phy_np) {
533dd11a12f698c Jassi Brar 2018-01-06 1852 dev_err(&pdev->dev,
"missing required property 'phy-handle'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1853 return -EINVAL;
533dd11a12f698c Jassi Brar 2018-01-06 1854 }
533dd11a12f698c Jassi Brar 2018-01-06 1855
8e850f25b5812ae Masahisa Kojima 2018-10-23 1856 *phy_addr =
of_mdio_parse_addr(&pdev->dev, priv->phy_np);
8e850f25b5812ae Masahisa Kojima 2018-10-23 1857
533dd11a12f698c Jassi Brar 2018-01-06 1858 priv->clk =
devm_clk_get(&pdev->dev, NULL); /* get by 'phy_ref_clk' */
533dd11a12f698c Jassi Brar 2018-01-06 1859 if (IS_ERR(priv->clk)) {
533dd11a12f698c Jassi Brar 2018-01-06 1860 dev_err(&pdev->dev,
"phy_ref_clk not found\n");
533dd11a12f698c Jassi Brar 2018-01-06 1861 return PTR_ERR(priv->clk);
533dd11a12f698c Jassi Brar 2018-01-06 1862 }
533dd11a12f698c Jassi Brar 2018-01-06 1863 priv->freq =
clk_get_rate(priv->clk);
533dd11a12f698c Jassi Brar 2018-01-06 1864
533dd11a12f698c Jassi Brar 2018-01-06 1865 return 0;
533dd11a12f698c Jassi Brar 2018-01-06 1866 }
533dd11a12f698c Jassi Brar 2018-01-06 1867
533dd11a12f698c Jassi Brar 2018-01-06 @1868 static int netsec_acpi_probe(struct
platform_device *pdev,
533dd11a12f698c Jassi Brar 2018-01-06 1869 struct netsec_priv *priv, u32
*phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1870 {
533dd11a12f698c Jassi Brar 2018-01-06 1871 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1872
533dd11a12f698c Jassi Brar 2018-01-06 1873 if (!IS_ENABLED(CONFIG_ACPI))
533dd11a12f698c Jassi Brar 2018-01-06 1874 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1875
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1876 /* ACPI systems are assumed to
configure the PHY in firmware, so
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1877 * there is really no need to discover
the PHY mode from the DSDT.
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1878 * Since firmware is known to exist in
the field that configures the
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1879 * PHY correctly but passes the wrong
mode string in the phy-mode
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1880 * device property, we have no choice
but to ignore it.
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1881 */
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1882 priv->phy_interface =
PHY_INTERFACE_MODE_NA;
acd7aaf51b20263 Ard Biesheuvel 2020-10-18 1883
533dd11a12f698c Jassi Brar 2018-01-06 1884 ret =
device_property_read_u32(&pdev->dev, "phy-channel", phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 1885 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1886 dev_err(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1887 "missing required property
'phy-channel'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1888 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1889 }
533dd11a12f698c Jassi Brar 2018-01-06 1890
533dd11a12f698c Jassi Brar 2018-01-06 1891 ret =
device_property_read_u32(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1892
"socionext,phy-clock-frequency",
533dd11a12f698c Jassi Brar 2018-01-06 1893 &priv->freq);
533dd11a12f698c Jassi Brar 2018-01-06 1894 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 1895 dev_err(&pdev->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1896 "missing required property
'socionext,phy-clock-frequency'\n");
533dd11a12f698c Jassi Brar 2018-01-06 1897 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1898 }
533dd11a12f698c Jassi Brar 2018-01-06 1899
533dd11a12f698c Jassi Brar 2018-01-06 @1900 static void
netsec_unregister_mdio(struct netsec_priv *priv)
533dd11a12f698c Jassi Brar 2018-01-06 1901 {
533dd11a12f698c Jassi Brar 2018-01-06 1902 struct phy_device *phydev =
priv->phydev;
533dd11a12f698c Jassi Brar 2018-01-06 1903
533dd11a12f698c Jassi Brar 2018-01-06 1904 if (!dev_of_node(priv->dev)
&& phydev) {
533dd11a12f698c Jassi Brar 2018-01-06 1905 phy_device_remove(phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1906 phy_device_free(phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1907 }
533dd11a12f698c Jassi Brar 2018-01-06 1908
533dd11a12f698c Jassi Brar 2018-01-06 1909 mdiobus_unregister(priv->mii_bus);
533dd11a12f698c Jassi Brar 2018-01-06 1910 }
533dd11a12f698c Jassi Brar 2018-01-06 1911
533dd11a12f698c Jassi Brar 2018-01-06 @1912 static int netsec_register_mdio(struct
netsec_priv *priv, u32 phy_addr)
533dd11a12f698c Jassi Brar 2018-01-06 1913 {
533dd11a12f698c Jassi Brar 2018-01-06 1914 struct mii_bus *bus;
533dd11a12f698c Jassi Brar 2018-01-06 1915 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1916
533dd11a12f698c Jassi Brar 2018-01-06 1917 bus =
devm_mdiobus_alloc(priv->dev);
533dd11a12f698c Jassi Brar 2018-01-06 1918 if (!bus)
533dd11a12f698c Jassi Brar 2018-01-06 1919 return -ENOMEM;
533dd11a12f698c Jassi Brar 2018-01-06 1920
533dd11a12f698c Jassi Brar 2018-01-06 1921 snprintf(bus->id, MII_BUS_ID_SIZE,
"%s", dev_name(priv->dev));
533dd11a12f698c Jassi Brar 2018-01-06 1922 bus->priv = priv;
533dd11a12f698c Jassi Brar 2018-01-06 1923 bus->name = "SNI NETSEC
MDIO";
533dd11a12f698c Jassi Brar 2018-01-06 1924 bus->read = netsec_phy_read;
533dd11a12f698c Jassi Brar 2018-01-06 1925 bus->write = netsec_phy_write;
533dd11a12f698c Jassi Brar 2018-01-06 1926 bus->parent = priv->dev;
533dd11a12f698c Jassi Brar 2018-01-06 1927 priv->mii_bus = bus;
533dd11a12f698c Jassi Brar 2018-01-06 1928
533dd11a12f698c Jassi Brar 2018-01-06 1929 if (dev_of_node(priv->dev)) {
533dd11a12f698c Jassi Brar 2018-01-06 1930 struct device_node *mdio_node,
*parent = dev_of_node(priv->dev);
533dd11a12f698c Jassi Brar 2018-01-06 1931
533dd11a12f698c Jassi Brar 2018-01-06 1932 mdio_node =
of_get_child_by_name(parent, "mdio");
533dd11a12f698c Jassi Brar 2018-01-06 1933 if (mdio_node) {
533dd11a12f698c Jassi Brar 2018-01-06 1934 parent = mdio_node;
533dd11a12f698c Jassi Brar 2018-01-06 1935 } else {
533dd11a12f698c Jassi Brar 2018-01-06 1936 /* older f/w doesn't populate
the mdio subnode,
533dd11a12f698c Jassi Brar 2018-01-06 1937 * allow relaxed upgrade of f/w in
due time.
533dd11a12f698c Jassi Brar 2018-01-06 1938 */
533dd11a12f698c Jassi Brar 2018-01-06 1939 dev_info(priv->dev, "Upgrade
f/w for mdio subnode!\n");
533dd11a12f698c Jassi Brar 2018-01-06 1940 }
533dd11a12f698c Jassi Brar 2018-01-06 1941
533dd11a12f698c Jassi Brar 2018-01-06 1942 ret = of_mdiobus_register(bus,
parent);
533dd11a12f698c Jassi Brar 2018-01-06 1943 of_node_put(mdio_node);
533dd11a12f698c Jassi Brar 2018-01-06 1944
533dd11a12f698c Jassi Brar 2018-01-06 1945 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1946 dev_err(priv->dev, "mdiobus
register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1947 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1948 }
533dd11a12f698c Jassi Brar 2018-01-06 1949 } else {
533dd11a12f698c Jassi Brar 2018-01-06 1950 /* Mask out all PHYs from auto
probing. */
533dd11a12f698c Jassi Brar 2018-01-06 1951 bus->phy_mask = ~0;
533dd11a12f698c Jassi Brar 2018-01-06 1952 ret = mdiobus_register(bus);
533dd11a12f698c Jassi Brar 2018-01-06 1953 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1954 dev_err(priv->dev, "mdiobus
register err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1955 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1956 }
533dd11a12f698c Jassi Brar 2018-01-06 1957
533dd11a12f698c Jassi Brar 2018-01-06 1958 priv->phydev = get_phy_device(bus,
phy_addr, false);
533dd11a12f698c Jassi Brar 2018-01-06 1959 if (IS_ERR(priv->phydev)) {
533dd11a12f698c Jassi Brar 2018-01-06 1960 ret = PTR_ERR(priv->phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1961 dev_err(priv->dev,
"get_phy_device err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1962 priv->phydev = NULL;
533dd11a12f698c Jassi Brar 2018-01-06 1963 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1964 }
533dd11a12f698c Jassi Brar 2018-01-06 1965
533dd11a12f698c Jassi Brar 2018-01-06 1966 ret =
phy_device_register(priv->phydev);
533dd11a12f698c Jassi Brar 2018-01-06 1967 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 1968 mdiobus_unregister(bus);
533dd11a12f698c Jassi Brar 2018-01-06 1969 dev_err(priv->dev,
533dd11a12f698c Jassi Brar 2018-01-06 1970 "phy_device_register
err(%d)\n", ret);
533dd11a12f698c Jassi Brar 2018-01-06 1971 }
533dd11a12f698c Jassi Brar 2018-01-06 1972 }
533dd11a12f698c Jassi Brar 2018-01-06 1973
533dd11a12f698c Jassi Brar 2018-01-06 1974 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 1975 }
533dd11a12f698c Jassi Brar 2018-01-06 1976
533dd11a12f698c Jassi Brar 2018-01-06 @1977 static int netsec_probe(struct
platform_device *pdev)
533dd11a12f698c Jassi Brar 2018-01-06 1978 {
533dd11a12f698c Jassi Brar 2018-01-06 1979 struct resource *mmio_res,
*eeprom_res, *irq_res;
533dd11a12f698c Jassi Brar 2018-01-06 1980 u8 *mac, macbuf[ETH_ALEN];
533dd11a12f698c Jassi Brar 2018-01-06 1981 struct netsec_priv *priv;
533dd11a12f698c Jassi Brar 2018-01-06 1982 u32 hw_ver, phy_addr = 0;
533dd11a12f698c Jassi Brar 2018-01-06 1983 struct net_device *ndev;
533dd11a12f698c Jassi Brar 2018-01-06 1984 int ret;
533dd11a12f698c Jassi Brar 2018-01-06 1985
533dd11a12f698c Jassi Brar 2018-01-06 1986 mmio_res = platform_get_resource(pdev,
IORESOURCE_MEM, 0);
533dd11a12f698c Jassi Brar 2018-01-06 1987 if (!mmio_res) {
533dd11a12f698c Jassi Brar 2018-01-06 1988 dev_err(&pdev->dev, "No
MMIO resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 1989 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1990 }
533dd11a12f698c Jassi Brar 2018-01-06 1991
533dd11a12f698c Jassi Brar 2018-01-06 1992 eeprom_res =
platform_get_resource(pdev, IORESOURCE_MEM, 1);
533dd11a12f698c Jassi Brar 2018-01-06 1993 if (!eeprom_res) {
533dd11a12f698c Jassi Brar 2018-01-06 1994 dev_info(&pdev->dev, "No
EEPROM resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 1995 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 1996 }
533dd11a12f698c Jassi Brar 2018-01-06 1997
533dd11a12f698c Jassi Brar 2018-01-06 1998 irq_res = platform_get_resource(pdev,
IORESOURCE_IRQ, 0);
533dd11a12f698c Jassi Brar 2018-01-06 1999 if (!irq_res) {
533dd11a12f698c Jassi Brar 2018-01-06 2000 dev_err(&pdev->dev, "No
IRQ resource found.\n");
533dd11a12f698c Jassi Brar 2018-01-06 2001 return -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2002 }
533dd11a12f698c Jassi Brar 2018-01-06 2003
533dd11a12f698c Jassi Brar 2018-01-06 2004 ndev = alloc_etherdev(sizeof(*priv));
533dd11a12f698c Jassi Brar 2018-01-06 2005 if (!ndev)
533dd11a12f698c Jassi Brar 2018-01-06 2006 return -ENOMEM;
533dd11a12f698c Jassi Brar 2018-01-06 2007
533dd11a12f698c Jassi Brar 2018-01-06 2008 priv = netdev_priv(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2009
533dd11a12f698c Jassi Brar 2018-01-06 2010
spin_lock_init(&priv->reglock);
533dd11a12f698c Jassi Brar 2018-01-06 2011 SET_NETDEV_DEV(ndev,
&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2012 platform_set_drvdata(pdev, priv);
533dd11a12f698c Jassi Brar 2018-01-06 2013 ndev->irq = irq_res->start;
533dd11a12f698c Jassi Brar 2018-01-06 2014 priv->dev = &pdev->dev;
533dd11a12f698c Jassi Brar 2018-01-06 2015 priv->ndev = ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2016
533dd11a12f698c Jassi Brar 2018-01-06 2017 priv->msg_enable = NETIF_MSG_TX_ERR
| NETIF_MSG_HW | NETIF_MSG_DRV |
533dd11a12f698c Jassi Brar 2018-01-06 2018 NETIF_MSG_LINK |
NETIF_MSG_PROBE;
533dd11a12f698c Jassi Brar 2018-01-06 2019
533dd11a12f698c Jassi Brar 2018-01-06 2020 priv->ioaddr =
devm_ioremap(&pdev->dev, mmio_res->start,
533dd11a12f698c Jassi Brar 2018-01-06 2021 resource_size(mmio_res));
533dd11a12f698c Jassi Brar 2018-01-06 2022 if (!priv->ioaddr) {
533dd11a12f698c Jassi Brar 2018-01-06 2023 dev_err(&pdev->dev,
"devm_ioremap() failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2024 ret = -ENXIO;
533dd11a12f698c Jassi Brar 2018-01-06 2025 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2026 }
533dd11a12f698c Jassi Brar 2018-01-06 2027
533dd11a12f698c Jassi Brar 2018-01-06 2028 priv->eeprom_base =
devm_ioremap(&pdev->dev, eeprom_res->start,
533dd11a12f698c Jassi Brar 2018-01-06 2029 resource_size(eeprom_res));
533dd11a12f698c Jassi Brar 2018-01-06 2030 if (!priv->eeprom_base) {
533dd11a12f698c Jassi Brar 2018-01-06 2031 dev_err(&pdev->dev,
"devm_ioremap() failed for EEPROM\n");
533dd11a12f698c Jassi Brar 2018-01-06 2032 ret = -ENXIO;
533dd11a12f698c Jassi Brar 2018-01-06 2033 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2034 }
533dd11a12f698c Jassi Brar 2018-01-06 2035
533dd11a12f698c Jassi Brar 2018-01-06 2036 mac =
device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf));
533dd11a12f698c Jassi Brar 2018-01-06 2037 if (mac)
533dd11a12f698c Jassi Brar 2018-01-06 2038 ether_addr_copy(ndev->dev_addr,
mac);
533dd11a12f698c Jassi Brar 2018-01-06 2039
533dd11a12f698c Jassi Brar 2018-01-06 2040 if (priv->eeprom_base &&
533dd11a12f698c Jassi Brar 2018-01-06 2041 (!mac ||
!is_valid_ether_addr(ndev->dev_addr))) {
533dd11a12f698c Jassi Brar 2018-01-06 2042 void __iomem *macp =
priv->eeprom_base +
533dd11a12f698c Jassi Brar 2018-01-06 2043 NETSEC_EEPROM_MAC_ADDRESS;
533dd11a12f698c Jassi Brar 2018-01-06 2044
533dd11a12f698c Jassi Brar 2018-01-06 2045 ndev->dev_addr[0] = readb(macp +
3);
533dd11a12f698c Jassi Brar 2018-01-06 2046 ndev->dev_addr[1] = readb(macp +
2);
533dd11a12f698c Jassi Brar 2018-01-06 2047 ndev->dev_addr[2] = readb(macp +
1);
533dd11a12f698c Jassi Brar 2018-01-06 2048 ndev->dev_addr[3] = readb(macp +
0);
533dd11a12f698c Jassi Brar 2018-01-06 2049 ndev->dev_addr[4] = readb(macp +
7);
533dd11a12f698c Jassi Brar 2018-01-06 2050 ndev->dev_addr[5] = readb(macp +
6);
533dd11a12f698c Jassi Brar 2018-01-06 2051 }
533dd11a12f698c Jassi Brar 2018-01-06 2052
533dd11a12f698c Jassi Brar 2018-01-06 2053 if
(!is_valid_ether_addr(ndev->dev_addr)) {
533dd11a12f698c Jassi Brar 2018-01-06 2054 dev_warn(&pdev->dev, "No
MAC address found, using random\n");
533dd11a12f698c Jassi Brar 2018-01-06 2055 eth_hw_addr_random(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2056 }
533dd11a12f698c Jassi Brar 2018-01-06 2057
533dd11a12f698c Jassi Brar 2018-01-06 2058 if (dev_of_node(&pdev->dev))
8e850f25b5812ae Masahisa Kojima 2018-10-23 2059 ret = netsec_of_probe(pdev, priv,
&phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2060 else
533dd11a12f698c Jassi Brar 2018-01-06 2061 ret = netsec_acpi_probe(pdev, priv,
&phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2062 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 2063 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2064
8e850f25b5812ae Masahisa Kojima 2018-10-23 2065 priv->phy_addr = phy_addr;
8e850f25b5812ae Masahisa Kojima 2018-10-23 2066
533dd11a12f698c Jassi Brar 2018-01-06 2067 if (!priv->freq) {
533dd11a12f698c Jassi Brar 2018-01-06 2068 dev_err(&pdev->dev,
"missing PHY reference clock frequency\n");
533dd11a12f698c Jassi Brar 2018-01-06 2069 ret = -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2070 goto free_ndev;
533dd11a12f698c Jassi Brar 2018-01-06 2071 }
533dd11a12f698c Jassi Brar 2018-01-06 2072
533dd11a12f698c Jassi Brar 2018-01-06 2073 /* default for throughput */
533dd11a12f698c Jassi Brar 2018-01-06 2074 priv->et_coalesce.rx_coalesce_usecs
= 500;
533dd11a12f698c Jassi Brar 2018-01-06 2075
priv->et_coalesce.rx_max_coalesced_frames = 8;
533dd11a12f698c Jassi Brar 2018-01-06 2076 priv->et_coalesce.tx_coalesce_usecs
= 500;
533dd11a12f698c Jassi Brar 2018-01-06 2077
priv->et_coalesce.tx_max_coalesced_frames = 8;
533dd11a12f698c Jassi Brar 2018-01-06 2078
533dd11a12f698c Jassi Brar 2018-01-06 2079 ret =
device_property_read_u32(&pdev->dev, "max-frame-size",
533dd11a12f698c Jassi Brar 2018-01-06 2080 &ndev->max_mtu);
533dd11a12f698c Jassi Brar 2018-01-06 2081 if (ret < 0)
533dd11a12f698c Jassi Brar 2018-01-06 2082 ndev->max_mtu = ETH_DATA_LEN;
533dd11a12f698c Jassi Brar 2018-01-06 2083
533dd11a12f698c Jassi Brar 2018-01-06 2084 /* runtime_pm coverage just for probe,
open/close also cover it */
533dd11a12f698c Jassi Brar 2018-01-06 2085 pm_runtime_enable(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2086
pm_runtime_get_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2087
533dd11a12f698c Jassi Brar 2018-01-06 2088 hw_ver = netsec_read(priv,
NETSEC_REG_F_TAIKI_VER);
533dd11a12f698c Jassi Brar 2018-01-06 2089 /* this driver only supports F_TAIKI
style NETSEC */
533dd11a12f698c Jassi Brar 2018-01-06 2090 if
(NETSEC_F_NETSEC_VER_MAJOR_NUM(hw_ver) !=
533dd11a12f698c Jassi Brar 2018-01-06 2091
NETSEC_F_NETSEC_VER_MAJOR_NUM(NETSEC_REG_NETSEC_VER_F_TAIKI)) {
533dd11a12f698c Jassi Brar 2018-01-06 2092 ret = -ENODEV;
533dd11a12f698c Jassi Brar 2018-01-06 2093 goto pm_disable;
533dd11a12f698c Jassi Brar 2018-01-06 2094 }
533dd11a12f698c Jassi Brar 2018-01-06 2095
533dd11a12f698c Jassi Brar 2018-01-06 2096 dev_info(&pdev->dev,
"hardware revision %d.%d\n",
533dd11a12f698c Jassi Brar 2018-01-06 2097 hw_ver >> 16, hw_ver &
0xffff);
533dd11a12f698c Jassi Brar 2018-01-06 2098
b6311b7bea41963 Ilias Apalodimas 2018-08-10 2099 netif_napi_add(ndev,
&priv->napi, netsec_napi_poll, NAPI_POLL_WEIGHT);
533dd11a12f698c Jassi Brar 2018-01-06 2100
533dd11a12f698c Jassi Brar 2018-01-06 2101 ndev->netdev_ops =
&netsec_netdev_ops;
533dd11a12f698c Jassi Brar 2018-01-06 2102 ndev->ethtool_ops =
&netsec_ethtool_ops;
533dd11a12f698c Jassi Brar 2018-01-06 2103
533dd11a12f698c Jassi Brar 2018-01-06 2104 ndev->features |= NETIF_F_HIGHDMA |
NETIF_F_RXCSUM | NETIF_F_GSO |
533dd11a12f698c Jassi Brar 2018-01-06 2105 NETIF_F_IP_CSUM |
NETIF_F_IPV6_CSUM;
533dd11a12f698c Jassi Brar 2018-01-06 2106 ndev->hw_features =
ndev->features;
533dd11a12f698c Jassi Brar 2018-01-06 2107
533dd11a12f698c Jassi Brar 2018-01-06 2108 priv->rx_cksum_offload_flag =
true;
533dd11a12f698c Jassi Brar 2018-01-06 2109
533dd11a12f698c Jassi Brar 2018-01-06 2110 ret = netsec_register_mdio(priv,
phy_addr);
533dd11a12f698c Jassi Brar 2018-01-06 2111 if (ret)
533dd11a12f698c Jassi Brar 2018-01-06 2112 goto unreg_napi;
533dd11a12f698c Jassi Brar 2018-01-06 2113
312564269535892 Ard Biesheuvel 2018-05-25 2114 if
(dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40)))
312564269535892 Ard Biesheuvel 2018-05-25 2115 dev_warn(&pdev->dev,
"Failed to set DMA mask\n");
533dd11a12f698c Jassi Brar 2018-01-06 2116
533dd11a12f698c Jassi Brar 2018-01-06 2117 ret = register_netdev(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2118 if (ret) {
533dd11a12f698c Jassi Brar 2018-01-06 2119 netif_err(priv, probe, ndev,
"register_netdev() failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2120 goto unreg_mii;
533dd11a12f698c Jassi Brar 2018-01-06 2121 }
533dd11a12f698c Jassi Brar 2018-01-06 2122
533dd11a12f698c Jassi Brar 2018-01-06 2123
pm_runtime_put_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2124 return 0;
533dd11a12f698c Jassi Brar 2018-01-06 2125
533dd11a12f698c Jassi Brar 2018-01-06 2126 unreg_mii:
533dd11a12f698c Jassi Brar 2018-01-06 2127 netsec_unregister_mdio(priv);
533dd11a12f698c Jassi Brar 2018-01-06 2128 unreg_napi:
533dd11a12f698c Jassi Brar 2018-01-06 2129 netif_napi_del(&priv->napi);
533dd11a12f698c Jassi Brar 2018-01-06 2130 pm_disable:
533dd11a12f698c Jassi Brar 2018-01-06 2131
pm_runtime_put_sync(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2132
pm_runtime_disable(&pdev->dev);
533dd11a12f698c Jassi Brar 2018-01-06 2133 free_ndev:
533dd11a12f698c Jassi Brar 2018-01-06 2134 free_netdev(ndev);
533dd11a12f698c Jassi Brar 2018-01-06 2135 dev_err(&pdev->dev, "init
failed\n");
533dd11a12f698c Jassi Brar 2018-01-06 2136
533dd11a12f698c Jassi Brar 2018-01-06 2137 return ret;
533dd11a12f698c Jassi Brar 2018-01-06 2138 }
533dd11a12f698c Jassi Brar 2018-01-06 2139
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org