From: Hao Chen <chenhao418@huawei.com>
Add support to query scc version by devlink info for device V3.
Signed-off-by: Hao Chen <chenhao418@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
---
Documentation/networking/devlink/hns3.rst | 3 ++
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 9 ++++
.../hns3/hns3_common/hclge_comm_cmd.h | 8 ++++
.../hisilicon/hns3/hns3pf/hclge_devlink.c | 44 +++++++++++++++++--
.../hisilicon/hns3/hns3pf/hclge_devlink.h | 2 +
.../hisilicon/hns3/hns3pf/hclge_main.c | 18 ++++++++
.../hisilicon/hns3/hns3pf/hclge_main.h | 1 +
7 files changed, 82 insertions(+), 3 deletions(-)
diff --git a/Documentation/networking/devlink/hns3.rst b/Documentation/networking/devlink/hns3.rst
index 4562a6e4782f..e19dea8ef924 100644
--- a/Documentation/networking/devlink/hns3.rst
+++ b/Documentation/networking/devlink/hns3.rst
@@ -23,3 +23,6 @@ The ``hns3`` driver reports the following versions
* - ``fw``
- running
- Used to represent the firmware version.
+ * - ``fw.scc``
+ - running
+ - Used to represent the soft congestion control firmware version.
diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
index e9266c65b331..7c2c8bea4c06 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
@@ -366,6 +366,15 @@ struct hnae3_vector_info {
#define HNAE3_FW_VERSION_BYTE0_SHIFT 0
#define HNAE3_FW_VERSION_BYTE0_MASK GENMASK(7, 0)
+#define HNAE3_SCC_VERSION_BYTE3_SHIFT 24
+#define HNAE3_SCC_VERSION_BYTE3_MASK GENMASK(31, 24)
+#define HNAE3_SCC_VERSION_BYTE2_SHIFT 16
+#define HNAE3_SCC_VERSION_BYTE2_MASK GENMASK(23, 16)
+#define HNAE3_SCC_VERSION_BYTE1_SHIFT 8
+#define HNAE3_SCC_VERSION_BYTE1_MASK GENMASK(15, 8)
+#define HNAE3_SCC_VERSION_BYTE0_SHIFT 0
+#define HNAE3_SCC_VERSION_BYTE0_MASK GENMASK(7, 0)
+
struct hnae3_ring_chain_node {
struct hnae3_ring_chain_node *next;
u32 tqp_index;
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h
index a2bc5a9adaa3..2c2a2f1e0d7a 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h
@@ -247,6 +247,9 @@ enum hclge_opcode_type {
HCLGE_OPC_QCN_AJUST_INIT = 0x1A07,
HCLGE_OPC_QCN_DFX_CNT_STATUS = 0x1A08,
+ /* SCC commands */
+ HCLGE_OPC_QUERY_SCC_VER = 0x1A84,
+
/* Mailbox command */
HCLGEVF_OPC_MBX_PF_TO_VF = 0x2000,
HCLGEVF_OPC_MBX_VF_TO_PF = 0x2001,
@@ -394,6 +397,11 @@ struct hclge_comm_query_version_cmd {
__le32 caps[HCLGE_COMM_QUERY_CAP_LENGTH]; /* capabilities of device */
};
+struct hclge_comm_query_scc_cmd {
+ __le32 scc_version;
+ u8 rsv[20];
+};
+
#define HCLGE_DESC_DATA_LEN 6
struct hclge_desc {
__le16 opcode;
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c
index 9a939c0b217f..a1571c108678 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c
@@ -5,6 +5,34 @@
#include "hclge_devlink.h"
+static int hclge_devlink_scc_info_get(struct devlink *devlink,
+ struct devlink_info_req *req)
+{
+ struct hclge_devlink_priv *priv = devlink_priv(devlink);
+ char scc_version[HCLGE_DEVLINK_FW_SCC_LEN];
+ struct hclge_dev *hdev = priv->hdev;
+ u32 scc_version_tmp;
+ int ret;
+
+ ret = hclge_query_scc_version(hdev, &scc_version_tmp);
+ if (ret) {
+ dev_err(&hdev->pdev->dev,
+ "failed to get scc version, ret = %d\n", ret);
+ return ret;
+ }
+
+ snprintf(scc_version, sizeof(scc_version), "%lu.%lu.%lu.%lu",
+ hnae3_get_field(scc_version_tmp, HNAE3_SCC_VERSION_BYTE3_MASK,
+ HNAE3_FW_VERSION_BYTE3_SHIFT),
+ hnae3_get_field(scc_version_tmp, HNAE3_SCC_VERSION_BYTE2_MASK,
+ HNAE3_FW_VERSION_BYTE2_SHIFT),
+ hnae3_get_field(scc_version_tmp, HNAE3_SCC_VERSION_BYTE1_MASK,
+ HNAE3_FW_VERSION_BYTE1_SHIFT),
+ hnae3_get_field(scc_version_tmp, HNAE3_SCC_VERSION_BYTE0_MASK,
+ HNAE3_FW_VERSION_BYTE0_SHIFT));
+ return devlink_info_version_running_put(req, "fw.scc", scc_version);
+}
+
static int hclge_devlink_info_get(struct devlink *devlink,
struct devlink_info_req *req,
struct netlink_ext_ack *extack)
@@ -13,6 +41,7 @@ static int hclge_devlink_info_get(struct devlink *devlink,
struct hclge_devlink_priv *priv = devlink_priv(devlink);
char version_str[HCLGE_DEVLINK_FW_STRING_LEN];
struct hclge_dev *hdev = priv->hdev;
+ int ret;
snprintf(version_str, sizeof(version_str), "%lu.%lu.%lu.%lu",
hnae3_get_field(hdev->fw_version, HNAE3_FW_VERSION_BYTE3_MASK,
@@ -24,9 +53,18 @@ static int hclge_devlink_info_get(struct devlink *devlink,
hnae3_get_field(hdev->fw_version, HNAE3_FW_VERSION_BYTE0_MASK,
HNAE3_FW_VERSION_BYTE0_SHIFT));
- return devlink_info_version_running_put(req,
- DEVLINK_INFO_VERSION_GENERIC_FW,
- version_str);
+ ret = devlink_info_version_running_put(req,
+ DEVLINK_INFO_VERSION_GENERIC_FW,
+ version_str);
+ if (ret) {
+ dev_err(&hdev->pdev->dev, "failed to set running version of fw\n");
+ return ret;
+ }
+
+ if (hdev->pdev->revision > HNAE3_DEVICE_VERSION_V2)
+ ret = hclge_devlink_scc_info_get(devlink, req);
+
+ return ret;
}
static int hclge_devlink_reload_down(struct devlink *devlink, bool netns_change,
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.h
index 918be04507a5..148effa5ea89 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.h
@@ -6,6 +6,8 @@
#include "hclge_main.h"
+#define HCLGE_DEVLINK_FW_SCC_LEN 32
+
struct hclge_devlink_priv {
struct hclge_dev *hdev;
};
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index eb31a7e9c8fc..28336cf17170 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -10883,6 +10883,24 @@ static u32 hclge_get_fw_version(struct hnae3_handle *handle)
return hdev->fw_version;
}
+int hclge_query_scc_version(struct hclge_dev *hdev, u32 *scc_version)
+{
+ struct hclge_comm_query_scc_cmd *resp;
+ struct hclge_desc desc;
+ int ret;
+
+ hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_SCC_VER, 1);
+ resp = (struct hclge_comm_query_scc_cmd *)desc.data;
+
+ ret = hclge_cmd_send(&hdev->hw, &desc, 1);
+ if (ret)
+ return ret;
+
+ *scc_version = le32_to_cpu(resp->scc_version);
+
+ return 0;
+}
+
static void hclge_set_flowctrl_adv(struct hclge_dev *hdev, u32 rx_en, u32 tx_en)
{
struct phy_device *phydev = hdev->hw.mac.phydev;
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
index e821dd2f1528..df3c10098349 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
@@ -1169,4 +1169,5 @@ int hclge_enable_vport_vlan_filter(struct hclge_vport *vport, bool request_en);
int hclge_mac_update_stats(struct hclge_dev *hdev);
struct hclge_vport *hclge_get_vf_vport(struct hclge_dev *hdev, int vf);
int hclge_inform_vf_reset(struct hclge_vport *vport, u16 reset_type);
+int hclge_query_scc_version(struct hclge_dev *hdev, u32 *scc_version);
#endif
--
2.30.0
Wed, Apr 10, 2024 at 02:53:54PM CEST, shaojijie@huawei.com wrote: >From: Hao Chen <chenhao418@huawei.com> > >Add support to query scc version by devlink info for device V3. > >Signed-off-by: Hao Chen <chenhao418@huawei.com> >Signed-off-by: Jijie Shao <shaojijie@huawei.com> >--- > Documentation/networking/devlink/hns3.rst | 3 ++ > drivers/net/ethernet/hisilicon/hns3/hnae3.h | 9 ++++ > .../hns3/hns3_common/hclge_comm_cmd.h | 8 ++++ > .../hisilicon/hns3/hns3pf/hclge_devlink.c | 44 +++++++++++++++++-- > .../hisilicon/hns3/hns3pf/hclge_devlink.h | 2 + > .../hisilicon/hns3/hns3pf/hclge_main.c | 18 ++++++++ > .../hisilicon/hns3/hns3pf/hclge_main.h | 1 + > 7 files changed, 82 insertions(+), 3 deletions(-) > >diff --git a/Documentation/networking/devlink/hns3.rst b/Documentation/networking/devlink/hns3.rst >index 4562a6e4782f..e19dea8ef924 100644 >--- a/Documentation/networking/devlink/hns3.rst >+++ b/Documentation/networking/devlink/hns3.rst >@@ -23,3 +23,6 @@ The ``hns3`` driver reports the following versions > * - ``fw`` > - running > - Used to represent the firmware version. >+ * - ``fw.scc`` What's scc? I don't see it described anywhere.
on 2024/4/10 22:59, Jiri Pirko wrote:
> Wed, Apr 10, 2024 at 02:53:54PM CEST, shaojijie@huawei.com wrote:
>> From: Hao Chen <chenhao418@huawei.com>
>>
>> Add support to query scc version by devlink info for device V3.
>>
>> Signed-off-by: Hao Chen <chenhao418@huawei.com>
>> Signed-off-by: Jijie Shao <shaojijie@huawei.com>
>> ---
>> Documentation/networking/devlink/hns3.rst | 3 ++
>> drivers/net/ethernet/hisilicon/hns3/hnae3.h | 9 ++++
>> .../hns3/hns3_common/hclge_comm_cmd.h | 8 ++++
>> .../hisilicon/hns3/hns3pf/hclge_devlink.c | 44 +++++++++++++++++--
>> .../hisilicon/hns3/hns3pf/hclge_devlink.h | 2 +
>> .../hisilicon/hns3/hns3pf/hclge_main.c | 18 ++++++++
>> .../hisilicon/hns3/hns3pf/hclge_main.h | 1 +
>> 7 files changed, 82 insertions(+), 3 deletions(-)
>>
>> diff --git a/Documentation/networking/devlink/hns3.rst b/Documentation/networking/devlink/hns3.rst
>> index 4562a6e4782f..e19dea8ef924 100644
>> --- a/Documentation/networking/devlink/hns3.rst
>> +++ b/Documentation/networking/devlink/hns3.rst
>> @@ -23,3 +23,6 @@ The ``hns3`` driver reports the following versions
>> * - ``fw``
>> - running
>> - Used to represent the firmware version.
>> + * - ``fw.scc``
> What's scc? I don't see it described anywhere.
diff --git a/Documentation/networking/devlink/hns3.rst b/Documentation/networking/devlink/hns3.rst
index 4562a6e4782f..e19dea8ef924 100644
--- a/Documentation/networking/devlink/hns3.rst
+++ b/Documentation/networking/devlink/hns3.rst
@@ -23,3 +23,6 @@ The ``hns3`` driver reports the following versions
* - ``fw``
- running
- Used to represent the firmware version.
+ * - ``fw.scc``
+ - running
+ - Used to represent the soft congestion control firmware version.
scc means "soft congestion control"
Thu, Apr 11, 2024 at 03:05:53AM CEST, shaojijie@huawei.com wrote: > >on 2024/4/10 22:59, Jiri Pirko wrote: >> Wed, Apr 10, 2024 at 02:53:54PM CEST, shaojijie@huawei.com wrote: >> > From: Hao Chen <chenhao418@huawei.com> >> > >> > Add support to query scc version by devlink info for device V3. >> > >> > Signed-off-by: Hao Chen <chenhao418@huawei.com> >> > Signed-off-by: Jijie Shao <shaojijie@huawei.com> >> > --- >> > Documentation/networking/devlink/hns3.rst | 3 ++ >> > drivers/net/ethernet/hisilicon/hns3/hnae3.h | 9 ++++ >> > .../hns3/hns3_common/hclge_comm_cmd.h | 8 ++++ >> > .../hisilicon/hns3/hns3pf/hclge_devlink.c | 44 +++++++++++++++++-- >> > .../hisilicon/hns3/hns3pf/hclge_devlink.h | 2 + >> > .../hisilicon/hns3/hns3pf/hclge_main.c | 18 ++++++++ >> > .../hisilicon/hns3/hns3pf/hclge_main.h | 1 + >> > 7 files changed, 82 insertions(+), 3 deletions(-) >> > >> > diff --git a/Documentation/networking/devlink/hns3.rst b/Documentation/networking/devlink/hns3.rst >> > index 4562a6e4782f..e19dea8ef924 100644 >> > --- a/Documentation/networking/devlink/hns3.rst >> > +++ b/Documentation/networking/devlink/hns3.rst >> > @@ -23,3 +23,6 @@ The ``hns3`` driver reports the following versions >> > * - ``fw`` >> > - running >> > - Used to represent the firmware version. >> > + * - ``fw.scc`` >> What's scc? I don't see it described anywhere. > >diff --git a/Documentation/networking/devlink/hns3.rst b/Documentation/networking/devlink/hns3.rst >index 4562a6e4782f..e19dea8ef924 100644 >--- a/Documentation/networking/devlink/hns3.rst >+++ b/Documentation/networking/devlink/hns3.rst >@@ -23,3 +23,6 @@ The ``hns3`` driver reports the following versions > * - ``fw`` > - running > - Used to represent the firmware version. >+ * - ``fw.scc`` >+ - running >+ - Used to represent the soft congestion control firmware version. > >scc means "soft congestion control" I guess this is something specific to your device, isn't it? Can't you please extend the description a bit more? Thanks! >
on 2024/4/11 14:23, Jiri Pirko wrote: > Thu, Apr 11, 2024 at 03:05:53AM CEST, shaojijie@huawei.com wrote: >> on 2024/4/10 22:59, Jiri Pirko wrote: >>> Wed, Apr 10, 2024 at 02:53:54PM CEST, shaojijie@huawei.com wrote: >>>> From: Hao Chen <chenhao418@huawei.com> >>>> >>>> Add support to query scc version by devlink info for device V3. >>>> >>>> Signed-off-by: Hao Chen <chenhao418@huawei.com> >>>> Signed-off-by: Jijie Shao <shaojijie@huawei.com> >>>> --- >>>> Documentation/networking/devlink/hns3.rst | 3 ++ >>>> drivers/net/ethernet/hisilicon/hns3/hnae3.h | 9 ++++ >>>> .../hns3/hns3_common/hclge_comm_cmd.h | 8 ++++ >>>> .../hisilicon/hns3/hns3pf/hclge_devlink.c | 44 +++++++++++++++++-- >>>> .../hisilicon/hns3/hns3pf/hclge_devlink.h | 2 + >>>> .../hisilicon/hns3/hns3pf/hclge_main.c | 18 ++++++++ >>>> .../hisilicon/hns3/hns3pf/hclge_main.h | 1 + >>>> 7 files changed, 82 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/Documentation/networking/devlink/hns3.rst b/Documentation/networking/devlink/hns3.rst >>>> index 4562a6e4782f..e19dea8ef924 100644 >>>> --- a/Documentation/networking/devlink/hns3.rst >>>> +++ b/Documentation/networking/devlink/hns3.rst >>>> @@ -23,3 +23,6 @@ The ``hns3`` driver reports the following versions >>>> * - ``fw`` >>>> - running >>>> - Used to represent the firmware version. >>>> + * - ``fw.scc`` >>> What's scc? I don't see it described anywhere. >> diff --git a/Documentation/networking/devlink/hns3.rst b/Documentation/networking/devlink/hns3.rst >> index 4562a6e4782f..e19dea8ef924 100644 >> --- a/Documentation/networking/devlink/hns3.rst >> +++ b/Documentation/networking/devlink/hns3.rst >> @@ -23,3 +23,6 @@ The ``hns3`` driver reports the following versions >> * - ``fw`` >> - running >> - Used to represent the firmware version. >> + * - ``fw.scc`` >> + - running >> + - Used to represent the soft congestion control firmware version. >> >> scc means "soft congestion control" > I guess this is something specific to your device, isn't it? Can't you > please extend the description a bit more? > > Thanks! > SCC is a firmware which provides multiple congestion control algorithms, including dcqcn. Congestion control is a mechanism that controls the entry of rdma packets into the network, enabling a better use of a shared network infrastructure and avoiding congestive collapse. Jijie Shao
On Fri, 12 Apr 2024 15:12:17 +0800 Jijie Shao wrote: > >> + * - ``fw.scc`` > >> + - running > >> + - Used to represent the soft congestion control firmware version. > >> > >> scc means "soft congestion control" > > I guess this is something specific to your device, isn't it? Can't you > > please extend the description a bit more? > > > SCC is a firmware which provides multiple congestion control algorithms, including dcqcn. > Congestion control is a mechanism that controls the entry of rdma packets into the network, > enabling a better use of a shared network infrastructure and avoiding congestive collapse. Thanks, I'll amend the patch with a condensed version of this info. Otherwise I feel like we'll need another 3 revisions to polish it..
© 2016 - 2026 Red Hat, Inc.