All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com>,
	Giuseppe Cavallaro <peppe.cavallaro@st.com>,
	Alexandre Torgue <alexandre.torgue@foss.st.com>,
	Jose Abreu <joabreu@synopsys.com>,
	"David S . Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Ong Boon Leong <boon.leong.ong@intel.com>,
	netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	Looi Hong Aun <hong.aun.looi@intel.com>,
	Voon Weifeng <weifeng.voon@intel.com>,
	Lai Peter Jun Ann <peter.jun.ann.lai@intel.com>
Subject: Re: [PATCH net 2/2] net: stmmac: move fixed-link support fixup code
Date: Mon, 13 Mar 2023 19:47:59 +0800	[thread overview]
Message-ID: <202303131924.MkBmpkFK-lkp@intel.com> (raw)
In-Reply-To: <20230313080135.2952774-3-michael.wei.hong.sit@intel.com>

Hi Michael,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Michael-Sit-Wei-Hong/net-stmmac-fix-PHY-handle-parsing/20230313-160802
patch link:    https://lore.kernel.org/r/20230313080135.2952774-3-michael.wei.hong.sit%40intel.com
patch subject: [PATCH net 2/2] net: stmmac: move fixed-link support fixup code
config: x86_64-randconfig-a013-20230313 (https://download.01.org/0day-ci/archive/20230313/202303131924.MkBmpkFK-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
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/intel-lab-lkp/linux/commit/e1abd092fb1e75931e37147152b274e0d3e6e655
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Michael-Sit-Wei-Hong/net-stmmac-fix-PHY-handle-parsing/20230313-160802
        git checkout e1abd092fb1e75931e37147152b274e0d3e6e655
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/net/ethernet/stmicro/stmmac/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303131924.MkBmpkFK-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7311:7: warning: variable 'fwnode' is uninitialized when used here [-Wuninitialized]
           if (!fwnode)
                ^~~~~~
   drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7067:30: note: initialize the variable 'fwnode' to silence this warning
           struct fwnode_handle *fwnode;
                                       ^
                                        = NULL
   1 warning generated.


vim +/fwnode +7311 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

  7051	
  7052	/**
  7053	 * stmmac_dvr_probe
  7054	 * @device: device pointer
  7055	 * @plat_dat: platform data pointer
  7056	 * @res: stmmac resource pointer
  7057	 * Description: this is the main probe function used to
  7058	 * call the alloc_etherdev, allocate the priv structure.
  7059	 * Return:
  7060	 * returns 0 on success, otherwise errno.
  7061	 */
  7062	int stmmac_dvr_probe(struct device *device,
  7063			     struct plat_stmmacenet_data *plat_dat,
  7064			     struct stmmac_resources *res)
  7065	{
  7066		struct net_device *ndev = NULL;
  7067		struct fwnode_handle *fwnode;
  7068		struct stmmac_priv *priv;
  7069		u32 rxq;
  7070		int i, ret = 0;
  7071	
  7072		ndev = devm_alloc_etherdev_mqs(device, sizeof(struct stmmac_priv),
  7073					       MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES);
  7074		if (!ndev)
  7075			return -ENOMEM;
  7076	
  7077		SET_NETDEV_DEV(ndev, device);
  7078	
  7079		priv = netdev_priv(ndev);
  7080		priv->device = device;
  7081		priv->dev = ndev;
  7082	
  7083		stmmac_set_ethtool_ops(ndev);
  7084		priv->pause = pause;
  7085		priv->plat = plat_dat;
  7086		priv->ioaddr = res->addr;
  7087		priv->dev->base_addr = (unsigned long)res->addr;
  7088		priv->plat->dma_cfg->multi_msi_en = priv->plat->multi_msi_en;
  7089	
  7090		priv->dev->irq = res->irq;
  7091		priv->wol_irq = res->wol_irq;
  7092		priv->lpi_irq = res->lpi_irq;
  7093		priv->sfty_ce_irq = res->sfty_ce_irq;
  7094		priv->sfty_ue_irq = res->sfty_ue_irq;
  7095		for (i = 0; i < MTL_MAX_RX_QUEUES; i++)
  7096			priv->rx_irq[i] = res->rx_irq[i];
  7097		for (i = 0; i < MTL_MAX_TX_QUEUES; i++)
  7098			priv->tx_irq[i] = res->tx_irq[i];
  7099	
  7100		if (!is_zero_ether_addr(res->mac))
  7101			eth_hw_addr_set(priv->dev, res->mac);
  7102	
  7103		dev_set_drvdata(device, priv->dev);
  7104	
  7105		/* Verify driver arguments */
  7106		stmmac_verify_args();
  7107	
  7108		priv->af_xdp_zc_qps = bitmap_zalloc(MTL_MAX_TX_QUEUES, GFP_KERNEL);
  7109		if (!priv->af_xdp_zc_qps)
  7110			return -ENOMEM;
  7111	
  7112		/* Allocate workqueue */
  7113		priv->wq = create_singlethread_workqueue("stmmac_wq");
  7114		if (!priv->wq) {
  7115			dev_err(priv->device, "failed to create workqueue\n");
  7116			ret = -ENOMEM;
  7117			goto error_wq_init;
  7118		}
  7119	
  7120		INIT_WORK(&priv->service_task, stmmac_service_task);
  7121	
  7122		/* Initialize Link Partner FPE workqueue */
  7123		INIT_WORK(&priv->fpe_task, stmmac_fpe_lp_task);
  7124	
  7125		/* Override with kernel parameters if supplied XXX CRS XXX
  7126		 * this needs to have multiple instances
  7127		 */
  7128		if ((phyaddr >= 0) && (phyaddr <= 31))
  7129			priv->plat->phy_addr = phyaddr;
  7130	
  7131		if (priv->plat->stmmac_rst) {
  7132			ret = reset_control_assert(priv->plat->stmmac_rst);
  7133			reset_control_deassert(priv->plat->stmmac_rst);
  7134			/* Some reset controllers have only reset callback instead of
  7135			 * assert + deassert callbacks pair.
  7136			 */
  7137			if (ret == -ENOTSUPP)
  7138				reset_control_reset(priv->plat->stmmac_rst);
  7139		}
  7140	
  7141		ret = reset_control_deassert(priv->plat->stmmac_ahb_rst);
  7142		if (ret == -ENOTSUPP)
  7143			dev_err(priv->device, "unable to bring out of ahb reset: %pe\n",
  7144				ERR_PTR(ret));
  7145	
  7146		/* Init MAC and get the capabilities */
  7147		ret = stmmac_hw_init(priv);
  7148		if (ret)
  7149			goto error_hw_init;
  7150	
  7151		/* Only DWMAC core version 5.20 onwards supports HW descriptor prefetch.
  7152		 */
  7153		if (priv->synopsys_id < DWMAC_CORE_5_20)
  7154			priv->plat->dma_cfg->dche = false;
  7155	
  7156		stmmac_check_ether_addr(priv);
  7157	
  7158		ndev->netdev_ops = &stmmac_netdev_ops;
  7159	
  7160		ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
  7161				    NETIF_F_RXCSUM;
  7162		ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
  7163				     NETDEV_XDP_ACT_XSK_ZEROCOPY |
  7164				     NETDEV_XDP_ACT_NDO_XMIT;
  7165	
  7166		ret = stmmac_tc_init(priv, priv);
  7167		if (!ret) {
  7168			ndev->hw_features |= NETIF_F_HW_TC;
  7169		}
  7170	
  7171		if ((priv->plat->tso_en) && (priv->dma_cap.tsoen)) {
  7172			ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
  7173			if (priv->plat->has_gmac4)
  7174				ndev->hw_features |= NETIF_F_GSO_UDP_L4;
  7175			priv->tso = true;
  7176			dev_info(priv->device, "TSO feature enabled\n");
  7177		}
  7178	
  7179		if (priv->dma_cap.sphen && !priv->plat->sph_disable) {
  7180			ndev->hw_features |= NETIF_F_GRO;
  7181			priv->sph_cap = true;
  7182			priv->sph = priv->sph_cap;
  7183			dev_info(priv->device, "SPH feature enabled\n");
  7184		}
  7185	
  7186		/* The current IP register MAC_HW_Feature1[ADDR64] only define
  7187		 * 32/40/64 bit width, but some SOC support others like i.MX8MP
  7188		 * support 34 bits but it map to 40 bits width in MAC_HW_Feature1[ADDR64].
  7189		 * So overwrite dma_cap.addr64 according to HW real design.
  7190		 */
  7191		if (priv->plat->addr64)
  7192			priv->dma_cap.addr64 = priv->plat->addr64;
  7193	
  7194		if (priv->dma_cap.addr64) {
  7195			ret = dma_set_mask_and_coherent(device,
  7196					DMA_BIT_MASK(priv->dma_cap.addr64));
  7197			if (!ret) {
  7198				dev_info(priv->device, "Using %d bits DMA width\n",
  7199					 priv->dma_cap.addr64);
  7200	
  7201				/*
  7202				 * If more than 32 bits can be addressed, make sure to
  7203				 * enable enhanced addressing mode.
  7204				 */
  7205				if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT))
  7206					priv->plat->dma_cfg->eame = true;
  7207			} else {
  7208				ret = dma_set_mask_and_coherent(device, DMA_BIT_MASK(32));
  7209				if (ret) {
  7210					dev_err(priv->device, "Failed to set DMA Mask\n");
  7211					goto error_hw_init;
  7212				}
  7213	
  7214				priv->dma_cap.addr64 = 32;
  7215			}
  7216		}
  7217	
  7218		ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA;
  7219		ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
  7220	#ifdef STMMAC_VLAN_TAG_USED
  7221		/* Both mac100 and gmac support receive VLAN tag detection */
  7222		ndev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX;
  7223		if (priv->dma_cap.vlhash) {
  7224			ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
  7225			ndev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
  7226		}
  7227		if (priv->dma_cap.vlins) {
  7228			ndev->features |= NETIF_F_HW_VLAN_CTAG_TX;
  7229			if (priv->dma_cap.dvlan)
  7230				ndev->features |= NETIF_F_HW_VLAN_STAG_TX;
  7231		}
  7232	#endif
  7233		priv->msg_enable = netif_msg_init(debug, default_msg_level);
  7234	
  7235		/* Initialize RSS */
  7236		rxq = priv->plat->rx_queues_to_use;
  7237		netdev_rss_key_fill(priv->rss.key, sizeof(priv->rss.key));
  7238		for (i = 0; i < ARRAY_SIZE(priv->rss.table); i++)
  7239			priv->rss.table[i] = ethtool_rxfh_indir_default(i, rxq);
  7240	
  7241		if (priv->dma_cap.rssen && priv->plat->rss_en)
  7242			ndev->features |= NETIF_F_RXHASH;
  7243	
  7244		/* MTU range: 46 - hw-specific max */
  7245		ndev->min_mtu = ETH_ZLEN - ETH_HLEN;
  7246		if (priv->plat->has_xgmac)
  7247			ndev->max_mtu = XGMAC_JUMBO_LEN;
  7248		else if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00))
  7249			ndev->max_mtu = JUMBO_LEN;
  7250		else
  7251			ndev->max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN);
  7252		/* Will not overwrite ndev->max_mtu if plat->maxmtu > ndev->max_mtu
  7253		 * as well as plat->maxmtu < ndev->min_mtu which is a invalid range.
  7254		 */
  7255		if ((priv->plat->maxmtu < ndev->max_mtu) &&
  7256		    (priv->plat->maxmtu >= ndev->min_mtu))
  7257			ndev->max_mtu = priv->plat->maxmtu;
  7258		else if (priv->plat->maxmtu < ndev->min_mtu)
  7259			dev_warn(priv->device,
  7260				 "%s: warning: maxmtu having invalid value (%d)\n",
  7261				 __func__, priv->plat->maxmtu);
  7262	
  7263		if (flow_ctrl)
  7264			priv->flow_ctrl = FLOW_AUTO;	/* RX/TX pause on */
  7265	
  7266		/* Setup channels NAPI */
  7267		stmmac_napi_add(ndev);
  7268	
  7269		mutex_init(&priv->lock);
  7270	
  7271		/* If a specific clk_csr value is passed from the platform
  7272		 * this means that the CSR Clock Range selection cannot be
  7273		 * changed at run-time and it is fixed. Viceversa the driver'll try to
  7274		 * set the MDC clock dynamically according to the csr actual
  7275		 * clock input.
  7276		 */
  7277		if (priv->plat->clk_csr >= 0)
  7278			priv->clk_csr = priv->plat->clk_csr;
  7279		else
  7280			stmmac_clk_csr_set(priv);
  7281	
  7282		stmmac_check_pcs_mode(priv);
  7283	
  7284		pm_runtime_get_noresume(device);
  7285		pm_runtime_set_active(device);
  7286		if (!pm_runtime_enabled(device))
  7287			pm_runtime_enable(device);
  7288	
  7289		if (priv->hw->pcs != STMMAC_PCS_TBI &&
  7290		    priv->hw->pcs != STMMAC_PCS_RTBI) {
  7291			/* MDIO bus Registration */
  7292			ret = stmmac_mdio_register(ndev);
  7293			if (ret < 0) {
  7294				dev_err_probe(priv->device, ret,
  7295					      "%s: MDIO bus (id: %d) registration failed\n",
  7296					      __func__, priv->plat->bus_id);
  7297				goto error_mdio_register;
  7298			}
  7299		}
  7300	
  7301		if (priv->plat->speed_mode_2500)
  7302			priv->plat->speed_mode_2500(ndev, priv->plat->bsp_priv);
  7303	
  7304		if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data->has_xpcs) {
  7305			ret = stmmac_xpcs_setup(priv->mii);
  7306			if (ret)
  7307				goto error_xpcs_setup;
  7308		}
  7309	
  7310		/* For fixed-link setup, we clear xpcs_an_inband */
