lkml.org 
[lkml]   [2019]   [Jul]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 33/80] bnx2x: Check if transceiver implements DDM before access
    Date
    [ Upstream commit cf18cecca911c0db96b868072665347efe6df46f ]

    Some transceivers may comply with SFF-8472 even though they do not
    implement the Digital Diagnostic Monitoring (DDM) interface described in
    the spec. The existence of such area is specified by the 6th bit of byte
    92, set to 1 if implemented.

    Currently, without checking this bit, bnx2x fails trying to read sfp
    module's EEPROM with the follow message:

    ethtool -m enP5p1s0f1
    Cannot get Module EEPROM data: Input/output error

    Because it fails to read the additional 256 bytes in which it is assumed
    to exist the DDM data.

    This issue was noticed using a Mellanox Passive DAC PN 01FT738. The EEPROM
    data was confirmed by Mellanox as correct and similar to other Passive
    DACs from other manufacturers.

    Signed-off-by: Mauro S. M. Rodrigues <maurosr@linux.vnet.ibm.com>
    Acked-by: Sudarsana Reddy Kalluru <skalluru@marvell.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 3 ++-
    drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h | 1 +
    2 files changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
    index 3fd1085a093f..65bc1929d1a8 100644
    --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
    +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
    @@ -1581,7 +1581,8 @@ static int bnx2x_get_module_info(struct net_device *dev,
    }

    if (!sff8472_comp ||
    - (diag_type & SFP_EEPROM_DIAG_ADDR_CHANGE_REQ)) {
    + (diag_type & SFP_EEPROM_DIAG_ADDR_CHANGE_REQ) ||
    + !(diag_type & SFP_EEPROM_DDM_IMPLEMENTED)) {
    modinfo->type = ETH_MODULE_SFF_8079;
    modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
    } else {
    diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
    index b7d251108c19..7115f5025664 100644
    --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
    +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
    @@ -62,6 +62,7 @@
    #define SFP_EEPROM_DIAG_TYPE_ADDR 0x5c
    #define SFP_EEPROM_DIAG_TYPE_SIZE 1
    #define SFP_EEPROM_DIAG_ADDR_CHANGE_REQ (1<<2)
    +#define SFP_EEPROM_DDM_IMPLEMENTED (1<<6)
    #define SFP_EEPROM_SFF_8472_COMP_ADDR 0x5e
    #define SFP_EEPROM_SFF_8472_COMP_SIZE 1

    --
    2.20.1


    \
     
     \ /
      Last update: 2019-07-18 05:10    [W:4.148 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site