driverdev-devel.linuxdriverproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] staging: octeon: repair "fixed-link" support
@ 2020-10-09  9:47 Alexander A Sverdlin
  2020-10-09 11:15 ` kernel test robot
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Alexander A Sverdlin @ 2020-10-09  9:47 UTC (permalink / raw)
  To: devel
  Cc: Aaro Koskinen, Greg Kroah-Hartman, Ralf Baechle,
	Alexander Sverdlin, netdev, David S. Miller

From: Alexander Sverdlin <alexander.sverdlin@nokia.com>

The PHYs must be registered once in device probe function, not in device
open callback because it's only possible to register them once.

Fixes: a25e278020 ("staging: octeon: support fixed-link phys")
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
---
 drivers/staging/octeon/ethernet-mdio.c |  6 ------
 drivers/staging/octeon/ethernet.c      | 10 ++++++++++
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c
index cfb673a..0bf54584 100644
--- a/drivers/staging/octeon/ethernet-mdio.c
+++ b/drivers/staging/octeon/ethernet-mdio.c
@@ -147,12 +147,6 @@ int cvm_oct_phy_setup_device(struct net_device *dev)
 
 	phy_node = of_parse_phandle(priv->of_node, "phy-handle", 0);
 	if (!phy_node && of_phy_is_fixed_link(priv->of_node)) {
-		int rc;
-
-		rc = of_phy_register_fixed_link(priv->of_node);
-		if (rc)
-			return rc;
-
 		phy_node = of_node_get(priv->of_node);
 	}
 	if (!phy_node)
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
index 204f0b1..2b0d05d 100644
--- a/drivers/staging/octeon/ethernet.c
+++ b/drivers/staging/octeon/ethernet.c
@@ -13,6 +13,7 @@
 #include <linux/phy.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
+#include <linux/of_mdio.h>
 #include <linux/of_net.h>
 #include <linux/if_ether.h>
 #include <linux/if_vlan.h>
@@ -892,6 +893,15 @@ static int cvm_oct_probe(struct platform_device *pdev)
 				break;
 			}
 
+			if (priv->of_node && of_phy_is_fixed_link(priv->of_node)) {
+				r = of_phy_register_fixed_link(priv->of_node);
+				if (r) {
+					netdev_err(dev, "Failed to register fixed link for interface %d, port %d\n",
+						   interface, priv->ipd_port);
+					dev->netdev_ops = NULL;
+				}
+			}
+
 			if (!dev->netdev_ops) {
 				free_netdev(dev);
 			} else if (register_netdev(dev) < 0) {
-- 
2.10.2

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

* Re: [PATCH] staging: octeon: repair "fixed-link" support
  2020-10-09  9:47 [PATCH] staging: octeon: repair "fixed-link" support Alexander A Sverdlin
@ 2020-10-09 11:15 ` kernel test robot
  2020-10-09 13:09 ` Greg Kroah-Hartman
  2020-10-09 14:31 ` kernel test robot
  2 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2020-10-09 11:15 UTC (permalink / raw)
  To: Alexander A Sverdlin, devel
  Cc: kbuild-all, Aaro Koskinen, netdev, Ralf Baechle,
	Alexander Sverdlin, Greg Kroah-Hartman

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

Hi Alexander,

I love your patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]

url:    https://github.com/0day-ci/linux/commits/Alexander-A-Sverdlin/staging-octeon-repair-fixed-link-support/20201009-174828
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 76c3bdd67d27289b9e407113821eab2a70bbcca6
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
        # https://github.com/0day-ci/linux/commit/99d271d0a7dda48d064e12957a8846907220bf44
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Alexander-A-Sverdlin/staging-octeon-repair-fixed-link-support/20201009-174828
        git checkout 99d271d0a7dda48d064e12957a8846907220bf44
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

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

All errors (new ones prefixed by >>):

   drivers/staging/octeon/ethernet.c: In function 'cvm_oct_probe':
>> drivers/staging/octeon/ethernet.c:897:5: error: 'r' undeclared (first use in this function); did you mean 'rq'?
     897 |     r = of_phy_register_fixed_link(priv->of_node);
         |     ^
         |     rq
   drivers/staging/octeon/ethernet.c:897:5: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/staging/octeon/ethernet.c:900:25: error: 'struct octeon_ethernet' has no member named 'ipd_port'
     900 |          interface, priv->ipd_port);
         |                         ^~

