Commit 6a83d7f8 authored by Sven Meier's avatar Sven Meier

clock accuracy: added clock accuracy dummies aligned with the class

Added clock accuracy constants and aligned the chaning of the clock class
with the accuracy
parent 91794555
......@@ -13,7 +13,7 @@
static struct pp_runtime_opts sim_master_rt_opts = {
.clock_quality = {
.clockClass = PP_PTP_CLASS_GM_LOCKED,
.clockAccuracy = PP_DEFAULT_CLOCK_ACCURACY,
.clockAccuracy = PP_ACCURACY_DEFAULT,
.offsetScaledLogVariance = PP_DEFAULT_CLOCK_VARIANCE,
},
.flags = PP_DEFAULT_FLAGS,
......
......@@ -119,12 +119,14 @@ int wrc_ptp_set_mode(int mode)
struct pp_globals *ppg = ppi->glbs;
struct wr_dsport *wrp = WR_DSPOR(ppi);
typeof(ppg->rt_opts->clock_quality.clockClass) *class_ptr;
typeof(ppg->rt_opts->clock_quality.clockAccuracy) *accuracy_ptr;
int error = 0;
/*
* We need to change the class in the default options.
* Unfortunately, ppg->rt_opts may be yet unassigned when this runs
*/
class_ptr = &__pp_default_rt_opts.clock_quality.clockClass;
accuracy_ptr = &__pp_default_rt_opts.clock_quality.clockAccuracy;
ptp_mode = 0;
......@@ -136,10 +138,12 @@ int wrc_ptp_set_mode(int mode)
wrp->wrConfig = WR_M_ONLY;
ppi->role = PPSI_ROLE_MASTER;
*class_ptr = PP_PTP_CLASS_GM_LOCKED;
*accuracy_ptr = PP_PTP_ACCURACY_GM_LOCKED;
spll_init(SPLL_MODE_GRAND_MASTER, 0, 1);
shw_pps_gen_unmask_output(1);
lock_timeout = LOCK_TIMEOUT_GM;
DSDEF(ppi)->clockQuality.clockClass = PP_PTP_CLASS_GM_LOCKED;
DSDEF(ppi)->clockQuality.clockAccuracy = PP_PTP_ACCURACY_GM_LOCKED;
bmc_m1(ppi);
break;
......@@ -147,10 +151,12 @@ int wrc_ptp_set_mode(int mode)
wrp->wrConfig = WR_M_ONLY;
ppi->role = PPSI_ROLE_MASTER;
*class_ptr = PP_PTP_CLASS_GM_UNLOCKED;
*accuracy_ptr = PP_PTP_ACCURACY_GM_UNLOCKED;
spll_init(SPLL_MODE_FREE_RUNNING_MASTER, 0, 1);
shw_pps_gen_unmask_output(1);
lock_timeout = LOCK_TIMEOUT_FM;
DSDEF(ppi)->clockQuality.clockClass = PP_PTP_CLASS_GM_UNLOCKED;
DSDEF(ppi)->clockQuality.clockAccuracy = PP_PTP_ACCURACY_GM_UNLOCKED;
bmc_m1(ppi);
break;
......@@ -158,8 +164,11 @@ int wrc_ptp_set_mode(int mode)
wrp->wrConfig = WR_S_ONLY;
ppi->role = PPSI_ROLE_SLAVE;
*class_ptr = PP_CLASS_SLAVE_ONLY;
*accuracy_ptr = PP_ACCURACY_DEFAULT;
spll_init(SPLL_MODE_SLAVE, 0, 1);
shw_pps_gen_unmask_output(0);
DSDEF(ppi)->clockQuality.clockClass = PP_CLASS_SLAVE_ONLY;
DSDEF(ppi)->clockQuality.clockAccuracy = PP_ACCURACY_DEFAULT;
break;
}
......@@ -181,8 +190,10 @@ int wrc_ptp_set_mode(int mode)
pp_printf("\n");
/* If we can't lock to the atomic/gps, we say it in the class */
if (error && mode == WRC_MODE_GM)
if (error && mode == WRC_MODE_GM) {
*class_ptr = PP_PTP_CLASS_GM_UNLOCKED;
*accuracy_ptr = PP_PTP_ACCURACY_GM_UNLOCKED;
}
ptp_mode = mode;
return error;
......
......@@ -40,14 +40,20 @@
#define PP_ARB_CLASS_GM_HOLDOVER 14
#define PP_ARB_CLASS_GM_UNLOCKED 58
#define PP_DEFAULT_CLOCK_ACCURACY 0xFE
#define PP_ACCURACY_DEFAULT 0xFE
#define PP_PTP_ACCURACY_GM_LOCKED 0x20 /* FIXME real values */
#define PP_PTP_ACCURACY_GM_HOLDOVER 0x2F /* FIXME real values */
#define PP_PTP_ACCURACY_GM_UNLOCKED 0xFE /* FIXME real values */
#define PP_ARB_ACCURACY_GM_LOCKED 0x20 /* FIXME real values */
#define PP_ARB_ACCURACY_GM_HOLDOVER 0x2F /* FIXME real values */
#define PP_ARB_ACCURACY_GM_UNLOCKED 0xFE /* FIXME real values */
#define PP_DEFAULT_PRIORITY1 128
#define PP_DEFAULT_PRIORITY2 128
#define PP_DEFAULT_CLOCK_VARIANCE 0x8000 /* FIXME shall be set to
* 0xFFFF once getting calculated,
* defining it is not yet calculated
*/
#define PP_SERVO_UNKNOWN 0
#define PP_SERVO_LOCKED 1
#define PP_SERVO_HOLDOVER 2
......
......@@ -1144,16 +1144,20 @@ static void bmc_update_clock_quality(struct pp_instance *ppi)
if (rt_opts->clock_quality.clockClass == PP_PTP_CLASS_GM_LOCKED) {
if (ppg->defaultDS->clockQuality.clockClass != PP_PTP_CLASS_GM_LOCKED) {
ppg->defaultDS->clockQuality.clockClass = PP_PTP_CLASS_GM_LOCKED;
ppg->defaultDS->clockQuality.clockAccuracy = PP_PTP_ACCURACY_GM_LOCKED;
pp_diag(ppi, bmc, 1,
"Servo locked, new clock class: %i\n",
ppg->defaultDS->clockQuality.clockClass);
"Servo locked, new clock class: %i, new clock accuracy: %i\n",
ppg->defaultDS->clockQuality.clockClass,
ppg->defaultDS->clockQuality.clockAccuracy);
}
} else if (rt_opts->clock_quality.clockClass == PP_ARB_CLASS_GM_LOCKED) {
if (ppg->defaultDS->clockQuality.clockClass != PP_ARB_CLASS_GM_LOCKED) {
ppg->defaultDS->clockQuality.clockClass = PP_ARB_CLASS_GM_LOCKED;
ppg->defaultDS->clockQuality.clockAccuracy = PP_ARB_ACCURACY_GM_LOCKED;
pp_diag(ppi, bmc, 1,
"Servo locked, new clock class: %i\n",
ppg->defaultDS->clockQuality.clockClass);
"Servo locked, new clock class: %i, new clock accuracy: %i\n",
ppg->defaultDS->clockQuality.clockClass,
ppg->defaultDS->clockQuality.clockAccuracy);
}
}
break;
......@@ -1162,16 +1166,20 @@ static void bmc_update_clock_quality(struct pp_instance *ppi)
if (rt_opts->clock_quality.clockClass == PP_PTP_CLASS_GM_LOCKED) {
if (ppg->defaultDS->clockQuality.clockClass != PP_PTP_CLASS_GM_HOLDOVER) {
ppg->defaultDS->clockQuality.clockClass = PP_PTP_CLASS_GM_HOLDOVER;
ppg->defaultDS->clockQuality.clockAccuracy = PP_PTP_ACCURACY_GM_HOLDOVER;
pp_diag(ppi, bmc, 1,
"Servo in holdover, new clock class: %i\n",
ppg->defaultDS->clockQuality.clockClass);
"Servo in holdover, new clock class: %i, new clock accuracy: %i\n",
ppg->defaultDS->clockQuality.clockClass,
ppg->defaultDS->clockQuality.clockAccuracy);
}
} else if (rt_opts->clock_quality.clockClass == PP_ARB_CLASS_GM_LOCKED) {
if (ppg->defaultDS->clockQuality.clockClass != PP_ARB_CLASS_GM_HOLDOVER) {
ppg->defaultDS->clockQuality.clockClass = PP_ARB_CLASS_GM_HOLDOVER;
ppg->defaultDS->clockQuality.clockAccuracy = PP_ARB_ACCURACY_GM_HOLDOVER;
pp_diag(ppi, bmc, 1,
"Servo in holdover, new clock class: %i\n",
ppg->defaultDS->clockQuality.clockClass);
"Servo in holdover, new clock class: %i, new clock accuracy: %i\n",
ppg->defaultDS->clockQuality.clockClass,
ppg->defaultDS->clockQuality.clockAccuracy);
}
}
break;
......@@ -1180,16 +1188,20 @@ static void bmc_update_clock_quality(struct pp_instance *ppi)
if (rt_opts->clock_quality.clockClass == PP_PTP_CLASS_GM_LOCKED) {
if (ppg->defaultDS->clockQuality.clockClass != PP_PTP_CLASS_GM_UNLOCKED) {
ppg->defaultDS->clockQuality.clockClass = PP_PTP_CLASS_GM_UNLOCKED;
ppg->defaultDS->clockQuality.clockAccuracy = PP_PTP_ACCURACY_GM_UNLOCKED;
pp_diag(ppi, bmc, 1,
"Servo unlocked, new clock class: %i\n",
ppg->defaultDS->clockQuality.clockClass);
"Servo unlocked, new clock class: %i, new clock accuracy: %i\n",
ppg->defaultDS->clockQuality.clockClass,
ppg->defaultDS->clockQuality.clockAccuracy);
}
} else if (rt_opts->clock_quality.clockClass == PP_ARB_CLASS_GM_LOCKED) {
if (ppg->defaultDS->clockQuality.clockClass != PP_ARB_CLASS_GM_UNLOCKED) {
ppg->defaultDS->clockQuality.clockClass = PP_ARB_CLASS_GM_UNLOCKED;
ppg->defaultDS->clockQuality.clockAccuracy = PP_ARB_ACCURACY_GM_UNLOCKED;
pp_diag(ppi, bmc, 1,
"Servo unlocked, new clock class: %i\n",
ppg->defaultDS->clockQuality.clockClass);
"Servo unlocked, new clock class: %i, new clock accuracy: %i\n",
ppg->defaultDS->clockQuality.clockClass,
ppg->defaultDS->clockQuality.clockAccuracy);
}
}
break;
......
......@@ -14,7 +14,7 @@
struct pp_runtime_opts __pp_default_rt_opts = {
.clock_quality = {
.clockClass = PP_CLASS_DEFAULT,
.clockAccuracy = PP_DEFAULT_CLOCK_ACCURACY,
.clockAccuracy = PP_ACCURACY_DEFAULT,
.offsetScaledLogVariance = PP_DEFAULT_CLOCK_VARIANCE,
},
.flags = PP_DEFAULT_FLAGS,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment