Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC ADC 100M 14b 4cha - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
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 ADC 100M 14b 4cha - Software
Commits
d6d564cf
Commit
d6d564cf
authored
Sep 15, 2020
by
Federico Vaga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
drv: add VME DDR offset field to platform data
Signed-off-by:
Federico Vaga
<
federico.vaga@cern.ch
>
parent
7921b89f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
45 additions
and
15 deletions
+45
-15
fa-core.c
kernel/fa-core.c
+1
-0
fa-dma.c
kernel/fa-dma.c
+30
-12
fmc-adc-100m14b4ch-svec-core.c
kernel/fmc-adc-100m14b4ch-svec-core.c
+13
-3
fmc-adc-100m14b4cha.h
kernel/platform_data/fmc-adc-100m14b4cha.h
+1
-0
No files found.
kernel/fa-core.c
View file @
d6d564cf
...
...
@@ -630,6 +630,7 @@ static void fa_sg_alloc_table_init(struct fa_dev *fa)
static
struct
fmc_adc_platform_data
fmc_adc_pdata_default
=
{
.
flags
=
0
,
.
vme_ddr_offset
=
0
,
.
calib_trig_time
=
0
,
.
calib_trig_threshold
=
0
,
.
calib_trig_internal
=
0
,
...
...
kernel/fa-dma.c
View file @
d6d564cf
...
...
@@ -155,10 +155,10 @@ static void fa_dma_release_channel_svec(struct fa_dev *fa)
}
static
uint32_t
zfad_dev_mem_offset
(
struct
zio_cset
*
cset
)
static
uint32_t
fa_ddr_offset_single
(
struct
fa_dev
*
fa
)
{
struct
fa_dev
*
fa
=
cset
->
zdev
->
priv_d
;
uint32_t
dev_mem_
off
,
trg_pos
,
pre_samp
;
struct
zio_cset
*
cset
=
fa
->
zdev
->
cset
;
uint32_t
off
,
trg_pos
,
pre_samp
;
int
nchan
=
FA100M14B4C_NCHAN
;
struct
zio_control
*
ctrl
=
cset
->
chan
[
nchan
].
current_ctrl
;
...
...
@@ -171,12 +171,35 @@ static uint32_t zfad_dev_mem_offset(struct zio_cset *cset)
* compute mem offset (in bytes): pre-samp is converted to
* bytes
*/
dev_mem_
off
=
trg_pos
-
(
pre_samp
*
cset
->
ssize
*
nchan
);
off
=
trg_pos
-
(
pre_samp
*
cset
->
ssize
*
nchan
);
dev_dbg
(
fa
->
msgdev
,
"Trigger @ 0x%08x, pre_samp %i, offset 0x%08x
\n
"
,
trg_pos
,
pre_samp
,
dev_mem_off
);
trg_pos
,
pre_samp
,
off
);
return
off
;
}
static
uint32_t
fa_ddr_offset_multi
(
struct
fa_dev
*
fa
,
uint32_t
shot_n
)
{
struct
zio_cset
*
cset
=
fa
->
zdev
->
cset
;
uint32_t
off
;
return
dev_mem_off
;
off
=
cset
->
interleave
->
current_ctrl
->
ssize
*
cset
->
ti
->
nsamples
;
off
+=
FA_TRIG_TIMETAG_BYTES
;
off
*=
shot_n
;
return
off
;
}
static
uint32_t
fa_ddr_offset
(
struct
fa_dev
*
fa
,
uint32_t
shot_n
)
{
WARN
(
fa
->
n_shots
==
1
&&
shot_n
!=
0
,
"Inconsistent shot number %d
\n
"
,
shot_n
);
if
(
fa
->
n_shots
==
1
)
{
return
fa_ddr_offset_single
(
fa
);
}
else
{
return
fa_ddr_offset_multi
(
fa
,
shot_n
);
}
}
static
unsigned
int
zfad_block_n_pages
(
struct
zio_block
*
block
)
...
...
@@ -476,7 +499,6 @@ static int zfad_dma_start(struct zio_cset *cset)
struct
fa_dev
*
fa
=
cset
->
zdev
->
priv_d
;
struct
zfad_block
*
zfad_block
=
cset
->
interleave
->
priv_d
;
struct
dma_slave_config
sconfig
;
unsigned
int
data_offset
;
int
err
,
i
;
err
=
fa_fsm_wait_state
(
fa
,
FA100M14B4C_STATE_IDLE
,
10
);
...
...
@@ -501,7 +523,6 @@ static int zfad_dma_start(struct zio_cset *cset)
memset
(
&
sconfig
,
0
,
sizeof
(
sconfig
));
sconfig
.
direction
=
DMA_DEV_TO_MEM
;
sconfig
.
src_addr_width
=
8
;
/* 2 bytes for each channel (4) */
data_offset
=
(
cset
->
interleave
->
current_ctrl
->
ssize
*
cset
->
ti
->
nsamples
)
+
FA_TRIG_TIMETAG_BYTES
;
for
(
i
=
0
;
i
<
fa
->
n_shots
;
++
i
)
{
/*
* TODO
...
...
@@ -514,10 +535,7 @@ static int zfad_dma_start(struct zio_cset *cset)
* But sice the blocks are contigous, perhaps there is no need
* because the address of shot 2 is exactly after shot 1
*/
if
(
!
fa_is_flag_set
(
fa
,
FMC_ADC_SVEC
)
&&
fa
->
n_shots
==
1
)
sconfig
.
src_addr
=
zfad_dev_mem_offset
(
cset
);
else
sconfig
.
src_addr
=
i
*
data_offset
;
sconfig
.
src_addr
=
fa_ddr_offset
(
fa
,
i
);
err
=
dmaengine_slave_config
(
fa
->
dchan
,
&
sconfig
);
if
(
err
)
goto
err_config
;
...
...
kernel/fmc-adc-100m14b4ch-svec-core.c
View file @
d6d564cf
...
...
@@ -19,8 +19,18 @@ enum fa_svec_dev_offsets {
FA_SVEC_ADC2_MEM_END
=
0x000005FFF
,
};
static
struct
fmc_adc_platform_data
fmc_adc_pdata
=
{
static
struct
fmc_adc_platform_data
fmc_adc_pdata
1
=
{
.
flags
=
FMC_ADC_BIG_ENDIAN
|
FMC_ADC_SVEC
,
.
vme_ddr_offset
=
0x1000
,
.
calib_trig_time
=
0
,
.
calib_trig_threshold
=
0
,
.
calib_trig_internal
=
0
,
};
static
struct
fmc_adc_platform_data
fmc_adc_pdata2
=
{
.
flags
=
FMC_ADC_BIG_ENDIAN
|
FMC_ADC_SVEC
,
.
vme_ddr_offset
=
0x2000
,
.
calib_trig_time
=
0
,
.
calib_trig_threshold
=
0
,
.
calib_trig_internal
=
0
,
...
...
@@ -74,8 +84,8 @@ static struct resource fa_svec_res2[] = {
#define MFD_ADC(_n) \
{ \
.name = "fmc-adc-100m", \
.platform_data = &fmc_adc_pdata
,
\
.pdata_size = sizeof(fmc_adc_pdata), \
.platform_data = &fmc_adc_pdata
##_n,
\
.pdata_size = sizeof(fmc_adc_pdata
##_n
), \
.num_resources = ARRAY_SIZE(fa_svec_res##_n), \
.resources = fa_svec_res##_n, \
}
...
...
kernel/platform_data/fmc-adc-100m14b4cha.h
View file @
d6d564cf
...
...
@@ -19,6 +19,7 @@
struct
fmc_adc_platform_data
{
unsigned
long
flags
;
unsigned
long
vme_ddr_offset
;
uint8_t
calib_trig_time
;
uint8_t
calib_trig_threshold
;
uint8_t
calib_trig_internal
;
...
...
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