vim +897 drivers/staging/octeon/ethernet.c

   692	
   693		pip = pdev->dev.of_node;
   694		if (!pip) {
   695			pr_err("Error: No 'pip' in /aliases\n");
   696			return -EINVAL;
   697		}
   698	
   699		cvm_oct_configure_common_hw();
   700	
   701		cvmx_helper_initialize_packet_io_global();
   702	
   703		if (receive_group_order) {
   704			if (receive_group_order > 4)
   705				receive_group_order = 4;
   706			pow_receive_groups = (1 << (1 << receive_group_order)) - 1;
   707		} else {
   708			pow_receive_groups = BIT(pow_receive_group);
   709		}
   710	
   711		/* Change the input group for all ports before input is enabled */
   712		num_interfaces = cvmx_helper_get_number_of_interfaces();
   713		for (interface = 0; interface < num_interfaces; interface++) {
   714			int num_ports = cvmx_helper_ports_on_interface(interface);
   715			int port;
   716	
   717			for (port = cvmx_helper_get_ipd_port(interface, 0);
   718			     port < cvmx_helper_get_ipd_port(interface, num_ports);
   719			     port++) {
   720				union cvmx_pip_prt_tagx pip_prt_tagx;
   721	
   722				pip_prt_tagx.u64 =
   723				    cvmx_read_csr(CVMX_PIP_PRT_TAGX(port));
   724	
   725				if (receive_group_order) {
   726					int tag_mask;
   727	
   728					/* We support only 16 groups at the moment, so
   729					 * always disable the two additional "hidden"
   730					 * tag_mask bits on CN68XX.
   731					 */
   732					if (OCTEON_IS_MODEL(OCTEON_CN68XX))
   733						pip_prt_tagx.u64 |= 0x3ull << 44;
   734	
   735					tag_mask = ~((1 << receive_group_order) - 1);
   736					pip_prt_tagx.s.grptagbase	= 0;
   737					pip_prt_tagx.s.grptagmask	= tag_mask;
   738					pip_prt_tagx.s.grptag		= 1;
   739					pip_prt_tagx.s.tag_mode		= 0;
   740					pip_prt_tagx.s.inc_prt_flag	= 1;
   741					pip_prt_tagx.s.ip6_dprt_flag	= 1;
   742					pip_prt_tagx.s.ip4_dprt_flag	= 1;
   743					pip_prt_tagx.s.ip6_sprt_flag	= 1;
   744					pip_prt_tagx.s.ip4_sprt_flag	= 1;
   745					pip_prt_tagx.s.ip6_dst_flag	= 1;
   746					pip_prt_tagx.s.ip4_dst_flag	= 1;
   747					pip_prt_tagx.s.ip6_src_flag	= 1;
   748					pip_prt_tagx.s.ip4_src_flag	= 1;
   749					pip_prt_tagx.s.grp		= 0;
   750				} else {
   751					pip_prt_tagx.s.grptag	= 0;
   752					pip_prt_tagx.s.grp	= pow_receive_group;
   753				}
   754	
   755				cvmx_write_csr(CVMX_PIP_PRT_TAGX(port),
   756					       pip_prt_tagx.u64);
   757			}
   758		}
   759	
   760		cvmx_helper_ipd_and_packet_input_enable();
   761	
   762		memset(cvm_oct_device, 0, sizeof(cvm_oct_device));
   763	
   764		/*
   765		 * Initialize the FAU used for counting packet buffers that
   766		 * need to be freed.
   767		 */
   768		cvmx_fau_atomic_write32(FAU_NUM_PACKET_BUFFERS_TO_FREE, 0);
   769	
   770		/* Initialize the FAU used for counting tx SKBs that need to be freed */
   771		cvmx_fau_atomic_write32(FAU_TOTAL_TX_TO_CLEAN, 0);
   772	
   773		if ((pow_send_group != -1)) {
   774			struct net_device *dev;
   775	
   776			dev = alloc_etherdev(sizeof(struct octeon_ethernet));
   777			if (dev) {
   778				/* Initialize the device private structure. */
   779				struct octeon_ethernet *priv = netdev_priv(dev);
   780	
   781				SET_NETDEV_DEV(dev, &pdev->dev);
   782				dev->netdev_ops = &cvm_oct_pow_netdev_ops;
   783				priv->imode = CVMX_HELPER_INTERFACE_MODE_DISABLED;
   784				priv->port = CVMX_PIP_NUM_INPUT_PORTS;
   785				priv->queue = -1;
   786				strscpy(dev->name, "pow%d", sizeof(dev->name));
   787				for (qos = 0; qos < 16; qos++)
   788					skb_queue_head_init(&priv->tx_free_list[qos]);
   789				dev->min_mtu = VLAN_ETH_ZLEN - mtu_overhead;
   790				dev->max_mtu = OCTEON_MAX_MTU - mtu_overhead;
   791	
   792				if (register_netdev(dev) < 0) {
   793					pr_err("Failed to register ethernet device for POW\n");
   794					free_netdev(dev);
   795				} else {
   796					cvm_oct_device[CVMX_PIP_NUM_INPUT_PORTS] = dev;
   797					pr_info("%s: POW send group %d, receive group %d\n",
   798						dev->name, pow_send_group,
   799						pow_receive_group);
   800				}
   801			} else {
   802				pr_err("Failed to allocate ethernet device for POW\n");
   803			}
   804		}
   805	
   806		num_interfaces = cvmx_helper_get_number_of_interfaces();
   807		for (interface = 0; interface < num_interfaces; interface++) {
   808			cvmx_helper_interface_mode_t imode =
   809			    cvmx_helper_interface_get_mode(interface);
   810			int num_ports = cvmx_helper_ports_on_interface(interface);
   811			int port;
   812			int port_index;
   813	
   814			for (port_index = 0,
   815			     port = cvmx_helper_get_ipd_port(interface, 0);
   816			     port < cvmx_helper_get_ipd_port(interface, num_ports);
   817			     port_index++, port++) {
   818				struct octeon_ethernet *priv;
   819				struct net_device *dev =
   820				    alloc_etherdev(sizeof(struct octeon_ethernet));
   821				if (!dev) {
   822					pr_err("Failed to allocate ethernet device for port %d\n",
   823					       port);
   824					continue;
   825				}
   826	
   827				/* Initialize the device private structure. */
   828				SET_NETDEV_DEV(dev, &pdev->dev);
   829				priv = netdev_priv(dev);
   830				priv->netdev = dev;
   831				priv->of_node = cvm_oct_node_for_port(pip, interface,
   832								      port_index);
   833	
   834				INIT_DELAYED_WORK(&priv->port_periodic_work,
   835						  cvm_oct_periodic_worker);
   836				priv->imode = imode;
   837				priv->port = port;
   838				priv->queue = cvmx_pko_get_base_queue(priv->port);
   839				priv->fau = fau - cvmx_pko_get_num_queues(port) * 4;
   840				priv->phy_mode = PHY_INTERFACE_MODE_NA;
   841				for (qos = 0; qos < 16; qos++)
   842					skb_queue_head_init(&priv->tx_free_list[qos]);
   843				for (qos = 0; qos < cvmx_pko_get_num_queues(port);
   844				     qos++)
   845					cvmx_fau_atomic_write32(priv->fau + qos * 4, 0);
   846				dev->min_mtu = VLAN_ETH_ZLEN - mtu_overhead;
   847				dev->max_mtu = OCTEON_MAX_MTU - mtu_overhead;
   848	
   849				switch (priv->imode) {
   850				/* These types don't support ports to IPD/PKO */
   851				case CVMX_HELPER_INTERFACE_MODE_DISABLED:
   852				case CVMX_HELPER_INTERFACE_MODE_PCIE:
   853				case CVMX_HELPER_INTERFACE_MODE_PICMG:
   854					break;
   855	
   856				case CVMX_HELPER_INTERFACE_MODE_NPI:
   857					dev->netdev_ops = &cvm_oct_npi_netdev_ops;
   858					strscpy(dev->name, "npi%d", sizeof(dev->name));
   859					break;
   860	
   861				case CVMX_HELPER_INTERFACE_MODE_XAUI:
   862					dev->netdev_ops = &cvm_oct_xaui_netdev_ops;
   863					strscpy(dev->name, "xaui%d", sizeof(dev->name));
   864					break;
   865	
   866				case CVMX_HELPER_INTERFACE_MODE_LOOP:
   867					dev->netdev_ops = &cvm_oct_npi_netdev_ops;
   868					strscpy(dev->name, "loop%d", sizeof(dev->name));
   869					break;
   870	
   871				case CVMX_HELPER_INTERFACE_MODE_SGMII:
   872					priv->phy_mode = PHY_INTERFACE_MODE_SGMII;
   873					dev->netdev_ops = &cvm_oct_sgmii_netdev_ops;
   874					strscpy(dev->name, "eth%d", sizeof(dev->name));
   875					break;
   876	
   877				case CVMX_HELPER_INTERFACE_MODE_SPI:
   878					dev->netdev_ops = &cvm_oct_spi_netdev_ops;
   879					strscpy(dev->name, "spi%d", sizeof(dev->name));
   880					break;
   881	
   882				case CVMX_HELPER_INTERFACE_MODE_GMII:
   883					priv->phy_mode = PHY_INTERFACE_MODE_GMII;
   884					dev->netdev_ops = &cvm_oct_rgmii_netdev_ops;
   885					strscpy(dev->name, "eth%d", sizeof(dev->name));
   886					break;
   887	
   888				case CVMX_HELPER_INTERFACE_MODE_RGMII:
   889					dev->netdev_ops = &cvm_oct_rgmii_netdev_ops;
   890					strscpy(dev->name, "eth%d", sizeof(dev->name));
   891					cvm_set_rgmii_delay(priv, interface,
   892							    port_index);
   893					break;
   894				}
   895	
   896				if (priv->of_node && of_phy_is_fixed_link(priv->of_node)) {
 > 897					r = of_phy_register_fixed_link(priv->of_node);
   898					if (r) {
   899						netdev_err(dev, "Failed to register fixed link for interface %d, port %d\n",
 > 900							   interface, priv->ipd_port);
   901						dev->netdev_ops = NULL;
   902					}
   903				}
   904	
   905				if (!dev->netdev_ops) {
   906					free_netdev(dev);
   907				} else if (register_netdev(dev) < 0) {
   908					pr_err("Failed to register ethernet device for interface %d, port %d\n",
   909					       interface, priv->port);
   910					free_netdev(dev);
   911				} else {
   912					cvm_oct_device[priv->port] = dev;
   913					fau -=
   914					    cvmx_pko_get_num_queues(priv->port) *
   915					    sizeof(u32);
   916					schedule_delayed_work(&priv->port_periodic_work,
   917							      HZ);
   918				}
   919			}
   920		}
   921	
   922		cvm_oct_tx_initialize();
   923		cvm_oct_rx_initialize();
   924	
   925		/*
   926		 * 150 uS: about 10 1500-byte packets at 1GE.
   927		 */
   928		cvm_oct_tx_poll_interval = 150 * (octeon_get_clock_rate() / 1000000);
   929	
   930		schedule_delayed_work(&cvm_oct_rx_refill_work, HZ);
   931	
   932		return 0;
   933	}
   934	

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 75939 bytes --]

