Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
Simple VME FMC Carrier SVEC - 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
Simple VME FMC Carrier SVEC - Software
Commits
feb0b8cc
Commit
feb0b8cc
authored
May 23, 2013
by
Luis Fernando Ruiz
Committed by
Juan David González Cobas
May 23, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
svec: Avoid reprogram in an already programmed card
parent
60ec5d80
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
19 additions
and
7 deletions
+19
-7
svec-fmc.c
kernel/svec-fmc.c
+18
-6
svec.h
kernel/svec.h
+1
-1
No files found.
kernel/svec-fmc.c
View file @
feb0b8cc
...
...
@@ -12,6 +12,7 @@
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/fmc-sdb.h>
#include <linux/jhash.h>
#include "svec.h"
static
int
svec_show_sdb
;
...
...
@@ -39,8 +40,10 @@ static int svec_reprogram(struct fmc_device *fmc, struct fmc_driver *drv,
const
struct
firmware
*
fw
;
struct
svec_dev
*
svec
=
fmc
->
carrier_data
;
struct
device
*
dev
=
fmc
->
hwdev
;
uint32_t
fw_hash
;
int
ret
=
0
;
/* If no firmware filename is provided, load default */
if
(
!
gw
)
gw
=
svec_fw_name
;
...
...
@@ -65,23 +68,32 @@ static int svec_reprogram(struct fmc_device *fmc, struct fmc_driver *drv,
dev_warn
(
dev
,
"request firmware
\"
%s
\"
: error %i
\n
"
,
gw
,
ret
);
return
ret
;
}
/* Hash firmware bitstream */
fw_hash
=
jhash
(
fw
->
data
,
fw
->
size
,
0
);
if
(
fw_hash
==
svec
->
fw_hash
)
{
dev_info
(
dev
,
"card already programmed with
\"
%s
\"
[%x]
\n
"
,
gw
,
fw_hash
);
goto
out
;
}
/* FIXME?? */
fmc_free_sdb_tree
(
fmc
);
fmc
->
flags
&=
~
(
FMC_DEVICE_HAS_GOLDEN
|
FMC_DEVICE_HAS_CUSTOM
);
/* load the firmware */
ret
=
svec_load_fpga
(
svec
,
fw
->
data
,
fw
->
size
);
if
(
ret
<
0
)
{
dev_err
(
dev
,
"
write firmware
\"
%s
\"
: error %i
\n
"
,
gw
,
ret
);
dev_err
(
dev
,
"
error %i programming firmware
\"
%s
\"\n
"
,
ret
,
gw
);
goto
out
;
}
if
(
gw
==
svec_fw_name
)
fmc
->
flags
|=
FMC_DEVICE_HAS_GOLDEN
;
else
fmc
->
flags
|=
FMC_DEVICE_HAS_CUSTOM
;
/* configure and activate function 0 */
/* FIXME: Only once?? */
dev_info
(
fmc
->
hwdev
,
"svec-fmc: setup fa0
\n
"
);
svec_setup_csr_fa0
(
svec
->
map
[
MAP_CR_CSR
]
->
kernel_va
,
svec
->
vmebase
,
svec
->
vector
,
svec
->
level
);
/* Store firmware hash to avoid reprogram */
svec
->
fw_hash
=
fw_hash
;
out:
release_firmware
(
fw
);
if
(
ret
<
0
)
...
...
kernel/svec.h
View file @
feb0b8cc
...
...
@@ -44,7 +44,7 @@ struct svec_dev {
struct
device
*
dev
;
char
driver
[
16
];
char
description
[
80
];
uint32_t
fw_hash
;
struct
vme_mapping
*
map
[
2
];
/* struct work_struct work; */
...
...
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