From patchwork Fri Apr 18 22:12:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harshitha Ramamurthy X-Patchwork-Id: 14057708 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 549352417D9 for ; Fri, 18 Apr 2025 22:13:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014381; cv=none; b=MBWhaGpGKtFApMcA0DIs35ac+fZ0lgvtIrJIt1Mx25pHRyKAyffCSAEyhzmRd9qfpNBTeEUTIB2oDwx6UNOjRBTxp6HsjbaNluSCyr1xrPbAQAirZ/WJzpoJdOIOZ5wcxcz5OjkFhR9XV9U84O4gXPLSI6/TkM8GzG95C/Gk3UE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014381; c=relaxed/simple; bh=ItWFSCVDbjxxVUZUdvpMtsCSDAT9b50ItavV7xjaUHQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=fXzhXS7dF/qH9ki0+SIkGxE2rPgEG/0neFTRu2fJHdQ32Us1zDIIjjMP3j3YRY8xtXslpsGeL2j0SubREFtAB0RuoxRi+wNpUBhqWuYLecTfr+TbuEuFzbhAkSE6afggbB5w9+5B+pCJGkvftmhCkA8E4WbwSbN3ta0kUxXZ6pE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=xIQ9O0Kj; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="xIQ9O0Kj" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-224364f2492so19813975ad.3 for ; Fri, 18 Apr 2025 15:13:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1745014379; x=1745619179; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=8yrivYcHNx6L4G6taXJ33jFMolvklY6KDAaHH12BE9E=; b=xIQ9O0Kj6TKfjgeNdo4lXLL8wNWMyUYP0AIumWibvd3CqDArRfXk28VKuV0bchZ/nI mdOiDAFv7bpPwvk9tYopcmapDIFk/46d3u6vDg9VP82ht0rrJdwnhrmEL3jY95LUx1c9 Nx3/CyB2t3o61FBUUxO9Rvb6xQZnnrIE7aU7bH9nP2FXUNfbA+708QU08PIqpcztBaa9 Rir5JIDD7L8R/A6KCs+GX561CBArI5wdZ8EAUyHhpd9Mmlkx3Rsd+Fstqf4Zyrl4CoW9 upDWFUPokvCl2iXr5L6cjJw+iVm7RQoQjTYzkjAV4+Z7HK56Xc2MfNnP0/ZOBJjzhNu7 041A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745014379; x=1745619179; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=8yrivYcHNx6L4G6taXJ33jFMolvklY6KDAaHH12BE9E=; b=bWb1RrfjZ/EBS/NUMXY3ECPSrbC/bQnFNSdukytXwybPEw97c3xxcT+zHo2lMsH1gW BIxoVZwt/e+/H+hfwlGdMAfInBvfAkNOtPojJy5wJm5t73g6ytnVBVTvylcvjbC7I3mS xYBFY/gE2eavWmn7cXS6edyYApY8mD1fz8PcKbjTmoilNO8tOtye35e/6XqrSzVHjZpW Q0IFMCtL/tqtRfEJ1SwW0iLBEOkkV7ISgco3+sqCglC0pXQzLw4XUOTfx8aPlP/aqKZs x0WQ3TeNTodkueFoHPz4mwXUM8LPVPMDdqE34JsN+PFy9xU4F0dKjftANxL7+WH4AwhA UQAQ== X-Gm-Message-State: AOJu0YzY8IO7LfHPW3N5ZYUGa2eCNxbo1vAn/v4LGYNj9uJS+qlBwZA1 XPsxELynSigaPhQSz6GVNCt5SJpgPM6QG5VxS3aI2rasEURgpkLCrtCBOVPVSQvg+YOXI5wTjz7 rzzuU6UGFlBK1efiMMYZCXmxTrJ+L3ycZuTVO6xyt8OgtbHWRfn3DRFdNHWXkBLPF3rQ9Sfquim Kb4Y6Woi9T62suKcJKu+PDHdWpG0i9u10kfV0KnOU4pZ6PnaoTHXZ+1CGzXHQ= X-Google-Smtp-Source: AGHT+IGgyWTDkf3U+r308vvbDy0CEDYuFNiZtlUp3pJH2R34QleHuKL3B+DestSlhl9Dm/fDOVTumOX7Nb2QaeZaWQ== X-Received: from pfbhq10.prod.google.com ([2002:a05:6a00:680a:b0:73c:257c:fd5f]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:287:b0:223:faf5:c82 with SMTP id d9443c01a7336-22c5337a067mr51930565ad.8.1745014379565; Fri, 18 Apr 2025 15:12:59 -0700 (PDT) Date: Fri, 18 Apr 2025 22:12:49 +0000 In-Reply-To: <20250418221254.112433-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250418221254.112433-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.805.g082f7c87e0-goog Message-ID: <20250418221254.112433-2-hramamurthy@google.com> Subject: [PATCH net-next 1/6] gve: Add device option for nic clock synchronization From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, horms@kernel.org, linux-kernel@vger.kernel.org, Jeff Rogers X-Patchwork-Delegate: kuba@kernel.org From: John Fraker This patch adds the device option and negotiation with the device for clock synchronization with the nic. This option is necessary before the driver will advertise support for hardware timestamping or other related features. Co-developed-by: Jeff Rogers Signed-off-by: Jeff Rogers Co-developed-by: Ziwei Xiao Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: John Fraker Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 3 ++ drivers/net/ethernet/google/gve/gve_adminq.c | 31 +++++++++++++++++++- drivers/net/ethernet/google/gve/gve_adminq.h | 9 ++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h index 2fab38c8ee78..e9b2c1394b1f 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -870,6 +870,9 @@ struct gve_priv { u16 rss_lut_size; bool cache_rss_config; struct gve_rss_config rss_config; + + /* True if the device supports reading the nic clock */ + bool nic_timestamp_supported; }; enum gve_service_task_flags_bit { diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/ethernet/google/gve/gve_adminq.c index 3e8fc33cc11f..ae20d2f7e6e1 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -46,6 +46,7 @@ void gve_parse_device_option(struct gve_priv *priv, struct gve_device_option_buffer_sizes **dev_op_buffer_sizes, struct gve_device_option_flow_steering **dev_op_flow_steering, struct gve_device_option_rss_config **dev_op_rss_config, + struct gve_device_option_nic_timestamp **dev_op_nic_timestamp, struct gve_device_option_modify_ring **dev_op_modify_ring) { u32 req_feat_mask = be32_to_cpu(option->required_features_mask); @@ -225,6 +226,23 @@ void gve_parse_device_option(struct gve_priv *priv, "RSS config"); *dev_op_rss_config = (void *)(option + 1); break; + case GVE_DEV_OPT_ID_NIC_TIMESTAMP: + if (option_length < sizeof(**dev_op_nic_timestamp) || + req_feat_mask != GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP) { + dev_warn(&priv->pdev->dev, GVE_DEVICE_OPTION_ERROR_FMT, + "Nic Timestamp", + (int)sizeof(**dev_op_nic_timestamp), + GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP, + option_length, req_feat_mask); + break; + } + + if (option_length > sizeof(**dev_op_nic_timestamp)) + dev_warn(&priv->pdev->dev, + GVE_DEVICE_OPTION_TOO_BIG_FMT, + "Nic Timestamp"); + *dev_op_nic_timestamp = (void *)(option + 1); + break; default: /* If we don't recognize the option just continue * without doing anything. @@ -246,6 +264,7 @@ gve_process_device_options(struct gve_priv *priv, struct gve_device_option_buffer_sizes **dev_op_buffer_sizes, struct gve_device_option_flow_steering **dev_op_flow_steering, struct gve_device_option_rss_config **dev_op_rss_config, + struct gve_device_option_nic_timestamp **dev_op_nic_timestamp, struct gve_device_option_modify_ring **dev_op_modify_ring) { const int num_options = be16_to_cpu(descriptor->num_device_options); @@ -269,6 +288,7 @@ gve_process_device_options(struct gve_priv *priv, dev_op_dqo_rda, dev_op_jumbo_frames, dev_op_dqo_qpl, dev_op_buffer_sizes, dev_op_flow_steering, dev_op_rss_config, + dev_op_nic_timestamp, dev_op_modify_ring); dev_opt = next_opt; } @@ -904,6 +924,8 @@ static void gve_enable_supported_features(struct gve_priv *priv, *dev_op_flow_steering, const struct gve_device_option_rss_config *dev_op_rss_config, + const struct gve_device_option_nic_timestamp + *dev_op_nic_timestamp, const struct gve_device_option_modify_ring *dev_op_modify_ring) { @@ -980,10 +1002,15 @@ static void gve_enable_supported_features(struct gve_priv *priv, "RSS device option enabled with key size of %u, lut size of %u.\n", priv->rss_key_size, priv->rss_lut_size); } + + if (dev_op_nic_timestamp && + (supported_features_mask & GVE_SUP_NIC_TIMESTAMP_MASK)) + priv->nic_timestamp_supported = true; } int gve_adminq_describe_device(struct gve_priv *priv) { + struct gve_device_option_nic_timestamp *dev_op_nic_timestamp = NULL; struct gve_device_option_flow_steering *dev_op_flow_steering = NULL; struct gve_device_option_buffer_sizes *dev_op_buffer_sizes = NULL; struct gve_device_option_jumbo_frames *dev_op_jumbo_frames = NULL; @@ -1024,6 +1051,7 @@ int gve_adminq_describe_device(struct gve_priv *priv) &dev_op_buffer_sizes, &dev_op_flow_steering, &dev_op_rss_config, + &dev_op_nic_timestamp, &dev_op_modify_ring); if (err) goto free_device_descriptor; @@ -1088,7 +1116,8 @@ int gve_adminq_describe_device(struct gve_priv *priv) gve_enable_supported_features(priv, supported_features_mask, dev_op_jumbo_frames, dev_op_dqo_qpl, dev_op_buffer_sizes, dev_op_flow_steering, - dev_op_rss_config, dev_op_modify_ring); + dev_op_rss_config, dev_op_nic_timestamp, + dev_op_modify_ring); free_device_descriptor: dma_pool_free(priv->adminq_pool, descriptor, descriptor_bus); diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/ethernet/google/gve/gve_adminq.h index 228217458275..42466ee640f1 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -174,6 +174,12 @@ struct gve_device_option_rss_config { static_assert(sizeof(struct gve_device_option_rss_config) == 8); +struct gve_device_option_nic_timestamp { + __be32 supported_features_mask; +}; + +static_assert(sizeof(struct gve_device_option_nic_timestamp) == 4); + /* Terminology: * * RDA - Raw DMA Addressing - Buffers associated with SKBs are directly DMA @@ -192,6 +198,7 @@ enum gve_dev_opt_id { GVE_DEV_OPT_ID_JUMBO_FRAMES = 0x8, GVE_DEV_OPT_ID_BUFFER_SIZES = 0xa, GVE_DEV_OPT_ID_FLOW_STEERING = 0xb, + GVE_DEV_OPT_ID_NIC_TIMESTAMP = 0xd, GVE_DEV_OPT_ID_RSS_CONFIG = 0xe, }; @@ -206,6 +213,7 @@ enum gve_dev_opt_req_feat_mask { GVE_DEV_OPT_REQ_FEAT_MASK_MODIFY_RING = 0x0, GVE_DEV_OPT_REQ_FEAT_MASK_FLOW_STEERING = 0x0, GVE_DEV_OPT_REQ_FEAT_MASK_RSS_CONFIG = 0x0, + GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP = 0x0, }; enum gve_sup_feature_mask { @@ -214,6 +222,7 @@ enum gve_sup_feature_mask { GVE_SUP_BUFFER_SIZES_MASK = 1 << 4, GVE_SUP_FLOW_STEERING_MASK = 1 << 5, GVE_SUP_RSS_CONFIG_MASK = 1 << 7, + GVE_SUP_NIC_TIMESTAMP_MASK = 1 << 8, }; #define GVE_DEV_OPT_LEN_GQI_RAW_ADDRESSING 0x0 From patchwork Fri Apr 18 22:12:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harshitha Ramamurthy X-Patchwork-Id: 14057709 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C074C24C664 for ; Fri, 18 Apr 2025 22:13:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014383; cv=none; b=iIXn4Wlkevp8RMJBMw0JSdlaF4C+WGG5kTMZW80sysUEFpydRWsEA9bNI9Of8xm0HZ6Z4mBUhoL2hsidE9alGWd1AxS90gz8GwxyfHyBQdC9tDqaVE80+2UROLm9fBdqrZhFvrv88uTNRysulOBOsCMirSznxkH20reaGPaw8SA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014383; c=relaxed/simple; bh=Nq7V/6IjHitUCNU1xhRloj2Qf6t3ut0dbp9awHuuqaM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=s0g5wsise4+XKdQh1SDEF/LeYupW+4hrRGU0Gws+QSv/ixl+YVRXbP8XhoKfI5ZsJxM+2u7/ziZJw5Zc8PRIw7OnhE6rSa9yrmmSmlg3xIw8/RWmdP2oMYUXBKMA6lXFiFQuLKxf6ZFVFy6tlivFQ/FOKGHozp12xcCJxeuq7+0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=tZIpk2/2; arc=none smtp.client-ip=209.85.210.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="tZIpk2/2" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-736d64c5e16so1943615b3a.3 for ; Fri, 18 Apr 2025 15:13:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1745014381; x=1745619181; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=odukihRD2X2F35wm6Kgljp6w3F6b5R95nTsR7BdnLN0=; b=tZIpk2/27BOhWDsZlDZqEutbe6Lnf9ZDcAvwt1LWO++gK48qY6Wh/2faXM0ECFEKZd DOowcRWDPZHxQCZxawZOSnD3tfpqAgJ0JHb3Fb1eEHuxhmWE/t/6pU3BRKN8bD0JVN6j /3mYm1okGfQEOhDbhLMp/t5ythg1bO6vqz1FkiDoO2WSqAUiu3WMVv6lR9B3ragCx2rF LjgorYzuAYD5oVwFDn/cOLM7AMW8xZmsot389f4PEdGm0NreRsaeQNEPBkPAGX1CSjM8 6iPfZrfYPLldRa88/LwYwOmeylqccnI6/U/vMXXxNyT1OnvyM2A/L21dp5Bs38Yu5dZn YQnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745014381; x=1745619181; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=odukihRD2X2F35wm6Kgljp6w3F6b5R95nTsR7BdnLN0=; b=MWKwU3m7xZUpLA/EP5IfRuIrtSz5CKN5R7GdV3mwXo5fNmlP1D54FVb9BHOWxMSIPa zZCefra6/XVgLovdPM8q1rbHkkE5yW1kU3mUBWYEsSR+X0EykieHkJeb9DTqryjgZzup SR/RozTLRDgOH2X6FpQ/+NgX4QW0tralNT9ob2UnsPsq2x8Ltgzg0x0zoN557xq9ccrf LSRH4xKo4BSxXDciwSDxp+YGCvlAHoauDL5SHNEswyzTz+Rp9gXUyBbl+o8onYbDRw1C VHk3s89R1k41Hnl2BWEnkFjJnSrTycaht68CH/LjwQaBtciPJIMpFv+f377DG+FsrwoD y6iA== X-Gm-Message-State: AOJu0YxIxa5zN29wGBKOLbLpcD79O20Qxs+IDMK1I4DSnQbdpFL3lGrf 00ZFMpKngpk/L+e3qs0P754ktfCIHZlgy3vv1Tt/igLaL6RQbKyQb8dNOqrxfM0UZ5ljw+ZlJbL sQFM2ztQiEwv7Z/vzxtRvebCI7NPvL9Lvf6kAEmXCOpIV89SanXZ2O8FQQaDhV4iBPfZZixdM4D X3Y/t0bJ/8XbA1Sv1r4HWp0C4YTv/iXmWoF+yhPbJz/aVsQ0le+0DFDmRi9Go= X-Google-Smtp-Source: AGHT+IEbd7hlOw8dQrQZW6AzFzWz9qpz3Y3xp85QBBVsZka3QY9O4/z/3Oru6iPsLOJT1Ovl2haPJznCrPeeU4Gu4A== X-Received: from pfua1.prod.google.com ([2002:a05:6a00:11c1:b0:737:6e43:8e34]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:98e:b0:736:5753:12fd with SMTP id d2e1a72fcca58-73dc14438a1mr6125388b3a.4.1745014380905; Fri, 18 Apr 2025 15:13:00 -0700 (PDT) Date: Fri, 18 Apr 2025 22:12:50 +0000 In-Reply-To: <20250418221254.112433-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250418221254.112433-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.805.g082f7c87e0-goog Message-ID: <20250418221254.112433-3-hramamurthy@google.com> Subject: [PATCH net-next 2/6] gve: Add adminq command to report nic timestamp From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, horms@kernel.org, linux-kernel@vger.kernel.org, Jeff Rogers X-Patchwork-Delegate: kuba@kernel.org From: John Fraker This patch adds an adminq command to read NIC's hardware clock. The driver allocates dma memory and passes that dma memory address to the device. The device then writes the clock to the given address. Co-developed-by: Jeff Rogers Signed-off-by: Jeff Rogers Co-developed-by: Ziwei Xiao Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: John Fraker Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 1 + drivers/net/ethernet/google/gve/gve_adminq.c | 20 +++++++++++++++++++ drivers/net/ethernet/google/gve/gve_adminq.h | 17 ++++++++++++++++ drivers/net/ethernet/google/gve/gve_ethtool.c | 3 ++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h index e9b2c1394b1f..cf6947731a9b 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -813,6 +813,7 @@ struct gve_priv { u32 adminq_set_driver_parameter_cnt; u32 adminq_report_stats_cnt; u32 adminq_report_link_speed_cnt; + u32 adminq_report_nic_timestamp_cnt; u32 adminq_get_ptype_map_cnt; u32 adminq_verify_driver_compatibility_cnt; u32 adminq_query_flow_rules_cnt; diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/ethernet/google/gve/gve_adminq.c index ae20d2f7e6e1..f57913a673b4 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -326,6 +326,7 @@ int gve_adminq_alloc(struct device *dev, struct gve_priv *priv) priv->adminq_set_driver_parameter_cnt = 0; priv->adminq_report_stats_cnt = 0; priv->adminq_report_link_speed_cnt = 0; + priv->adminq_report_nic_timestamp_cnt = 0; priv->adminq_get_ptype_map_cnt = 0; priv->adminq_query_flow_rules_cnt = 0; priv->adminq_cfg_flow_rule_cnt = 0; @@ -564,6 +565,9 @@ static int gve_adminq_issue_cmd(struct gve_priv *priv, case GVE_ADMINQ_REPORT_LINK_SPEED: priv->adminq_report_link_speed_cnt++; break; + case GVE_ADMINQ_REPORT_NIC_TIMESTAMP: + priv->adminq_report_nic_timestamp_cnt++; + break; case GVE_ADMINQ_GET_PTYPE_MAP: priv->adminq_get_ptype_map_cnt++; break; @@ -1229,6 +1233,22 @@ int gve_adminq_report_link_speed(struct gve_priv *priv) return err; } +int gve_adminq_report_nic_ts(struct gve_priv *priv, + dma_addr_t nic_ts_report_addr) +{ + union gve_adminq_command cmd; + + memset(&cmd, 0, sizeof(cmd)); + cmd.opcode = cpu_to_be32(GVE_ADMINQ_REPORT_NIC_TIMESTAMP); + cmd.report_nic_ts = (struct gve_adminq_report_nic_ts) { + .nic_ts_report_len = + cpu_to_be64(sizeof(struct gve_nic_ts_report)), + .nic_ts_report_addr = cpu_to_be64(nic_ts_report_addr), + }; + + return gve_adminq_execute_cmd(priv, &cmd); +} + int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, struct gve_ptype_lut *ptype_lut) { diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/ethernet/google/gve/gve_adminq.h index 42466ee640f1..9360b84536d5 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -27,6 +27,7 @@ enum gve_adminq_opcodes { GVE_ADMINQ_GET_PTYPE_MAP = 0xE, GVE_ADMINQ_VERIFY_DRIVER_COMPATIBILITY = 0xF, GVE_ADMINQ_QUERY_FLOW_RULES = 0x10, + GVE_ADMINQ_REPORT_NIC_TIMESTAMP = 0x11, GVE_ADMINQ_QUERY_RSS = 0x12, /* For commands that are larger than 56 bytes */ @@ -401,6 +402,19 @@ struct gve_adminq_report_link_speed { static_assert(sizeof(struct gve_adminq_report_link_speed) == 8); +struct gve_adminq_report_nic_ts { + __be64 nic_ts_report_len; + __be64 nic_ts_report_addr; +}; + +static_assert(sizeof(struct gve_adminq_report_nic_ts) == 16); + +struct gve_nic_ts_report { + __be64 nic_timestamp; /* NIC clock in nanoseconds */ + __be64 reserved1; + __be64 reserved2; +}; + struct stats { __be32 stat_name; __be32 queue_id; @@ -594,6 +608,7 @@ union gve_adminq_command { struct gve_adminq_query_flow_rules query_flow_rules; struct gve_adminq_configure_rss configure_rss; struct gve_adminq_query_rss query_rss; + struct gve_adminq_report_nic_ts report_nic_ts; struct gve_adminq_extended_command extended_command; }; }; @@ -633,6 +648,8 @@ int gve_adminq_reset_flow_rules(struct gve_priv *priv); int gve_adminq_query_flow_rules(struct gve_priv *priv, u16 query_opcode, u32 starting_loc); int gve_adminq_configure_rss(struct gve_priv *priv, struct ethtool_rxfh_param *rxfh); int gve_adminq_query_rss_config(struct gve_priv *priv, struct ethtool_rxfh_param *rxfh); +int gve_adminq_report_nic_ts(struct gve_priv *priv, + dma_addr_t nic_ts_report_addr); struct gve_ptype_lut; int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/ethernet/google/gve/gve_ethtool.c index eae1a7595a69..76f759309196 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -76,7 +76,7 @@ static const char gve_gstrings_adminq_stats[][ETH_GSTRING_LEN] = { "adminq_dcfg_device_resources_cnt", "adminq_set_driver_parameter_cnt", "adminq_report_stats_cnt", "adminq_report_link_speed_cnt", "adminq_get_ptype_map_cnt", "adminq_query_flow_rules", "adminq_cfg_flow_rule", "adminq_cfg_rss_cnt", - "adminq_query_rss_cnt", + "adminq_query_rss_cnt", "adminq_report_nic_timestamp_cnt", }; static const char gve_gstrings_priv_flags[][ETH_GSTRING_LEN] = { @@ -456,6 +456,7 @@ gve_get_ethtool_stats(struct net_device *netdev, data[i++] = priv->adminq_cfg_flow_rule_cnt; data[i++] = priv->adminq_cfg_rss_cnt; data[i++] = priv->adminq_query_rss_cnt; + data[i++] = priv->adminq_report_nic_timestamp_cnt; } static void gve_get_channels(struct net_device *netdev, From patchwork Fri Apr 18 22:12:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harshitha Ramamurthy X-Patchwork-Id: 14057710 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B7C32522B0 for ; Fri, 18 Apr 2025 22:13:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014384; cv=none; b=qjA3aybqEauWZ3c5hD8lk1q4aNQgHMzKcWXTAtYycQdjf7oX84c/HxNzeGA2pn6IDDZ20Y70ajCRejYFCmpdrieD7cdcX942fceMN0jm+QBy9+vY+BliAEEK3VL6LAdd5ctIA9My1oQ3kv0YnGI8hkaiq/OTyFkWRGY01pTOEKM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014384; c=relaxed/simple; bh=fzExnUxA0ISyhzT30/stIovGDCvMqxhEMRnUGa9MSFk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SntDrfKmtNUFbem2VukwZcum8dVmzVxF2/Vs1UzSkl7SvF6Sp7LUEeF7auYRAiAufzkmIFbpW7yVnW0piHEz6XUKwcyjwpwmmLOIoCDTH6YCDqHhvJTdTBycVwpi9wuFwBt0ld3eVeA5Ax2GAgYUG7CYfOhxL3TTTtnJdYM2ByE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=uLm/tZuE; arc=none smtp.client-ip=209.85.215.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="uLm/tZuE" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-af96cdd7f5bso1350730a12.1 for ; Fri, 18 Apr 2025 15:13:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1745014382; x=1745619182; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=rVDzcEVYfKe2XKNLs+lKXeA6Y6i2Guq3xjb1EYfIjrY=; b=uLm/tZuEJC2R7Np/FPXsxP+fXlArqnks4JexpbCtjsE7rdGJEEXODViIksbNEX2cDg oU0KLeXtwnvLrqU0USet/PBxz+BKRvCuoefpiSX6k/I2h9CJ5go9BCkFS82xYZFyQlct /fMSKIIyPZKWev2srKe1YRJ+I3zghxD5CO7r+KMpGdQTYT4gZuBealW8Bf5CWPT0JTk0 zmjrGz36OgJfNnepezynDsFevELa3FwasYeDt/Fd0gUE9GRfYEmmfruBQvFKMt8zJJhn Y3gqfrm2u4KBxCnU2K1elxTYz1xdzrqLw2rdMq6AIdU48d4qArEd1wL5BHAq6fvhelBc VNuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745014382; x=1745619182; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rVDzcEVYfKe2XKNLs+lKXeA6Y6i2Guq3xjb1EYfIjrY=; b=U8jAE8Hb0XaugDbaVitYx7Y8WgZ4F7pFQhAo1iF9ca8EI8wFMDFS0PqvE2NOLnOIXF lMA5kVG8kU/bVV4a6yxZgbt0PD6ndvRppBvG/ABq6nv9iIAqeMOBDH+M23iZcGBvq2DD 9r/0v8azbDbowYgFQpxru58M+1fygmRSk6MAgDTq51hcvUsYPIJ/6BExVbp6KLFd+f0G frMR8SumPNjxf0GxcJ+YeYwl7YNwBBLNrfy87lFypPFrIm6UsgW3z55PjwwGXyZRgxp/ N3aj0RiCV7Y8iCdwHHBXrunf59XkLPhfzjJfLKgpw64BHyj4gqdjOd4gp2N3KZzpkljh 3btg== X-Gm-Message-State: AOJu0Yzu7zNFoNe/X2oIhiBt+RKylo/Xma39OA0/pdTOXZ67Xlngycds PjNCIg5D0WwSB6JjaHXYqUVgu8d10TcM+cg6Pg0n7mwIc6DSnYhKZhhQbzu6UcxxQH7hDOcYFnq lVO9gZOAllsJqBuDlsfM0LHK7/+eUhpDM+wuUQFEADdyVRhgikpAYmb7RysZxbThjmmq26EtA3N Le4jEJ4w1U5irSNmzxyKEd2+0sG/qSamehcjOvzIupk3da9BKa0n8S39mhqKE= X-Google-Smtp-Source: AGHT+IGtYSnqYirJdhGczaNALEr4XGlPgu41IjcJLHoAc7hU2KFh0TP56sIMAUxO7Rvj70QlX+bykpvSwomB2m58RA== X-Received: from pjx11.prod.google.com ([2002:a17:90b:568b:b0:305:2d2a:dfaa]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:394f:b0:2fe:afa7:eaf8 with SMTP id 98e67ed59e1d1-3087bb49233mr6164139a91.13.1745014382268; Fri, 18 Apr 2025 15:13:02 -0700 (PDT) Date: Fri, 18 Apr 2025 22:12:51 +0000 In-Reply-To: <20250418221254.112433-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250418221254.112433-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.805.g082f7c87e0-goog Message-ID: <20250418221254.112433-4-hramamurthy@google.com> Subject: [PATCH net-next 3/6] gve: Add initial gve_clock From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, horms@kernel.org, linux-kernel@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Kevin Yang This initial version of the gve clock only performs one major function, managing querying the nic clock and storing the results. The timestamp delivered in descriptors has a wraparound time of ~4 seconds so 250ms is chosen as the sync cadence to provide a balance between performance, and drift potential when we do start associating host time and nic time. A dedicated ordered workqueue has been setup to ensure a consistent cadence for querying the nic clock. Co-developed-by: John Fraker Signed-off-by: John Fraker Co-developed-by: Ziwei Xiao Signed-off-by: Ziwei Xiao Co-developed-by: Tim Hostetler Signed-off-by: Tim Hostetler Reviewed-by: Willem de Bruijn Signed-off-by: Kevin Yang Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/Makefile | 2 +- drivers/net/ethernet/google/gve/gve.h | 8 ++ drivers/net/ethernet/google/gve/gve_clock.c | 103 ++++++++++++++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 drivers/net/ethernet/google/gve/gve_clock.c diff --git a/drivers/net/ethernet/google/gve/Makefile b/drivers/net/ethernet/google/gve/Makefile index 4520f1c07a63..c8fae2c03f2b 100644 --- a/drivers/net/ethernet/google/gve/Makefile +++ b/drivers/net/ethernet/google/gve/Makefile @@ -2,4 +2,4 @@ obj-$(CONFIG_GVE) += gve.o gve-objs := gve_main.o gve_tx.o gve_tx_dqo.o gve_rx.o gve_rx_dqo.o gve_ethtool.o gve_adminq.o gve_utils.o gve_flow_rule.o \ - gve_buffer_mgmt_dqo.o + gve_buffer_mgmt_dqo.o gve_clock.o diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h index cf6947731a9b..5a141a8735d6 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -873,7 +873,12 @@ struct gve_priv { struct gve_rss_config rss_config; /* True if the device supports reading the nic clock */ + struct workqueue_struct *gve_ts_wq; bool nic_timestamp_supported; + struct delayed_work nic_ts_sync_task; + struct gve_nic_ts_report *nic_ts_report; + dma_addr_t nic_ts_report_bus; + u64 last_sync_nic_counter; /* Clock counter from last NIC TS report */ }; enum gve_service_task_flags_bit { @@ -1255,6 +1260,9 @@ int gve_flow_rules_reset(struct gve_priv *priv); int gve_init_rss_config(struct gve_priv *priv, u16 num_queues); /* report stats handling */ void gve_handle_report_stats(struct gve_priv *priv); +/* Timestamping */ +int gve_init_clock(struct gve_priv *priv); +void gve_teardown_clock(struct gve_priv *priv); /* exported by ethtool.c */ extern const struct ethtool_ops gve_ethtool_ops; /* needed by ethtool */ diff --git a/drivers/net/ethernet/google/gve/gve_clock.c b/drivers/net/ethernet/google/gve/gve_clock.c new file mode 100644 index 000000000000..464ce9a6f4b6 --- /dev/null +++ b/drivers/net/ethernet/google/gve/gve_clock.c @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* Google virtual Ethernet (gve) driver + * + * Copyright (C) 2015-2025 Google LLC + */ + +#include "gve.h" +#include "gve_adminq.h" + +/* Interval to schedule a nic timestamp calibration, 250ms. */ +#define GVE_NIC_TS_SYNC_INTERVAL_MS 250 + +/* Read the nic timestamp from hardware via the admin queue. */ +static int gve_clock_nic_ts_read(struct gve_priv *priv) +{ + u64 nic_raw; + int err; + + err = gve_adminq_report_nic_ts(priv, priv->nic_ts_report_bus); + if (err) + return err; + + nic_raw = be64_to_cpu(priv->nic_ts_report->nic_timestamp); + WRITE_ONCE(priv->last_sync_nic_counter, nic_raw); + + return 0; +} + +static void gve_nic_ts_sync_task(struct work_struct *work) +{ + struct gve_priv *priv = container_of(work, struct gve_priv, + nic_ts_sync_task.work); + int err; + + if (gve_get_reset_in_progress(priv) || !gve_get_admin_queue_ok(priv)) + goto out; + + err = gve_clock_nic_ts_read(priv); + if (err && net_ratelimit()) + dev_err(&priv->pdev->dev, + "%s read err %d\n", __func__, err); + +out: + queue_delayed_work(priv->gve_wq, &priv->nic_ts_sync_task, + msecs_to_jiffies(GVE_NIC_TS_SYNC_INTERVAL_MS)); +} + +int gve_init_clock(struct gve_priv *priv) +{ + int err; + + if (!priv->nic_timestamp_supported) + return -EPERM; + + priv->nic_ts_report = + dma_alloc_coherent(&priv->pdev->dev, + sizeof(struct gve_nic_ts_report), + &priv->nic_ts_report_bus, + GFP_KERNEL); + if (!priv->nic_ts_report) { + dev_err(&priv->pdev->dev, "%s dma alloc error\n", __func__); + return -ENOMEM; + } + + err = gve_clock_nic_ts_read(priv); + if (err) { + dev_err(&priv->pdev->dev, "%s read error %d\n", __func__, err); + goto free_nic_ts_report; + } + + priv->gve_ts_wq = alloc_ordered_workqueue("gve-ts", 0); + if (!priv->gve_ts_wq) { + dev_err(&priv->pdev->dev, "%s Could not allocate workqueue\n", + __func__); + err = -ENOMEM; + goto free_nic_ts_report; + } + INIT_DELAYED_WORK(&priv->nic_ts_sync_task, gve_nic_ts_sync_task); + queue_delayed_work(priv->gve_ts_wq, &priv->nic_ts_sync_task, + msecs_to_jiffies(GVE_NIC_TS_SYNC_INTERVAL_MS)); + + return 0; + +free_nic_ts_report: + dma_free_coherent(&priv->pdev->dev, + sizeof(struct gve_nic_ts_report), + priv->nic_ts_report, priv->nic_ts_report_bus); + priv->nic_ts_report = NULL; + + return err; +} + +void gve_teardown_clock(struct gve_priv *priv) +{ + if (priv->nic_ts_report) { + cancel_delayed_work_sync(&priv->nic_ts_sync_task); + destroy_workqueue(priv->gve_ts_wq); + dma_free_coherent(&priv->pdev->dev, + sizeof(struct gve_nic_ts_report), + priv->nic_ts_report, priv->nic_ts_report_bus); + priv->nic_ts_report = NULL; + } +} From patchwork Fri Apr 18 22:12:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harshitha Ramamurthy X-Patchwork-Id: 14057711 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7600253B59 for ; Fri, 18 Apr 2025 22:13:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014386; cv=none; b=fflf71x7n/H4kRDR1W5txSeqEGfFEJ8mpNMxSyFTOWCbAdTdal1Fd9igcfGo+4SLB7j6xuxgueehYX/qyWgD1IX8HJmfa8cVyy2kPhAZFb0MX212uKy9Z6aNTN9jKmV8hdup20oraB/SGqa1EiREqzn3fewqkz5WLqtPJXDJQTY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014386; c=relaxed/simple; bh=LDgGYHe8WA8ukbxnUNq27MZRp/79LOgnW+Ea0tdUQtI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UEWKR+HMsswK9Kl9kKFXSE+vgeb3bfJcLwYRMtjJYha8lfyeYE348XPr+2jBW1sIIr6nwdkYXqcPGXqw5ChZjSKCmtNZHmFTQ3ChRWc2q2L/cBuqFAYjiCRwAs5YGOlEZgPLlFYC0eAFO30YY0plocYGmCTs0aza2gothFLgdbE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=PSROWmdI; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="PSROWmdI" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-736c1ea954fso1253185b3a.3 for ; Fri, 18 Apr 2025 15:13:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1745014384; x=1745619184; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=3az9duQD4SoXSFpkKw6AxoXhKZsRVTLRACFG0KE1Wlc=; b=PSROWmdIa7vPOJTrXTI1W3OiBMySpMUnVS1YH1or+2fOtX5ZNO4YldOmrGGwcY0AI0 aXNO1qKAmFFzxXPWWtUIvB43KwcNdfgf1pXRQqUaPLYxcbY8yJ4cLZJgYBb1qiOjojeo jVcMDegGO643Jtnqdf2N5aT875j9w+M9eV67zIfwUsQKT79902iJj1vboThJ+/r/l4Yx BG061Tf2HPvGnbb/prt785C4NYmtnWix/yMgEKFoHkM7Vw2DNDMhnaYHmGpTIdDVb5of j+KYPilCkYyblBDtbS3JnOExSTKxbpox9jSeM17Smn+coWA6Ej2Yqb6RFjpPaFzvpCO/ 6nMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745014384; x=1745619184; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=3az9duQD4SoXSFpkKw6AxoXhKZsRVTLRACFG0KE1Wlc=; b=QJw/4/J+DiYmzvEGnZT7I53/BVo0YAq/mt8XVLtdMvUA8zhE1lrI/NOlYJN7gor4oV lO7OFqbORkkMEDbdTgB22vw2SbsBROEskY2TPdznuaTyHJHvLjGpmTVAYBp1LrVozDRv J5oFdXGY+kFp+AO3yVPynbCI/Yh5k6/VtiWn+zjjF5Zz2+lgO6U6iHh9QWe2PQwsFDu7 Kb+0L8Uv7PptKEnL3oO4w6BdI3h1o7jnoeQ2hWtbea/wlWts6uH8Dvak2bOiSlcGQ0w4 jknm61eJit3cdLdDowzzQu+zvRhEbqT+kBTORbqrmxjQzlaGnguW0LskDEncvrGTestV bsTg== X-Gm-Message-State: AOJu0YzdjYbETjJwZPCUJjZMDmp/pzTUFRpfkgwK5mSxSDzOxFth0e6b ZxUHq5pEBY1AfVvzzuUBArw6SD9fFbk8C5ACL6UWD63IzRsjt1l8772iklN1oZDBXh6Sf5EC0Qg ABPae0F4FHG25nbgDQtJ7a/2GBuytD0c2anA/UiWF5u/6cdamy5FqXml70x5YvuPulHRgK3YTUQ bCTzZGarxu5QOe3Zi3snMOno/+TZdxSVV9xNSzVdpCmMaTeMaF6FHlRbfcLas= X-Google-Smtp-Source: AGHT+IG4xLR4Go44keFo94aEtdtI/SjU6ph+hUQLL+hTOgGcr7s91IwoXVMEfwjbG57hwdEPTAMppEXJYrzLVk7ovg== X-Received: from pgie8.prod.google.com ([2002:a63:ee08:0:b0:b0e:1d1:49c9]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:3a92:b0:1fd:f56f:1cbe with SMTP id adf61e73a8af0-203cbc53800mr6359235637.13.1745014383952; Fri, 18 Apr 2025 15:13:03 -0700 (PDT) Date: Fri, 18 Apr 2025 22:12:52 +0000 In-Reply-To: <20250418221254.112433-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250418221254.112433-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.805.g082f7c87e0-goog Message-ID: <20250418221254.112433-5-hramamurthy@google.com> Subject: [PATCH net-next 4/6] gve: Add rx hardware timestamp expansion From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, horms@kernel.org, linux-kernel@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: John Fraker Allow the rx path to recover the high 32 bits of the full 64 bit rx timestamp. Use the low 32 bits of the last synced nic time and the 32 bits of the timestamp provided in the rx descriptor to generate a difference, which is then applied to the last synced nic time to reconstruct the complete 64-bit timestamp. This scheme remains accurate as long as no more than ~2 seconds have passed between the last read of the nic clock and the timestamping application of the received packet. Co-developed-by: Ziwei Xiao Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: John Fraker Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve_rx_dqo.c | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/ethernet/google/gve/gve_rx_dqo.c index dcb0545baa50..483d188d33ab 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -437,6 +437,29 @@ static void gve_rx_skb_hash(struct sk_buff *skb, skb_set_hash(skb, le32_to_cpu(compl_desc->hash), hash_type); } +/* Expand the hardware timestamp to the full 64 bits of width, and add it to the + * skb. + * + * This algorithm works by using the passed hardware timestamp to generate a + * diff relative to the last read of the nic clock. This diff can be positive or + * negative, as it is possible that we have read the clock more recently than + * the hardware has received this packet. To detect this, we use the high bit of + * the diff, and assume that the read is more recent if the high bit is set. In + * this case we invert the process. + * + * Note that this means if the time delta between packet reception and the last + * clock read is greater than ~2 seconds, this will provide invalid results. + */ +static void __maybe_unused gve_rx_skb_hwtstamp(struct gve_rx_ring *rx, u32 hwts) +{ + s64 last_read = rx->gve->last_sync_nic_counter; + struct sk_buff *skb = rx->ctx.skb_head; + u32 low = (u32)last_read; + s32 diff = hwts - low; + + skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(last_read + diff); +} + static void gve_rx_free_skb(struct napi_struct *napi, struct gve_rx_ring *rx) { if (!rx->ctx.skb_head) From patchwork Fri Apr 18 22:12:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harshitha Ramamurthy X-Patchwork-Id: 14057712 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06B0E253F31 for ; Fri, 18 Apr 2025 22:13:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014387; cv=none; b=kbuVOeLvRZeq9tAqA1Y4ijk/w+RyudpAkUb5VY3ul31srGjGBguUVZ/ivB6LZSsO1IA4hlnukqzfO7Mbgvh1T1KWUwtI0VwO4M3HDzP5kxkUMYSotFq4dl59XXo8FAQlFw3ZfS6URkPvarVXtqGIpgq74YYObNFCwVGHYQRxl4Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014387; c=relaxed/simple; bh=HbTA6+SIWtsx6p8fLoWBzXpmBqT7XUqskQU9DuFh/FE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=cHKgrPv6/GbVMni4zB4zSsiNEzklt/mXmd3p6vnTUC/P9Xwj3z7m1E+UuoPp2Tbu18vOor71WlyszKVD06DdQuVqIlRxPgPmWO1AjK+ZMNcPS9ZVDfGxNmPaoG85GU3Rn5fP7KyNqdO3pCQFsjhXgzAw7MwpxAevzr8r64GI91g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kdEG33ff; arc=none smtp.client-ip=209.85.215.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kdEG33ff" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-af98c8021b5so2212394a12.2 for ; Fri, 18 Apr 2025 15:13:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1745014385; x=1745619185; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=0EmA7Upz+qHOtDwczVN9FS7m8URUS9IO0+ID1IaGMNU=; b=kdEG33ff3qAaumC965pp+Lt8yohfxsFWjDErOuX6Z1mGNjvDIWzgqlsIUckqVTJu+v /4W5NMjweWkAzSkRzLO7AbVLu+vvaUcL/TjvXU0udPT6uBpfvB0WFUeSmgpX482dfVXv CYUW3HJwnAygsBZ4eXgLo0/3jQP5E3ZShFjQSM78VCCGZmDusrzyFpTBEYMxA+d39k9q yU8v9u9MTFAxjo3hCtxhPLSzS4+I4mZwXuRvU/OWDg3HnNEgZ4fu1k9blgcSE3YwXKwW gpILSeFYySKJ7GUJcGXAPpPkvUbd0yVGV1IMvqtVA1WtqyDlLUcnuM8sXR1GUZa8l7zv vs+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745014385; x=1745619185; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0EmA7Upz+qHOtDwczVN9FS7m8URUS9IO0+ID1IaGMNU=; b=ctIrESQWHioAcIeVSpmUogXF0HNzg+WFkdo9glFCqzsWZDC7FHxfvjE5NRXod1qkiH HnCeXr3Q2oAkwkbYx+ZTVZen8McVpCWKt4cwCGNFl0bp4eYz/GjmVOTK4Cxd8HtRYMeI 0Aw0GKT+ryESRzCKvLlCjQLvi5wfCa/cj3r1PzNdEaUW6UCv6360i4/1t1SCl3D9BlqH RU/1RDmjCy+7rQYNlCq0fBIwmXmEBPplUQacAm7Sgf8IrmEww3VG6jkXV87J4zkEoGen zj0L0QAYQUjQxA36GxQiJusx2FPA3+xhujzRySw0Kr8amzAv0JNbYuIN6gC8wZTwsK1D SNKg== X-Gm-Message-State: AOJu0YzwDqFWJ7kEYCBTXz34E1csn0Et15e5+e6qHTEl8Ae9b1xhF8iI nVv4YCAQg1iJApXnDsSW6gyZ58H4HoNOiSpQGvADPsoHUEqy2zkU0EdPIc8kEIVOWJy71JVL5Uz /kBzhIsBTQi8NLXIcVZq2ovYT9dAg13oqLcd3Gnqb/4R7PW8KxXicERgKmSoR3GQUuamG/Q2WOD +Zf6sb8rNRTuK9OTB3btOI49jChpKqEyythf4F7tDmESMGrcw0oi+H9tXEYj4= X-Google-Smtp-Source: AGHT+IHeFwo6XZSRpHYdFnZUzLtRwDr2aNE4i+vS4FNv6MPSU+02tuDYkNMd44kkWhE2mPSdgmGVyfYVsz1iFPhVSA== X-Received: from pjbkk11.prod.google.com ([2002:a17:90b:4a0b:b0:308:87dc:aa52]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2383:b0:21f:1549:a55a with SMTP id d9443c01a7336-22c5357a0femr67001545ad.1.1745014385253; Fri, 18 Apr 2025 15:13:05 -0700 (PDT) Date: Fri, 18 Apr 2025 22:12:53 +0000 In-Reply-To: <20250418221254.112433-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250418221254.112433-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.805.g082f7c87e0-goog Message-ID: <20250418221254.112433-6-hramamurthy@google.com> Subject: [PATCH net-next 5/6] gve: Add support for SIOC[GS]HWTSTAMP IOCTLs From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, horms@kernel.org, linux-kernel@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: John Fraker Add support for the SIOCSHWTSTAMP and SIOCGHWTSTAMP IOCTL methods using gve_get_ts_config and gve_set_ts_config. Included with this support is the small change necessary to read the rx timestamp out of the rx descriptor, now that timestamps start being enabled. The gve clock is only used for hardware timestamps, so started when timestamps are requested and stopped when not needed. This version only supports RX hardware timestamping with the rx filter HWTSTAMP_FILTER_ALL. If the user attempts to configure a more restrictive filter, the filter will be set to HWTSTAMP_FILTER_ALL in the returned structure. Co-developed-by: Ziwei Xiao Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: John Fraker Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 2 + .../net/ethernet/google/gve/gve_desc_dqo.h | 3 +- drivers/net/ethernet/google/gve/gve_main.c | 47 +++++++++++++++++++ drivers/net/ethernet/google/gve/gve_rx_dqo.c | 5 +- 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h index 5a141a8735d6..adf5117f5087 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -876,6 +877,7 @@ struct gve_priv { struct workqueue_struct *gve_ts_wq; bool nic_timestamp_supported; struct delayed_work nic_ts_sync_task; + struct kernel_hwtstamp_config ts_config; struct gve_nic_ts_report *nic_ts_report; dma_addr_t nic_ts_report_bus; u64 last_sync_nic_counter; /* Clock counter from last NIC TS report */ diff --git a/drivers/net/ethernet/google/gve/gve_desc_dqo.h b/drivers/net/ethernet/google/gve/gve_desc_dqo.h index f79cd0591110..d17da841b5a0 100644 --- a/drivers/net/ethernet/google/gve/gve_desc_dqo.h +++ b/drivers/net/ethernet/google/gve/gve_desc_dqo.h @@ -247,7 +247,8 @@ struct gve_rx_compl_desc_dqo { }; __le32 hash; __le32 reserved6; - __le64 reserved7; + __le32 reserved7; + __le32 ts; /* timestamp in nanosecs */ } __packed; static_assert(sizeof(struct gve_rx_compl_desc_dqo) == 32); diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c index 8aaac9101377..36d91eb004c3 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -721,6 +721,7 @@ static void gve_teardown_device_resources(struct gve_priv *priv) gve_free_counter_array(priv); gve_free_notify_blocks(priv); gve_free_stats_report(priv); + gve_teardown_clock(priv); gve_clear_device_resources_ok(priv); } @@ -2041,6 +2042,47 @@ static int gve_set_features(struct net_device *netdev, return err; } +static int gve_get_ts_config(struct net_device *dev, + struct kernel_hwtstamp_config *kernel_config) +{ + struct gve_priv *priv = netdev_priv(dev); + + *kernel_config = priv->ts_config; + return 0; +} + +static int gve_set_ts_config(struct net_device *dev, + struct kernel_hwtstamp_config *kernel_config, + struct netlink_ext_ack *extack) +{ + struct gve_priv *priv = netdev_priv(dev); + int err; + + if (kernel_config->tx_type != HWTSTAMP_TX_OFF) { + dev_err(&priv->pdev->dev, "TX timestamping is not supported\n"); + return -ERANGE; + } + + if (kernel_config->rx_filter != HWTSTAMP_FILTER_NONE) { + kernel_config->rx_filter = HWTSTAMP_FILTER_ALL; + if (!priv->nic_ts_report) { + err = gve_init_clock(priv); + if (err) { + dev_err(&priv->pdev->dev, + "Failed to initialize GVE clock\n"); + kernel_config->rx_filter = HWTSTAMP_FILTER_NONE; + return err; + } + } + } else { + gve_teardown_clock(priv); + } + + priv->ts_config.rx_filter = kernel_config->rx_filter; + + return 0; +} + static const struct net_device_ops gve_netdev_ops = { .ndo_start_xmit = gve_start_xmit, .ndo_features_check = gve_features_check, @@ -2052,6 +2094,8 @@ static const struct net_device_ops gve_netdev_ops = { .ndo_bpf = gve_xdp, .ndo_xdp_xmit = gve_xdp_xmit, .ndo_xsk_wakeup = gve_xsk_wakeup, + .ndo_hwtstamp_get = gve_get_ts_config, + .ndo_hwtstamp_set = gve_set_ts_config, }; static void gve_handle_status(struct gve_priv *priv, u32 status) @@ -2271,6 +2315,9 @@ static int gve_init_priv(struct gve_priv *priv, bool skip_describe_device) priv->rx_coalesce_usecs = GVE_RX_IRQ_RATELIMIT_US_DQO; } + priv->ts_config.tx_type = HWTSTAMP_TX_OFF; + priv->ts_config.rx_filter = HWTSTAMP_FILTER_NONE; + setup_device: gve_set_netdev_xdp_features(priv); err = gve_setup_device_resources(priv); diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/ethernet/google/gve/gve_rx_dqo.c index 483d188d33ab..bad9e15cb934 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -450,7 +450,7 @@ static void gve_rx_skb_hash(struct sk_buff *skb, * Note that this means if the time delta between packet reception and the last * clock read is greater than ~2 seconds, this will provide invalid results. */ -static void __maybe_unused gve_rx_skb_hwtstamp(struct gve_rx_ring *rx, u32 hwts) +static void gve_rx_skb_hwtstamp(struct gve_rx_ring *rx, u32 hwts) { s64 last_read = rx->gve->last_sync_nic_counter; struct sk_buff *skb = rx->ctx.skb_head; @@ -790,6 +790,9 @@ static int gve_rx_complete_skb(struct gve_rx_ring *rx, struct napi_struct *napi, if (feat & NETIF_F_RXCSUM) gve_rx_skb_csum(rx->ctx.skb_head, desc, ptype); + if (rx->gve->ts_config.rx_filter == HWTSTAMP_FILTER_ALL) + gve_rx_skb_hwtstamp(rx, le32_to_cpu(desc->ts)); + /* RSC packets must set gso_size otherwise the TCP stack will complain * that packets are larger than MTU. */ From patchwork Fri Apr 18 22:12:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harshitha Ramamurthy X-Patchwork-Id: 14057713 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72A96254B11 for ; Fri, 18 Apr 2025 22:13:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014388; cv=none; b=WfnFewCa1VZpvYcb3G8uxfIWJRpAGuSOo31mrKMZ0dQU3m1uSRJgMFX2EnJzh+27pEJajcWviiTcU3js3fnyuMX7FrVj66Bgr+xvY9WY8H9hdMEDx8AODrRudiB73HAD9rbsGQ+9vfGlvQOKvpfUib4PNqZLiAvvJKbpAHtWIoo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745014388; c=relaxed/simple; bh=loPDuypeVYAq3mG7jBub5MltLGGR1IyQ4B+mIhsZ8Mk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=je92C5vAvJWSb8bBiR3S6Gfzd9mHUKQonPFcyc+QPON0AoZ8hiy64Omtj+q3G5t9Y/xhxiffQxmTCQs31ANxLU44dEsHtIRuRPcQJT8AITFD70W8iiwI3UehWYKjrl3cBtfKayav0PsKiNA/QYgm7L3apKpE6sFJD9dv1gye0yg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=zV4FFxg7; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="zV4FFxg7" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-22650077995so33454465ad.3 for ; Fri, 18 Apr 2025 15:13:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1745014387; x=1745619187; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=WmpSa9vPgxqGtw2Pb/sSZHf+Ch+PiH7QnNGMEcCsUI8=; b=zV4FFxg7EuO1WHN2M8jhZwDLEnsgPTwh3fxOc7c3yOr7X+1eIBCI3N6Q56ncw67qXo o+9TeNQaDJENxB20HzWVZfgIrBs02NOduObVpuGNgad3ULhPKK07A0D0lj8XWF8FVWJJ uryUroqyI3zItk02HrbLm1dCwkVKVSIg4Mv136xiPJPDaLX5voryLe9fkNltFvi9dGpQ YM5eAMFQIJsMyfAFFafpqOWXi8+3smAZZeM32Whf0oMV3iqD+vKKN2qEpVux3w5NGgic x4l+8ZER7M0FivKTQOEu9vaXzguZIDaMJ1uI8lsdH44SZq9X8wzFNQUEpwlBhS0WG1vN hQzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745014387; x=1745619187; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WmpSa9vPgxqGtw2Pb/sSZHf+Ch+PiH7QnNGMEcCsUI8=; b=qa0RkAxN6QCiFR5TazP7F/IYJU1ByCGNd6mhcFb46E39TUB9kfVbvlG4bcDHKc6Wte +ODF68KT1Y/L9TFRnw2QDJcVqHh3gPphzUbzf0rW0eflEM+B4vUygIETJuQnXsbtFafN CZIpfnbZkwMFVPxPaS68xxU0Bib0SE7jT2+PnMh8/ttz1fzH2HLWe+PlgD2blfq6nVZA SgnMmkMPRPHfK+mIq99/5vYUdDCZhRPwAmXjgrbCUv+RM5poV4mJALsk9IeXoabY1f7Q BLz5021tqNaYS/vH2sjZXeWNXYfJ0h8ZzQckCoJ9zaUS92HNT2rSLnNez6vosXvLrxVp xnNg== X-Gm-Message-State: AOJu0YxwndV+lveRKHaQD9n+CU8R7RWcYxFAeRoP9DV1fCX1WHoi4mRe DvkACbbT3gGbpG9084bfdTAHwXSOfLbWzaM+Rr6kgSgLFe6KKSeIEBE3TNCo7yZNCjYbiw06b1w j4SPYbEfhU1HiRqTx/tesUqnPs+iwNRdb3YTSvWxkYbrh5OA4DjYeMZ41kpDyguhb69bPLsgmCt Z+Ot6PSu9GgpZYGLuc9vmMnhXkBOZbBcbUK+P9wgqMntcIilMW9xG9NYaUKj8= X-Google-Smtp-Source: AGHT+IG3lVPqU7fvkkyM2LJbiF75yVGwcAeROVZnXCXwIg2K49ux/hb1YMySnaNgbNo+R2UijIsSgo4CyG790fQKwA== X-Received: from pfbfm7.prod.google.com ([2002:a05:6a00:2f87:b0:739:8c87:ed18]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:db0f:b0:21b:d105:26b8 with SMTP id d9443c01a7336-22c5357a7d7mr53482605ad.7.1745014386582; Fri, 18 Apr 2025 15:13:06 -0700 (PDT) Date: Fri, 18 Apr 2025 22:12:54 +0000 In-Reply-To: <20250418221254.112433-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250418221254.112433-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.805.g082f7c87e0-goog Message-ID: <20250418221254.112433-7-hramamurthy@google.com> Subject: [PATCH net-next 6/6] gve: Advertise support for rx hardware timestamping From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, horms@kernel.org, linux-kernel@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: John Fraker This patch expands our get_ts_info ethtool handler with the new gve_get_ts_info which advertises support for rx hardware timestamping. With this patch, the driver now fully supports rx hardware timestamping. Co-developed-by: Ziwei Xiao Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: John Fraker Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve_ethtool.c | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/ethernet/google/gve/gve_ethtool.c index 76f759309196..ba838e5b7d53 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -929,6 +929,24 @@ static int gve_set_rxfh(struct net_device *netdev, struct ethtool_rxfh_param *rx return 0; } +static int gve_get_ts_info(struct net_device *netdev, + struct kernel_ethtool_ts_info *info) +{ + struct gve_priv *priv = netdev_priv(netdev); + + ethtool_op_get_ts_info(netdev, info); + + if (priv->nic_timestamp_supported) { + info->so_timestamping |= SOF_TIMESTAMPING_RX_HARDWARE | + SOF_TIMESTAMPING_RAW_HARDWARE; + + info->rx_filters |= BIT(HWTSTAMP_FILTER_NONE) | + BIT(HWTSTAMP_FILTER_ALL); + } + + return 0; +} + const struct ethtool_ops gve_ethtool_ops = { .supported_coalesce_params = ETHTOOL_COALESCE_USECS, .supported_ring_params = ETHTOOL_RING_USE_TCP_DATA_SPLIT, @@ -957,5 +975,5 @@ const struct ethtool_ops gve_ethtool_ops = { .get_priv_flags = gve_get_priv_flags, .set_priv_flags = gve_set_priv_flags, .get_link_ksettings = gve_get_link_ksettings, - .get_ts_info = ethtool_op_get_ts_info, + .get_ts_info = gve_get_ts_info, };