[-- Attachment #3: Type: text/plain, Size: 169 bytes --]

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

* Re: [PATCH] staging: octeon: repair "fixed-link" support
  2020-10-09  9:47 [PATCH] staging: octeon: repair "fixed-link" support Alexander A Sverdlin
  2020-10-09 11:15 ` kernel test robot
@ 2020-10-09 13:09 ` Greg Kroah-Hartman
  2020-10-09 14:31 ` kernel test robot
  2 siblings, 0 replies; 8+ messages in thread
From: Greg Kroah-Hartman @ 2020-10-09 13:09 UTC (permalink / raw)
  To: Alexander A Sverdlin
  Cc: devel, netdev, David S. Miller, Ralf Baechle, Aaro Koskinen

On Fri, Oct 09, 2020 at 11:47:39AM +0200, Alexander A Sverdlin wrote:
> From: Alexander Sverdlin <alexander.sverdlin@nokia.com>
> 
> The PHYs must be registered once in device probe function, not in device
> open callback because it's only possible to register them once.
> 
> Fixes: a25e278020 ("staging: octeon: support fixed-link phys")
> Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>

Looks like it breaks the build, please fix up and test your patches when
sending them out next time.

thanks,

greg k-h
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

* Re: [PATCH] staging: octeon: repair "fixed-link" support
  2020-10-09  9:47 [PATCH] staging: octeon: repair "fixed-link" support Alexander A Sverdlin
  2020-10-09 11:15 ` kernel test robot
  2020-10-09 13:09 ` Greg Kroah-Hartman
@ 2020-10-09 14:31 ` kernel test robot
  2 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2020-10-09 14:31 UTC (permalink / raw)
  To: Alexander A Sverdlin, devel
  Cc: kbuild-all, Aaro Koskinen, Greg Kroah-Hartman, Ralf Baechle,
	clang-built-linux, Alexander Sverdlin, netdev

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

Hi Alexander,

I love your patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]

