Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
PPSi
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
50
Issues
50
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
PPSi
Commits
5fab12b3
Commit
5fab12b3
authored
Oct 07, 2022
by
Omar Gabella
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
If CLB_BASE force first calibration steps
parent
3d9fc616
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
51 additions
and
0 deletions
+51
-0
hooks.c
proto-ext-whiterabbit/hooks.c
+5
-0
state-wr-calibration.c
proto-ext-whiterabbit/state-wr-calibration.c
+3
-0
wr-api.h
proto-ext-whiterabbit/wr-api.h
+8
-0
wr-servo.c
proto-ext-whiterabbit/wr-servo.c
+35
-0
No files found.
proto-ext-whiterabbit/hooks.c
View file @
5fab12b3
...
...
@@ -14,7 +14,12 @@ static int wr_init(struct pp_instance *ppi, unsigned char *pkt, int plen)
wrp
->
wrModeOn
=
0
;
wrp
->
parentWrConfig
=
NON_WR
;
wrp
->
parentWrModeOn
=
0
;
#ifdef BROADCAST_BASE
/* If CLB_BASE force first calibration steps */
wrp
->
calibrated
=
WR_DEFAULT_PHY_CALIBRATION_REQUIRED
;
#else
wrp
->
calibrated
=
!
WR_DEFAULT_PHY_CALIBRATION_REQUIRED
;
#endif // BROADCAST_BASE
#ifdef CONFIG_ABSCAL
/* absolute calibration only exists in arch-wrpc, so far */
...
...
proto-ext-whiterabbit/state-wr-calibration.c
View file @
5fab12b3
...
...
@@ -40,8 +40,11 @@ int wr_calibration(struct pp_instance *ppi, unsigned char *pkt, int plen)
msg_issue_wrsig
(
ppi
,
CALIBRATE
);
#endif
wrp
->
wrPortState
=
WR_PORT_CALIBRATION_0
;
#ifndef BROADCAST_BASE
/* If CLB_BASE force first calibration steps */
if
(
wrp
->
calibrated
)
wrp
->
wrPortState
=
WR_PORT_CALIBRATION_2
;
#endif // BROADCAST_BASE
}
pp_diag
(
ppi
,
ext
,
1
,
"%s: substate %i
\n
"
,
__func__
,
...
...
proto-ext-whiterabbit/wr-api.h
View file @
5fab12b3
...
...
@@ -104,6 +104,14 @@ struct wr_dsport {
UInteger32
ctr_wr_link_on_1
;
UInteger32
ctr_wr_link_on_2
;
UInteger32
ctr_wr_sync_tai
;
UInteger32
ctr_wr_sync_nsec
;
UInteger32
ctr_wr_sync_phase
;
UInteger32
ctr_wr_wait_offset_stable_0
;
UInteger32
ctr_wr_wait_offset_stable_1
;
UInteger32
ctr_wr_wait_offset_stable_2
;
UInteger32
ctr_wr_wait_offset_stable_3
;
UInteger32
ctr_wr_track_phase
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
};
...
...
proto-ext-whiterabbit/wr-servo.c
View file @
5fab12b3
...
...
@@ -630,6 +630,10 @@ int wr_servo_update(struct pp_instance *ppi)
switch
(
s
->
state
)
{
case
WR_SYNC_TAI
:
#if defined(BROADCAST_BASE) && defined(BC_EXTRA_MON)
/* ONLY FOR TESTS */
WR_DSPOR
(
ppi
)
->
ctr_wr_sync_tai
++
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
wrp
->
ops
->
adjust_counters
(
ts_offset
.
secs
,
0
);
s
->
flags
|=
WR_FLAG_WAIT_HW
;
/*
...
...
@@ -641,12 +645,22 @@ int wr_servo_update(struct pp_instance *ppi)
break
;
case
WR_SYNC_NSEC
:
#if defined(BROADCAST_BASE) && defined(BC_EXTRA_MON)
/* ONLY FOR TESTS */
WR_DSPOR
(
ppi
)
->
ctr_wr_sync_nsec
++
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
wrp
->
ops
->
adjust_counters
(
0
,
ts_offset_ticks
);
s
->
flags
|=
WR_FLAG_WAIT_HW
;
s
->
state
=
WR_SYNC_PHASE
;
break
;
case
WR_SYNC_PHASE
:
#if defined(BROADCAST_BASE) && defined(BC_EXTRA_MON)
/* ONLY FOR TESTS */
WR_DSPOR
(
ppi
)
->
ctr_wr_sync_phase
++
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
pp_diag
(
ppi
,
servo
,
2
,
"oldsetp %i, offset %i:%04i
\n
"
,
s
->
cur_setpoint
,
ts_offset_ticks
,
ts_offset_picos
);
...
...
@@ -671,23 +685,44 @@ int wr_servo_update(struct pp_instance *ppi)
break
;
case
WR_WAIT_OFFSET_STABLE
:
#if defined(BROADCAST_BASE) && defined(BC_EXTRA_MON)
/* ONLY FOR TESTS */
WR_DSPOR
(
ppi
)
->
ctr_wr_wait_offset_stable_0
++
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
/* ts_to_picos() below returns phase alone */
remaining_offset
=
abs
(
ts_offset_picos
);
if
(
remaining_offset
<
WR_SERVO_OFFSET_STABILITY_THRESHOLD
)
{
#if defined(BROADCAST_BASE) && defined(BC_EXTRA_MON)
/* ONLY FOR TESTS */
WR_DSPOR
(
ppi
)
->
ctr_wr_wait_offset_stable_1
++
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
wrp
->
ops
->
enable_timing_output
(
ppi
,
1
);
s
->
delta_ms_prev
=
s
->
delta_ms
;
s
->
state
=
WR_TRACK_PHASE
;
}
else
{
#if defined(BROADCAST_BASE) && defined(BC_EXTRA_MON)
/* ONLY FOR TESTS */
WR_DSPOR
(
ppi
)
->
ctr_wr_wait_offset_stable_2
++
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
s
->
missed_iters
++
;
}
if
(
s
->
missed_iters
>=
10
)
{
#if defined(BROADCAST_BASE) && defined(BC_EXTRA_MON)
/* ONLY FOR TESTS */
WR_DSPOR
(
ppi
)
->
ctr_wr_wait_offset_stable_3
++
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
s
->
missed_iters
=
0
;
s
->
state
=
WR_SYNC_PHASE
;
}
break
;
case
WR_TRACK_PHASE
:
#if defined(BROADCAST_BASE) && defined(BC_EXTRA_MON)
/* ONLY FOR TESTS */
WR_DSPOR
(
ppi
)
->
ctr_wr_track_phase
++
;
#endif // BROADCAST_BASE && BC_EXTRA_MON
s
->
skew
=
s
->
delta_ms
-
s
->
delta_ms_prev
;
#ifdef BROADCAST
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment