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
32a2e85a
Commit
32a2e85a
authored
Sep 22, 2016
by
Federico Vaga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel: uniform kernel messages
Signed-off-by:
Federico Vaga
<
federico.vaga@cern.ch
>
parent
77d73d4d
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
85 additions
and
88 deletions
+85
-88
fa-calibration.c
kernel/fa-calibration.c
+1
-1
fa-core.c
kernel/fa-core.c
+17
-19
fa-irq.c
kernel/fa-irq.c
+17
-19
fa-spec-core.c
kernel/fa-spec-core.c
+8
-9
fa-spec-dma.c
kernel/fa-spec-dma.c
+2
-2
fa-spec-irq.c
kernel/fa-spec-irq.c
+5
-6
fa-svec-dma.c
kernel/fa-svec-dma.c
+3
-2
fa-zio-drv.c
kernel/fa-zio-drv.c
+8
-9
fa-zio-trg.c
kernel/fa-zio-trg.c
+20
-18
fmc-adc-100m14b4cha.h
kernel/fmc-adc-100m14b4cha.h
+2
-1
spi.c
kernel/spi.c
+2
-2
No files found.
kernel/fa-calibration.c
View file @
32a2e85a
...
...
@@ -90,5 +90,5 @@ void fa_read_eeprom_calib(struct fa_dev *fa)
memcpy
(
&
fa
->
calib
,
fa
->
fmc
->
eeprom
+
FA_CAL_OFFSET
,
sizeof
(
fa
->
calib
));
fa_endian_calib
(
&
fa
->
calib
);
fa_verify_calib
(
&
fa
->
fmc
->
dev
,
&
fa
->
calib
,
&
fa_identity_calib
);
dev_info
(
&
fa
->
fmc
->
dev
,
"%s succeeds.
\n
"
,
__func__
);
dev_info
(
fa
->
msg
dev
,
"%s succeeds.
\n
"
,
__func__
);
}
kernel/fa-core.c
View file @
32a2e85a
...
...
@@ -169,7 +169,7 @@ int zfad_set_range(struct fa_dev *fa, struct zio_channel *chan,
gain
=
FA_CAL_NO_GAIN
;
}
else
{
if
(
range
<
0
||
range
>
ARRAY_SIZE
(
fa
->
calib
.
adc
))
{
dev_info
(
&
fa
->
fmc
->
dev
,
"Invalid range %i or ch %i
\n
"
,
dev_info
(
fa
->
msg
dev
,
"Invalid range %i or ch %i
\n
"
,
range
,
chan
->
index
);
return
-
EINVAL
;
}
...
...
@@ -199,13 +199,12 @@ int zfad_set_range(struct fa_dev *fa, struct zio_channel *chan,
*/
int
zfad_fsm_command
(
struct
fa_dev
*
fa
,
uint32_t
command
)
{
struct
device
*
dev
=
&
fa
->
fmc
->
dev
;
struct
zio_cset
*
cset
=
fa
->
zdev
->
cset
;
uint32_t
val
;
if
(
command
!=
FA100M14B4C_CMD_START
&&
command
!=
FA100M14B4C_CMD_STOP
)
{
dev_info
(
dev
,
"Invalid command %i
\n
"
,
command
);
dev_info
(
fa
->
msg
dev
,
"Invalid command %i
\n
"
,
command
);
return
-
EINVAL
;
}
...
...
@@ -236,7 +235,7 @@ int zfad_fsm_command(struct fa_dev *fa, uint32_t command)
val
=
fa_readl
(
fa
,
fa
->
fa_adc_csr_base
,
&
zfad_regs
[
ZFA_STA_SERDES_PLL
]);
if
(
!
val
)
{
dev_info
(
dev
,
"Cannot start acquisition: "
dev_info
(
fa
->
msg
dev
,
"Cannot start acquisition: "
"SerDes PLL not locked
\n
"
);
return
-
EBUSY
;
}
...
...
@@ -244,7 +243,7 @@ int zfad_fsm_command(struct fa_dev *fa, uint32_t command)
val
=
fa_readl
(
fa
,
fa
->
fa_adc_csr_base
,
&
zfad_regs
[
ZFA_STA_SERDES_SYNCED
]);
if
(
!
val
)
{
dev_info
(
dev
,
"Cannot start acquisition: "
dev_info
(
fa
->
msg
dev
,
"Cannot start acquisition: "
"SerDes not synchronized
\n
"
);
return
-
EBUSY
;
}
...
...
@@ -259,15 +258,15 @@ int zfad_fsm_command(struct fa_dev *fa, uint32_t command)
* from zfat_arm_trigger() or zfad_input_cset()
*/
if
(
!
(
cset
->
ti
->
flags
&
ZIO_TI_ARMED
))
{
dev_info
(
dev
,
"Cannot start acquisition: "
dev_info
(
fa
->
msg
dev
,
"Cannot start acquisition: "
"Trigger refuses to arm
\n
"
);
return
-
EIO
;
}
dev_dbg
(
dev
,
"FSM START Command, Enable interrupts
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"FSM START Command, Enable interrupts
\n
"
);
fa_enable_irqs
(
fa
);
}
else
{
dev_dbg
(
dev
,
"FSM STOP Command, Disable interrupts
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"FSM STOP Command, Disable interrupts
\n
"
);
fa
->
enable_auto_start
=
0
;
fa_disable_irqs
(
fa
);
}
...
...
@@ -282,7 +281,6 @@ int zfad_fsm_command(struct fa_dev *fa, uint32_t command)
static
int
__fa_sdb_get_device
(
struct
fa_dev
*
fa
)
{
struct
fmc_device
*
fmc
=
fa
->
fmc
;
struct
device
*
dev
=
fmc
->
hwdev
;
int
ret
;
ret
=
fmc_scan_sdb_tree
(
fmc
,
0
);
...
...
@@ -292,7 +290,7 @@ static int __fa_sdb_get_device(struct fa_dev *fa)
ret
=
0
;
}
if
(
ret
<
0
)
{
dev_err
(
dev
,
dev_err
(
fa
->
msg
dev
,
"%s: no SDB in the bitstream."
"Are you sure you've provided the correct one?
\n
"
,
KBUILD_MODNAME
);
...
...
@@ -328,7 +326,6 @@ static int __fa_sdb_get_device(struct fa_dev *fa)
static
int
__fa_init
(
struct
fa_dev
*
fa
)
{
struct
device
*
hwdev
=
fa
->
fmc
->
hwdev
;
struct
device
*
msgdev
=
&
fa
->
fmc
->
dev
;
struct
zio_device
*
zdev
=
fa
->
zdev
;
int
i
,
addr
;
...
...
@@ -336,7 +333,7 @@ static int __fa_init(struct fa_dev *fa)
if
(
dma_set_mask
(
hwdev
,
DMA_BIT_MASK
(
64
)))
{
/* Check if hardware supports 32-bit DMA */
if
(
dma_set_mask
(
hwdev
,
DMA_BIT_MASK
(
32
)))
{
dev_err
(
msgdev
,
"32-bit DMA addressing not available
\n
"
);
dev_err
(
fa
->
msgdev
,
"32-bit DMA addressing not available
\n
"
);
return
-
EINVAL
;
}
}
...
...
@@ -447,6 +444,7 @@ int fa_probe(struct fmc_device *fmc)
return
-
ENOMEM
;
fmc_set_drvdata
(
fmc
,
fa
);
fa
->
fmc
=
fmc
;
fa
->
msgdev
=
&
fa
->
fmc
->
dev
;
/* apply carrier-specific hacks and workarounds */
fa
->
carrier_op
=
NULL
;
...
...
@@ -463,7 +461,7 @@ int fa_probe(struct fmc_device *fmc)
* driver was compiled without enable any carrier, so it cannot work
*/
if
(
!
fa
->
carrier_op
)
{
dev_err
(
f
mc
->
hw
dev
,
dev_err
(
f
a
->
msg
dev
,
"This binary doesn't support the '%s' carrier
\n
"
,
fmc
->
carrier_name
);
return
-
ENODEV
;
...
...
@@ -479,18 +477,18 @@ int fa_probe(struct fmc_device *fmc)
fwname
=
""
;
/* reprogram will pick from module parameter */
else
fwname
=
fa
->
carrier_op
->
get_gwname
();
dev_info
(
f
mc
->
hw
dev
,
"Gateware (%s)
\n
"
,
fwname
);
dev_info
(
f
a
->
msg
dev
,
"Gateware (%s)
\n
"
,
fwname
);
/* We first write a new binary (and lm32) within the carrier */
err
=
fmc_reprogram
(
fmc
,
&
fa_dev_drv
,
fwname
,
0x0
);
if
(
err
)
{
dev_err
(
f
mc
->
hw
dev
,
"write firmware
\"
%s
\"
: error %i
\n
"
,
dev_err
(
f
a
->
msg
dev
,
"write firmware
\"
%s
\"
: error %i
\n
"
,
fwname
,
err
);
goto
out
;
}
dev_info
(
f
mc
->
hw
dev
,
"Gateware successfully loaded
\n
"
);
dev_info
(
f
a
->
msg
dev
,
"Gateware successfully loaded
\n
"
);
}
else
{
dev_info
(
f
mc
->
hw
dev
,
dev_info
(
f
a
->
msg
dev
,
"Gateware already there. Set the
\"
gateware
\"
parameter to overwrite the current gateware
\n
"
);
}
...
...
@@ -509,10 +507,10 @@ int fa_probe(struct fmc_device *fmc)
/* init all subsystems */
for
(
i
=
0
,
m
=
mods
;
i
<
ARRAY_SIZE
(
mods
);
i
++
,
m
++
)
{
dev_dbg
(
&
fmc
->
dev
,
"Calling init for
\"
%s
\"\n
"
,
m
->
name
);
dev_dbg
(
fa
->
msg
dev
,
"Calling init for
\"
%s
\"\n
"
,
m
->
name
);
err
=
m
->
init
(
fa
);
if
(
err
)
{
dev_err
(
&
fmc
->
dev
,
"error initializing %s
\n
"
,
m
->
name
);
dev_err
(
fa
->
msg
dev
,
"error initializing %s
\n
"
,
m
->
name
);
goto
out
;
}
}
...
...
kernel/fa-irq.c
View file @
32a2e85a
...
...
@@ -46,7 +46,7 @@ int zfad_dma_start(struct zio_cset *cset)
if
(
val
!=
FA100M14B4C_STATE_IDLE
)
{
/* we can't DMA if the state machine is not idle */
dev_warn
(
&
fa
->
fmc
->
dev
,
dev_warn
(
fa
->
msg
dev
,
"Can't start DMA on the last acquisition, "
"State Machine is not IDLE (status:%d)
\n
"
,
val
);
return
-
EBUSY
;
...
...
@@ -74,14 +74,14 @@ int zfad_dma_start(struct zio_cset *cset)
* bytes
*/
dev_mem_off
=
trg_pos
-
(
pre_samp
*
cset
->
ssize
*
nchan
);
dev_dbg
(
&
fa
->
fmc
->
dev
,
dev_dbg
(
fa
->
msg
dev
,
"Trigger @ 0x%08x, pre_samp %i, offset 0x%08x
\n
"
,
trg_pos
,
pre_samp
,
dev_mem_off
);
zfad_block
[
0
].
dev_mem_off
=
dev_mem_off
;
}
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Start DMA transfer
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"Start DMA transfer
\n
"
);
err
=
fa
->
carrier_op
->
dma_start
(
cset
);
if
(
err
)
return
err
;
...
...
@@ -128,7 +128,7 @@ void zfad_dma_done(struct zio_cset *cset)
trig_timetag
=
(
uint32_t
*
)(
block
->
data
+
block
->
datalen
-
FA_TRIG_TIMETAG_BYTES
);
/* Timetag marker (metadata) used for debugging */
dev_dbg
(
&
fa
->
fmc
->
dev
,
"trig_timetag metadata of the shot %d"
dev_dbg
(
fa
->
msg
dev
,
"trig_timetag metadata of the shot %d"
" (expected value: 0x6fc8ad2d): 0x%x
\n
"
,
i
,
*
trig_timetag
);
ctrl
->
tstamp
.
secs
=
*
(
++
trig_timetag
);
...
...
@@ -159,7 +159,7 @@ void zfad_dma_done(struct zio_cset *cset)
* All DMA transfers done! Inform the trigger about this, so
* it can store blocks into the buffer
*/
dev_dbg
(
&
fa
->
fmc
->
dev
,
"%i blocks transfered
\n
"
,
fa
->
n_shots
);
dev_dbg
(
fa
->
msg
dev
,
"%i blocks transfered
\n
"
,
fa
->
n_shots
);
zio_trigger_data_done
(
cset
);
/*
...
...
@@ -176,7 +176,7 @@ void zfad_dma_done(struct zio_cset *cset)
fa_writel
(
fa
,
fa
->
fa_adc_csr_base
,
&
zfad_regs
[
ZFAT_CFG_SW_EN
],
ti
->
zattr_set
.
ext_zattr
[
6
].
value
);
}
else
{
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Software acquisition over
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"Software acquisition over
\n
"
);
fa_writel
(
fa
,
fa
->
fa_adc_csr_base
,
&
zfad_regs
[
ZFAT_CFG_SW_EN
],
1
);
}
...
...
@@ -199,7 +199,7 @@ void zfad_dma_error(struct zio_cset *cset)
fa
->
n_dma_err
++
;
if
(
fa
->
n_fires
==
0
)
dev_err
(
&
fa
->
fmc
->
dev
,
dev_err
(
fa
->
msg
dev
,
"DMA error occurs but no block was acquired
\n
"
);
}
...
...
@@ -214,7 +214,7 @@ void zfat_irq_acq_end(struct zio_cset *cset)
{
struct
fa_dev
*
fa
=
cset
->
zdev
->
priv_d
;
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Acquisition done
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"Acquisition done
\n
"
);
/*
* because the driver doesn't listen anymore trig-event
* we agreed that the HW will provide a dedicated register
...
...
@@ -228,7 +228,7 @@ void zfat_irq_acq_end(struct zio_cset *cset)
&
zfad_regs
[
ZFAT_SHOTS_REM
]);
if
(
fa
->
n_fires
!=
fa
->
n_shots
)
{
dev_err
(
&
fa
->
fmc
->
dev
,
dev_err
(
fa
->
msg
dev
,
"Expected %i trigger fires, but %i occurs
\n
"
,
fa
->
n_shots
,
fa
->
n_fires
);
}
...
...
@@ -286,7 +286,7 @@ end:
zfad_dma_error
(
cset
);
}
else
if
(
fa
->
enable_auto_start
)
{
/* Automatic start next acquisition */
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Automatic start
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"Automatic start
\n
"
);
zfad_fsm_command
(
fa
,
FA100M14B4C_CMD_START
);
}
...
...
@@ -305,10 +305,9 @@ end:
static
void
fa_get_irq_status
(
struct
fa_dev
*
fa
,
int
irq_core_base
,
uint32_t
*
irq_status
)
{
/* Get current interrupts status */
*
irq_status
=
fa_readl
(
fa
,
irq_core_base
,
&
zfad_regs
[
ZFA_IRQ_ADC_SRC
]);
dev_dbg
(
&
fa
->
fmc
->
dev
,
dev_dbg
(
fa
->
msg
dev
,
"IRQ 0x%x fired an interrupt. IRQ status register: 0x%x
\n
"
,
irq_core_base
,
*
irq_status
);
...
...
@@ -347,7 +346,7 @@ irqreturn_t fa_irq_handler(int irq_core_base, void *dev_id)
if
(
!
status
)
return
IRQ_NONE
;
/* No interrupt fired by this mezzanine */
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Handle ADC interrupts fmc slot: %d
\n
"
,
dev_dbg
(
fa
->
msg
dev
,
"Handle ADC interrupts fmc slot: %d
\n
"
,
fmc
->
slot_id
);
if
(
status
&
FA_IRQ_ADC_ACQ_END
)
{
...
...
@@ -375,7 +374,7 @@ irqreturn_t fa_irq_handler(int irq_core_base, void *dev_id)
}
else
/* current Acquiistion has been stopped */
fmc_irq_ack
(
fmc
);
}
else
{
/* unexpected interrupt we have to ack anyway */
dev_err
(
&
fa
->
fmc
->
dev
,
dev_err
(
fa
->
msg
dev
,
"%s unexpected interrupt 0x%x
\n
"
,
__func__
,
status
);
fmc_irq_ack
(
fmc
);
...
...
@@ -391,7 +390,7 @@ int fa_setup_irqs(struct fa_dev *fa)
int
err
;
/* Request IRQ */
dev_dbg
(
&
fa
->
fmc
->
dev
,
"%s request irq fmc slot: %d
\n
"
,
dev_dbg
(
fa
->
msg
dev
,
"%s request irq fmc slot: %d
\n
"
,
__func__
,
fa
->
fmc
->
slot_id
);
/* VIC svec setup */
fa_writel
(
fa
,
fa
->
fa_irq_vic_base
,
...
...
@@ -410,7 +409,7 @@ int fa_setup_irqs(struct fa_dev *fa)
"fmc-adc-100m14b"
,
0
/*VIC is used */
);
if
(
err
)
{
dev_err
(
&
fa
->
fmc
->
dev
,
"can't request irq %i (error %i)
\n
"
,
dev_err
(
fa
->
msg
dev
,
"can't request irq %i (error %i)
\n
"
,
fa
->
fmc
->
irq
,
err
);
return
err
;
}
...
...
@@ -450,7 +449,7 @@ int fa_free_irqs(struct fa_dev *fa)
int
fa_enable_irqs
(
struct
fa_dev
*
fa
)
{
dev_dbg
(
&
fa
->
fmc
->
dev
,
"%s Enable interrupts fmc slot:%d
\n
"
,
dev_dbg
(
fa
->
msg
dev
,
"%s Enable interrupts fmc slot:%d
\n
"
,
__func__
,
fa
->
fmc
->
slot_id
);
fa_writel
(
fa
,
fa
->
fa_irq_adc_base
,
...
...
@@ -464,7 +463,7 @@ int fa_enable_irqs(struct fa_dev *fa)
int
fa_disable_irqs
(
struct
fa_dev
*
fa
)
{
dev_dbg
(
&
fa
->
fmc
->
dev
,
"%s Disable interrupts fmc slot:%d
\n
"
,
dev_dbg
(
fa
->
msg
dev
,
"%s Disable interrupts fmc slot:%d
\n
"
,
__func__
,
fa
->
fmc
->
slot_id
);
fa_writel
(
fa
,
fa
->
fa_irq_adc_base
,
...
...
@@ -480,4 +479,3 @@ int fa_ack_irq(struct fa_dev *fa, int irq_id)
{
return
0
;
}
kernel/fa-spec-core.c
View file @
32a2e85a
...
...
@@ -22,7 +22,6 @@ static char *fa_spec_get_gwname(void)
static
int
fa_spec_init
(
struct
fa_dev
*
fa
)
{
struct
device
*
msgdev
=
&
fa
->
fmc
->
dev
;
struct
fa_spec_data
*
cdata
;
uint32_t
val
;
...
...
@@ -39,7 +38,7 @@ static int fa_spec_init(struct fa_dev *fa)
cdata
->
fa_irq_dma_base
=
fmc_find_sdb_device
(
fa
->
fmc
->
sdb
,
0xce42
,
0xd5735ab4
,
NULL
);
dev_info
(
msgdev
,
dev_info
(
fa
->
msgdev
,
"Spec Base addrs: irq_dmma:0x%x, dma_ctrl:0x%x, csr:0x%x
\n
"
,
cdata
->
fa_irq_dma_base
,
cdata
->
fa_dma_base
,
fa
->
fa_carrier_csr_base
);
...
...
@@ -55,21 +54,21 @@ static int fa_spec_init(struct fa_dev *fa)
val
=
fa_readl
(
fa
,
fa
->
fa_carrier_csr_base
,
&
fa_spec_regs
[
ZFA_CAR_FMC_PRES
]);
if
(
val
)
{
dev_err
(
msgdev
,
"No FCM ADC plugged
\n
"
);
dev_err
(
fa
->
msgdev
,
"No FCM ADC plugged
\n
"
);
return
-
ENODEV
;
}
/* Verify that system PLL is locked (1 is calibrated) */
val
=
fa_readl
(
fa
,
fa
->
fa_carrier_csr_base
,
&
fa_spec_regs
[
ZFA_CAR_SYS_PLL
]);
if
(
!
val
)
{
dev_err
(
msgdev
,
"System PLL not locked
\n
"
);
dev_err
(
fa
->
msgdev
,
"System PLL not locked
\n
"
);
return
-
ENODEV
;
}
/* Verify that DDR3 calibration is done (1 is calibrated) */
val
=
fa_readl
(
fa
,
fa
->
fa_carrier_csr_base
,
&
fa_spec_regs
[
ZFA_CAR_DDR_CAL
]);
if
(
!
val
)
{
dev_err
(
msgdev
,
"DDR3 Calibration not done
\n
"
);
dev_err
(
fa
->
msgdev
,
"DDR3 Calibration not done
\n
"
);
return
-
ENODEV
;
}
...
...
@@ -79,7 +78,7 @@ static int fa_spec_init(struct fa_dev *fa)
/* register carrier data */
fa
->
carrier_data
=
cdata
;
dev_info
(
msgdev
,
"spec::%s successfully executed
\n
"
,
__func__
);
dev_info
(
fa
->
msgdev
,
"spec::%s successfully executed
\n
"
,
__func__
);
return
0
;
}
...
...
@@ -87,7 +86,7 @@ static int fa_spec_reset(struct fa_dev *fa)
{
/*struct spec_dev *spec = fa->fmc->carrier_data;*/
dev_info
(
&
fa
->
fmc
->
dev
,
"%s: resetting ADC core through Gennum.
\n
"
,
dev_info
(
fa
->
msg
dev
,
"%s: resetting ADC core through Gennum.
\n
"
,
__func__
);
return
0
;
}
...
...
@@ -129,12 +128,12 @@ static int fa_spec_setup_irqs(struct fa_dev *fa)
err
=
fmc_irq_request
(
fmc
,
fa_spec_irq_handler
,
"fmc-adc-100m14b"
,
0
);
if
(
err
)
{
dev_err
(
&
fmc
->
dev
,
"can't request irq 0x%x (error %i)
\n
"
,
dev_err
(
fa
->
msg
dev
,
"can't request irq 0x%x (error %i)
\n
"
,
fmc
->
irq
,
err
);
return
err
;
}
fmc_gpio_config
(
fmc
,
fa_gpio_on
,
ARRAY_SIZE
(
fa_gpio_on
));
dev_info
(
&
fmc
->
dev
,
"spec::%s successfully executed
\n
"
,
__func__
);
dev_info
(
fa
->
msg
dev
,
"spec::%s successfully executed
\n
"
,
__func__
);
/* Add SPEC specific IRQ sources to listen */
fa
->
irq_src
|=
FA_IRQ_SRC_DMA
;
...
...
kernel/fa-spec-dma.c
View file @
32a2e85a
...
...
@@ -71,7 +71,7 @@ static int gncore_dma_fill(struct zio_dma_sg *zsg)
&
fa_spec_regs
[
ZFA_DMA_BR_LAST
],
item
->
attribute
);
}
dev_dbg
(
zsg
->
zsgt
->
hw
dev
,
"DMA item %d (block %d)
\n
"
dev_dbg
(
fa
->
msg
dev
,
"DMA item %d (block %d)
\n
"
" addr 0x%x
\n
"
" addr_l 0x%x
\n
"
" addr_h 0x%x
\n
"
...
...
@@ -148,6 +148,6 @@ void fa_spec_dma_error(struct zio_cset *cset)
val
=
fa_readl
(
fa
,
spec_data
->
fa_dma_base
,
&
fa_spec_regs
[
ZFA_DMA_STA
]);
if
(
val
)
dev_err
(
&
fa
->
fmc
->
dev
,
dev_err
(
fa
->
msg
dev
,
"DMA error (status 0x%x). All acquisition lost
\n
"
,
val
);
}
kernel/fa-spec-irq.c
View file @
32a2e85a
...
...
@@ -32,12 +32,12 @@
static
void
fa_get_irq_status
(
struct
fa_dev
*
fa
,
int
irq_core_base
,
uint32_t
*
irq_status
)
{
/* Get current interrupts status */
*
irq_status
=
fa_readl
(
fa
,
irq_core_base
,
&
fa_spec_regs
[
ZFA_IRQ_DMA_SRC
]);
dev_dbg
(
&
fa
->
fmc
->
dev
,
"core DMA: 0x%x fired an interrupt. IRQ status register: 0x%x
\n
"
,
irq_core_base
,
*
irq_status
);
dev_dbg
(
fa
->
msgdev
,
"core DMA: 0x%x fired an interrupt. IRQ status register: 0x%x
\n
"
,
irq_core_base
,
*
irq_status
);
if
(
*
irq_status
)
/* Clear current interrupts status */
fa_writel
(
fa
,
irq_core_base
,
...
...
@@ -79,7 +79,7 @@ irqreturn_t fa_spec_irq_handler(int irq_core_base, void *ptr)
* with DMA with two different programs/drivers ... well *you*
* have a problem and this driver may crash badly.
*/
dev_err
(
&
fa
->
fmc
->
dev
,
dev_err
(
fa
->
msg
dev
,
"No programmed shot, implies no DMA to perform
\n
"
);
goto
out
;
...
...
@@ -95,7 +95,7 @@ irqreturn_t fa_spec_irq_handler(int irq_core_base, void *ptr)
goto
out
;
}
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Handle ADC interrupts
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"Handle ADC interrupts
\n
"
);
if
(
status
&
FA_SPEC_IRQ_DMA_DONE
)
zfad_dma_done
(
cset
);
...
...
@@ -120,4 +120,3 @@ out:
return
IRQ_HANDLED
;
}
kernel/fa-svec-dma.c
View file @
32a2e85a
...
...
@@ -103,7 +103,8 @@ int fa_svec_dma_start(struct zio_cset *cset)
fa_dma_block
[
0
].
dev_mem_off
/
4
);
/* Execute DMA shot by shot */
for
(
i
=
0
;
i
<
fa
->
n_shots
;
++
i
)
{
pr_debug
(
"configure DMA descriptor shot %d "
dev_dbg
(
fa
->
msgdev
,
"configure DMA descriptor shot %d "
"vme addr: 0x%llx destination address: 0x%p len: %d
\n
"
,
i
,
(
long
long
)
vme_addr
,
fa_dma_block
[
i
].
block
->
data
,
(
int
)
fa_dma_block
[
i
].
block
->
datalen
);
...
...
@@ -129,6 +130,6 @@ void fa_svec_dma_error(struct zio_cset *cset)
{
struct
fa_dev
*
fa
=
cset
->
zdev
->
priv_d
;
dev_err
(
&
fa
->
fmc
->
dev
,
dev_err
(
fa
->
msg
dev
,
"DMA error. All acquisition lost
\n
"
);
}
kernel/fa-zio-drv.c
View file @
32a2e85a
...
...
@@ -258,7 +258,7 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
break
;
case
ZFA_UTC_COARSE
:
if
(
usr_val
>=
FA100M14B4C_UTC_CLOCK_FREQ
)
{
dev_err
(
dev
,
dev_err
(
fa
->
msg
dev
,
"ticks time must be in the range [0, %d]
\n
"
,
FA100M14B4C_UTC_CLOCK_FREQ
);
return
-
EINVAL
;
...
...
@@ -363,14 +363,14 @@ static inline int zfat_overflow_detection(struct zio_ti *ti)
ti_zattr
[
ZIO_ATTR_TRIG_POST_SAMP
].
value
;
shot_size
=
((
nsamples
+
2
)
*
ti
->
cset
->
ssize
)
*
FA100M14B4C_NCHAN
;
if
(
(
shot_size
*
nshot_t
)
>
FA100M14B4C_MAX_ACQ_BYTE
)
{
dev_err
(
&
ti
->
head
.
dev
,
"Cannot acquire, dev memory overflow
\n
"
);
dev_err
(
fa
->
msg
dev
,
"Cannot acquire, dev memory overflow
\n
"
);
return
-
ENOMEM
;
}
/* in case of multi shot, each shot cannot exceed the dpram size */
if
(
(
nshot_t
>
1
)
&&
(
nsamples
>
fa
->
mshot_max_samples
)
)
{
dev_err
(
&
ti
->
head
.
dev
,
"Cannot acquire such amount of samples "
dev_err
(
fa
->
msg
dev
,
"Cannot acquire such amount of samples "
"(req: %d , max: %d) in multi shot mode."
"dev memory overflow
\n
"
,
nsamples
,
fa
->
mshot_max_samples
);
...
...
@@ -432,13 +432,13 @@ static int zfad_input_cset(struct zio_cset *cset)
if
(
err
)
return
err
;
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Ready to acquire
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"Ready to acquire
\n
"
);
/* ZIO should configure only the interleaved channel */
if
(
!
cset
->
interleave
)
return
-
EINVAL
;
/* nsamples can't be 0 */
if
(
!
cset
->
interleave
->
current_ctrl
->
nsamples
)
{
dev_info
(
&
fa
->
fmc
->
dev
,
"pre + post = 0: can't acquire
\n
"
);
dev_info
(
fa
->
msg
dev
,
"pre + post = 0: can't acquire
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -484,7 +484,7 @@ static int zfad_zio_probe(struct zio_device *zdev)
{
struct
fa_dev
*
fa
=
zdev
->
priv_d
;
dev_dbg
(
&
zdev
->
head
.
dev
,
"%s:%d
\n
"
,
__func__
,
__LINE__
);
dev_dbg
(
fa
->
msg
dev
,
"%s:%d
\n
"
,
__func__
,
__LINE__
);
/* Save also the pointer to the real zio_device */
fa
->
zdev
=
zdev
;
...
...
@@ -598,7 +598,6 @@ void fa_zio_unregister(void)
*/
int
fa_zio_init
(
struct
fa_dev
*
fa
)
{
struct
device
*
msgdev
=
&
fa
->
fmc
->
dev
;
int
err
;
if
(
adc_buffer
)
...
...
@@ -607,7 +606,7 @@ int fa_zio_init(struct fa_dev *fa)
/* Allocate the hardware zio_device for registration */
fa
->
hwzdev
=
zio_allocate_device
();
if
(
IS_ERR
(
fa
->
hwzdev
))
{
dev_err
(
msgdev
,
"Cannot allocate ZIO device
\n
"
);
dev_err
(
fa
->
msgdev
,
"Cannot allocate ZIO device
\n
"
);
return
PTR_ERR
(
fa
->
hwzdev
);
}
...
...
@@ -619,7 +618,7 @@ int fa_zio_init(struct fa_dev *fa)
err
=
zio_register_device
(
fa
->
hwzdev
,
"adc-100m14b"
,
fa
->
fmc
->
device_id
);
if
(
err
)
{
dev_err
(
msgdev
,
"Cannot register ZIO device fmc-adc-100m14b
\n
"
);
dev_err
(
fa
->
msgdev
,
"Cannot register ZIO device fmc-adc-100m14b
\n
"
);
zio_free_device
(
fa
->
hwzdev
);
}
return
err
;
...
...
kernel/fa-zio-trg.c
View file @
32a2e85a
...
...
@@ -104,13 +104,13 @@ static int zfat_conf_set(struct device *dev, struct zio_attribute *zattr,
switch
(
zattr
->
id
)
{
case
ZFAT_SHOTS_NB
:
if
(
!
tmp_val
)
{
dev_err
(
dev
,
"nshots cannot be 0
\n
"
);
dev_err
(
fa
->
msg
dev
,
"nshots cannot be 0
\n
"
);
return
-
EINVAL
;
}
break
;
case
ZFAT_POST
:
if
(
tmp_val
<
2
)
{
dev_err
(
dev
,
"minimum post samples 2 (HW limitation)
\n
"
);
dev_err
(
fa
->
msg
dev
,
"minimum post samples 2 (HW limitation)
\n
"
);
return
-
EINVAL
;
}
tmp_val
--
;
/* Remove one sample for the trigger */
...
...
@@ -118,12 +118,12 @@ static int zfat_conf_set(struct device *dev, struct zio_attribute *zattr,
case
ZFAT_SW
:
/* Fire if software trigger is enabled (index 5) */
if
(
!
ti
->
zattr_set
.
ext_zattr
[
FA100M14B4C_TATTR_SW_EN
].
value
)
{
dev_info
(
dev
,
"sw trigger is not enabled
\n
"
);
dev_info
(
fa
->
msg
dev
,
"sw trigger is not enabled
\n
"
);
return
-
EPERM
;
}
/* Fire if nsamples!=0 */
if
(
!
ti
->
nsamples
)
{
dev_info
(
dev
,
"pre + post = 0: cannot acquire
\n
"
);
dev_info
(
fa
->
msg
dev
,
"pre + post = 0: cannot acquire
\n
"
);
return
-
EINVAL
;
}
/*
...
...
@@ -191,7 +191,7 @@ static struct zio_ti *zfat_create(struct zio_trigger_type *trig,
if
(
!
fa
)
{
/* This only happens if we have a bug in the init sequence */
dev_err
(
&
cset
->
head
.
dev
,
"No FMC device associated
\n
"
);
dev_err
(
fa
->
msg
dev
,
"No FMC device associated
\n
"
);
return
ERR_PTR
(
-
ENODEV
);
}
...
...
@@ -259,7 +259,7 @@ static int zfat_data_done(struct zio_cset *cset)
struct
fa_dev
*
fa
=
cset
->
zdev
->
priv_d
;
unsigned
int
i
;
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Data done
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"Data done
\n
"
);
/* Nothing to store */
if
(
!
zfad_block
)
...
...
@@ -268,11 +268,11 @@ static int zfat_data_done(struct zio_cset *cset)
/* Store blocks */
for
(
i
=
0
;
i
<
fa
->
n_shots
;
++
i
)
if
(
likely
(
i
<
fa
->
n_fires
))
{
/* Store filled blocks */
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Store Block %i/%i
\n
"
,
dev_dbg
(
fa
->
msg
dev
,
"Store Block %i/%i
\n
"
,
i
+
1
,
fa
->
n_shots
);
zio_buffer_store_block
(
bi
,
zfad_block
[
i
].
block
);
}
else
{
/* Free un-filled blocks */
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Free un-acquired block %d/%d "
dev_dbg
(
fa
->
msg
dev
,
"Free un-acquired block %d/%d "
"(received %d shots)
\n
"
,
i
+
1
,
fa
->
n_shots
,
fa
->
n_fires
);
zio_buffer_free_block
(
bi
,
zfad_block
[
i
].
block
);
...
...
@@ -297,7 +297,6 @@ static int zfat_arm_trigger(struct zio_ti *ti)
{
struct
zio_channel
*
interleave
=
ti
->
cset
->
interleave
;
struct
fa_dev
*
fa
=
ti
->
cset
->
zdev
->
priv_d
;
struct
device
*
msgdev
=
&
fa
->
fmc
->
dev
;
struct
zio_block
*
block
;
struct
zfad_block
*
zfad_block
;
unsigned
int
size
;
...
...
@@ -305,17 +304,17 @@ static int zfat_arm_trigger(struct zio_ti *ti)
int
i
,
err
=
0
;
struct
zio_attribute
*
ti_zattr
=
ti
->
zattr_set
.
std_zattr
;
dev_dbg
(
msgdev
,
"Arming trigger
\n
"
);
dev_dbg
(
fa
->
msgdev
,
"Arming trigger
\n
"
);
/* Update the current control: sequence, nsamples and tstamp */
interleave
->
current_ctrl
->
nsamples
=
ti
->
nsamples
;
/* Allocate the necessary blocks for multi-shot acquisition */
fa
->
n_shots
=
ti
->
zattr_set
.
std_zattr
[
ZIO_ATTR_TRIG_N_SHOTS
].
value
;
dev_dbg
(
msgdev
,
"programmed shot %i
\n
"
,
fa
->
n_shots
);
dev_dbg
(
fa
->
msgdev
,
"programmed shot %i
\n
"
,
fa
->
n_shots
);
if
(
!
fa
->
n_shots
)
{
dev_info
(
msgdev
,
"Cannot arm. No programmed shots
\n
"
);
dev_info
(
fa
->
msgdev
,
"Cannot arm. No programmed shots
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -344,7 +343,7 @@ static int zfat_arm_trigger(struct zio_ti *ti)
/* check if size is 32 bits word aligned: should be always the case */
if
(
size
%
4
)
{
/* should never happen: increase the size accordling */
dev_warn
(
msgdev
,
dev_warn
(
fa
->
msgdev
,
"
\n
zio data block size should 32bit word aligned."
"original size:%d was increased by %d bytes
\n
"
,
size
,
size
%
4
);
...
...
@@ -353,11 +352,11 @@ static int zfat_arm_trigger(struct zio_ti *ti)
dev_mem_off
=
0
;
/* Allocate ZIO blocks */
for
(
i
=
0
;
i
<
fa
->
n_shots
;
++
i
)
{
dev_dbg
(
msgdev
,
"Allocating block %d ...
\n
"
,
i
);
dev_dbg
(
fa
->
msgdev
,
"Allocating block %d ...
\n
"
,
i
);
block
=
zio_buffer_alloc_block
(
interleave
->
bi
,
size
,
GFP_ATOMIC
);
if
(
!
block
)
{
dev_err
(
msgdev
,
dev_err
(
fa
->
msgdev
,
"
\n
arm trigger fail, cannot allocate block
\n
"
);
err
=
-
ENOMEM
;
goto
out_allocate
;
...
...
@@ -369,7 +368,7 @@ static int zfat_arm_trigger(struct zio_ti *ti)
zfad_block
[
i
].
block
=
block
;
zfad_block
[
i
].
dev_mem_off
=
dev_mem_off
;
dev_mem_off
+=
size
;
dev_dbg
(
msgdev
,
"next dev_mem_off 0x%x (+%d)
\n
"
,
dev_dbg
(
fa
->
msgdev
,
"next dev_mem_off 0x%x (+%d)
\n
"
,
dev_mem_off
,
size
);
}
...
...
@@ -402,7 +401,7 @@ static void zfat_abort(struct zio_ti *ti)
struct
zfad_block
*
zfad_block
=
cset
->
interleave
->
priv_d
;
unsigned
int
i
;
dev_dbg
(
&
fa
->
fmc
->
dev
,
"Aborting trigger
\n
"
);
dev_dbg
(
fa
->
msg
dev
,
"Aborting trigger
\n
"
);
/* Nothing to free */
if
(
!
zfad_block
)
...
...
@@ -419,7 +418,10 @@ static void zfat_abort(struct zio_ti *ti)
static
int
zfat_push
(
struct
zio_ti
*
ti
,
struct
zio_channel
*
chan
,
struct
zio_block
*
block
)
{
dev_err
(
&
ti
->
head
.
dev
,
"trigger
\"
%s
\"
does not support output
\n
"
,
struct
zio_cset
*
cset
=
ti
->
cset
;
struct
fa_dev
*
fa
=
cset
->
zdev
->
priv_d
;
dev_err
(
fa
->
msgdev
,
"trigger
\"
%s
\"
does not support output
\n
"
,
ti
->
head
.
name
);
return
-
EIO
;
}
...
...
kernel/fmc-adc-100m14b4cha.h
View file @
32a2e85a
...
...
@@ -309,6 +309,7 @@ struct fa_calib {
*
*/
struct
fa_dev
{
struct
device
*
msgdev
;
/**< device used to print messages */
/* the pointer to the fmc_device generic structure */
struct
fmc_device
*
fmc
;
/* the pointer to the real zio_device in use */
...
...
@@ -461,7 +462,7 @@ static inline void fa_writel(struct fa_dev *fa,
cur
&=
~
field
->
mask
;
/* clear bits according to the mask */
val
=
usr_val
*
(
field
->
mask
&
-
(
field
->
mask
));
if
(
val
&
~
field
->
mask
)
dev_warn
(
fa
->
fmc
->
hw
dev
,
dev_warn
(
fa
->
msg
dev
,
"addr 0x%lx: value 0x%x doesn't fit mask 0x%x
\n
"
,
base_off
+
field
->
offset
,
val
,
field
->
mask
);
val
&=
field
->
mask
;
...
...
kernel/spi.c
View file @
32a2e85a
...
...
@@ -56,7 +56,7 @@ int fa_spi_xfer(struct fa_dev *fa, int cs, int num_bits,
while
(
fa_ioread
(
fa
,
fa
->
fa_spi_base
+
FA_SPI_CTRL
)
&
FA_SPI_CTRL_BUSY
)
{
if
(
jiffies
>
j
)
{
dev_err
(
&
fa
->
fmc
->
dev
,
"SPI transfer error
\n
"
);
dev_err
(
fa
->
msg
dev
,
"SPI transfer error
\n
"
);
err
=
-
EIO
;
goto
out
;
}
...
...
@@ -89,7 +89,7 @@ int fa_spi_init(struct fa_dev *fa)
for
(
i
=
0
;
i
<
5
;
i
++
)
{
tx
=
0x8000
|
(
i
<<
8
);
fa_spi_xfer
(
fa
,
FA_SPI_SS_ADC
,
16
,
tx
,
&
rx
);
dev_dbg
(
&
fa
->
fmc
->
dev
,
"LTC register %02x: 0x%02x
\n
"
,
dev_dbg
(
fa
->
msg
dev
,
"LTC register %02x: 0x%02x
\n
"
,
i
,
rx
&
0xff
);
}
}
...
...
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