url:    https://github.com/0day-ci/linux/commits/Alexander-A-Sverdlin/staging-octeon-repair-fixed-link-support/20201009-174828
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 76c3bdd67d27289b9e407113821eab2a70bbcca6
config: arm64-randconfig-r033-20201009 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 4cfc4025cc1433ca5ef1c526053fc9c4bfe64109)
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
        # install arm64 cross compiling tool for clang build
        # apt-get install binutils-aarch64-linux-gnu
        # https://github.com/0day-ci/linux/commit/99d271d0a7dda48d064e12957a8846907220bf44
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Alexander-A-Sverdlin/staging-octeon-repair-fixed-link-support/20201009-174828
        git checkout 99d271d0a7dda48d064e12957a8846907220bf44
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64 

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

All errors (new ones prefixed by >>):

>> drivers/staging/octeon/ethernet.c:897:5: error: use of undeclared identifier 'r'
                                   r = of_phy_register_fixed_link(priv->of_node);
                                   ^
   drivers/staging/octeon/ethernet.c:898:9: error: use of undeclared identifier 'r'
                                   if (r) {
                                       ^
   drivers/staging/octeon/ethernet.c:898:9: error: use of undeclared identifier 'r'
   drivers/staging/octeon/ethernet.c:898:9: error: use of undeclared identifier 'r'
>> drivers/staging/octeon/ethernet.c:900:27: error: no member named 'ipd_port' in 'struct octeon_ethernet'
                                                      interface, priv->ipd_port);
                                                                 ~~~~  ^
   5 errors generated.

