Subject: Re: [PATCH v2 1/2] ptp/ptp_vmw: Implement PTP clock adjustments ops

From: Vadim Fedorenko <[email-masked]>
Date: Wed, 22 Oct 2025 12:13:10 +0100

On 22/10/2025 11:51, Ajay Kaher wrote:
> Implement PTP clock ops that set time and frequency of the underlying
> clock. On supported versions of VMware precision clock virtual device,
> new commands can adjust its time and frequency, allowing time transfer
> from a virtual machine to the underlying hypervisor.
> 
> In case of error, vmware_hypercall doesn't return Linux defined errno,
> converting it to -EIO.
> 
> Cc: Shubham Gupta <[email-masked]>
> Cc: Nick Shi <[email-masked]>
> Tested-by: Karen Wang <[email-masked]>
> Tested-by: Hari Krishna Ginka <[email-masked]>
> Signed-off-by: Ajay Kaher <[email-masked]>
> ---
>   drivers/ptp/ptp_vmw.c | 39 +++++++++++++++++++++++++++++----------
>   1 file changed, 29 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/ptp/ptp_vmw.c b/drivers/ptp/ptp_vmw.c
> index 20ab05c4d..7d117eee4 100644
> --- a/drivers/ptp/ptp_vmw.c
> +++ b/drivers/ptp/ptp_vmw.c
> @@ -1,6 +1,7 @@
>   // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
>   /*
> - * Copyright (C) 2020 VMware, Inc., Palo Alto, CA., USA
> + * Copyright (C) 2020-2023 VMware, Inc., Palo Alto, CA., USA
> + * Copyright (C) 2024-2025 Broadcom Ltd.
>    *
>    * PTP clock driver for VMware precision clock virtual device.
>    */
> @@ -16,20 +17,36 @@
>   
>   #define VMWARE_CMD_PCLK(nr) ((nr << 16) | 97)
>   #define VMWARE_CMD_PCLK_GETTIME VMWARE_CMD_PCLK(0)
> +#define VMWARE_CMD_PCLK_SETTIME VMWARE_CMD_PCLK(1)
> +#define VMWARE_CMD_PCLK_ADJTIME VMWARE_CMD_PCLK(2)
> +#define VMWARE_CMD_PCLK_ADJFREQ VMWARE_CMD_PCLK(3)
>   
>   static struct acpi_device *ptp_vmw_acpi_device;
>   static struct ptp_clock *ptp_vmw_clock;
>   
> +/*
> + * Helpers for reading and writing to precision clock device.
> + */
>   
> -static int ptp_vmw_pclk_read(u64 *ns)
> +static int ptp_vmw_pclk_read(int cmd, u64 *ns)
>   {
>   	u32 ret, nsec_hi, nsec_lo;
>   
> -	ret = vmware_hypercall3(VMWARE_CMD_PCLK_GETTIME, 0,
> -				&nsec_hi, &nsec_lo);
> +	ret = vmware_hypercall3(cmd, 0, &nsec_hi, &nsec_lo);
>   	if (ret == 0)
>   		*ns = ((u64)nsec_hi << 32) | nsec_lo;
> -	return ret;
> +
> +	return ret != 0 ? -EIO : 0;
> +}

Why do you need to introduce this change? VMWARE_CMD_PCLK_GETTIME is
the only command used in read() in both patches of this patchset.