Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC TDC 1ns 5cha - Software
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
FMC TDC 1ns 5cha - Software
Commits
2e2b7b59
Commit
2e2b7b59
authored
Apr 18, 2014
by
Tomasz Wlostowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel: initial support for White Rabbit
parent
ebf39881
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
53 additions
and
61 deletions
+53
-61
fmc-tdc.h
kernel/fmc-tdc.h
+5
-6
ft-time.c
kernel/ft-time.c
+39
-7
ft-zio.c
kernel/ft-zio.c
+0
-48
tdc_regs.h
kernel/hw/tdc_regs.h
+9
-0
No files found.
kernel/fmc-tdc.h
View file @
2e2b7b59
...
...
@@ -82,10 +82,7 @@ struct fmctdc_dev;
struct
ft_carrier_specific
{
char
*
gateware_name
;
int
(
*
init
)
(
struct
fmctdc_dev
*
);
int
(
*
reset_core
)
(
struct
fmctdc_dev
*
);
void
(
*
exit
)
(
struct
fmctdc_dev
*
);
};
struct
ft_calibration
{
/* All of these are big endian in the EEPROM */
...
...
@@ -165,7 +162,7 @@ struct fmctdc_dev {
/* output lots of debug stuff? */
int
verbose
;
struct
ft_channel_state
channels
[
FT_NUM_CHANNELS
];
int
flags
;
int
wr_mode
;
/* hardware buffer pointers / dacapo regs */
uint32_t
cur_wr_ptr
,
prev_wr_ptr
;
};
...
...
@@ -204,8 +201,8 @@ int ft_get_tai_time(struct fmctdc_dev *ft, uint64_t * seconds,
uint32_t
*
coarse
);
int
ft_set_host_time
(
struct
fmctdc_dev
*
ft
);
int
ft_
enable_wr_mode
(
struct
fmctdc_dev
*
ft
,
int
enable
);
int
ft_
check_wr_mode
(
struct
fmctdc_dev
*
ft
);
int
ft_
wr_mode
(
struct
fmctdc_dev
*
ft
,
int
on
);
int
ft_
wr_query
(
struct
fmctdc_dev
*
ft
);
int
ft_handle_eeprom_calibration
(
struct
fmctdc_dev
*
ft
);
...
...
@@ -222,6 +219,8 @@ void ft_zio_unregister(void);
int
ft_zio_init
(
struct
fmctdc_dev
*
ft
);
void
ft_zio_exit
(
struct
fmctdc_dev
*
ft
);
void
ft_set_vcxo_tune
(
struct
fmctdc_dev
*
ft
,
int
value
);
struct
zio_channel
;
int
ft_read_sw_fifo
(
struct
fmctdc_dev
*
ft
,
int
channel
,
...
...
kernel/ft-time.c
View file @
2e2b7b59
...
...
@@ -124,22 +124,54 @@ int ft_set_host_time(struct fmctdc_dev *ft)
return
0
;
}
int
ft_enable_wr_mode
(
struct
fmctdc_dev
*
ft
,
int
enabl
e
)
void
ft_set_vcxo_tune
(
struct
fmctdc_dev
*
ft
,
int
valu
e
)
{
return
-
ENOTSUPP
;
ft_writel
(
ft
,
value
,
TDC_REG_DAC_TUNE
);
ft_writel
(
ft
,
TDC_CTRL_CONFIG_DAC
,
TDC_REG_CTRL
);
}
int
ft_
check_wr_mode
(
struct
fmctdc_dev
*
ft
)
int
ft_
wr_mode
(
struct
fmctdc_dev
*
ft
,
int
on
)
{
return
-
ENOTSUPP
;
unsigned
long
flags
;
uint32_t
wr_stat
;
spin_lock_irqsave
(
&
ft
->
lock
,
flags
);
if
(
on
)
{
ft_writel
(
ft
,
TDC_WR_CTRL_ENABLE
,
TDC_REG_WR_CTRL
);
ft
->
wr_mode
=
1
;
}
else
{
ft_writel
(
ft
,
0
,
TDC_REG_WR_CTRL
);
ft
->
wr_mode
=
0
;
ft_set_vcxo_tune
(
ft
,
ft
->
calib
.
vcxo_default_tune
&
0xffff
);
}
spin_unlock_irqrestore
(
&
ft
->
lock
,
flags
);
wr_stat
=
ft_readl
(
ft
,
TDC_REG_WR_STAT
);
if
(
!
(
wr_stat
&
TDC_WR_STAT_LINK
))
return
-
ENOLINK
;
return
0
;
}
int
ft_wr_query
(
struct
fmctdc_dev
*
ft
)
{
uint32_t
wr_stat
;
wr_stat
=
ft_readl
(
ft
,
TDC_REG_WR_STAT
);
if
(
!
ft
->
wr_mode
)
return
-
ENODEV
;
if
(
!
(
wr_stat
&
TDC_WR_STAT_LINK
))
return
-
ENOLINK
;
if
(
wr_stat
&
TDC_WR_STAT_AUX_LOCKED
)
return
0
;
return
-
EAGAIN
;
}
int
ft_time_init
(
struct
fmctdc_dev
*
ft
)
{
/* program the VCXO DAC to the default calibration value */
ft_writel
(
ft
,
ft
->
calib
.
vcxo_default_tune
,
TDC_REG_DAC_TUNE
);
ft_writel
(
ft
,
TDC_CTRL_CONFIG_DAC
,
TDC_REG_CTRL
);
ft_set_vcxo_tune
(
ft
,
ft
->
calib
.
vcxo_default_tune
);
return
ft_set_tai_time
(
ft
,
0
,
0
);
}
...
...
kernel/ft-zio.c
View file @
2e2b7b59
...
...
@@ -62,9 +62,6 @@ enum ft_devtype {
FT_TYPE_INPUT
};
static
int
ft_wr_mode
(
struct
fmctdc_dev
*
fd
,
int
on
);
static
int
ft_wr_query
(
struct
fmctdc_dev
*
ft
);
static
enum
ft_devtype
__ft_get_type
(
struct
device
*
dev
)
{
struct
zio_obj_head
*
head
=
to_zio_head
(
dev
);
...
...
@@ -269,51 +266,6 @@ static int ft_zio_conf_set(struct device *dev, struct zio_attribute *zattr,
}
}
static
int
ft_wr_mode
(
struct
fmctdc_dev
*
fd
,
int
on
)
{
#if 0
unsigned long flags;
uint32_t tcr;
spin_lock_irqsave(&ft->lock, flags);
// tcr = fd_readl(fd, FD_REG_TCR);
if (on) {
fd_writel(fd, FD_TCR_WR_ENABLE, FD_REG_TCR);
set_bit(FD_FLAG_WR_MODE, &fd->flags);
} else {
fd_writel(fd, 0, FD_REG_TCR);
clear_bit(FD_FLAG_WR_MODE, &fd->flags);
/* not white-rabbit: write default to DAC for VCXO */
fd_spi_xfer(fd, FD_CS_DAC, 24,
ft->calib.vcxo_default_tune & 0xffff, NULL);
}
spin_unlock_irqrestore(&fd->lock, flags);
if(! (tcr & FD_TCR_WR_PRESENT))
return -EOPNOTSUPP;
else if( ! (tcr & FD_TCR_WR_LINK))
return -ENOLINK;
else
return 0;
#endif
return
0
;
}
static
int
ft_wr_query
(
struct
fmctdc_dev
*
ft
)
{
#if 0
int ena = test_bit(FD_FLAG_WR_MODE, &fd->flags);
if (!ena)
return -ENODEV;
if (! (fd_readl(fd, FD_REG_TCR) & FD_TCR_WR_LINK))
return -ENOLINK;
if (fd_readl(fd, FD_REG_TCR) & FD_TCR_WR_LOCKED)
return 0;
return -EAGAIN;
#endif
return
0
;
}
/*
...
...
kernel/hw/tdc_regs.h
View file @
2e2b7b59
...
...
@@ -25,6 +25,15 @@
#define TDC_REG_CURRENT_UTC 0x00a0
#define TDC_REG_BUFFER_PTR 0x00a8
#define TDC_REG_CTRL 0x00fc
#define TDC_REG_WR_CTRL 0x00b4
#define TDC_REG_WR_STAT 0x00b0
#define TDC_WR_CTRL_ENABLE BIT(0)
#define TDC_WR_STAT_ENABLED BIT(6)
#define TDC_WR_STAT_LINK BIT(2)
#define TDC_WR_STAT_TIME_VALID BIT(8)
#define TDC_WR_STAT_AUX_LOCKED BIT(4)
/* TDC_REG_CTRL bits */
#define TDC_CTRL_EN_ACQ BIT(0)
...
...
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