Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp96882ybh; Mon, 20 Jul 2020 11:13:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwZfooC5pUFWbzhTEnuMVNVF32zDjv5m6CotZ5w5FifxVoBZPdox/nuVlOzdBBxvJR4uWq4 X-Received: by 2002:aa7:d6cf:: with SMTP id x15mr21945405edr.164.1595268825122; Mon, 20 Jul 2020 11:13:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595268825; cv=none; d=google.com; s=arc-20160816; b=jGzyyrb0d0Mxo9D0nCayg5K/yABRhsaPXH5aUx8zEFEkOdxVpsTDOF/Q28uAQ1SCvI etPYpoLHYQh4jw/YUIJWq3Z++465+efhT5Rsz7udoh++YKgeMvxfzVIYpRYhc4+Um9l+ +qTzUcyfyTaIGx5hXAL8odlHJSvyLkR1vOox0pjaKwFGne5CZLFVvXDCwYf9/fYRYmKl RXX4qkAaDfaQXuLF+X3WgWnABFcJe7oQKnuzq4BmgvQo4kCl35BHvLMcIN8JrrcM1VoW LFhisJYQ5Pi4iCUOhmr3V1xAInwWqf9yxssmkJVcU4bszOlaa3dm9I1udf7WnshIApeZ J/mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ZFs0ZRzUSkY/4L/Y3XJm2FIvqqM84UMIcNeGhbTkLow=; b=tHETdNpoFwwKqzvwikp+DEmQ2G/53HVy25biecz8WUU1qlbo+h2ZjX+xKpuAxs3PMx gSual+jkjy4CNqDi9q6TW4Suo70r+4bAayvgBM29Z110TXOtqTF07exXSzSg1olS9M2M sBPzm1dxLQlMzqi1oSNsImbBljU6N5m2nxmJlL31FanzyoD0YgJXOg9gzFVhFoVjWJr8 70K/U3mdDKIFhSLbQZrmHh+m9/lLbuVS8eZiuqCMbqmFgfeD1/eeia53qNTEAkggAi1M uR1zRlKHf/nrL7QTOUHXY9dHDe9jA2huOAbT+mtuPI4QL12HbGzr4iHjpUMFrj964+O0 nxgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=temperror (no key for signature) header.i=@marvell.com header.s=pfpt0818 header.b=Vgxo6j4J; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=marvell.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n23si10518983ejx.656.2020.07.20.11.13.21; Mon, 20 Jul 2020 11:13:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=temperror (no key for signature) header.i=@marvell.com header.s=pfpt0818 header.b=Vgxo6j4J; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=marvell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389313AbgGTSJq (ORCPT + 99 others); Mon, 20 Jul 2020 14:09:46 -0400 Received: from mx0b-0016f401.pphosted.com ([67.231.156.173]:19854 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389299AbgGTSJm (ORCPT ); Mon, 20 Jul 2020 14:09:42 -0400 Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 06KHtqV6024237; Mon, 20 Jul 2020 11:09:36 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0818; bh=ZFs0ZRzUSkY/4L/Y3XJm2FIvqqM84UMIcNeGhbTkLow=; b=Vgxo6j4JrSYLZDzkdLHGNZKWe9d/ZF41LFQIs5PddzQmknLmUC/3nwhZnspu+x/ffdLZ MyxOzvWwH+XpuuFWkIs++1efNCzoKWrGxXpMcZKxDcTXfpRAkBQTWVoT7aqrLEEwUoyt ZqkW9L1uCz6+nuH6S8kiJ86KGQy2Ajhe/dnT9whScni8sRjKgmar/+VJyYFTZ/gRTRpn vwQosnLIiofGo5XstDidpXdjNJAxnM72g2nvtDSG2HkyPZF9j4wbfCBQlxHkKvw74NT9 ymFwC/27deUKnXn8eNDkiYuxKKIz0M0gvHrcOCEYOu8/LlM4/Lea3DqMOvMW+9JBpV87 Dw== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0b-0016f401.pphosted.com with ESMTP id 32c0kkf8ym-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 20 Jul 2020 11:09:36 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 20 Jul 2020 11:09:34 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 20 Jul 2020 11:09:34 -0700 Received: from NN-LT0049.marvell.com (NN-LT0049.marvell.com [10.193.54.6]) by maili.marvell.com (Postfix) with ESMTP id 0EE563F7040; Mon, 20 Jul 2020 11:09:29 -0700 (PDT) From: Alexander Lobakin To: "David S. Miller" , Jakub Kicinski CC: Alexander Lobakin , Igor Russkikh , Michal Kalderon , "Ariel Elior" , Denis Bolotin , "James E.J. Bottomley" , "Martin K. Petersen" , Andrew Lunn , , , , , Subject: [PATCH v3 net-next 10/16] qede: introduce support for FEC control Date: Mon, 20 Jul 2020 21:08:09 +0300 Message-ID: <20200720180815.107-11-alobakin@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200720180815.107-1-alobakin@marvell.com> References: <20200720180815.107-1-alobakin@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235,18.0.687 definitions=2020-07-20_09:2020-07-20,2020-07-20 signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add Ethtool callbacks for querying and setting FEC parameters if it's supported by the underlying qed module and MFW version running on the device. Signed-off-by: Alexander Lobakin Signed-off-by: Igor Russkikh --- .../net/ethernet/qlogic/qede/qede_ethtool.c | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c index fdccceb69632..b9aa6384563b 100644 --- a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c +++ b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c @@ -1834,6 +1834,78 @@ static int qede_set_eee(struct net_device *dev, struct ethtool_eee *edata) return 0; } +static u32 qede_link_to_ethtool_fec(u32 link_fec) +{ + u32 eth_fec = 0; + + if (link_fec & QED_FEC_MODE_NONE) + eth_fec |= ETHTOOL_FEC_OFF; + if (link_fec & QED_FEC_MODE_FIRECODE) + eth_fec |= ETHTOOL_FEC_BASER; + if (link_fec & QED_FEC_MODE_RS) + eth_fec |= ETHTOOL_FEC_RS; + if (link_fec & QED_FEC_MODE_AUTO) + eth_fec |= ETHTOOL_FEC_AUTO; + if (link_fec & QED_FEC_MODE_UNSUPPORTED) + eth_fec |= ETHTOOL_FEC_NONE; + + return eth_fec; +} + +static u32 qede_ethtool_to_link_fec(u32 eth_fec) +{ + u32 link_fec = 0; + + if (eth_fec & ETHTOOL_FEC_OFF) + link_fec |= QED_FEC_MODE_NONE; + if (eth_fec & ETHTOOL_FEC_BASER) + link_fec |= QED_FEC_MODE_FIRECODE; + if (eth_fec & ETHTOOL_FEC_RS) + link_fec |= QED_FEC_MODE_RS; + if (eth_fec & ETHTOOL_FEC_AUTO) + link_fec |= QED_FEC_MODE_AUTO; + if (eth_fec & ETHTOOL_FEC_NONE) + link_fec |= QED_FEC_MODE_UNSUPPORTED; + + return link_fec; +} + +static int qede_get_fecparam(struct net_device *dev, + struct ethtool_fecparam *fecparam) +{ + struct qede_dev *edev = netdev_priv(dev); + struct qed_link_output curr_link; + + memset(&curr_link, 0, sizeof(curr_link)); + edev->ops->common->get_link(edev->cdev, &curr_link); + + fecparam->active_fec = qede_link_to_ethtool_fec(curr_link.active_fec); + fecparam->fec = qede_link_to_ethtool_fec(curr_link.sup_fec); + + return 0; +} + +static int qede_set_fecparam(struct net_device *dev, + struct ethtool_fecparam *fecparam) +{ + struct qede_dev *edev = netdev_priv(dev); + struct qed_link_params params; + + if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) { + DP_INFO(edev, "Link settings are not allowed to be changed\n"); + return -EOPNOTSUPP; + } + + memset(¶ms, 0, sizeof(params)); + params.override_flags |= QED_LINK_OVERRIDE_FEC_CONFIG; + params.fec = qede_ethtool_to_link_fec(fecparam->fec); + params.link_up = true; + + edev->ops->common->set_link(edev->cdev, ¶ms); + + return 0; +} + static int qede_get_module_info(struct net_device *dev, struct ethtool_modinfo *modinfo) { @@ -2070,6 +2142,8 @@ static const struct ethtool_ops qede_ethtool_ops = { .get_module_eeprom = qede_get_module_eeprom, .get_eee = qede_get_eee, .set_eee = qede_set_eee, + .get_fecparam = qede_get_fecparam, + .set_fecparam = qede_set_fecparam, .get_tunable = qede_get_tunable, .set_tunable = qede_set_tunable, .flash_device = qede_flash_device, -- 2.25.1