Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Software
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dmytro Levit
Software
Commits
57b9576b
Commit
57b9576b
authored
4 years ago
by
qzhou
Browse files
Options
Downloads
Patches
Plain Diff
add link status check before register access
parent
a591ff2f
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Pcie40Applications/regconfig.cpp
+37
-34
37 additions, 34 deletions
Pcie40Applications/regconfig.cpp
Pcie40Applications/statlink.cpp
+55
-51
55 additions, 51 deletions
Pcie40Applications/statlink.cpp
with
92 additions
and
85 deletions
Pcie40Applications/regconfig.cpp
+
37
−
34
View file @
57b9576b
...
...
@@ -337,44 +337,47 @@ int main(int argc, char** argv){
// open pcie40 device driver for current process
ecs_open
(
dev_slot
,
SLC_BAR
);
pcie40reg_t
pcie40
;
int
result
=
-
1
;
if
(
USE_FEE8
&&
READ_ONLY
){
result
=
pcie40_readfee8
(
dev_slot
,
ch
,
addr
);
printf
(
"reg%04x = %08x
\n
"
,
addr
,
result
);
}
else
if
(
USE_FEE8
&&
WRITE
){
result
=
pcie40_writefee8
(
dev_slot
,
ch
,
addr
,
data
);
if
(
result
==
0
)
printf
(
"Write 0x%04x to register 0x%04x
\n
"
,
data
,
addr
);
else
printf
(
"ERROR: Failed to write 0x%04x to register 0x%04x
\n
"
,
data
,
addr
);
}
else
if
(
USE_FEE32
&&
READ_ONLY
){
result
=
pcie40_readfee32
(
dev_slot
,
ch
,
addr
);
printf
(
"reg%04x = %08x
\n
"
,
addr
,
result
);
}
else
if
(
USE_FEE32
&&
WRITE
){
result
=
pcie40_writefee32
(
dev_slot
,
ch
,
addr
,
data
);
if
(
result
==
0
)
printf
(
"Write 0x%08x to register 0x%04x
\n
"
,
data
,
addr
);
else
printf
(
"ERROR: Failed to write 0x%08x to register %04x
\n
"
,
data
,
addr
);
}
else
if
(
STREAM
){
if
(
STREAM_ARICH
)
result
=
pcie40_writestream_arich
(
dev_slot
,
ch
,
filename
)
;
else
result
=
pcie40_writestream_klm
(
dev_slot
,
ch
,
filename
)
;
if
(
result
==
0
)
std
::
cerr
<<
"Succeed streaming file: "
<<
filename
<<
std
::
endl
;
else
std
::
cerr
<<
"ERROR: Failed streaming file: "
<<
filename
<<
std
::
endl
;
}
//This is only frame for register operation in the furture
if
(
OP_FLAG
){
unsigned
int
op_addr
=
hsreg
(
operation
);
if
(
pcie40_b2l_status
(
dev_slot
,
ch
)
&&
pcie40_b2l_rxready
(
dev_slot
,
ch
)
&&
pcie40_b2l_txready
(
dev_slot
,
ch
)){
if
(
USE_FEE8
&&
READ_ONLY
){
result
=
pcie40_readfee8
(
dev_slot
,
ch
,
addr
);
printf
(
"reg%04x = %08x
\n
"
,
addr
,
result
);
}
else
if
(
USE_FEE8
&&
WRITE
){
result
=
pcie40_writefee8
(
dev_slot
,
ch
,
addr
,
data
);
if
(
result
==
0
)
printf
(
"Write 0x%04x to register 0x%04x
\n
"
,
data
,
addr
);
else
printf
(
"ERROR: Failed to write 0x%04x to register 0x%04x
\n
"
,
data
,
addr
);
}
else
if
(
USE_FEE32
&&
READ_ONLY
){
result
=
pcie40_readfee32
(
dev_slot
,
ch
,
addr
);
printf
(
"reg%04x = %08x
\n
"
,
addr
,
result
);
}
else
if
(
USE_FEE32
&&
WRITE
){
result
=
pcie40_writefee32
(
dev_slot
,
ch
,
addr
,
data
);
if
(
result
==
0
)
printf
(
"Write 0x%08x to register 0x%04x
\n
"
,
data
,
addr
);
else
printf
(
"ERROR: Failed to write 0x%08x to register %04x
\n
"
,
data
,
addr
);
}
else
if
(
STREAM
){
if
(
STREAM_ARICH
)
result
=
pcie40_writestream_arich
(
dev_slot
,
ch
,
filename
)
;
else
result
=
pcie40_writestream_klm
(
dev_slot
,
ch
,
filename
)
;
if
(
result
==
0
)
std
::
cerr
<<
"Succeed streaming file: "
<<
filename
<<
std
::
endl
;
else
std
::
cerr
<<
"ERROR: Failed streaming file: "
<<
filename
<<
std
::
endl
;
}
//This is only frame for register operation in the furture
if
(
OP_FLAG
){
unsigned
int
op_addr
=
hsreg
(
operation
);
pcie40_op
(
dev_slot
,
ch
,
op_addr
,
addr
,
data
);
}
}
else
{
printf
(
"ERROR: b2link-%02d is down or not ready
\n
"
,
ch
);
}
// close pcie40 device driver for current process
ecs_close
(
dev_slot
,
SLC_BAR
)
;
...
...
This diff is collapsed.
Click to expand it.
Pcie40Applications/statlink.cpp
+
55
−
51
View file @
57b9576b
...
...
@@ -21,7 +21,7 @@
extern
"C"
int
ecs_open
(
int
dev
,
int
bar
);
extern
"C"
void
ecs_close
(
int
dev
,
int
bar
);
//#define PCIE_DEV 0
#define MAX_NUM_CH 48
#define MAX_SLOT 3
#define SLC_BAR 2
...
...
@@ -151,32 +151,35 @@ readregs(std::bitset<48> link_mask, pcie40reg_t pcie40reg[])
int
o_readonly
=
1
;
int
notfound
=
1
;
//
for (i=0; i<48; i++) {
for
(
i
=
0
;
i
<
48
;
i
++
)
{
pcie40reg_t
*
pcie
=
&
pcie40reg
[
i
];
memset
(
pcie
,
0
,
sizeof
(
*
pcie
));
//
if (!link_mask[i]) continue;
if
(
!
link_mask
[
i
])
continue
;
pcie
->
xbusy
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REG_CCLK
);
pcie
->
conf
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REG_CONF
);
pcie
->
pcie40ver
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VER
);
/* 81 */
pcie
->
rxdata
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_RXDATA
);
/* 84 */
pcie
->
eventsz
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_EVENTSZ
);
/* 85 */
pcie
->
nevent
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_NEVENT
);
/* 86 */
pcie
->
nkbyte
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_NKBYTE
);
/* 87 */
pcie
->
nword
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_NWORD
);
/* 88 */
pcie
->
vetoset
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VETOSET
);
/* 89 */
pcie
->
vetocnt
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VETOCNT
);
/* 8a */
pcie
->
vetobuf
[
0
]
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VETOBUF0
);
/* 8b */
pcie
->
vetobuf
[
1
]
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VETOBUF1
);
/* 8c */
pcie
->
feeser
=
0xffff
;
pcie
->
feever
=
0xffff
;
if
(
pcie40_b2l_status
(
dev_slot
,
i
)
)
{
getfee
(
pcie
);
}
// }
if
(
!
pcie40_b2l_status
(
dev_slot
,
i
)
)
{
printf
(
"b2link-%02d is down
\n
"
,
i
);
continue
;
}
pcie
->
xbusy
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REG_CCLK
);
pcie
->
conf
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REG_CONF
);
pcie
->
pcie40ver
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VER
);
/* 81 */
pcie
->
rxdata
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_RXDATA
);
/* 84 */
pcie
->
eventsz
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_EVENTSZ
);
/* 85 */
pcie
->
nevent
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_NEVENT
);
/* 86 */
pcie
->
nkbyte
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_NKBYTE
);
/* 87 */
pcie
->
nword
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_NWORD
);
/* 88 */
pcie
->
vetoset
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VETOSET
);
/* 89 */
pcie
->
vetocnt
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VETOCNT
);
/* 8a */
pcie
->
vetobuf
[
0
]
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VETOBUF0
);
/* 8b */
pcie
->
vetobuf
[
1
]
=
pcie40_readfee32
(
dev_slot
,
ch
,
PCIE40REGL_VETOBUF1
);
/* 8c */
pcie
->
feeser
=
0xffff
;
pcie
->
feever
=
0xffff
;
if
(
pcie40_b2l_status
(
dev_slot
,
i
)
)
{
getfee
(
pcie
);
}
}
return
notfound
;
}
...
...
@@ -196,22 +199,22 @@ statlink(std::bitset<48> link_mask, pcie40reg_t pcie40reg[])
char
prompt
[
128
];
if
(
!
link_mask
[
i
])
continue
;
quiet
=
0
;
if
(
!
first
)
printf
(
"
\n
"
);
first
=
0
;
sprintf
(
prompt
,
"(%02d) "
,
i
);
if
(
!
pcie40_b2l_status
(
dev_slot
,
i
)
)
{
printf
(
"b2link is down
\n
"
);
}
else
if
(
pcie
->
feeser
&
0x8000
)
{
printf
(
"fee info is not available
\n
"
);
}
else
{
printf
(
"%s serial %d version %d
\n
"
,
feename
(
pcie
->
feehw
,
pcie
->
feefw
),
pcie
->
feeser
,
pcie
->
feever
);
if
(
pcie40_b2l_status
(
dev_slot
,
i
)
)
{
if
(
pcie
->
feeser
&
0x8000
)
{
printf
(
"fee info is not available
\n
"
);
}
else
{
printf
(
"%s serial %d version %d
\n
"
,
feename
(
pcie
->
feehw
,
pcie
->
feefw
),
pcie
->
feeser
,
pcie
->
feever
);
}
}
printf
(
"%s"
,
prompt
);
printf
(
"b2l=%s (rx=%s tx=%s rxsta=%s txsta=%s mask=%s)
\n
"
,
pcie40_b2l_status
(
dev_slot
,
i
)
?
"UP"
:
"DOWN"
,
...
...
@@ -223,10 +226,9 @@ statlink(std::bitset<48> link_mask, pcie40reg_t pcie40reg[])
printf
(
"%s"
,
prompt
);
printf
(
"%s"
,
prompt
);
printf
(
"rxdata=%04x rxlinkdown=%d rxcrcerr=%d feecrcerr=%d
\n
"
,
D
(
pcie
->
rxdata
,
15
,
0
),
D
(
pcie
->
rxdata
,
31
,
24
),
D
(
pcie
->
rxdata
,
23
,
16
),
pcie
->
feecrce
);
D
(
pcie
->
rxdata
,
15
,
0
),
D
(
pcie
->
rxdata
,
31
,
24
),
D
(
pcie
->
rxdata
,
23
,
16
),
pcie
->
feecrce
);
printf
(
"%s"
,
prompt
);
total
=
(
pcie
->
nkbyte
*
256.0
+
(
pcie
->
nword
&
0xff
))
*
4.0
;
printf
(
"event=%d total=%1.0fkB"
,
pcie
->
nevent
,
total
/
1000
);
...
...
@@ -234,14 +236,14 @@ statlink(std::bitset<48> link_mask, pcie40reg_t pcie40reg[])
double
avg
=
total
/
pcie
->
nevent
;
printf
(
" (avg=%1.0fB"
,
avg
);
if
(
D
(
pcie
->
eventsz
,
31
,
16
)
==
0xffff
)
{
printf
(
" last=oflow"
);
printf
(
" last=oflow"
);
}
else
{
printf
(
" last=%dB"
,
D
(
pcie
->
eventsz
,
31
,
16
)
*
4
);
printf
(
" last=%dB"
,
D
(
pcie
->
eventsz
,
31
,
16
)
*
4
);
}
if
(
D
(
pcie
->
eventsz
,
15
,
0
)
==
0xffff
)
{
printf
(
" max=oflow)"
);
printf
(
" max=oflow)"
);
}
else
{
printf
(
" max=%dB)"
,
D
(
pcie
->
eventsz
,
15
,
0
)
*
4
);
printf
(
" max=%dB)"
,
D
(
pcie
->
eventsz
,
15
,
0
)
*
4
);
}
}
printf
(
"
\n
"
);
...
...
@@ -253,19 +255,20 @@ statlink(std::bitset<48> link_mask, pcie40reg_t pcie40reg[])
printf
(
"no b2link error"
);
}
else
{
printf
(
"b2link error %d(%c) %d(%c) %c%02x %c%02x %c%02x %c%02x %c%02x %c%02x"
,
D
(
pcie
->
vetocnt
,
31
,
16
),
B
(
pcie
->
vetoset
,
1
)
?
'i'
:
'-'
,
D
(
pcie
->
vetocnt
,
15
,
0
),
B
(
pcie
->
vetoset
,
0
)
?
'd'
:
'-'
,
B
(
pcie
->
vetobuf
[
0
],
25
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
0
],
15
,
8
),
B
(
pcie
->
vetobuf
[
0
],
24
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
0
],
7
,
0
),
B
(
pcie
->
vetobuf
[
0
],
21
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
1
],
31
,
24
),
B
(
pcie
->
vetobuf
[
0
],
20
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
1
],
23
,
16
),
B
(
pcie
->
vetobuf
[
0
],
17
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
1
],
15
,
8
),
B
(
pcie
->
vetobuf
[
0
],
16
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
1
],
7
,
0
));
D
(
pcie
->
vetocnt
,
31
,
16
),
B
(
pcie
->
vetoset
,
1
)
?
'i'
:
'-'
,
D
(
pcie
->
vetocnt
,
15
,
0
),
B
(
pcie
->
vetoset
,
0
)
?
'd'
:
'-'
,
B
(
pcie
->
vetobuf
[
0
],
25
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
0
],
15
,
8
),
B
(
pcie
->
vetobuf
[
0
],
24
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
0
],
7
,
0
),
B
(
pcie
->
vetobuf
[
0
],
21
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
1
],
31
,
24
),
B
(
pcie
->
vetobuf
[
0
],
20
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
1
],
23
,
16
),
B
(
pcie
->
vetobuf
[
0
],
17
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
1
],
15
,
8
),
B
(
pcie
->
vetobuf
[
0
],
16
)
?
'K'
:
'D'
,
D
(
pcie
->
vetobuf
[
1
],
7
,
0
));
}
printf
(
"
\n
"
);
}
if
(
quiet
)
{
printf
(
"no PCIE40 was found.
\n
"
);
...
...
@@ -285,7 +288,8 @@ int main(int argc, char** argv){
ecs_open
(
dev_slot
,
SLC_BAR
);
printf
(
"statlink version %d (%d) / "
,
VERSION
,
MOD_DATE
);
statpice40
(
pcie40
);
statpice40
(
pcie40
);
readregs
(
link_mask
,
pcie40reg
);
statlink
(
link_mask
,
pcie40reg
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment