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
a8a4ae57
Commit
a8a4ae57
authored
May 07, 2013
by
Juan David González Cobas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
svec-fmc: verify golden integrity
parent
72b79645
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
36 additions
and
2 deletions
+36
-2
svec-fmc.c
kernel/svec-fmc.c
+36
-2
No files found.
kernel/svec-fmc.c
View file @
a8a4ae57
...
...
@@ -122,7 +122,7 @@ static int svec_read_ee(struct fmc_device *fmc, int pos, void *data, int len)
if
(
!
(
fmc
->
flags
&
FMC_DEVICE_HAS_GOLDEN
))
return
-
ENOTSUPP
;
return
svec_eeprom_read
(
fmc
,
fmc
->
eeprom_addr
,
pos
,
data
,
len
);
return
svec_eeprom_read
(
fmc
,
pos
,
data
,
len
);
return
-
ENOTSUPP
;
}
...
...
@@ -133,7 +133,7 @@ static int svec_write_ee(struct fmc_device *fmc, int pos,
if
(
!
(
fmc
->
flags
&
FMC_DEVICE_HAS_GOLDEN
))
return
-
ENOTSUPP
;
return
svec_eeprom_write
(
fmc
,
fmc
->
eeprom_addr
,
pos
,
data
,
len
);
return
svec_eeprom_write
(
fmc
,
pos
,
data
,
len
);
return
-
ENOTSUPP
;
}
...
...
@@ -151,6 +151,34 @@ static struct fmc_operations svec_fmc_operations = {
.
validate
=
svec_validate
,
};
static
int
check_golden
(
struct
fmc_device
*
fmc
)
{
struct
svec_dev
*
svec
=
fmc
->
carrier_data
;
int
ret
;
uint32_t
magic
;
/* poor man's SDB */
magic
=
fmc_readl
(
fmc
,
0x00
);
if
(
magic
!=
0x5344422d
)
{
dev_err
(
svec
->
dev
,
"Bad SDB magic: 0x%08x
\n
"
,
magic
);
return
-
ENODEV
;
}
if
(
(
ret
=
fmc_scan_sdb_tree
(
fmc
,
0x0
))
<
0
)
return
-
ENODEV
;
if
(
fmc_readl
(
fmc
,
0x5c
)
!=
0x0000ce42
)
{
dev_err
(
svec
->
dev
,
"unsexpected vendor in SDB
\n
"
);
return
-
ENODEV
;
}
if
(
fmc_readl
(
fmc
,
0x60
)
!=
0x123c5443
)
{
dev_err
(
svec
->
dev
,
"unexpected device in SDB
\n
"
);
return
-
ENODEV
;
}
if
(
svec_show_sdb
)
fmc_show_sdb_tree
(
fmc
);
return
0
;
}
int
svec_fmc_prepare
(
struct
svec_dev
*
svec
,
unsigned
int
fmc_slot
)
{
struct
fmc_device
*
fmc
=
svec
->
fmcs
+
fmc_slot
;
...
...
@@ -176,6 +204,12 @@ int svec_fmc_prepare(struct svec_dev *svec, unsigned int fmc_slot)
fmc
->
eeprom_addr
=
0x50
+
2
*
fmc_slot
;
fmc
->
memlen
=
0x100000
;
/* check golden integrity */
ret
=
check_golden
(
fmc
);
if
(
ret
)
{
dev_err
(
svec
->
dev
,
"Bad golden, error %d
\n
"
,
ret
);
return
ret
;
}
ret
=
svec_i2c_init
(
fmc
,
fmc_slot
);
if
(
ret
)
{
...
...
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