vim +/r +897 drivers/staging/octeon/ethernet.c

   692	
   693		pip = pdev->dev.of_node;
   694		if (!pip) {
   695			pr_err("Error: No 'pip' in /aliases\n");
   696			return -EINVAL;
   697		}
   698	
   699		cvm_oct_configure_common_hw();
   700	
   701		cvmx_helper_initialize_packet_io_global();
   702	
   703		if (receive_group_order) {
   704			if (receive_group_order > 4)
   705				receive_group_order = 4;
   706			pow_receive_groups = (1 << (1 << receive_group_order)) - 1;
   707		} else {
   708			pow_receive_groups = BIT(pow_receive_group);
   709		}
   710	
   711		/* Change the input group for all ports before input is enabled */
   712		num_interfaces = cvmx_helper_get_number_of_interfaces();
   713		for (interface = 0; interface < num_interfaces; interface++) {
   714			int num_ports = cvmx_helper_ports_on_interface(interface);
   715			int port;
   716	
   717			for (port = cvmx_helper_get_ipd_port(interface, 0);
   718			     port < cvmx_helper_get_ipd_port(interface, num_ports);
   719			     port++) {
   720				union cvmx_pip_prt_tagx pip_prt_tagx;
   721	
   722				pip_prt_tagx.u64 =
   723				    cvmx_read_csr(CVMX_PIP_PRT_TAGX(port));
   724	
   725				if (receive_group_order) {
   726					int tag_mask;
   727	
   728					/* We support only 16 groups at the moment, so
   729					 * always disable the two additional "hidden"
   730					 * tag_mask bits on CN68XX.
   731					 */
   732					if (OCTEON_IS_MODEL(OCTEON_CN68XX))
   733						pip_prt_tagx.u64 |= 0x3ull << 44;
   734	
   735					tag_mask = ~((1 << receive_group_order) - 1);
   736					pip_prt_tagx.s.grptagbase	= 0;
   737					pip_prt_tagx.s.grptagmask	= tag_mask;
   738					pip_prt_tagx.s.grptag		= 1;
   739					pip_prt_tagx.s.tag_mode		= 0;
   740					pip_prt_tagx.s.inc_prt_flag	= 1;
   741					pip_prt_tagx.s.ip6_dprt_flag	= 1;
   742					pip_prt_tagx.s.ip4_dprt_flag	= 1;
   743					pip_prt_tagx.s.ip6_sprt_flag	= 1;
   744					pip_prt_tagx.s.ip4_sprt_flag	= 1;
   745					pip_prt_tagx.s.ip6_dst_flag	= 1;
   746					pip_prt_tagx.s.ip4_dst_flag	= 1;
   747					pip_prt_tagx.s.ip6_src_flag	= 1;
   748					pip_prt_tagx.s.ip4_src_flag	= 1;
   749					pip_prt_tagx.s.grp		= 0;
   750				} else {
   751					pip_prt_tagx.s.grptag	= 0;
   752					pip_prt_tagx.s.grp	= pow_receive_group;
   753				}
   754	
   755				cvmx_write_csr(CVMX_PIP_PRT_TAGX(port),
   756					       pip_prt_tagx.u64);
   757			}
   758		}
   759	
   760		cvmx_helper_ipd_and_packet_input_enable();
   761	
   762		memset(cvm_oct_device, 0, sizeof(cvm_oct_device));
   763	
   764		/*
   765		 * Initialize the FAU used for counting packet buffers that
   766		 * need to be freed.
   767		 */
   768		cvmx_fau_atomic_write32(FAU_NUM_PACKET_BUFFERS_TO_FREE, 0);
   769	
   770		/* Initialize the FAU used for counting tx SKBs that need to be freed */
   771		cvmx_fau_atomic_write32(FAU_TOTAL_TX_TO_CLEAN, 0);
   772	
   773		if ((pow_send_group != -1)) {
   774			struct net_device *dev;
   775	
   776			dev = alloc_etherdev(sizeof(struct octeon_ethernet));
   777			if (dev) {
   778				/* Initialize the device private structure. */
   779				struct octeon_ethernet *priv = netdev_priv(dev);
   780	
   781				SET_NETDEV_DEV(dev, &pdev->dev);
   782				dev->netdev_ops = &cvm_oct_pow_netdev_ops;
   783				priv->imode = CVMX_HELPER_INTERFACE_MODE_DISABLED;
   784				priv->port = CVMX_PIP_NUM_INPUT_PORTS;
   785				priv->queue = -1;
   786				strscpy(dev->name, "pow%d", sizeof(dev->name));
   787				for (qos = 0; qos < 16; qos++)
   788					skb_queue_head_init(&priv->tx_free_list[qos]);
   789				dev->min_mtu = VLAN_ETH_ZLEN - mtu_overhead;
   790				dev->max_mtu = OCTEON_MAX_MTU - mtu_overhead;
   791	
   792				if (register_netdev(dev) < 0) {
   793					pr_err("Failed to register ethernet device for POW\n");
   794					free_netdev(dev);
   795				} else {
   796					cvm_oct_device[CVMX_PIP_NUM_INPUT_PORTS] = dev;
   797					pr_info("%s: POW send group %d, receive group %d\n",
   798						dev->name, pow_send_group,
   799						pow_receive_group);
   800				}
   801			} else {
   802				pr_err("Failed to allocate ethernet device for POW\n");
   803			}
   804		}
   805	
   806		num_interfaces = cvmx_helper_get_number_of_interfaces();
   807		for (interface = 0; interface < num_interfaces; interface++) {
   808			cvmx_helper_interface_mode_t imode =
   809			    cvmx_helper_interface_get_mode(interface);
   810			int num_ports = cvmx_helper_ports_on_interface(interface);
   811			int port;
   812			int port_index;
   813	
   814			for (port_index = 0,
   815			     port = cvmx_helper_get_ipd_port(interface, 0);
   816			     port < cvmx_helper_get_ipd_port(interface, num_ports);
   817			     port_index++, port++) {
   818				struct octeon_ethernet *priv;
   819				struct net_device *dev =
   820				    alloc_etherdev(sizeof(struct octeon_ethernet));
   821				if (!dev) {
   822					pr_err("Failed to allocate ethernet device for port %d\n",
   823					       port);
   824					continue;
   825				}
   826	
   827				/* Initialize the device private structure. */
   828				SET_NETDEV_DEV(dev, &pdev->dev);
   829				priv = netdev_priv(dev);
   830				priv->netdev = dev;
   831				priv->of_node = cvm_oct_node_for_port(pip, interface,
   832								      port_index);
   833	
   834				INIT_DELAYED_WORK(&priv->port_periodic_work,
   835						  cvm_oct_periodic_worker);
   836				priv->imode = imode;
   837				priv->port = port;
   838				priv->queue = cvmx_pko_get_base_queue(priv->port);
   839				priv->fau = fau - cvmx_pko_get_num_queues(port) * 4;
   840				priv->phy_mode = PHY_INTERFACE_MODE_NA;
   841				for (qos = 0; qos < 16; qos++)
   842					skb_queue_head_init(&priv->tx_free_list[qos]);
   843				for (qos = 0; qos < cvmx_pko_get_num_queues(port);
   844				     qos++)
   845					cvmx_fau_atomic_write32(priv->fau + qos * 4, 0);
   846				dev->min_mtu = VLAN_ETH_ZLEN - mtu_overhead;
   847				dev->max_mtu = OCTEON_MAX_MTU - mtu_overhead;
   848	
   849				switch (priv->imode) {
   850				/* These types don't support ports to IPD/PKO */
   851				case CVMX_HELPER_INTERFACE_MODE_DISABLED:
   852				case CVMX_HELPER_INTERFACE_MODE_PCIE:
   853				case CVMX_HELPER_INTERFACE_MODE_PICMG:
   854					break;
   855	
   856				case CVMX_HELPER_INTERFACE_MODE_NPI:
   857					dev->netdev_ops = &cvm_oct_npi_netdev_ops;
   858					strscpy(dev->name, "npi%d", sizeof(dev->name));
   859					break;
   860	
   861				case CVMX_HELPER_INTERFACE_MODE_XAUI:
   862					dev->netdev_ops = &cvm_oct_xaui_netdev_ops;
   863					strscpy(dev->name, "xaui%d", sizeof(dev->name));
   864					break;
   865	
   866				case CVMX_HELPER_INTERFACE_MODE_LOOP:
   867					dev->netdev_ops = &cvm_oct_npi_netdev_ops;
   868					strscpy(dev->name, "loop%d", sizeof(dev->name));
   869					break;
   870	
   871				case CVMX_HELPER_INTERFACE_MODE_SGMII:
   872					priv->phy_mode = PHY_INTERFACE_MODE_SGMII;
   873					dev->netdev_ops = &cvm_oct_sgmii_netdev_ops;
   874					strscpy(dev->name, "eth%d", sizeof(dev->name));
   875					break;
   876	
   877				case CVMX_HELPER_INTERFACE_MODE_SPI:
   878					dev->netdev_ops = &cvm_oct_spi_netdev_ops;
   879					strscpy(dev->name, "spi%d", sizeof(dev->name));
   880					break;
   881	
   882				case CVMX_HELPER_INTERFACE_MODE_GMII:
   883					priv->phy_mode = PHY_INTERFACE_MODE_GMII;
   884					dev->netdev_ops = &cvm_oct_rgmii_netdev_ops;
   885					strscpy(dev->name, "eth%d", sizeof(dev->name));
   886					break;
   887	
   888				case CVMX_HELPER_INTERFACE_MODE_RGMII:
   889					dev->netdev_ops = &cvm_oct_rgmii_netdev_ops;
   890					strscpy(dev->name, "eth%d", sizeof(dev->name));
   891					cvm_set_rgmii_delay(priv, interface,
   892							    port_index);
   893					break;
   894				}
   895	
   896				if (priv->of_node && of_phy_is_fixed_link(priv->of_node)) {
 > 897					r = of_phy_register_fixed_link(priv->of_node);
   898					if (r) {
   899						netdev_err(dev, "Failed to register fixed link for interface %d, port %d\n",
 > 900							   interface, priv->ipd_port);
   901						dev->netdev_ops = NULL;
   902					}
   903				}
   904	
   905				if (!dev->netdev_ops) {
   906					free_netdev(dev);
   907				} else if (register_netdev(dev) < 0) {
   908					pr_err("Failed to register ethernet device for interface %d, port %d\n",
   909					       interface, priv->port);
   910					free_netdev(dev);
   911				} else {
   912					cvm_oct_device[priv->port] = dev;
   913					fau -=
   914					    cvmx_pko_get_num_queues(priv->port) *
   915					    sizeof(u32);
   916					schedule_delayed_work(&priv->port_periodic_work,
   917							      HZ);
   918				}
   919			}
   920		}
   921	
   922		cvm_oct_tx_initialize();
   923		cvm_oct_rx_initialize();
   924	
   925		/*
   926		 * 150 uS: about 10 1500-byte packets at 1GE.
   927		 */
   928		cvm_oct_tx_poll_interval = 150 * (octeon_get_clock_rate() / 1000000);
   929	
   930		schedule_delayed_work(&cvm_oct_rx_refill_work, HZ);
   931	
   932		return 0;
   933	}
   934	

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 40336 bytes --]

