Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Trigger Distribution
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
White Rabbit Trigger Distribution
Commits
2a853764
Commit
2a853764
authored
Dec 12, 2018
by
Tristan Gingold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
adc: add support for adcin.
parent
d5868bff
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
39 additions
and
23 deletions
+39
-23
Makefile
software/firmware/adc/Makefile
+2
-2
out_queue.h
software/firmware/adc/out_queue.h
+8
-1
wrtd-adcin.c
software/firmware/adc/wrtd-adcin.c
+20
-19
wrtd-adcout.c
software/firmware/adc/wrtd-adcout.c
+5
-0
wrtd-rt-common.h
software/firmware/common/wrtd-rt-common.h
+3
-1
wrtd-common.h
software/include/wrtd-common.h
+1
-0
No files found.
software/firmware/adc/Makefile
View file @
2a853764
-include
Makefile.specific
OBJS
:=
wrtd-rt-adc
out
.o
OUTPUT
=
wrtd-rt-adc
out
OBJS
:=
wrtd-rt-adc.o
OUTPUT
=
wrtd-rt-adc
TRTL
?=
../../../dependencies/mock-turtle/
TRTL_SW
=
$(TRTL)
/software
...
...
software/firmware/adc/out_queue.h
View file @
2a853764
...
...
@@ -5,7 +5,13 @@
OUT_QUEUE_MAXTIME: maximum time in advance.
*/
#define OUT_QUEUE_NAME(x) OUT_QUEUE_PREFIX##x
#ifndef OUT_QUEUE_PREFIX
#error "OUT_QUEUE_PREFIX not defined"
#endif
#define OUT_QUEUE_CONCAT2(x,y) x##y
#define OUT_QUEUE_CONCAT(x,y) OUT_QUEUE_CONCAT2(x,y)
#define OUT_QUEUE_NAME(x) OUT_QUEUE_CONCAT(OUT_QUEUE_PREFIX,x)
#define OUT_QUEUE_STRUCT OUT_QUEUE_NAME(out_queue)
struct
OUT_QUEUE_STRUCT
{
...
...
@@ -119,3 +125,4 @@ static int OUT_QUEUE_NAME(out_queue_check_timeout) (struct OUT_QUEUE_STRUCT *q)
#undef OUT_QUEUE_STRUCT
#undef OUT_QUEUE_NAME
#undef OUT_QUEUE_CONCAT
software/firmware/adc/wrtd-adcin.c
View file @
2a853764
...
...
@@ -12,6 +12,7 @@
#include "mockturtle-rt.h"
#include <mockturtle-framework.h>
#include "wrtd-common.h"
#include "fmc_adc_alt_trigin.h"
#define OUT_QUEUE_MAXTIME 10
#define OUT_QUEUE_PREFIX adcin_
...
...
@@ -21,7 +22,8 @@
struct
wrtd_adcin_dev
{
uint32_t
io_addr
;
adcin_out_queue
queue
;
int
idle
;
struct
adcin_out_queue
queue
;
};
static
inline
int
adcin_wr_present
(
struct
wrtd_adcin_dev
*
fd
)
...
...
@@ -61,7 +63,7 @@ static inline void adcin_writel(struct wrtd_adcin_dev *dev, uint32_t value,
dp_writel
(
value
,
dev
->
io_addr
+
reg
);
}
static
inline
uint32_t
adcin_readl
(
struct
wrtd_adcin
*
dev
,
uint32_t
reg
)
static
inline
uint32_t
adcin_readl
(
struct
wrtd_adcin
_dev
*
dev
,
uint32_t
reg
)
{
return
dp_readl
(
dev
->
io_addr
+
reg
);
}
...
...
@@ -71,20 +73,20 @@ static inline uint32_t adcin_readl (struct wrtd_adcin *dev, uint32_t reg)
/**
* Drop the given enqueued trigger
*/
static
void
drop_trigger
(
struct
wrtd_fd_channel
*
out
,
struct
wrtd_event
*
ev
,
struct
lrt_pulse_queue
*
q
,
unsigned
reason
)
static
void
adcin_drop_trigger
(
struct
wrtd_adcin_dev
*
dev
,
struct
wrtd_event
*
ev
,
unsigned
reason
)
{
out
->
idle
=
1
;
struct
adcin_out_queue
*
q
=
&
dev
->
queue
;
dev
->
idle
=
1
;
if
(
pulse
_queue_empty
(
q
))
if
(
adcin_out
_queue_empty
(
q
))
return
;
/* Drop the pulse */
pulse
_queue_pop
(
q
);
adcin_out
_queue_pop
(
q
);
/* Disarm the FD output */
fd_ch_writel
(
out
,
FD_DCR_MODE
,
FD_REG_DCR
);
adcin_writel
(
dev
,
0
,
ALT_TRIGIN_CTRL
);
wrtd_log
(
WRTD_LOG_MSG_EV_DISCARDED
,
reason
,
ev
,
NULL
);
}
...
...
@@ -112,9 +114,9 @@ static void adcin_output (struct wrtd_adcin_dev *dev)
#endif
if
(
ctrl
&
ALT_TRIGIN_CTRL_ENABLE
)
{
/* Armed but still waiting for trigger */
if
(
check_output_timeout
(
dev
))
{
if
(
adcin_out_queue_check_timeout
(
q
))
{
/* Will never trigger. Missed. */
drop_trigger
(
dev
,
ev
,
q
,
WRTD_LOG_DISCARD_TIMEOUT
);
adcin_drop_trigger
(
dev
,
ev
,
WRTD_LOG_DISCARD_TIMEOUT
);
}
}
else
{
/* Has been triggered. */
...
...
@@ -130,11 +132,11 @@ static void adcin_output (struct wrtd_adcin_dev *dev)
if
(
adcin_out_queue_empty
(
q
))
return
;
ev
=
pulse
_queue_front
(
q
);
ev
=
adcin_out
_queue_front
(
q
);
ts
=
&
ev
->
ts
;
if
(
!
wr_is_timing_ok
())
{
drop_trigger
(
out
,
ev
,
q
,
WRTD_LOG_DISCARD_NO_SYNC
);
adcin_drop_trigger
(
dev
,
ev
,
WRTD_LOG_DISCARD_NO_SYNC
);
return
;
}
...
...
@@ -156,13 +158,12 @@ static void adcin_output (struct wrtd_adcin_dev *dev)
dev
->
idle
=
0
;
}
static
void
fd_local_output
(
struct
wrtd_fd_dev
*
fd
,
static
void
adcin_local_output
(
struct
wrtd_adcin_dev
*
dev
,
struct
wrtd_event
*
ev
,
unsigned
ch
)
{
struct
wrtd_fd_channel
*
out
=
&
fd
->
channels
[
ch
];
struct
wrtd_event
*
pq_ev
;
pq_ev
=
pulse_queue_push
(
&
out
->
queue
);
pq_ev
=
adcin_out_queue_push
(
&
dev
->
queue
);
if
(
!
pq_ev
)
{
/* overflow.
FIXME: stats ? */
...
...
@@ -192,8 +193,8 @@ static int wrtd_out_disable(struct trtl_fw_msg *msg_i,
}
#endif
static
void
wrtd_
adcin_data_init
(
struct
wrtd_adcin_dev
*
dev
)
static
void
adcin_data_init
(
struct
wrtd_adcin_dev
*
dev
)
{
adcin_out_queue_init
(
&
fd
->
channels
[
i
].
queue
);
adcin
->
idle
=
1
;
adcin_out_queue_init
(
&
dev
->
queue
);
dev
->
idle
=
1
;
}
software/firmware/adc/wrtd-adcout.c
View file @
2a853764
...
...
@@ -45,6 +45,11 @@ static inline int adcout_wr_time_locked(struct wrtd_adcout_dev *adcout)
return
1
;
}
static
void
adcout_wr_enable_lock
(
struct
wrtd_adcout_dev
*
dev
,
int
enable
)
{
return
;
}
static
inline
int
adcout_wr_time_ready
(
struct
wrtd_adcout_dev
*
adcout
)
{
return
adcout_readl
(
adcout
,
ALT_TRIGOUT_STATUS
)
&
ALT_TRIGOUT_WR_VALID
;
...
...
software/firmware/common/wrtd-rt-common.h
View file @
2a853764
...
...
@@ -414,8 +414,10 @@ static void wrtd_route(struct wrtd_rule *rule, const struct wrtd_event *ev)
}
else
{
if
(
rule
->
conf
.
dest_cpu
!=
WRTD_DEST_CPU_LOCAL
)
{
#if NBR_CPUS > 1
wrtd_remote_output
(
&
tev
,
rule
->
conf
.
dest_cpu
,
rule
->
conf
.
dest_ch
);
#endif
}
else
{
/* Local delivery. */
wrtd_local_output
(
&
tev
,
rule
->
conf
.
dest_ch
);
...
...
@@ -623,7 +625,7 @@ static int wrtd_main(void)
#ifdef WRTD_NET_RX
wrtd_recv_network
();
#endif
#if NBR_CPUS >
0
#if NBR_CPUS >
1
wrtd_recv_loopback
();
#endif
...
...
software/include/wrtd-common.h
View file @
2a853764
...
...
@@ -202,6 +202,7 @@ struct wrtd_io_msg {
#define WRTD_APP_TDC_5CH 0x35D0
#define WRTD_APP_FD_4CH 0x35E0
#define WRTD_APP_ADCIN_5CH 0x35B0
enum
wrtd_trtl_actions
{
/* Always the first one, to get root and version. */
...
...
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