From patchwork Thu Apr 17 07:57:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erni Sri Satya Vennela X-Patchwork-Id: 14055075 X-Patchwork-Delegate: kuba@kernel.org Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5F06021D3F1; Thu, 17 Apr 2025 07:57:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744876639; cv=none; b=dHQasFGitIDiCEqGgnkykgY9UwevNvh04CGE3rRoiNLuBDUYgbgan0nnKM4gV8m74ZH5QSIK0O80J1eCPC+ClrQu6ZZeIRRKtvGlarcHDj03x59acIISuv64RRYitf5JHPzuJF5v1LhjZY0EbOE2ccUCOFfMA604Owr4VSg7dTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744876639; c=relaxed/simple; bh=piukZZwcrVubGWtJI548aRZkwwRSyFcdJDhG7R+/jq4=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References; b=luPoZEPyULLTacPLIihKv8+S2qJ02IPhYPO+wDfuZnHSCSd07AP+jKE9/EGKaY5mr4zu2shU56JIOE7rgmeCvt+UNLGmloZwEjMEthnjbiA8a0qzUSiymYA5txrSlwqEINt5Zky3DyVp+5/2loE4ETS+EAl/b+fWZLWROnrg06I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=QWrbUBK7; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="QWrbUBK7" Received: by linux.microsoft.com (Postfix, from userid 1173) id EE87221199C9; Thu, 17 Apr 2025 00:57:17 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com EE87221199C9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1744876637; bh=+ycvvCSijIfwjyXyFMhiCSd9PbVcc2StTLb7Yf0i3J4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=QWrbUBK7UqMroKc5i3jLkIjF3qEFn1tB0x+H1TYCu8/Iy/8bvG9hGk/zNgaxknnb/ gOoQ6EOTglINGgshgcD4JnMuWR8Ei3PBS1pNOjcfDFaKHHGJnb55XU8StBAT1MWuX/ lmKsVkh3Q5GD/lF7055hKIZDkzJZ9uddj36latHk= From: Erni Sri Satya Vennela To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, longli@microsoft.com, kotaranov@microsoft.com, horms@kernel.org, kent.overstreet@linux.dev, brett.creeley@amd.com, schakrabarti@linux.microsoft.com, ernis@linux.microsoft.com, shradhagupta@linux.microsoft.com, ssengar@linux.microsoft.com, rosenp@gmail.com, paulros@microsoft.com, linux-hyperv@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org Subject: [PATCH 1/3] net: mana: Add speed support in mana_get_link_ksettings Date: Thu, 17 Apr 2025 00:57:08 -0700 Message-Id: <1744876630-26918-2-git-send-email-ernis@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1744876630-26918-1-git-send-email-ernis@linux.microsoft.com> References: <1744876630-26918-1-git-send-email-ernis@linux.microsoft.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: X-Patchwork-Delegate: kuba@kernel.org Add support for speed in mana ethtool get_link_ksettings operation. This feature is not supported by all hardware. Signed-off-by: Erni Sri Satya Vennela Reviewed-by: Shradha Gupta Reviewed-by: Haiyang Zhang --- drivers/net/ethernet/microsoft/mana/mana_en.c | 42 +++++++++++++++++++ .../ethernet/microsoft/mana/mana_ethtool.c | 6 +++ include/net/mana/mana.h | 17 ++++++++ 3 files changed, 65 insertions(+) diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c index 2bac6be8f6a0..ba550fc7ece0 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_en.c +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c @@ -1156,6 +1156,48 @@ static int mana_cfg_vport_steering(struct mana_port_context *apc, return err; } +int mana_query_link_cfg(struct mana_port_context *apc) +{ + struct net_device *ndev = apc->ndev; + struct mana_query_link_config_resp resp = {}; + struct mana_query_link_config_req req = {}; + int err; + + mana_gd_init_req_hdr(&req.hdr, MANA_QUERY_LINK_CONFIG, + sizeof(req), sizeof(resp)); + + req.vport = apc->port_handle; + + err = mana_send_request(apc->ac, &req, sizeof(req), &resp, + sizeof(resp)); + + if (err) { + netdev_err(ndev, "Failed to query link config: %d\n", err); + goto out; + } + + err = mana_verify_resp_hdr(&resp.hdr, MANA_QUERY_LINK_CONFIG, + sizeof(resp)); + + if (err || resp.hdr.status) { + netdev_err(ndev, "Failed to query link config: %d, 0x%x\n", err, + resp.hdr.status); + if (!err) + err = -EPROTO; + goto out; + } + + if (resp.qos_unconfigured) { + err = -EINVAL; + goto out; + } + apc->speed = resp.link_speed_mbps; + return 0; + +out: + return err; +} + int mana_create_wq_obj(struct mana_port_context *apc, mana_handle_t vport, u32 wq_type, struct mana_obj_spec *wq_spec, diff --git a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c index c419626073f5..48234a738d26 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c +++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c @@ -427,6 +427,12 @@ static int mana_set_ringparam(struct net_device *ndev, static int mana_get_link_ksettings(struct net_device *ndev, struct ethtool_link_ksettings *cmd) { + struct mana_port_context *apc = netdev_priv(ndev); + int err; + + err = mana_query_link_cfg(apc); + + cmd->base.speed = (err) ? SPEED_UNKNOWN : apc->speed; cmd->base.duplex = DUPLEX_FULL; cmd->base.port = PORT_OTHER; diff --git a/include/net/mana/mana.h b/include/net/mana/mana.h index 0f78065de8fe..63193613c185 100644 --- a/include/net/mana/mana.h +++ b/include/net/mana/mana.h @@ -468,6 +468,8 @@ struct mana_port_context { u16 port_idx; + u32 speed; + bool port_is_up; bool port_st_save; /* Saved port state */ @@ -497,6 +499,7 @@ struct bpf_prog *mana_xdp_get(struct mana_port_context *apc); void mana_chn_setxdp(struct mana_port_context *apc, struct bpf_prog *prog); int mana_bpf(struct net_device *ndev, struct netdev_bpf *bpf); void mana_query_gf_stats(struct mana_port_context *apc); +int mana_query_link_cfg(struct mana_port_context *apc); int mana_pre_alloc_rxbufs(struct mana_port_context *apc, int mtu, int num_queues); void mana_pre_dealloc_rxbufs(struct mana_port_context *apc); @@ -523,6 +526,7 @@ enum mana_command_code { MANA_FENCE_RQ = 0x20006, MANA_CONFIG_VPORT_RX = 0x20007, MANA_QUERY_VPORT_CONFIG = 0x20008, + MANA_QUERY_LINK_CONFIG = 0x2000A, /* Privileged commands for the PF mode */ MANA_REGISTER_FILTER = 0x28000, @@ -531,6 +535,19 @@ enum mana_command_code { MANA_DEREGISTER_HW_PORT = 0x28004, }; +/* Query Link Configuration*/ +struct mana_query_link_config_req { + struct gdma_req_hdr hdr; + mana_handle_t vport; +}; /* HW DATA */ + +struct mana_query_link_config_resp { + struct gdma_resp_hdr hdr; + u32 link_speed_mbps; + u8 qos_unconfigured; + u8 reserved[3]; +}; /* HW DATA */ + /* Query Device Configuration */ struct mana_query_device_cfg_req { struct gdma_req_hdr hdr; From patchwork Thu Apr 17 07:57:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erni Sri Satya Vennela X-Patchwork-Id: 14055077 X-Patchwork-Delegate: kuba@kernel.org Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8769722423C; Thu, 17 Apr 2025 07:57:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744876642; cv=none; b=gVaqrh5YdFmvXujON0ykpnDYpcGoqe97kSmjLxv0PJeBFwRssrHsfRZEXV/xfAmyXB8lE+4uyNPChxUbRygG0w3h2qXgjNXy9knmolzz3noXFbyMyTo1IUO8c6uOfOUDC9u2tAc2rpOEB6t8rQH0aq83GU3Kt7FkxfNT9mu13tc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744876642; c=relaxed/simple; bh=69IV9j1CnaWOQX9Nu+KovtxIy/CCWYCi7b9fxKJN8C0=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References; b=s4vlHs5MCPwF03KDIWhP6WakzEfJ3Th1Z+rKoxe8nYaOmf9gs8nMyqzukYsLfgbgvIY/T2JnV7abrpQbXEjsaNDT+ZS60rwKxg9vGzCg+luHYRoJcHEyaY8VFNM72daKKq9RxF9Z6tkLs7or0crURTxCApcAIt9wiuWoCqFYXkI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=HQhlwyIc; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="HQhlwyIc" Received: by linux.microsoft.com (Postfix, from userid 1173) id 2D2B921199C8; Thu, 17 Apr 2025 00:57:19 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 2D2B921199C8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1744876639; bh=ikqgemc/xaYJTjIbCudC8PpR3P2K//U5qVWjUkDNlzE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=HQhlwyIcsCxvmh8MFQgZ22wFHR/rxqDnkodAKIyUlf/uo256Xh3VK+U09oX7q4WxP kDs1lsZ2d8VYpegjjmEnXPHttGcgpgm/qu/gnOBzUNPSH+mjDR0wDPsA9bv1HSBn9k 1LjlkcaMdiHNpOJLOXj6yTjGViHCt48ogzCp7LuI= From: Erni Sri Satya Vennela To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, longli@microsoft.com, kotaranov@microsoft.com, horms@kernel.org, kent.overstreet@linux.dev, brett.creeley@amd.com, schakrabarti@linux.microsoft.com, ernis@linux.microsoft.com, shradhagupta@linux.microsoft.com, ssengar@linux.microsoft.com, rosenp@gmail.com, paulros@microsoft.com, linux-hyperv@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org Subject: [PATCH 2/3] net: mana: Add sched HTB offload support Date: Thu, 17 Apr 2025 00:57:09 -0700 Message-Id: <1744876630-26918-3-git-send-email-ernis@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1744876630-26918-1-git-send-email-ernis@linux.microsoft.com> References: <1744876630-26918-1-git-send-email-ernis@linux.microsoft.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: X-Patchwork-Delegate: kuba@kernel.org Introduce support for HTB qdisc offload in the mana ethernet controller. This controller can offload only one HTB leaf. The HTB leaf supports clamping the bandwidth for egress traffic. It uses the function mana_set_bw_clamp(), which internally calls a HWC command to the hardware to set the speed. The minimum bandwidth is 100 Mbps, and only multiples of 100 Mbps are handled by the hardware. When the HTB leaf/root is deleted, the speed will be reset to maximum bandwidth supported by the SKU. This feature is not supported by all hardware. Steps to configure speed: Add the root qdisc $tc qdisc add dev enP30832s1 root handle 1: htb offload Add the class with required rate $tc class add dev enP30832s1 parent 1: classid 1:1 htb rate 1000mbit Display class details $tc class show dev enP30832s1 classid 1:1 >class htb 1:1 root prio 0 rate 1Gbit ceil 1Gbit >burst 1375b cburst 1375b offload Display port information using ethtool $ethtool enP30832s1 >Settings for enP30832s1: Supported ports: [ ] Supported link modes: Not reported Supported pause frame use: No Supports auto-negotiation: No Supported FEC modes: Not reported Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: No Advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Auto-negotiation: off Port: Other PHYAD: 0 Transceiver: internal Link detected: yes Delete class $tc class del dev enP30832s1 classid 1:1 Delete root qdisc (If used alone, also deletes the attached class) $tc qdisc del dev enP30832s1 root Signed-off-by: Erni Sri Satya Vennela Reviewed-by: Shradha Gupta Reviewed-by: Haiyang Zhang --- drivers/net/ethernet/microsoft/mana/mana_en.c | 138 ++++++++++++++++++ include/net/mana/mana.h | 19 +++ 2 files changed, 157 insertions(+) diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c index ba550fc7ece0..5b62f1443716 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_en.c +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c @@ -16,10 +16,13 @@ #include #include #include +#include #include #include +#define MIN_BANDWIDTH 100 + static DEFINE_IDA(mana_adev_ida); static int mana_adev_idx_alloc(void) @@ -719,6 +722,99 @@ static int mana_change_mtu(struct net_device *ndev, int new_mtu) return err; } +static int mana_tc_htb_handle_leaf_queue(struct mana_port_context *mpc, + struct tc_htb_qopt_offload *opt, + bool alloc) +{ + u32 rate, old_speed; + int err; + + if (opt->command == TC_HTB_LEAF_ALLOC_QUEUE) { + if (opt->parent_classid != TC_HTB_CLASSID_ROOT) { + NL_SET_ERR_MSG_MOD(opt->extack, "invalid parent classid"); + return -EINVAL; + } else if (mpc->classid) { + NL_SET_ERR_MSG_MOD(opt->extack, "Cannot create multiple classes"); + return -EOPNOTSUPP; + } + mpc->classid = opt->classid; + } + + rate = div_u64(opt->rate, 1000) << 3; //Convert Bps to Kbps + rate = div_u64(rate, 1000); //Convert Kbps to Mbps + + /*Get current speed*/ + err = mana_query_link_cfg(mpc); + old_speed = (err) ? SPEED_UNKNOWN : mpc->speed; + + if (!err) { + if (alloc) { + /*Support only multiples of 100Mbps for rate parameter*/ + rate = max(rate, MIN_BANDWIDTH); + rate = rounddown(rate, MIN_BANDWIDTH); + + err = mana_set_bw_clamp(mpc, rate, TRI_STATE_TRUE); + mpc->speed = (err) ? old_speed : rate; + } else { + err = mana_set_bw_clamp(mpc, rate, TRI_STATE_FALSE); + mpc->classid = (err) ? : 0; + } + } + + return err; +} + +static int mana_create_tc_htb(struct mana_port_context *mpc) +{ + int err; + + /*Check for hardware support*/ + err = mana_query_link_cfg(mpc); + if (err == -EINVAL) + netdev_info(mpc->ndev, "QoS is not configured yet\n"); + + return err; +} + +static int mana_tc_setup_htb(struct mana_port_context *mpc, + struct tc_htb_qopt_offload *opt) +{ + int err; + + switch (opt->command) { + case TC_HTB_CREATE: + err = mana_create_tc_htb(mpc); + return err; + case TC_HTB_NODE_MODIFY: + case TC_HTB_LEAF_ALLOC_QUEUE: + err = mana_tc_htb_handle_leaf_queue(mpc, opt, 1); + return err; + case TC_HTB_DESTROY: + case TC_HTB_LEAF_DEL: + case TC_HTB_LEAF_DEL_LAST: + case TC_HTB_LEAF_DEL_LAST_FORCE: + return mana_tc_htb_handle_leaf_queue(mpc, opt, 0); + case TC_HTB_LEAF_QUERY_QUEUE: + break; + default: + return -EOPNOTSUPP; + } + return 0; +} + +static int mana_setup_tc(struct net_device *dev, enum tc_setup_type type, + void *type_data) +{ + struct mana_port_context *mpc = netdev_priv(dev); + + switch (type) { + case TC_SETUP_QDISC_HTB: + return mana_tc_setup_htb(mpc, type_data); + default: + return -EOPNOTSUPP; + } +} + static const struct net_device_ops mana_devops = { .ndo_open = mana_open, .ndo_stop = mana_close, @@ -729,6 +825,7 @@ static const struct net_device_ops mana_devops = { .ndo_bpf = mana_bpf, .ndo_xdp_xmit = mana_xdp_xmit, .ndo_change_mtu = mana_change_mtu, + .ndo_setup_tc = mana_setup_tc, }; static void mana_cleanup_port_context(struct mana_port_context *apc) @@ -1198,6 +1295,46 @@ int mana_query_link_cfg(struct mana_port_context *apc) return err; } +int mana_set_bw_clamp(struct mana_port_context *apc, u32 speed, + int enable_clamping) +{ + struct mana_set_bw_clamp_resp resp = {}; + struct mana_set_bw_clamp_req req = {}; + struct net_device *ndev = apc->ndev; + int err; + + mana_gd_init_req_hdr(&req.hdr, MANA_SET_BW_CLAMP, + sizeof(req), sizeof(resp)); + req.vport = apc->port_handle; + req.link_speed = speed; + req.enable_clamping = enable_clamping; + + err = mana_send_request(apc->ac, &req, sizeof(req), &resp, + sizeof(resp)); + + if (err) { + netdev_err(ndev, "Failed to set bandwidth clamp for speed %u, err = %d", + speed, err); + return err; + } + + err = mana_verify_resp_hdr(&resp.hdr, MANA_SET_BW_CLAMP, + sizeof(resp)); + + if (err || resp.hdr.status) { + netdev_err(ndev, "Failed to set bandwidth clamp: %d, 0x%x\n", err, + resp.hdr.status); + if (!err) + err = -EPROTO; + return err; + } + + if (resp.qos_unconfigured) + netdev_info(ndev, "QoS is unconfigured\n"); + + return 0; +} + int mana_create_wq_obj(struct mana_port_context *apc, mana_handle_t vport, u32 wq_type, struct mana_obj_spec *wq_spec, @@ -2942,6 +3079,7 @@ static int mana_probe_port(struct mana_context *ac, int port_idx, ndev->hw_features |= NETIF_F_RXCSUM; ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6; ndev->hw_features |= NETIF_F_RXHASH; + ndev->hw_features |= NETIF_F_HW_TC; ndev->features = ndev->hw_features | NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX; ndev->vlan_features = ndev->features; diff --git a/include/net/mana/mana.h b/include/net/mana/mana.h index 63193613c185..69687dfe7540 100644 --- a/include/net/mana/mana.h +++ b/include/net/mana/mana.h @@ -469,6 +469,8 @@ struct mana_port_context { u16 port_idx; u32 speed; + /*HTB class parameters*/ + u16 classid; bool port_is_up; bool port_st_save; /* Saved port state */ @@ -500,6 +502,8 @@ void mana_chn_setxdp(struct mana_port_context *apc, struct bpf_prog *prog); int mana_bpf(struct net_device *ndev, struct netdev_bpf *bpf); void mana_query_gf_stats(struct mana_port_context *apc); int mana_query_link_cfg(struct mana_port_context *apc); +int mana_set_bw_clamp(struct mana_port_context *apc, u32 speed, + int enable_clamping); int mana_pre_alloc_rxbufs(struct mana_port_context *apc, int mtu, int num_queues); void mana_pre_dealloc_rxbufs(struct mana_port_context *apc); @@ -527,6 +531,7 @@ enum mana_command_code { MANA_CONFIG_VPORT_RX = 0x20007, MANA_QUERY_VPORT_CONFIG = 0x20008, MANA_QUERY_LINK_CONFIG = 0x2000A, + MANA_SET_BW_CLAMP = 0x2000B, /* Privileged commands for the PF mode */ MANA_REGISTER_FILTER = 0x28000, @@ -548,6 +553,20 @@ struct mana_query_link_config_resp { u8 reserved[3]; }; /* HW DATA */ +/* Set Bandwidth Clamp*/ +struct mana_set_bw_clamp_req { + struct gdma_req_hdr hdr; + mana_handle_t vport; + enum TRI_STATE enable_clamping; + u32 link_speed; +}; /* HW DATA */ + +struct mana_set_bw_clamp_resp { + struct gdma_resp_hdr hdr; + u8 qos_unconfigured; + u8 reserved[7]; +}; /* HW DATA */ + /* Query Device Configuration */ struct mana_query_device_cfg_req { struct gdma_req_hdr hdr; From patchwork Thu Apr 17 07:57:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erni Sri Satya Vennela X-Patchwork-Id: 14055076 X-Patchwork-Delegate: kuba@kernel.org Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B0DEC224247; Thu, 17 Apr 2025 07:57:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744876642; cv=none; b=rO7FUlsDVKaWtN6/oUnS9Ar2AKfCtJwnZ3tNTLkkmQs3kh6MS9tH4FWi1qhHuUVBy0Gt6qqoYLik8aLtzP3WpZz44oMpB63/AskvUsX+nq6rRAJwZimlJaYWe2UCF0goELL0TaIQws8fFBVZuMynyLkDvOrBAXvdWmQKu3L7tn0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744876642; c=relaxed/simple; bh=6lGxmJVYVxjRwe76iUsWZkXtNM2Dgrh021u/8o3aOvE=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References; b=nyvJk5XrjViQULIQjchyiKVF9zg8/Zpt5HBMYD5jlBdefGzsq41yR5Ja660Q2a0Hho/GkLU9BIa6TupzxhbkjwyFbz0HmBtLk4wddiws6zaqB5Y/gW8iw1EZSz/Af2S/BHUu1wQmFQb6uiV6rwkNYobt0C9i6Jki8d5gOcK1nKM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=i31VlCss; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="i31VlCss" Received: by linux.microsoft.com (Postfix, from userid 1173) id 63A4B21199CA; Thu, 17 Apr 2025 00:57:20 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 63A4B21199CA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1744876640; bh=8Sod1/Snb5hoL+uu1iLAQXJymDjixJgq0BF+csuNHpI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=i31VlCssdGj2yZKPirQdpDcaETjmLdhUPFphefCfjetvrIxAi/GZf9mIjQI0hNj2J CaoMYOGikVlUu/Pl4JEPbk24U72O8KBzg7+G2iXYlg05spPRZm9HjHFyoUbM/4QDYz 733hVkupzXqpWzQVq8+pk/RlTsrHRrPD4NVyVr+w= From: Erni Sri Satya Vennela To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, longli@microsoft.com, kotaranov@microsoft.com, horms@kernel.org, kent.overstreet@linux.dev, brett.creeley@amd.com, schakrabarti@linux.microsoft.com, ernis@linux.microsoft.com, shradhagupta@linux.microsoft.com, ssengar@linux.microsoft.com, rosenp@gmail.com, paulros@microsoft.com, linux-hyperv@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org Subject: [PATCH 3/3] net: mana: Handle unsupported HWC commands Date: Thu, 17 Apr 2025 00:57:10 -0700 Message-Id: <1744876630-26918-4-git-send-email-ernis@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1744876630-26918-1-git-send-email-ernis@linux.microsoft.com> References: <1744876630-26918-1-git-send-email-ernis@linux.microsoft.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: X-Patchwork-Delegate: kuba@kernel.org If any of the HWC commands are not recognized by the underlying hardware, the hardware returns the response header status of -1. Log the information using netdev_info_once to avoid multiple error logs in dmesg. Signed-off-by: Erni Sri Satya Vennela Reviewed-by: Shradha Gupta Reviewed-by: Haiyang Zhang --- drivers/net/ethernet/microsoft/mana/hw_channel.c | 4 ++++ drivers/net/ethernet/microsoft/mana/mana_en.c | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/drivers/net/ethernet/microsoft/mana/hw_channel.c b/drivers/net/ethernet/microsoft/mana/hw_channel.c index 1ba49602089b..58cfd247d8c5 100644 --- a/drivers/net/ethernet/microsoft/mana/hw_channel.c +++ b/drivers/net/ethernet/microsoft/mana/hw_channel.c @@ -871,6 +871,10 @@ int mana_hwc_send_request(struct hw_channel_context *hwc, u32 req_len, } if (ctx->status_code && ctx->status_code != GDMA_STATUS_MORE_ENTRIES) { + if (ctx->status_code == -1) { + err = -EOPNOTSUPP; + goto out; + } dev_err(hwc->dev, "HWC: Failed hw_channel req: 0x%x\n", ctx->status_code); err = -EPROTO; diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c index 5b62f1443716..cb6a583b32d9 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_en.c +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c @@ -871,6 +871,9 @@ static int mana_send_request(struct mana_context *ac, void *in_buf, err = mana_gd_send_request(gc, in_len, in_buf, out_len, out_buf); if (err || resp->status) { + if (err == -EOPNOTSUPP) + return err; + dev_err(dev, "Failed to send mana message: %d, 0x%x\n", err, resp->status); return err ? err : -EPROTO; @@ -1269,6 +1272,10 @@ int mana_query_link_cfg(struct mana_port_context *apc) sizeof(resp)); if (err) { + if (err == -EOPNOTSUPP) { + netdev_info_once(ndev, "MANA_QUERY_LINK_CONFIG not supported\n"); + goto out; + } netdev_err(ndev, "Failed to query link config: %d\n", err); goto out; } @@ -1313,6 +1320,10 @@ int mana_set_bw_clamp(struct mana_port_context *apc, u32 speed, sizeof(resp)); if (err) { + if (err == -EOPNOTSUPP) { + netdev_info_once(ndev, "MANA_SET_BW_CLAMP not supported\n"); + return err; + } netdev_err(ndev, "Failed to set bandwidth clamp for speed %u, err = %d", speed, err); return err;