[-- Attachment #3: Type: text/plain, Size: 169 bytes --]

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

* Re: [PATCH] staging: octeon: repair "fixed-link" support
  2020-10-09  9:40 ` Alexander Sverdlin
@ 2020-10-09  9:54   ` Greg Kroah-Hartman
  0 siblings, 0 replies; 8+ messages in thread
From: Greg Kroah-Hartman @ 2020-10-09  9:54 UTC (permalink / raw)
  To: Alexander Sverdlin
  Cc: devel, netdev, David S. Miller, Ralf Baechle, Aaro Koskinen

On Fri, Oct 09, 2020 at 11:40:24AM +0200, Alexander Sverdlin wrote:
> Hello Greg, Dave and all,
> 
> the below patch is still applicable as-is, would you please re-consider it now,
> as the driver has been undeleted?
> 
> On 08/01/2020 17:09, Alexander X Sverdlin wrote:

Why would we have a patch from January still in our inboxes? :)

Please resend.

thanks,

greg k-h
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

* [PATCH] staging: octeon: repair "fixed-link" support
@ 2020-10-09  9:46 Alexander A Sverdlin
  0 siblings, 0 replies; 8+ messages in thread
From: Alexander A Sverdlin @ 2020-10-09  9:46 UTC (permalink / raw)
  To: devel
  Cc: Aaro Koskinen, netdev, Ralf Baechle, Alexander Sverdlin,
	Alexander Sverdlin, Greg Kroah-Hartman, David S. Miller

