lkml.org 
[lkml]   [2024]   [Feb]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[net-next PatchV3] octeontx2-pf: Add support to read eeprom information
    Date
    Add support to read/decode EEPROM module information using ethtool.
    Usage: ethtool -m <interface>

    Signed-off-by: Hariprasad Kelam <hkelam@marvell.com>
    Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
    ---
    V3 * remove redundant checks as stack is already doing it.
    V2 * consider length and offset fields while copying
    the eeprom data.

    .../marvell/octeontx2/nic/otx2_ethtool.c | 34 +++++++++++++++++++
    1 file changed, 34 insertions(+)

    diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c
    index 7f786de61014..55ec0792038f 100644
    --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c
    +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c
    @@ -1184,6 +1184,38 @@ static void otx2_get_link_mode_info(u64 link_mode_bmap,
    otx2_link_modes);
    }

    +static int otx2_get_module_info(struct net_device *netdev,
    + struct ethtool_modinfo *modinfo)
    +{
    + struct otx2_nic *pfvf = netdev_priv(netdev);
    + struct cgx_fw_data *rsp;
    +
    + rsp = otx2_get_fwdata(pfvf);
    + if (IS_ERR(rsp))
    + return PTR_ERR(rsp);
    +
    + modinfo->type = rsp->fwdata.sfp_eeprom.sff_id;
    + modinfo->eeprom_len = SFP_EEPROM_SIZE;
    + return 0;
    +}
    +
    +static int otx2_get_module_eeprom(struct net_device *netdev,
    + struct ethtool_eeprom *ee,
    + u8 *data)
    +{
    + struct otx2_nic *pfvf = netdev_priv(netdev);
    + struct cgx_fw_data *rsp;
    +
    + memset(data, 0, ee->len);
    +
    + rsp = otx2_get_fwdata(pfvf);
    + if (IS_ERR(rsp))
    + return PTR_ERR(rsp);
    +
    + memcpy(data, &rsp->fwdata.sfp_eeprom.buf + ee->offset, ee->len);
    + return 0;
    +}
    +
    static int otx2_get_link_ksettings(struct net_device *netdev,
    struct ethtool_link_ksettings *cmd)
    {
    @@ -1342,6 +1374,8 @@ static const struct ethtool_ops otx2_ethtool_ops = {
    .set_fecparam = otx2_set_fecparam,
    .get_link_ksettings = otx2_get_link_ksettings,
    .set_link_ksettings = otx2_set_link_ksettings,
    + .get_module_info = otx2_get_module_info,
    + .get_module_eeprom = otx2_get_module_eeprom,
    };

    void otx2_set_ethtool_ops(struct net_device *netdev)
    --
    2.17.1
    \
     
     \ /
      Last update: 2024-05-27 15:24    [W:3.602 / U:0.544 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site