Received: by 2002:ab2:6816:0:b0:1f9:5764:f03e with SMTP id t22csp141066lqo; Thu, 16 May 2024 01:35:56 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCV5oZyulRl6gC0Miunmach7fOOqMdLnfwNDhLRuZEFiwActprRDdtlD2ZY/hpcDhj1S04CzwlbJ9wlp8XNMdwAORc5naTMJTtLElvF4sA== X-Google-Smtp-Source: AGHT+IGjC1aEmFgt9JbROPnz6SoF1zA8lwbxvO2P6s/GExFx2x/XdZeLorWoZTZ9LUCBbsRTXTGQ X-Received: by 2002:a17:90a:5502:b0:2b2:1919:dda3 with SMTP id 98e67ed59e1d1-2b6cc44f934mr16351787a91.12.1715848555569; Thu, 16 May 2024 01:35:55 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1715848555; cv=pass; d=google.com; s=arc-20160816; b=0gHWItwLar9Q7AP6q27KUbvNnXXtFlFCi+d7LUjf8BQyVG1fi/O8y8jDiAZFWWwEtI meoSEP5BeRYDu1tYaZeA3TNOfmwexv4A7hHASeS1iL8tcVGOQekO73++vnGFxP8/Ftzp 1g+V0hXMA0m06KqEDVHETitVTYCQeG+m3Vbj7Dy89oOIxfFuXB5nlfR8tf1utl0zHvB4 268U72APjHcuNKZLlD+JtNBPvCBCbcLcAHY7Eqjx/KH/WqFUkRt0ztyZtRHBzn7WyHy3 MCZaGzG3xTqCL2xEOLntpH3YTdHbeiCGHE6jLddFMb+7/3+XOF113DGM+k/gNSXGqD0N hrIQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=ZqWsB5IdMykLWAZ521Ej0jBcJrrlt3K3Im7RGUwgYyw=; fh=mwBeN2683HMQu9VAztk9NhMcsSClq8m68Z8mMTHSPlU=; b=KEzJlKTYlbeDQSIYBlwKLwsgycMnB6plEpaEEf0u4YxWu7GwfueDkPIvd7qky5vsJ7 9oemnq5jgxHqDR9U23ZUO7lJe/U/WB/zK3BL7nha3MLafoj04PlCaVtQBveK0ld66mYQ uQZxrYzGLcUDAla49OS3fGPS4hQaal2UUcslg/jL0I2x/ENqMuxvnpQgXNGt3WVC6Lov Ey9sLhz90PuXAWGsYJrXnUkgByAYvs4opF4u/igazkg0zYdqGdlWUJMPx191kmynbWa8 P7jEOS8+a+MD6IMFNoHrECsvsBoQ7jOKdhYRkGZJJ7DmeYT+dbi6SW1tv3MXJ+3LKvkR 3zDA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=YI0w9796; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-180765-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-180765-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id 98e67ed59e1d1-2b628ea78besi17676261a91.102.2024.05.16.01.35.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 May 2024 01:35:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-180765-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=YI0w9796; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-180765-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-180765-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id E4F3E283B25 for ; Thu, 16 May 2024 08:28:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A2031137903; Thu, 16 May 2024 08:28:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="YI0w9796" Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A247136E30 for ; Thu, 16 May 2024 08:28:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715848084; cv=none; b=nKNVj1xK/YvoiMuhwSz/iAGPNJOH86khU1JDo2U0+KFHU4+DcsSOahK7h7vdH0Dmw2rZl5gZvKDm0qKHHpTCMrAT1GPhCFJZLkTR+NAjHTnPcSLIn4t79pfhCHFiYTs5EYbq0xRA8Wn1tVT862FWSqfsXC8X+slm8+U+/WjBhEU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715848084; c=relaxed/simple; bh=DzRqiyopQCPSUEogl1hvpC9bB/HSSmdYOAQIYfCYSf4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=a6+aJLgz/O0+DnUyjBNwm25H01JwgdJny39FtB+gG6ShMJ4p1C2RmuPiqXNE+dAxcesf/bbO0RNDeEBRIeBZnQfmi89+OKXFQDbfVzjRjhhFheTWWPuilX/yRa6Ltuwfa6RqUVZXUZ6eVb2/G/rrPYzwy7eS4PIZk/PBfI2UyN4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=YI0w9796; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1715848081; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZqWsB5IdMykLWAZ521Ej0jBcJrrlt3K3Im7RGUwgYyw=; b=YI0w9796y4G2XNRj6zqmTCCsuDHW4t7tly+07wqgQcNgKyVDid0RkQ4+jYK0gOl6XE6Ehu SibwxTKdZyFr7w7yiHs1Fw8SMmmSoXSnWqXxqkQOcqbEePNIXNqErinWr2rPPo8/zM6+Su 6GkFqqHTZe2yWG2eF5XjWPQ8/NzlGJI= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-661-xfOcnzhtP3aqU2DvDCGwOA-1; Thu, 16 May 2024 04:27:56 -0400 X-MC-Unique: xfOcnzhtP3aqU2DvDCGwOA-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BD3E58030A5; Thu, 16 May 2024 08:27:55 +0000 (UTC) Received: from ksundara-mac.redhat.com (unknown [10.74.17.49]) by smtp.corp.redhat.com (Postfix) with ESMTP id E55115ADC40; Thu, 16 May 2024 08:27:47 +0000 (UTC) From: Karthik Sundaravel To: jesse.brandeburg@intel.com, wojciech.drewek@intel.com, sumang@marvell.com, jacob.e.keller@intel.com, anthony.l.nguyen@intel.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, horms@kernel.org Cc: pmenzel@molgen.mpg.de, jiri@resnulli.us, michal.swiatkowski@linux.intel.com, bcreeley@amd.com, rjarry@redhat.com, aharivel@redhat.com, vchundur@redhat.com, ksundara@redhat.com, cfontain@redhat.com Subject: [PATCH iwl-next v10] ice: Add get/set hw address for VFs using devlink commands Date: Thu, 16 May 2024 13:57:33 +0530 Message-Id: <20240516082733.35783-2-ksundara@redhat.com> In-Reply-To: <20240516082733.35783-1-ksundara@redhat.com> References: <20240516082733.35783-1-ksundara@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.9 Changing the MAC address of the VFs is currently unsupported via devlink. Add the function handlers to set and get the HW address for the VFs. Signed-off-by: Karthik Sundaravel --- .../ethernet/intel/ice/devlink/devlink_port.c | 59 ++++++++++++++++++- drivers/net/ethernet/intel/ice/ice_sriov.c | 34 ++++++++--- drivers/net/ethernet/intel/ice/ice_sriov.h | 8 +++ 3 files changed, 91 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c index c9fbeebf7fb9..f5befce579e3 100644 --- a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c +++ b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c @@ -372,6 +372,62 @@ void ice_devlink_destroy_pf_port(struct ice_pf *pf) devl_port_unregister(&pf->devlink_port); } +/** + * ice_devlink_port_get_vf_fn_mac - .port_fn_hw_addr_get devlink handler + * @port: devlink port structure + * @hw_addr: MAC address of the port + * @hw_addr_len: length of MAC address + * @extack: extended netdev ack structure + * + * Callback for the devlink .port_fn_hw_addr_get operation + * Return: zero on success or an error code on failure. + */ +static int ice_devlink_port_get_vf_fn_mac(struct devlink_port *port, + u8 *hw_addr, int *hw_addr_len, + struct netlink_ext_ack *extack) +{ + struct ice_vf *vf = container_of(port, struct ice_vf, devlink_port); + + ether_addr_copy(hw_addr, vf->dev_lan_addr); + *hw_addr_len = ETH_ALEN; + + return 0; +} + +/** + * ice_devlink_port_set_vf_fn_mac - .port_fn_hw_addr_set devlink handler + * @port: devlink port structure + * @hw_addr: MAC address of the port + * @hw_addr_len: length of MAC address + * @extack: extended netdev ack structure + * + * Callback for the devlink .port_fn_hw_addr_set operation + * Return: zero on success or an error code on failure. + */ +static int ice_devlink_port_set_vf_fn_mac(struct devlink_port *port, + const u8 *hw_addr, + int hw_addr_len, + struct netlink_ext_ack *extack) + +{ + struct devlink_port_attrs *attrs = &port->attrs; + struct devlink_port_pci_vf_attrs *pci_vf; + struct devlink *devlink = port->devlink; + struct ice_pf *pf; + u16 vf_id; + + pf = devlink_priv(devlink); + pci_vf = &attrs->pci_vf; + vf_id = pci_vf->vf; + + return ice_set_vf_mac_fn(pf, vf_id, hw_addr); +} + +static const struct devlink_port_ops ice_devlink_vf_port_ops = { + .port_fn_hw_addr_get = ice_devlink_port_get_vf_fn_mac, + .port_fn_hw_addr_set = ice_devlink_port_set_vf_fn_mac, +}; + /** * ice_devlink_create_vf_port - Create a devlink port for this VF * @vf: the VF to create a port for @@ -407,7 +463,8 @@ int ice_devlink_create_vf_port(struct ice_vf *vf) devlink_port_attrs_set(devlink_port, &attrs); devlink = priv_to_devlink(pf); - err = devl_port_register(devlink, devlink_port, vsi->idx); + err = devl_port_register_with_ops(devlink, devlink_port, vsi->idx, + &ice_devlink_vf_port_ops); if (err) { dev_err(dev, "Failed to create devlink port for VF %d, error %d\n", vf->vf_id, err); diff --git a/drivers/net/ethernet/intel/ice/ice_sriov.c b/drivers/net/ethernet/intel/ice/ice_sriov.c index 067712f4923f..6aeaac1bc7a7 100644 --- a/drivers/net/ethernet/intel/ice/ice_sriov.c +++ b/drivers/net/ethernet/intel/ice/ice_sriov.c @@ -1416,21 +1416,22 @@ ice_get_vf_cfg(struct net_device *netdev, int vf_id, struct ifla_vf_info *ivi) } /** - * ice_set_vf_mac - * @netdev: network interface device structure + * ice_set_vf_mac_fn + * @pf: PF to be configure * @vf_id: VF identifier * @mac: MAC address * * program VF MAC address */ -int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac) +int ice_set_vf_mac_fn(struct ice_pf *pf, u16 vf_id, const u8 *mac) { - struct ice_pf *pf = ice_netdev_to_pf(netdev); + struct device *dev; struct ice_vf *vf; int ret; + dev = ice_pf_to_dev(pf); if (is_multicast_ether_addr(mac)) { - netdev_err(netdev, "%pM not a valid unicast address\n", mac); + dev_err(dev, "%pM not a valid unicast address\n", mac); return -EINVAL; } @@ -1459,13 +1460,13 @@ int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac) if (is_zero_ether_addr(mac)) { /* VF will send VIRTCHNL_OP_ADD_ETH_ADDR message with its MAC */ vf->pf_set_mac = false; - netdev_info(netdev, "Removing MAC on VF %d. VF driver will be reinitialized\n", - vf->vf_id); + dev_info(dev, "Removing MAC on VF %d. VF driver will be reinitialized\n", + vf->vf_id); } else { /* PF will add MAC rule for the VF */ vf->pf_set_mac = true; - netdev_info(netdev, "Setting MAC %pM on VF %d. VF driver will be reinitialized\n", - mac, vf_id); + dev_info(dev, "Setting MAC %pM on VF %d. VF driver will be reinitialized\n", + mac, vf_id); } ice_reset_vf(vf, ICE_VF_RESET_NOTIFY); @@ -1476,6 +1477,21 @@ int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac) return ret; } +/** + * ice_set_vf_mac + * @netdev: network interface device structure + * @vf_id: VF identifier + * @mac: MAC address + * + * program VF MAC address + */ +int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac) +{ + struct ice_pf *pf = ice_netdev_to_pf(netdev); + + return ice_set_vf_mac_fn(pf, vf_id, mac); +} + /** * ice_set_vf_trust * @netdev: network interface device structure diff --git a/drivers/net/ethernet/intel/ice/ice_sriov.h b/drivers/net/ethernet/intel/ice/ice_sriov.h index 8f22313474d6..085891a862f6 100644 --- a/drivers/net/ethernet/intel/ice/ice_sriov.h +++ b/drivers/net/ethernet/intel/ice/ice_sriov.h @@ -28,6 +28,7 @@ #ifdef CONFIG_PCI_IOV void ice_process_vflr_event(struct ice_pf *pf); int ice_sriov_configure(struct pci_dev *pdev, int num_vfs); +int ice_set_vf_mac_fn(struct ice_pf *pf, u16 vf_id, const u8 *mac); int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac); int ice_get_vf_cfg(struct net_device *netdev, int vf_id, struct ifla_vf_info *ivi); @@ -80,6 +81,13 @@ ice_sriov_configure(struct pci_dev __always_unused *pdev, return -EOPNOTSUPP; } +static inline int +ice_set_vf_mac_fn(struct ice_pf __always_unused *pf, + u16 __always_unused vf_id, const u8 __always_unused *mac) +{ + return -EOPNOTSUPP; +} + static inline int ice_set_vf_mac(struct net_device __always_unused *netdev, int __always_unused vf_id, u8 __always_unused *mac) -- 2.39.3 (Apple Git-146)