From: Alexander Sverdlin <alexander.sverdlin@nsn.com>

The PHYs must be registered once in device probe function, not in device
open callback because it's only possible to register them once.

Fixes: a25e278020 ("staging: octeon: support fixed-link phys")
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
---
 drivers/staging/octeon/ethernet-mdio.c |  6 ------
 drivers/staging/octeon/ethernet.c      | 10 ++++++++++
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c
index cfb673a..0bf54584 100644
--- a/drivers/staging/octeon/ethernet-mdio.c
+++ b/drivers/staging/octeon/ethernet-mdio.c
@@ -147,12 +147,6 @@ int cvm_oct_phy_setup_device(struct net_device *dev)
 
 	phy_node = of_parse_phandle(priv->of_node, "phy-handle", 0);
 	if (!phy_node && of_phy_is_fixed_link(priv->of_node)) {
-		int rc;
-
-		rc = of_phy_register_fixed_link(priv->of_node);
-		if (rc)
-			return rc;
-
 		phy_node = of_node_get(priv->of_node);
 	}
 	if (!phy_node)
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
index 204f0b1..2b0d05d 100644
--- a/drivers/staging/octeon/ethernet.c
+++ b/drivers/staging/octeon/ethernet.c
@@ -13,6 +13,7 @@
 #include <linux/phy.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
+#include <linux/of_mdio.h>
 #include <linux/of_net.h>
 #include <linux/if_ether.h>
 #include <linux/if_vlan.h>
@@ -892,6 +893,15 @@ static int cvm_oct_probe(struct platform_device *pdev)
 				break;
 			}
 