> 7311		if (!fwnode)
  7312			fwnode = dev_fwnode(priv->device);
  7313	
  7314		if (fwnode) {
  7315			struct fwnode_handle *fixed_node;
  7316	
  7317			fixed_node = fwnode_get_named_child_node(fwnode, "fixed-link");
  7318			if (fixed_node)
  7319				priv->plat->mdio_bus_data->xpcs_an_inband = false;
  7320	
  7321			fwnode_handle_put(fixed_node);
  7322		}
  7323	
  7324		ret = stmmac_phy_setup(priv);
  7325		if (ret) {
  7326			netdev_err(ndev, "failed to setup phy (%d)\n", ret);
  7327			goto error_phy_setup;
  7328		}
  7329	
  7330		ret = register_netdev(ndev);
  7331		if (ret) {
  7332			dev_err(priv->device, "%s: ERROR %i registering the device\n",
  7333				__func__, ret);
  7334			goto error_netdev_register;
  7335		}
  7336	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com>,
	Giuseppe Cavallaro <peppe.cavallaro@st.com>,
	Alexandre Torgue <alexandre.torgue@foss.st.com>,
	Jose Abreu <joabreu@synopsys.com>,
	"David S . Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Ong Boon Leong <boon.leong.ong@intel.com>,
	netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	Looi Hong Aun <hong.aun.looi@intel.com>,
	Voon Weifeng <weifeng.voon@intel.com>,
	Lai Peter Jun Ann <peter.jun.ann.lai@intel.com>
