From 117ed5c2d0f865894dd930d877f0ec28bc23d951 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 17 Jan 2017 14:17:41 +0100 Subject: [PATCH] timemaster: check support for SW time stamping. When an interface doesn't support HW time stamping, before falling back to SW time stamping, check if it's actually supported and exit with an error message if not. Signed-off-by: Miroslav Lichvar --- timemaster.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/timemaster.c b/timemaster.c index 880b2ab..cda2d90 100644 --- a/timemaster.c +++ b/timemaster.c @@ -674,13 +674,15 @@ static int add_ptp_source(struct ptp_domain *source, { struct config_file *config_file; char **command, *uds_path, **interfaces, *message_tag; - int i, j, num_interfaces, *phc, *phcs, hw_ts; + int i, j, num_interfaces, *phc, *phcs, hw_ts, sw_ts; struct sk_ts_info ts_info; pr_debug("adding PTP domain %d", source->domain); hw_ts = SOF_TIMESTAMPING_TX_HARDWARE | SOF_TIMESTAMPING_RX_HARDWARE | SOF_TIMESTAMPING_RAW_HARDWARE; + sw_ts = SOF_TIMESTAMPING_TX_SOFTWARE | SOF_TIMESTAMPING_RX_SOFTWARE | + SOF_TIMESTAMPING_SOFTWARE; for (num_interfaces = 0; source->interfaces[num_interfaces]; num_interfaces++) @@ -702,9 +704,14 @@ static int add_ptp_source(struct ptp_domain *source, return 1; } - if (!ts_info.valid || - ((ts_info.so_timestamping & hw_ts) != hw_ts)) { + if (((ts_info.so_timestamping & hw_ts) != hw_ts)) { pr_debug("interface %s: no PHC", source->interfaces[i]); + if ((ts_info.so_timestamping & sw_ts) != sw_ts) { + pr_err("time stamping not supported on %s", + source->interfaces[i]); + free(phcs); + return 1; + } continue; }