+			if (priv->of_node && of_phy_is_fixed_link(priv->of_node)) {
+				r = of_phy_register_fixed_link(priv->of_node);
+				if (r) {
+					netdev_err(dev, "Failed to register fixed link for interface %d, port %d\n",
+						   interface, priv->ipd_port);
+					dev->netdev_ops = NULL;
+				}
+			}
+
 			if (!dev->netdev_ops) {
 				free_netdev(dev);
 			} else if (register_netdev(dev) < 0) {
-- 
2.10.2

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

* Re: [PATCH] staging: octeon: repair "fixed-link" support
  2020-01-08 16:09 Alexander X Sverdlin
@ 2020-10-09  9:40 ` Alexander Sverdlin
  2020-10-09  9:54   ` Greg Kroah-Hartman
  0 siblings, 1 reply; 8+ messages in thread
From: Alexander Sverdlin @ 2020-10-09  9:40 UTC (permalink / raw)
  To: devel
  Cc: Greg Kroah-Hartman, netdev, David S. Miller, Ralf Baechle, Aaro Koskinen

Hello Greg, Dave and all,

the below patch is still applicable as-is, would you please re-consider it now,
as the driver has been undeleted?

On 08/01/2020 17:09, Alexander X Sverdlin wrote:
> From: Alexander Sverdlin <alexander.sverdlin@nokia.com>
> 
> The PHYs must be registered once in device probe function, not in device
> open callback because it's only possible to register them once.
> 
> Fixes: a25e278020 ("staging: octeon: support fixed-link phys")
> Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
> ---
>  drivers/staging/octeon/ethernet-mdio.c |  6 ------
>  drivers/staging/octeon/ethernet.c      | 11 +++++++++++
>  2 files changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c
> index c798672..d81bddf 100644
> --- a/drivers/staging/octeon/ethernet-mdio.c
> +++ b/drivers/staging/octeon/ethernet-mdio.c
> @@ -147,12 +147,6 @@ int cvm_oct_phy_setup_device(struct net_device *dev)
>  
>  	phy_node = of_parse_phandle(priv->of_node, "phy-handle", 0);
>  	if (!phy_node && of_phy_is_fixed_link(priv->of_node)) {
> -		int rc;
> -
> -		rc = of_phy_register_fixed_link(priv->of_node);
> -		if (rc)
> -			return rc;
> -
>  		phy_node = of_node_get(priv->of_node);
>  	}
>  	if (!phy_node)
> diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
> index f42c381..241a1db 100644
> --- a/drivers/staging/octeon/ethernet.c
> +++ b/drivers/staging/octeon/ethernet.c
> @@ -13,6 +13,7 @@
>  #include <linux/phy.h>
>  #include <linux/slab.h>
>  #include <linux/interrupt.h>
> +#include <linux/of_mdio.h>
>  #include <linux/of_net.h>
>  #include <linux/if_ether.h>
>  #include <linux/if_vlan.h>
> @@ -894,6 +895,16 @@ static int cvm_oct_probe(struct platform_device *pdev)
>  				break;
>  			}
>  
> +			if (priv->of_node &&
> +			    of_phy_is_fixed_link(priv->of_node)) {
> +				r = of_phy_register_fixed_link(priv->of_node);
> +				if (r) {
> +					netdev_err(dev, "Failed to register fixed link for interface %d, port %d\n",
> +						   interface, priv->ipd_port);
> +					dev->netdev_ops = NULL;
> +				}
> +			}
> +
>  			if (!dev->netdev_ops) {
>  				free_netdev(dev);
>  			} else if (register_netdev(dev) < 0) {
> 

-- 
Best regards,
Alexander Sverdlin.
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

* [PATCH] staging: octeon: repair "fixed-link" support
@ 2020-01-08 16:09 Alexander X Sverdlin
  2020-10-09  9:40 ` Alexander Sverdlin
  0 siblings, 1 reply; 8+ messages in thread
From: Alexander X Sverdlin @ 2020-01-08 16:09 UTC (permalink / raw)
  To: devel
  Cc: Aaro Koskinen, Greg Kroah-Hartman, Ralf Baechle,
	Alexander Sverdlin, netdev, David S. Miller

From: Alexander Sverdlin <alexander.sverdlin@nokia.com>

The PHYs must be registered once in device probe function, not in device
open callback because it's only possible to register them once.

Fixes: a25e278020 ("staging: octeon: support fixed-link phys")
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
---
 drivers/staging/octeon/ethernet-mdio.c |  6 ------
 drivers/staging/octeon/ethernet.c      | 11 +++++++++++
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c
index c798672..d81bddf 100644
--- a/drivers/staging/octeon/ethernet-mdio.c
+++ b/drivers/staging/octeon/ethernet-mdio.c
@@ -147,12 +147,6 @@ int cvm_oct_phy_setup_device(struct net_device *dev)
 
 	phy_node = of_parse_phandle(priv->of_node, "phy-handle", 0);
 	if (!phy_node && of_phy_is_fixed_link(priv->of_node)) {
-		int rc;
-
-		rc = of_phy_register_fixed_link(priv->of_node);
-		if (rc)
-			return rc;
-
 		phy_node = of_node_get(priv->of_node);
 	}
 	if (!phy_node)
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
index f42c381..241a1db 100644
--- a/drivers/staging/octeon/ethernet.c
+++ b/drivers/staging/octeon/ethernet.c
@@ -13,6 +13,7 @@
 #include <linux/phy.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
+#include <linux/of_mdio.h>
 #include <linux/of_net.h>
 #include <linux/if_ether.h>
 #include <linux/if_vlan.h>
@@ -894,6 +895,16 @@ static int cvm_oct_probe(struct platform_device *pdev)
 				break;
 			}
 
+			if (priv->of_node &&
+			    of_phy_is_fixed_link(priv->of_node)) {
+				r = of_phy_register_fixed_link(priv->of_node);
+				if (r) {
+					netdev_err(dev, "Failed to register fixed link for interface %d, port %d\n",
+						   interface, priv->ipd_port);
+					dev->netdev_ops = NULL;
+				}
+			}
+
 			if (!dev->netdev_ops) {
 				free_netdev(dev);
 			} else if (register_netdev(dev) < 0) {
-- 
2.4.6

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

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

end of thread, other threads:[~2020-10-09 14:32 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-09  9:47 [PATCH] staging: octeon: repair "fixed-link" support Alexander A Sverdlin
2020-10-09 11:15 ` kernel test robot
2020-10-09 13:09 ` Greg Kroah-Hartman
2020-10-09 14:31 ` kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2020-10-09  9:46 Alexander A Sverdlin
2020-01-08 16:09 Alexander X Sverdlin
2020-10-09  9:40 ` Alexander Sverdlin
2020-10-09  9:54   ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).