Subject: Re: [PATCH net 2/2] net: stmmac: move fixed-link support fixup code
Date: Mon, 13 Mar 2023 19:47:59 +0800	[thread overview]
Message-ID: <202303131924.MkBmpkFK-lkp@intel.com> (raw)
In-Reply-To: <20230313080135.2952774-3-michael.wei.hong.sit@intel.com>

Hi Michael,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Michael-Sit-Wei-Hong/net-stmmac-fix-PHY-handle-parsing/20230313-160802
patch link:    https://lore.kernel.org/r/20230313080135.2952774-3-michael.wei.hong.sit%40intel.com
patch subject: [PATCH net 2/2] net: stmmac: move fixed-link support fixup code
config: x86_64-randconfig-a013-20230313 (https://download.01.org/0day-ci/archive/20230313/202303131924.MkBmpkFK-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
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/intel-lab-lkp/linux/commit/e1abd092fb1e75931e37147152b274e0d3e6e655
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Michael-Sit-Wei-Hong/net-stmmac-fix-PHY-handle-parsing/20230313-160802
        git checkout e1abd092fb1e75931e37147152b274e0d3e6e655
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/net/ethernet/stmicro/stmmac/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303131924.MkBmpkFK-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7311:7: warning: variable 'fwnode' is uninitialized when used here [-Wuninitialized]
           if (!fwnode)
                ^~~~~~
   drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:7067:30: note: initialize the variable 'fwnode' to silence this warning
           struct fwnode_handle *fwnode;
                                       ^
                                        = NULL
   1 warning generated.


vim +/fwnode +7311 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

  7051	
  7052	/**
  7053	 * stmmac_dvr_probe
  7054	 * @device: device pointer
  7055	 * @plat_dat: platform data pointer
  7056	 * @res: stmmac resource pointer
  7057	 * Description: this is the main probe function used to
  7058	 * call the alloc_etherdev, allocate the priv structure.
  7059	 * Return:
  7060	 * returns 0 on success, otherwise errno.
  7061	 */
  7062	int stmmac_dvr_probe(struct device *device,
  7063			     struct plat_stmmacenet_data *plat_dat,
  7064			     struct stmmac_resources *res)
  7065	{
  7066		struct net_device *ndev = NULL;
  7067		struct fwnode_handle *fwnode;
  7068		struct stmmac_priv *priv;
  7069		u32 rxq;
  7070		int i, ret = 0;
  7071	
  7072		ndev = devm_alloc_etherdev_mqs(device, sizeof(struct stmmac_priv),
  7073					       MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES);
  7074		if (!ndev)
  7075			return -ENOMEM;
  7076	
  7077		SET_NETDEV_DEV(ndev, device);
  7078	
  7079		priv = netdev_priv(ndev);
  7080		priv->device = device;
  7081		priv->dev = ndev;
  7082	
  7083		stmmac_set_ethtool_ops(ndev);
  7084		priv->pause = pause;
  7085		priv->plat = plat_dat;
  7086		priv->ioaddr = res->addr;
  7087		priv->dev->base_addr = (unsigned long)res->addr;
  7088		priv->plat->dma_cfg->multi_msi_en = priv->plat->multi_msi_en;
  7089	
  7090		priv->dev->irq = res->irq;
  7091		priv->wol_irq = res->wol_irq;
  7092		priv->lpi_irq = res->lpi_irq;
  7093		priv->sfty_ce_irq = res->sfty_ce_irq;
  7094		priv->sfty_ue_irq = res->sfty_ue_irq;
  7095		for (i = 0; i < MTL_MAX_RX_QUEUES; i++)
  7096			priv->rx_irq[i] = res->rx_irq[i];
  7097		for (i = 0; i < MTL_MAX_TX_QUEUES; i++)
  7098			priv->tx_irq[i] = res->tx_irq[i];
  7099	
  7100		if (!is_zero_ether_addr(res->mac))
  7101			eth_hw_addr_set(priv->dev, res->mac);
  7102	
  7103		dev_set_drvdata(device, priv->dev);
  7104	
  7105		/* Verify driver arguments */
  7106		stmmac_verify_args();
  7107	
  7108		priv->af_xdp_zc_qps = bitmap_zalloc(MTL_MAX_TX_QUEUES, GFP_KERNEL);
  7109		if (!priv->af_xdp_zc_qps)
  7110			return -ENOMEM;
  7111	
  7112		/* Allocate workqueue */
  7113		priv->wq = create_singlethread_workqueue("stmmac_wq");
  7114		if (!priv->wq) {
  7115			dev_err(priv->device, "failed to create workqueue\n");
  7116			ret = -ENOMEM;
  7117			goto error_wq_init;
  7118		}
  7119	
  7120		INIT_WORK(&priv->service_task, stmmac_service_task);
  7121	
  7122		/* Initialize Link Partner FPE workqueue */
  7123		INIT_WORK(&priv->fpe_task, stmmac_fpe_lp_task);
  7124	
  7125		/* Override with kernel parameters if supplied XXX CRS XXX
  7126		 * this needs to have multiple instances
  7127		 */
  7128		if ((phyaddr >= 0) && (phyaddr <= 31))
  7129			priv->plat->phy_addr = phyaddr;
  7130	
  7131		if (priv->plat->stmmac_rst) {
  7132			ret = reset_control_assert(priv->plat->stmmac_rst);
  7133			reset_control_deassert(priv->plat->stmmac_rst);
  7134			/* Some reset controllers have only reset callback instead of
  7135			 * assert + deassert callbacks pair.
  7136			 */
  7137			if (ret == -ENOTSUPP)
  7138				reset_control_reset(priv->plat->stmmac_rst);
  7139		}
  7140	
  7141		ret = reset_control_deassert(priv->plat->stmmac_ahb_rst);
  7142		if (ret == -ENOTSUPP)
  7143			dev_err(priv->device, "unable to bring out of ahb reset: %pe\n",
  7144				ERR_PTR(ret));
  7145	
  7146		/* Init MAC and get the capabilities */
  7147		ret = stmmac_hw_init(priv);
  7148		if (ret)
  7149			goto error_hw_init;
  7150	
  7151		/* Only DWMAC core version 5.20 onwards supports HW descriptor prefetch.
  7152		 */
  7153		if (priv->synopsys_id < DWMAC_CORE_5_20)
  7154			priv->plat->dma_cfg->dche = false;
  7155	
  7156		stmmac_check_ether_addr(priv);
  7157	
  7158		ndev->netdev_ops = &stmmac_netdev_ops;
  7159	
  7160		ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
  7161				    NETIF_F_RXCSUM;
  7162		ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
  7163				     NETDEV_XDP_ACT_XSK_ZEROCOPY |
  7164				     NETDEV_XDP_ACT_NDO_XMIT;
  7165	
  7166		ret = stmmac_tc_init(priv, priv);
  7167		if (!ret) {
  7168			ndev->hw_features |= NETIF_F_HW_TC;
  7169		}
  7170	
  7171		if ((priv->plat->tso_en) && (priv->dma_cap.tsoen)) {
  7172			ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
  7173			if (priv->plat->has_gmac4)
  7174				ndev->hw_features |= NETIF_F_GSO_UDP_L4;
  7175			priv->tso = true;
  7176			dev_info(priv->device, "TSO feature enabled\n");
  7177		}
  7178	
  7179		if (priv->dma_cap.sphen && !priv->plat->sph_disable) {
  7180			ndev->hw_features |= NETIF_F_GRO;
  7181			priv->sph_cap = true;
  7182			priv->sph = priv->sph_cap;
  7183			dev_info(priv->device, "SPH feature enabled\n");
  7184		}
  7185	
  7186		/* The current IP register MAC_HW_Feature1[ADDR64] only define
  7187		 * 32/40/64 bit width, but some SOC support others like i.MX8MP
  7188		 * support 34 bits but it map to 40 bits width in MAC_HW_Feature1[ADDR64].
  7189		 * So overwrite dma_cap.addr64 according to HW real design.
  7190		 */
  7191		if (priv->plat->addr64)
  7192			priv->dma_cap.addr64 = priv->plat->addr64;
  7193	
  7194		if (priv->dma_cap.addr64) {
  7195			ret = dma_set_mask_and_coherent(device,
  7196					DMA_BIT_MASK(priv->dma_cap.addr64));
  7197			if (!ret) {
  7198				dev_info(priv->device, "Using %d bits DMA width\n",
  7199					 priv->dma_cap.addr64);
  7200	
  7201				/*
  7202				 * If more than 32 bits can be addressed, make sure to
  7203				 * enable enhanced addressing mode.
  7204				 */
  7205				if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT))
  7206					priv->plat->dma_cfg->eame = true;
  7207			} else {
  7208				ret = dma_set_mask_and_coherent(device, DMA_BIT_MASK(32));
  7209				if (ret) {
  7210					dev_err(priv->device, "Failed to set DMA Mask\n");
  7211					goto error_hw_init;
  7212				}
  7213	
  7214				priv->dma_cap.addr64 = 32;
  7215			}
  7216		}
  7217	
  7218		ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA;
  7219		ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
  7220	#ifdef STMMAC_VLAN_TAG_USED
  7221		/* Both mac100 and gmac support receive VLAN tag detection */
  7222		ndev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX;
  7223		if (priv->dma_cap.vlhash) {
  7224			ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
  7225			ndev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
  7226		}
  7227		if (priv->dma_cap.vlins) {
  7228			ndev->features |= NETIF_F_HW_VLAN_CTAG_TX;
  7229			if (priv->dma_cap.dvlan)
  7230				ndev->features |= NETIF_F_HW_VLAN_STAG_TX;
  7231		}
  7232	#endif
  7233		priv->msg_enable = netif_msg_init(debug, default_msg_level);
  7234	
  7235		/* Initialize RSS */
  7236		rxq = priv->plat->rx_queues_to_use;
  7237		netdev_rss_key_fill(priv->rss.key, sizeof(priv->rss.key));
  7238		for (i = 0; i < ARRAY_SIZE(priv->rss.table); i++)
  7239			priv->rss.table[i] = ethtool_rxfh_indir_default(i, rxq);
  7240	
  7241		if (priv->dma_cap.rssen && priv->plat->rss_en)
  7242			ndev->features |= NETIF_F_RXHASH;
  7243	
  7244		/* MTU range: 46 - hw-specific max */
  7245		ndev->min_mtu = ETH_ZLEN - ETH_HLEN;
  7246		if (priv->plat->has_xgmac)
  7247			ndev->max_mtu = XGMAC_JUMBO_LEN;
  7248		else if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00))
  7249			ndev->max_mtu = JUMBO_LEN;
  7250		else
  7251			ndev->max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN);
  7252		/* Will not overwrite ndev->max_mtu if plat->maxmtu > ndev->max_mtu
  7253		 * as well as plat->maxmtu < ndev->min_mtu which is a invalid range.
  7254		 */
  7255		if ((priv->plat->maxmtu < ndev->max_mtu) &&
  7256		    (priv->plat->maxmtu >= ndev->min_mtu))
  7257			ndev->max_mtu = priv->plat->maxmtu;
  7258		else if (priv->plat->maxmtu < ndev->min_mtu)
  7259			dev_warn(priv->device,
  7260				 "%s: warning: maxmtu having invalid value (%d)\n",
  7261				 __func__, priv->plat->maxmtu);
  7262	
  7263		if (flow_ctrl)
  7264			priv->flow_ctrl = FLOW_AUTO;	/* RX/TX pause on */
  7265	
  7266		/* Setup channels NAPI */
  7267		stmmac_napi_add(ndev);
  7268	
  7269		mutex_init(&priv->lock);
  7270	
  7271		/* If a specific clk_csr value is passed from the platform
  7272		 * this means that the CSR Clock Range selection cannot be
  7273		 * changed at run-time and it is fixed. Viceversa the driver'll try to
  7274		 * set the MDC clock dynamically according to the csr actual
  7275		 * clock input.
  7276		 */
  7277		if (priv->plat->clk_csr >= 0)
  7278			priv->clk_csr = priv->plat->clk_csr;
  7279		else
  7280			stmmac_clk_csr_set(priv);
  7281	
  7282		stmmac_check_pcs_mode(priv);
  7283	
  7284		pm_runtime_get_noresume(device);
  7285		pm_runtime_set_active(device);
  7286		if (!pm_runtime_enabled(device))
  7287			pm_runtime_enable(device);
  7288	
  7289		if (priv->hw->pcs != STMMAC_PCS_TBI &&
  7290		    priv->hw->pcs != STMMAC_PCS_RTBI) {
  7291			/* MDIO bus Registration */
  7292			ret = stmmac_mdio_register(ndev);
  7293			if (ret < 0) {
  7294				dev_err_probe(priv->device, ret,
  7295					      "%s: MDIO bus (id: %d) registration failed\n",
  7296					      __func__, priv->plat->bus_id);
  7297				goto error_mdio_register;
  7298			}
  7299		}
  7300	
  7301		if (priv->plat->speed_mode_2500)
  7302			priv->plat->speed_mode_2500(ndev, priv->plat->bsp_priv);
  7303	
  7304		if (priv->plat->mdio_bus_data && priv->plat->mdio_bus_data->has_xpcs) {
  7305			ret = stmmac_xpcs_setup(priv->mii);
  7306			if (ret)
  7307				goto error_xpcs_setup;
  7308		}
  7309	
  7310		/* For fixed-link setup, we clear xpcs_an_inband */
