On Fri, May 22, 2020 at 04:37:23PM +0800, Jianyong Wu wrote: > To use this feature, you should call PTP_EXTTS_REQUEST(2) ioctl with flag > set bit PTP_KVM_ARM_PHY_COUNTER in its argument then call > PTP_SYS_OFFSET_PRECISE(2) ioctl to get the cross timestamp and phyical > counter will return. If the bit not set or no call for PTP_EXTTS_REQUEST2, > virtual counter will return by default. I'm sorry, but NAK on this completely bizarre twisting of the user space API. > diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c > index fef72f29f3c8..8b0a7b328bcd 100644 > --- a/drivers/ptp/ptp_chardev.c > +++ b/drivers/ptp/ptp_chardev.c > @@ -123,6 +123,9 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg) > struct timespec64 ts; > int enable, err = 0; > > +#ifdef CONFIG_ARM64 > + static long flag; > +#endif > switch (cmd) { > > case PTP_CLOCK_GETCAPS: > @@ -149,6 +152,24 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg) > err = -EFAULT; > break; > } > + > +#ifdef CONFIG_ARM64 > + /* > + * Just using this ioctl to tell kvm ptp driver to get PHC > + * with physical counter, so if bit PTP_KVM_ARM_PHY_COUNTER > + * is set then just exit directly. > + * In most cases, we just need virtual counter from host and > + * there is limited scenario using this to get physical counter > + * in guest. > + * Be careful to use this as there is no way to set it back > + * unless you reinstall the module. > + * This is only for arm64. > + */ > + if (req.extts.flags & PTP_KVM_ARM_PHY_COUNTER) { > + flag = 1; > + break; > + } > +#endif This file contains the generic PTP Hardware Clock character device implementation. It is no place for platform specific hacks. Sorry, Richard