On Wed, Feb 17, 2021 at 9:20 PM Min Li <min.li...@renesas.com> wrote: > > I attached the G.8273.2 document, where chapter 6 is about supporting > physical layer > frequency. And combo mode is Renesas way to support this requirement. Other > companies > may come up with different ways to support it. > > When EEC quality is below certain level, we would wanna turn off combo mode.
Maybe this is something that could be handled inside of the device driver then? If the driver can use the same algorithm that is in your user space software today, that would seem to be a nicer way to handle it than requiring a separate application. > > > This function will read FCW first and convert it to FFO. > > > > Is this related to the information in the timex->freq field? It sounds like > > this > > would already be accessible through the existing > > clock_adjtime() interface. > > > > They are related, but dealing with timex->freq has limitations > > 1) Renesas SMU has up to 8 DPLLs and only one of the them would be ptp > clock and we want to be able to read any DPLL's FFO or state Is this necessarily unique to Renesas SMU though? Not sure what makes sense in terms of the phc/ptp interface. Could there just be a separate instance for each DPLL in the phc subsystem even if it's actually a ptp clock, or would that be an incorrect use? > 2) timex->freq's unit is ppb and we want to read more precise ffo in smaller > unit of ppqt This also sounds like something that would not be vendor specific. If you need a higher resolution, then at some point others would need it as well. There is already precedence in 'struct timex' to redefine the resolution of some fields based on a flag -- 'time.tv_usec' can either refer to microseconds to nanoseconds. If the range of the 'freq' field is sufficient to encode ppqt, you could add another flag for that, otherwise another reserved field can be used. > 3) there is no interface in the current ptp hardware clock infrastructure to > read ffo back from hardware Adding an internal interface is the easy part here, the hard part is defining the user interface. > > Wouldn't any PTP clock run in one of these modes? If this is just > > informational, it might be appropriate to have another sysfs attribute for > > each PTP clock that shows the state of the DPLL, and then have the PTP > > driver either fill in the current value in 'struct ptp_clock', or provide a > > callback to report the state when a user reads the sysfs attribute. > > > > What you propose can work. But DPLL operating mode is not standardized > so different vendor may have different explanation for various modes. If it's a string, that could easily be extended to further modes, as long as the kernel documents which names are allowed. If multiple vendors refer to the same mode by different names, someone will have to decide what to call it in the kernel, and everyone afterwards would use the same name. > Also, I thought sysfs is only for debug or informational purpose. > Production software is not supposed to use it for critical tasks? No, you are probably thinking of debugfs. sysfs is one of multiple common ways to exchange this kind of data in a reliable way. An ioctl would probably work just as well though, usually sysfs is better when the information makes sense to human operators or simple shell scripts, while an ioctl interface is better if performance is important, or if the information is primarily used in C programs. Arnd