> 7311		if (!fwnode)
  7312			fwnode = dev_fwnode(priv->device);
  7313	
  7314		if (fwnode) {
  7315			struct fwnode_handle *fixed_node;
  7316	
  7317			fixed_node = fwnode_get_named_child_node(fwnode, "fixed-link");
  7318			if (fixed_node)
  7319				priv->plat->mdio_bus_data->xpcs_an_inband = false;
  7320	
  7321			fwnode_handle_put(fixed_node);
  7322		}
  7323	
  7324		ret = stmmac_phy_setup(priv);
  7325		if (ret) {
  7326			netdev_err(ndev, "failed to setup phy (%d)\n", ret);
  7327			goto error_phy_setup;
  7328		}
  7329	
  7330		ret = register_netdev(ndev);
  7331		if (ret) {
  7332			dev_err(priv->device, "%s: ERROR %i registering the device\n",
  7333				__func__, ret);
  7334			goto error_netdev_register;
  7335		}
  7336	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2023-03-13 11:48 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-13  8:01 [PATCH net 0/2] Fix PHY handle no longer parsing Michael Sit Wei Hong
2023-03-13  8:01 ` Michael Sit Wei Hong
2023-03-13  8:01 ` [PATCH net 1/2] net: stmmac: fix PHY handle parsing Michael Sit Wei Hong
2023-03-13  8:01   ` Michael Sit Wei Hong
2023-03-14  8:39   ` Piotr Raczynski
2023-03-14  8:47     ` Sit, Michael Wei Hong
2023-03-13  8:01 ` [PATCH net 2/2] net: stmmac: move fixed-link support fixup code Michael Sit Wei Hong
2023-03-13  8:01   ` Michael Sit Wei Hong
2023-03-13 11:47   ` kernel test robot [this message]
2023-03-13 11:47     ` kernel test robot
2023-03-14  9:01   ` Piotr Raczynski
2023-03-15 10:18     ` Sit, Michael Wei Hong
2023-03-15 10:18       ` Sit, Michael Wei Hong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202303131924.MkBmpkFK-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=alexandre.torgue@foss.st.com \
    --cc=boon.leong.ong@intel.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hong.aun.looi@intel.com \
    --cc=joabreu@synopsys.com \
    --cc=kuba@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-stm32@st-md-mailman.stormreply.com \
    --cc=llvm@lists.linux.dev \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=michael.wei.hong.sit@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=pabeni@redhat.com \
    --cc=peppe.cavallaro@st.com \
    --cc=peter.jun.ann.lai@intel.com \
    --cc=weifeng.voon@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.