All of lore.kernel.org
 help / color / mirror / Atom feed
From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [linux-arm:cex7 102/102] drivers/net/phy/sfp-bus.c:121:5: error: redefinition of 'sfp_parse_port'
Date: Wed, 12 Feb 2020 03:10:55 +0800	[thread overview]
Message-ID: <202002120351.5a3gJA7L%lkp@intel.com> (raw)

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

Hi Russell,

First bad commit (maybe != root cause):

tree:   git://git.armlinux.org.uk/~rmk/linux-arm cex7
head:   9ce6b3da01bfaf78f5529746945d93c5688d3ed7
commit: 9ce6b3da01bfaf78f5529746945d93c5688d3ed7 [102/102] net: add qsfp support                              [*experimental*]
config: x86_64-randconfig-c002-20200212 (attached as .config)
compiler: gcc-7 (Debian 7.5.0-4) 7.5.0
reproduce:
        git checkout 9ce6b3da01bfaf78f5529746945d93c5688d3ed7
        # save the attached .config to linux build tree
        make ARCH=x86_64 

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

All errors (new ones prefixed by >>):

>> drivers/net/phy/sfp-bus.c:121:5: error: redefinition of 'sfp_parse_port'
    int sfp_parse_port(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
        ^~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:663:19: note: previous definition of 'sfp_parse_port' was here
    static inline int sfp_parse_port(struct sfp_bus *bus,
                      ^~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:190:6: error: redefinition of 'sfp_may_have_phy'
    bool sfp_may_have_phy(struct sfp_bus *bus, const struct sfp_eeprom_id *id)
         ^~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:670:20: note: previous definition of 'sfp_may_have_phy' was here
    static inline bool sfp_may_have_phy(struct sfp_bus *bus,
                       ^~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:218:6: error: redefinition of 'sfp_parse_support'
    void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
         ^~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:676:20: note: previous definition of 'sfp_parse_support' was here
    static inline void sfp_parse_support(struct sfp_bus *bus,
                       ^~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:367:17: error: redefinition of 'sfp_select_interface'
    phy_interface_t sfp_select_interface(struct sfp_bus *bus,
                    ^~~~~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:682:31: note: previous definition of 'sfp_select_interface' was here
    static inline phy_interface_t sfp_select_interface(struct sfp_bus *bus,
                                  ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:449:6: error: redefinition of 'sfp_bus_put'
    void sfp_bus_put(struct sfp_bus *bus)
         ^~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:708:20: note: previous definition of 'sfp_bus_put' was here
    static inline void sfp_bus_put(struct sfp_bus *bus)
                       ^~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:503:5: error: redefinition of 'sfp_get_module_info'
    int sfp_get_module_info(struct sfp_bus *bus, struct ethtool_modinfo *modinfo)
        ^~~~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:688:19: note: previous definition of 'sfp_get_module_info' was here
    static inline int sfp_get_module_info(struct sfp_bus *bus,
                      ^~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:520:5: error: redefinition of 'sfp_get_module_eeprom'
    int sfp_get_module_eeprom(struct sfp_bus *bus, struct ethtool_eeprom *ee,
        ^~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:694:19: note: previous definition of 'sfp_get_module_eeprom' was here
    static inline int sfp_get_module_eeprom(struct sfp_bus *bus,
                      ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:536:6: error: redefinition of 'sfp_upstream_start'
    void sfp_upstream_start(struct sfp_bus *bus)
         ^~~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:700:20: note: previous definition of 'sfp_upstream_start' was here
    static inline void sfp_upstream_start(struct sfp_bus *bus)
                       ^~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:553:6: error: redefinition of 'sfp_upstream_stop'
    void sfp_upstream_stop(struct sfp_bus *bus)
         ^~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:704:20: note: previous definition of 'sfp_upstream_stop' was here
    static inline void sfp_upstream_stop(struct sfp_bus *bus)
                       ^~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:583:17: error: redefinition of 'sfp_bus_find_fwnode'
    struct sfp_bus *sfp_bus_find_fwnode(struct fwnode_handle *fwnode)
                    ^~~~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:712:31: note: previous definition of 'sfp_bus_find_fwnode' was here
    static inline struct sfp_bus *sfp_bus_find_fwnode(struct fwnode_handle *fwnode)
                                  ^~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:623:5: error: redefinition of 'sfp_bus_add_upstream'
    int sfp_bus_add_upstream(struct sfp_bus *bus, void *upstream,
        ^~~~~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:717:19: note: previous definition of 'sfp_bus_add_upstream' was here
    static inline int sfp_bus_add_upstream(struct sfp_bus *bus, void *upstream,
                      ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp-bus.c:660:6: error: redefinition of 'sfp_bus_del_upstream'
    void sfp_bus_del_upstream(struct sfp_bus *bus)
         ^~~~~~~~~~~~~~~~~~~~
   In file included from drivers/net/phy/sfp.h:5:0,
                    from drivers/net/phy/sfp-bus.c:11:
   include/linux/sfp.h:723:20: note: previous definition of 'sfp_bus_del_upstream' was here
    static inline void sfp_bus_del_upstream(struct sfp_bus *bus)
                       ^~~~~~~~~~~~~~~~~~~~

vim +/sfp_parse_port +121 drivers/net/phy/sfp-bus.c

949e063b3cd9d8 Russell King   2019-11-21  106  
0a6fcd3fc14d39 Russell King   2017-12-01  107  /**
0a6fcd3fc14d39 Russell King   2017-12-01  108   * sfp_parse_port() - Parse the EEPROM base ID, setting the port type
0a6fcd3fc14d39 Russell King   2017-12-01  109   * @bus: a pointer to the &struct sfp_bus structure for the sfp module
0a6fcd3fc14d39 Russell King   2017-12-01  110   * @id: a pointer to the module's &struct sfp_eeprom_id
0a6fcd3fc14d39 Russell King   2017-12-01  111   * @support: optional pointer to an array of unsigned long for the
0a6fcd3fc14d39 Russell King   2017-12-01  112   *   ethtool support mask
0a6fcd3fc14d39 Russell King   2017-12-01  113   *
0a6fcd3fc14d39 Russell King   2017-12-01  114   * Parse the EEPROM identification given in @id, and return one of
0a6fcd3fc14d39 Russell King   2017-12-01  115   * %PORT_TP, %PORT_FIBRE or %PORT_OTHER. If @support is non-%NULL,
0a6fcd3fc14d39 Russell King   2017-12-01  116   * also set the ethtool %ETHTOOL_LINK_MODE_xxx_BIT corresponding with
0a6fcd3fc14d39 Russell King   2017-12-01  117   * the connector type.
0a6fcd3fc14d39 Russell King   2017-12-01  118   *
0a6fcd3fc14d39 Russell King   2017-12-01  119   * If the port type is not known, returns %PORT_OTHER.
0a6fcd3fc14d39 Russell King   2017-12-01  120   */
ce0aa27ff3f68e Russell King   2017-07-25 @121  int sfp_parse_port(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
ce0aa27ff3f68e Russell King   2017-07-25  122  		   unsigned long *support)
ce0aa27ff3f68e Russell King   2017-07-25  123  {
ce0aa27ff3f68e Russell King   2017-07-25  124  	int port;
ce0aa27ff3f68e Russell King   2017-07-25  125  
ce0aa27ff3f68e Russell King   2017-07-25  126  	/* port is the physical connector, set this from the connector field. */
ce0aa27ff3f68e Russell King   2017-07-25  127  	switch (id->base.connector) {
c83f8d2fce3488 Russell King   2019-09-26  128  	case SFF8024_CONNECTOR_SC:
c83f8d2fce3488 Russell King   2019-09-26  129  	case SFF8024_CONNECTOR_FIBERJACK:
c83f8d2fce3488 Russell King   2019-09-26  130  	case SFF8024_CONNECTOR_LC:
c83f8d2fce3488 Russell King   2019-09-26  131  	case SFF8024_CONNECTOR_MT_RJ:
c83f8d2fce3488 Russell King   2019-09-26  132  	case SFF8024_CONNECTOR_MU:
c83f8d2fce3488 Russell King   2019-09-26  133  	case SFF8024_CONNECTOR_OPTICAL_PIGTAIL:
c83f8d2fce3488 Russell King   2019-09-26  134  	case SFF8024_CONNECTOR_MPO_1X12:
c83f8d2fce3488 Russell King   2019-09-26  135  	case SFF8024_CONNECTOR_MPO_2X16:
ce0aa27ff3f68e Russell King   2017-07-25  136  		port = PORT_FIBRE;
ce0aa27ff3f68e Russell King   2017-07-25  137  		break;
ce0aa27ff3f68e Russell King   2017-07-25  138  
c83f8d2fce3488 Russell King   2019-09-26  139  	case SFF8024_CONNECTOR_RJ45:
ce0aa27ff3f68e Russell King   2017-07-25  140  		port = PORT_TP;
ce0aa27ff3f68e Russell King   2017-07-25  141  		break;
ce0aa27ff3f68e Russell King   2017-07-25  142  
c83f8d2fce3488 Russell King   2019-09-26  143  	case SFF8024_CONNECTOR_COPPER_PIGTAIL:
f10fcbcf91006a Russell King   2017-12-29  144  		port = PORT_DA;
f10fcbcf91006a Russell King   2017-12-29  145  		break;
f10fcbcf91006a Russell King   2017-12-29  146  
c83f8d2fce3488 Russell King   2019-09-26  147  	case SFF8024_CONNECTOR_UNSPEC:
ce0aa27ff3f68e Russell King   2017-07-25  148  		if (id->base.e1000_base_t) {
ce0aa27ff3f68e Russell King   2017-07-25  149  			port = PORT_TP;
ce0aa27ff3f68e Russell King   2017-07-25  150  			break;
ce0aa27ff3f68e Russell King   2017-07-25  151  		}
ce0aa27ff3f68e Russell King   2017-07-25  152  		/* fallthrough */
c83f8d2fce3488 Russell King   2019-09-26  153  	case SFF8024_CONNECTOR_SG: /* guess */
c83f8d2fce3488 Russell King   2019-09-26  154  	case SFF8024_CONNECTOR_HSSDC_II:
c83f8d2fce3488 Russell King   2019-09-26  155  	case SFF8024_CONNECTOR_NOSEPARATE:
c83f8d2fce3488 Russell King   2019-09-26  156  	case SFF8024_CONNECTOR_MXC_2X16:
ce0aa27ff3f68e Russell King   2017-07-25  157  		port = PORT_OTHER;
ce0aa27ff3f68e Russell King   2017-07-25  158  		break;
ce0aa27ff3f68e Russell King   2017-07-25  159  	default:
ce0aa27ff3f68e Russell King   2017-07-25  160  		dev_warn(bus->sfp_dev, "SFP: unknown connector id 0x%02x\n",
ce0aa27ff3f68e Russell King   2017-07-25  161  			 id->base.connector);
ce0aa27ff3f68e Russell King   2017-07-25  162  		port = PORT_OTHER;
ce0aa27ff3f68e Russell King   2017-07-25  163  		break;
ce0aa27ff3f68e Russell King   2017-07-25  164  	}
ce0aa27ff3f68e Russell King   2017-07-25  165  
f10fcbcf91006a Russell King   2017-12-29  166  	if (support) {
f10fcbcf91006a Russell King   2017-12-29  167  		switch (port) {
f10fcbcf91006a Russell King   2017-12-29  168  		case PORT_FIBRE:
f10fcbcf91006a Russell King   2017-12-29  169  			phylink_set(support, FIBRE);
f10fcbcf91006a Russell King   2017-12-29  170  			break;
f10fcbcf91006a Russell King   2017-12-29  171  
f10fcbcf91006a Russell King   2017-12-29  172  		case PORT_TP:
f10fcbcf91006a Russell King   2017-12-29  173  			phylink_set(support, TP);
f10fcbcf91006a Russell King   2017-12-29  174  			break;
f10fcbcf91006a Russell King   2017-12-29  175  		}
f10fcbcf91006a Russell King   2017-12-29  176  	}
f10fcbcf91006a Russell King   2017-12-29  177  
ce0aa27ff3f68e Russell King   2017-07-25  178  	return port;
ce0aa27ff3f68e Russell King   2017-07-25  179  }
ce0aa27ff3f68e Russell King   2017-07-25  180  EXPORT_SYMBOL_GPL(sfp_parse_port);
ce0aa27ff3f68e Russell King   2017-07-25  181  
949e063b3cd9d8 Russell King   2019-11-21  182  /**
949e063b3cd9d8 Russell King   2019-11-21  183   * sfp_may_have_phy() - indicate whether the module may have a PHY
949e063b3cd9d8 Russell King   2019-11-21  184   * @bus: a pointer to the &struct sfp_bus structure for the sfp module
949e063b3cd9d8 Russell King   2019-11-21  185   * @id: a pointer to the module's &struct sfp_eeprom_id
949e063b3cd9d8 Russell King   2019-11-21  186   *
949e063b3cd9d8 Russell King   2019-11-21  187   * Parse the EEPROM identification given in @id, and return whether
949e063b3cd9d8 Russell King   2019-11-21  188   * this module may have a PHY.
949e063b3cd9d8 Russell King   2019-11-21  189   */
949e063b3cd9d8 Russell King   2019-11-21 @190  bool sfp_may_have_phy(struct sfp_bus *bus, const struct sfp_eeprom_id *id)
949e063b3cd9d8 Russell King   2019-11-21  191  {
949e063b3cd9d8 Russell King   2019-11-21  192  	if (id->base.e1000_base_t)
949e063b3cd9d8 Russell King   2019-11-21  193  		return true;
949e063b3cd9d8 Russell King   2019-11-21  194  
949e063b3cd9d8 Russell King   2019-11-21  195  	if (id->base.phys_id != SFF8024_ID_DWDM_SFP) {
949e063b3cd9d8 Russell King   2019-11-21  196  		switch (id->base.extended_cc) {
949e063b3cd9d8 Russell King   2019-11-21  197  		case SFF8024_ECC_10GBASE_T_SFI:
949e063b3cd9d8 Russell King   2019-11-21  198  		case SFF8024_ECC_10GBASE_T_SR:
949e063b3cd9d8 Russell King   2019-11-21  199  		case SFF8024_ECC_5GBASE_T:
949e063b3cd9d8 Russell King   2019-11-21  200  		case SFF8024_ECC_2_5GBASE_T:
949e063b3cd9d8 Russell King   2019-11-21  201  			return true;
949e063b3cd9d8 Russell King   2019-11-21  202  		}
949e063b3cd9d8 Russell King   2019-11-21  203  	}
949e063b3cd9d8 Russell King   2019-11-21  204  
949e063b3cd9d8 Russell King   2019-11-21  205  	return false;
949e063b3cd9d8 Russell King   2019-11-21  206  }
949e063b3cd9d8 Russell King   2019-11-21  207  EXPORT_SYMBOL_GPL(sfp_may_have_phy);
949e063b3cd9d8 Russell King   2019-11-21  208  
0a6fcd3fc14d39 Russell King   2017-12-01  209  /**
0a6fcd3fc14d39 Russell King   2017-12-01  210   * sfp_parse_support() - Parse the eeprom id for supported link modes
0a6fcd3fc14d39 Russell King   2017-12-01  211   * @bus: a pointer to the &struct sfp_bus structure for the sfp module
0a6fcd3fc14d39 Russell King   2017-12-01  212   * @id: a pointer to the module's &struct sfp_eeprom_id
0a6fcd3fc14d39 Russell King   2017-12-01  213   * @support: pointer to an array of unsigned long for the ethtool support mask
0a6fcd3fc14d39 Russell King   2017-12-01  214   *
0a6fcd3fc14d39 Russell King   2017-12-01  215   * Parse the EEPROM identification information and derive the supported
0a6fcd3fc14d39 Russell King   2017-12-01  216   * ethtool link modes for the module.
0a6fcd3fc14d39 Russell King   2017-12-01  217   */
ce0aa27ff3f68e Russell King   2017-07-25 @218  void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
ce0aa27ff3f68e Russell King   2017-07-25  219  		       unsigned long *support)
ce0aa27ff3f68e Russell King   2017-07-25  220  {
9962acf7fb8c5c Russell King   2017-12-29  221  	unsigned int br_min, br_nom, br_max;
03145864bd0fca Russell King   2018-02-27  222  	__ETHTOOL_DECLARE_LINK_MODE_MASK(modes) = { 0, };
ce0aa27ff3f68e Russell King   2017-07-25  223  
9962acf7fb8c5c Russell King   2017-12-29  224  	/* Decode the bitrate information to MBd */
9962acf7fb8c5c Russell King   2017-12-29  225  	br_min = br_nom = br_max = 0;
9962acf7fb8c5c Russell King   2017-12-29  226  	if (id->base.br_nominal) {
9962acf7fb8c5c Russell King   2017-12-29  227  		if (id->base.br_nominal != 255) {
9962acf7fb8c5c Russell King   2017-12-29  228  			br_nom = id->base.br_nominal * 100;
52c5cd1bf0cecf Antoine Tenart 2018-05-04  229  			br_min = br_nom - id->base.br_nominal * id->ext.br_min;
9962acf7fb8c5c Russell King   2017-12-29  230  			br_max = br_nom + id->base.br_nominal * id->ext.br_max;
9962acf7fb8c5c Russell King   2017-12-29  231  		} else if (id->ext.br_max) {
9962acf7fb8c5c Russell King   2017-12-29  232  			br_nom = 250 * id->ext.br_max;
9962acf7fb8c5c Russell King   2017-12-29  233  			br_max = br_nom + br_nom * id->ext.br_min / 100;
9962acf7fb8c5c Russell King   2017-12-29  234  			br_min = br_nom - br_nom * id->ext.br_min / 100;
9962acf7fb8c5c Russell King   2017-12-29  235  		}
2b999ba899059e Antoine Tenart 2018-05-04  236  
2b999ba899059e Antoine Tenart 2018-05-04  237  		/* When using passive cables, in case neither BR,min nor BR,max
2b999ba899059e Antoine Tenart 2018-05-04  238  		 * are specified, set br_min to 0 as the nominal value is then
2b999ba899059e Antoine Tenart 2018-05-04  239  		 * used as the maximum.
2b999ba899059e Antoine Tenart 2018-05-04  240  		 */
2b999ba899059e Antoine Tenart 2018-05-04  241  		if (br_min == br_max && id->base.sfp_ct_passive)
2b999ba899059e Antoine Tenart 2018-05-04  242  			br_min = 0;
9962acf7fb8c5c Russell King   2017-12-29  243  	}
9962acf7fb8c5c Russell King   2017-12-29  244  
ce0aa27ff3f68e Russell King   2017-07-25  245  	/* Set ethtool support from the compliance fields. */
ce0aa27ff3f68e Russell King   2017-07-25  246  	if (id->base.e10g_base_sr)
03145864bd0fca Russell King   2018-02-27  247  		phylink_set(modes, 10000baseSR_Full);
ce0aa27ff3f68e Russell King   2017-07-25  248  	if (id->base.e10g_base_lr)
03145864bd0fca Russell King   2018-02-27  249  		phylink_set(modes, 10000baseLR_Full);
ce0aa27ff3f68e Russell King   2017-07-25  250  	if (id->base.e10g_base_lrm)
03145864bd0fca Russell King   2018-02-27  251  		phylink_set(modes, 10000baseLRM_Full);
ce0aa27ff3f68e Russell King   2017-07-25  252  	if (id->base.e10g_base_er)
03145864bd0fca Russell King   2018-02-27  253  		phylink_set(modes, 10000baseER_Full);
ce0aa27ff3f68e Russell King   2017-07-25  254  	if (id->base.e1000_base_sx ||
ce0aa27ff3f68e Russell King   2017-07-25  255  	    id->base.e1000_base_lx ||
ce0aa27ff3f68e Russell King   2017-07-25  256  	    id->base.e1000_base_cx)
03145864bd0fca Russell King   2018-02-27  257  		phylink_set(modes, 1000baseX_Full);
ce0aa27ff3f68e Russell King   2017-07-25  258  	if (id->base.e1000_base_t) {
03145864bd0fca Russell King   2018-02-27  259  		phylink_set(modes, 1000baseT_Half);
03145864bd0fca Russell King   2018-02-27  260  		phylink_set(modes, 1000baseT_Full);
ce0aa27ff3f68e Russell King   2017-07-25  261  	}
ce0aa27ff3f68e Russell King   2017-07-25  262  
9962acf7fb8c5c Russell King   2017-12-29  263  	/* 1000Base-PX or 1000Base-BX10 */
9962acf7fb8c5c Russell King   2017-12-29  264  	if ((id->base.e_base_px || id->base.e_base_bx10) &&
9962acf7fb8c5c Russell King   2017-12-29  265  	    br_min <= 1300 && br_max >= 1200)
d7f7e0018b96fd Baruch Siach   2018-11-29  266  		phylink_set(modes, 1000baseX_Full);
9962acf7fb8c5c Russell King   2017-12-29  267  
f10fcbcf91006a Russell King   2017-12-29  268  	/* For active or passive cables, select the link modes
f10fcbcf91006a Russell King   2017-12-29  269  	 * based on the bit rates and the cable compliance bytes.
f10fcbcf91006a Russell King   2017-12-29  270  	 */
f10fcbcf91006a Russell King   2017-12-29  271  	if ((id->base.sfp_ct_passive || id->base.sfp_ct_active) && br_nom) {
f10fcbcf91006a Russell King   2017-12-29  272  		/* This may look odd, but some manufacturers use 12000MBd */
f10fcbcf91006a Russell King   2017-12-29  273  		if (br_min <= 12000 && br_max >= 10300)
03145864bd0fca Russell King   2018-02-27  274  			phylink_set(modes, 10000baseCR_Full);
f10fcbcf91006a Russell King   2017-12-29  275  		if (br_min <= 3200 && br_max >= 3100)
03145864bd0fca Russell King   2018-02-27  276  			phylink_set(modes, 2500baseX_Full);
f10fcbcf91006a Russell King   2017-12-29  277  		if (br_min <= 1300 && br_max >= 1200)
03145864bd0fca Russell King   2018-02-27  278  			phylink_set(modes, 1000baseX_Full);
f10fcbcf91006a Russell King   2017-12-29  279  	}
f10fcbcf91006a Russell King   2017-12-29  280  	if (id->base.sfp_ct_passive) {
f10fcbcf91006a Russell King   2017-12-29  281  		if (id->base.passive.sff8431_app_e)
03145864bd0fca Russell King   2018-02-27  282  			phylink_set(modes, 10000baseCR_Full);
f10fcbcf91006a Russell King   2017-12-29  283  	}
f10fcbcf91006a Russell King   2017-12-29  284  	if (id->base.sfp_ct_active) {
f10fcbcf91006a Russell King   2017-12-29  285  		if (id->base.active.sff8431_app_e ||
f10fcbcf91006a Russell King   2017-12-29  286  		    id->base.active.sff8431_lim) {
03145864bd0fca Russell King   2018-02-27  287  			phylink_set(modes, 10000baseCR_Full);
f10fcbcf91006a Russell King   2017-12-29  288  		}
f10fcbcf91006a Russell King   2017-12-29  289  	}
f10fcbcf91006a Russell King   2017-12-29  290  
ce0aa27ff3f68e Russell King   2017-07-25  291  	switch (id->base.extended_cc) {
c83f8d2fce3488 Russell King   2019-09-26  292  	case SFF8024_ECC_UNSPEC:
ce0aa27ff3f68e Russell King   2017-07-25  293  		break;
c83f8d2fce3488 Russell King   2019-09-26  294  	case SFF8024_ECC_100GBASE_SR4_25GBASE_SR:
03145864bd0fca Russell King   2018-02-27  295  		phylink_set(modes, 100000baseSR4_Full);
03145864bd0fca Russell King   2018-02-27  296  		phylink_set(modes, 25000baseSR_Full);
ce0aa27ff3f68e Russell King   2017-07-25  297  		break;
c83f8d2fce3488 Russell King   2019-09-26  298  	case SFF8024_ECC_100GBASE_LR4_25GBASE_LR:
c83f8d2fce3488 Russell King   2019-09-26  299  	case SFF8024_ECC_100GBASE_ER4_25GBASE_ER:
03145864bd0fca Russell King   2018-02-27  300  		phylink_set(modes, 100000baseLR4_ER4_Full);
ce0aa27ff3f68e Russell King   2017-07-25  301  		break;
c83f8d2fce3488 Russell King   2019-09-26  302  	case SFF8024_ECC_100GBASE_CR4:
03145864bd0fca Russell King   2018-02-27  303  		phylink_set(modes, 100000baseCR4_Full);
c83f8d2fce3488 Russell King   2019-09-26  304  		/* fallthrough */
c83f8d2fce3488 Russell King   2019-09-26  305  	case SFF8024_ECC_25GBASE_CR_S:
c83f8d2fce3488 Russell King   2019-09-26  306  	case SFF8024_ECC_25GBASE_CR_N:
03145864bd0fca Russell King   2018-02-27  307  		phylink_set(modes, 25000baseCR_Full);
ce0aa27ff3f68e Russell King   2017-07-25  308  		break;
c83f8d2fce3488 Russell King   2019-09-26  309  	case SFF8024_ECC_10GBASE_T_SFI:
c83f8d2fce3488 Russell King   2019-09-26  310  	case SFF8024_ECC_10GBASE_T_SR:
c83f8d2fce3488 Russell King   2019-09-26  311  		phylink_set(modes, 10000baseT_Full);
c83f8d2fce3488 Russell King   2019-09-26  312  		break;
c83f8d2fce3488 Russell King   2019-09-26  313  	case SFF8024_ECC_5GBASE_T:
c83f8d2fce3488 Russell King   2019-09-26  314  		phylink_set(modes, 5000baseT_Full);
c83f8d2fce3488 Russell King   2019-09-26  315  		break;
c83f8d2fce3488 Russell King   2019-09-26  316  	case SFF8024_ECC_2_5GBASE_T:
c83f8d2fce3488 Russell King   2019-09-26  317  		phylink_set(modes, 2500baseT_Full);
c83f8d2fce3488 Russell King   2019-09-26  318  		break;
ce0aa27ff3f68e Russell King   2017-07-25  319  	default:
ce0aa27ff3f68e Russell King   2017-07-25  320  		dev_warn(bus->sfp_dev,
ce0aa27ff3f68e Russell King   2017-07-25  321  			 "Unknown/unsupported extended compliance code: 0x%02x\n",
ce0aa27ff3f68e Russell King   2017-07-25  322  			 id->base.extended_cc);
ce0aa27ff3f68e Russell King   2017-07-25  323  		break;
ce0aa27ff3f68e Russell King   2017-07-25  324  	}
ce0aa27ff3f68e Russell King   2017-07-25  325  
ce0aa27ff3f68e Russell King   2017-07-25  326  	/* For fibre channel SFP, derive possible BaseX modes */
ce0aa27ff3f68e Russell King   2017-07-25  327  	if (id->base.fc_speed_100 ||
ce0aa27ff3f68e Russell King   2017-07-25  328  	    id->base.fc_speed_200 ||
ce0aa27ff3f68e Russell King   2017-07-25  329  	    id->base.fc_speed_400) {
ce0aa27ff3f68e Russell King   2017-07-25  330  		if (id->base.br_nominal >= 31)
03145864bd0fca Russell King   2018-02-27  331  			phylink_set(modes, 2500baseX_Full);
ce0aa27ff3f68e Russell King   2017-07-25  332  		if (id->base.br_nominal >= 12)
03145864bd0fca Russell King   2018-02-27  333  			phylink_set(modes, 1000baseX_Full);
03145864bd0fca Russell King   2018-02-27  334  	}
03145864bd0fca Russell King   2018-02-27  335  
03145864bd0fca Russell King   2018-02-27  336  	/* If we haven't discovered any modes that this module supports, try
03145864bd0fca Russell King   2018-02-27  337  	 * the encoding and bitrate to determine supported modes. Some BiDi
03145864bd0fca Russell King   2018-02-27  338  	 * modules (eg, 1310nm/1550nm) are not 1000BASE-BX compliant due to
03145864bd0fca Russell King   2018-02-27  339  	 * the differing wavelengths, so do not set any transceiver bits.
03145864bd0fca Russell King   2018-02-27  340  	 */
03145864bd0fca Russell King   2018-02-27  341  	if (bitmap_empty(modes, __ETHTOOL_LINK_MODE_MASK_NBITS)) {
03145864bd0fca Russell King   2018-02-27  342  		/* If the encoding and bit rate allows 1000baseX */
c83f8d2fce3488 Russell King   2019-09-26  343  		if (id->base.encoding == SFF8024_ENCODING_8B10B && br_nom &&
03145864bd0fca Russell King   2018-02-27  344  		    br_min <= 1300 && br_max >= 1200)
03145864bd0fca Russell King   2018-02-27  345  			phylink_set(modes, 1000baseX_Full);
ce0aa27ff3f68e Russell King   2017-07-25  346  	}
03145864bd0fca Russell King   2018-02-27  347  
b34bb2cb5b62c7 Russell King   2019-11-20  348  	if (bus->sfp_quirk)
b34bb2cb5b62c7 Russell King   2019-11-20  349  		bus->sfp_quirk->modes(id, modes);
b34bb2cb5b62c7 Russell King   2019-11-20  350  
03145864bd0fca Russell King   2018-02-27  351  	bitmap_or(support, support, modes, __ETHTOOL_LINK_MODE_MASK_NBITS);
03145864bd0fca Russell King   2018-02-27  352  
03145864bd0fca Russell King   2018-02-27  353  	phylink_set(support, Autoneg);
03145864bd0fca Russell King   2018-02-27  354  	phylink_set(support, Pause);
03145864bd0fca Russell King   2018-02-27  355  	phylink_set(support, Asym_Pause);
ce0aa27ff3f68e Russell King   2017-07-25  356  }
ce0aa27ff3f68e Russell King   2017-07-25  357  EXPORT_SYMBOL_GPL(sfp_parse_support);
ce0aa27ff3f68e Russell King   2017-07-25  358  

:::::: The code at line 121 was first introduced by commit
:::::: ce0aa27ff3f68ed4ea1631d33797e573b3508bfa sfp: add sfp-bus to bridge between network devices and sfp cages

:::::: TO: Russell King <rmk+kernel@armlinux.org.uk>
:::::: CC: David S. Miller <davem@davemloft.net>

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

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

                 reply	other threads:[~2020-02-11 19:10 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=202002120351.5a3gJA7L%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /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.