Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
DIOT Zynq Ultrascale-based System Board
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
8
Issues
8
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Projects
DIOT Zynq Ultrascale-based System Board
Commits
b8c6b98f
Commit
b8c6b98f
authored
Jul 18, 2022
by
Alén Arias Vázquez
😎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
solve the problem when you call more than one param
parent
4ae9de60
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
105 additions
and
58 deletions
+105
-58
fpga_device.c
...spec/meta-user/recipes-apps/diot-util/files/fpga_device.c
+105
-58
No files found.
sw/petalinux/project-spec/meta-user/recipes-apps/diot-util/files/fpga_device.c
View file @
b8c6b98f
...
...
@@ -15,21 +15,25 @@ static int cmd_fpga_status (char *params);
/******************************** Structs *************************************/
struct
command_entry
commands_list_fpga_device
[]
=
{
{
.
cmd_name
=
"status"
,
.
cmd_func
=
cmd_fpga_status
,
.
cmd_help_string
=
"Get all the information about FPGA convention
\n
"
,
.
cmd_params
=
"<all>"
}
{
.
cmd_name
=
"status"
,
.
cmd_func
=
cmd_fpga_status
,
.
cmd_help_string
=
"Get all the information about FPGA convention
\n
"
,
.
cmd_params
=
"<all>"
},
{
.
cmd_name
=
NULL
}
};
/******************************* Functions ************************************/
static
int
cmd_fpga_status
(
char
*
params
)
{
/*{
/******************************************************************************/
/**
* This function print the information related with FPGA convention
*
******************************************************************************/
int
get_fpga_status
(
bool
full_info
){
struct
tm
build_date_s
;
char
core_id_c
[
4
]
=
{
[
0
...
3
]
=
0
};
char
name_c
[
9
]
=
{
[
0
...
8
]
=
0
};
char
build_date_c
[
80
]
=
{
[
0
...
79
]
=
0
};
char
git_tag_c
[
9
]
=
{
[
0
...
8
]
=
0
};
char core_id_c[4] = { [0 ... 3] = 0 };
uintptr_t auxaddr =
FPGA_DEVICE_ADDR
;
uintptr_t
auxaddr
=
c_ADDR_IP_CORE
;
int
fd
=
open
(
"/dev/mem"
,
O_RDWR
|
O_SYNC
);
if
(
fd
<
0
)
{
...
...
@@ -37,96 +41,139 @@ static int cmd_fpga_status(char *params) {
return
fd
;
}
uint32_t * regs_32b = mmap(0,
4096
, PROT_READ | PROT_WRITE, MAP_SHARED, fd, auxaddr);
uint32_t
*
regs_32b
=
mmap
(
0
,
c_SIZE_BYTES
,
PROT_READ
|
PROT_WRITE
,
MAP_SHARED
,
fd
,
auxaddr
);
if
(
regs_32b
==
MAP_FAILED
)
{
close
(
fd
);
perror
(
"Failed in Mmap device"
);
return
-
2
;
}
//! Read Core ID
uint32_t aux_core_id = bswap_32(regs_32b[16]);
memcpy(&core_id_c,&aux_core_id,4);
printf
(
"Gateware information
\n
"
);
//! Read Project Name
uint64_t name_u64 = bswap_64(((uint64_t) regs_32b[18] << 32) + (uint64_t) regs_32b[17]);
memcpy(&name_c,&name_u64,8);
if
(
full_info
)
{
//! Read Core ID
uint32_t
aux_core_id
=
bswap_32
(
regs_32b
[
c_ADDR_CORE_ID
]);
memcpy
(
&
core_id_c
,
&
aux_core_id
,
4
);
//! Read Project Name
uint64_t
name_u64
=
bswap_64
(((
uint64_t
)
regs_32b
[
c_ADDR_NAME_MSB
]
<<
32
)
+
(
uint64_t
)
regs_32b
[
c_ADDR_NAME_LSB
]);
memcpy
(
&
name_c
,
&
name_u64
,
8
);
}
//! Read Build Date
time_t date = (time_t) regs_32b[
19
];
time_t
date
=
(
time_t
)
regs_32b
[
c_ADDR_BUILD_T
];
build_date_s
=
*
localtime
(
&
date
);
strftime
(
build_date_c
,
sizeof
(
build_date_c
),
"%a %Y-%m-%d %H:%M:%S"
,
&
build_date_s
);
//! Read String Tag
uint64_t git_tag_u64 = bswap_64(((uint64_t) regs_32b[
35] << 32) + (uint64_t) regs_32b[34
]);
uint64_t
git_tag_u64
=
bswap_64
(((
uint64_t
)
regs_32b
[
c_ADDR_TAG_MSB
]
<<
32
)
+
(
uint64_t
)
regs_32b
[
c_ADDR_TAG_LSB
]);
memcpy
(
&
git_tag_c
,
&
git_tag_u64
,
8
);
printf("Gateware version information:\n");
printf("VENDOR ID : %08x\n",regs_32b[0]);
printf("DEVICE ID : %08x\n",regs_32b[1]);
printf("VERSION : %08x\n",regs_32b[2]);
printf("Byte Order Map : %08x\n",regs_32b[3]);
printf("Source ID : %08x%08x%08x%08x\n",regs_32b[7],regs_32b[6],regs_32b[5],regs_32b[4]);
printf("Capability Mask : %08x\n",regs_32b[8]);
printf("UUID : %08x%08x%08x%08x\n",regs_32b[15],regs_32b[14],regs_32b[13],regs_32b[12]);
printf("IP CORE ID : %s\n",core_id_c);
printf("NAME : %s\n",name_c);
printf("BUILD DATE : %s\n",build_date_c);
printf("GIT HASH : %08x%08x%08x%08x%08x\n",regs_32b[24],regs_32b[23],regs_32b[22],regs_32b[21],regs_32b[20]);
printf("DNA : %08x%08x%08x\n",regs_32b[27],regs_32b[26],regs_32b[25]);
printf("GIT TAG : %s\n\n",git_tag_c);
if
(
full_info
)
{
printf
(
"VENDOR ID : %08x
\n
"
,
regs_32b
[
c_ADDR_VENDOR_ID
]);
printf
(
"DEVICE ID : %08x
\n
"
,
regs_32b
[
c_ADDR_DEVICE_ID
]);
printf
(
"VERSION : %08x
\n
"
,
regs_32b
[
c_ADDR_VERSION
]);
printf
(
"Byte Order Map : %08x
\n
"
,
regs_32b
[
c_ADDR_BYTE_ORD_MARK
]);
printf
(
"Source ID : %08x%08x%08x%08x
\n
"
,
regs_32b
[
c_ADDR_SOURCE_ID_3
],
regs_32b
[
c_ADDR_SOURCE_ID_2
],
regs_32b
[
c_ADDR_SOURCE_ID_1
],
regs_32b
[
c_ADDR_SOURCE_ID_0
]);
printf
(
"Capability Mask : %08x
\n
"
,
regs_32b
[
c_ADDR_CAP_MASK
]);
printf
(
"UUID : %08x%08x%08x%08x
\n
"
,
regs_32b
[
c_ADDR_VENDOR_UUID_3
],
regs_32b
[
c_ADDR_VENDOR_UUID_2
],
regs_32b
[
c_ADDR_VENDOR_UUID_1
],
regs_32b
[
c_ADDR_VENDOR_UUID_0
]);
printf
(
"IP CORE ID : %s
\n
"
,
core_id_c
);
printf
(
"NAME : %s
\n
"
,
name_c
);
printf
(
"BUILD DATE : %s
\n
"
,
build_date_c
);
printf
(
"GIT HASH : %08x%08x%08x%08x%08x
\n
"
,
regs_32b
[
c_ADDR_HASH_4
],
regs_32b
[
c_ADDR_HASH_3
],
regs_32b
[
c_ADDR_HASH_2
],
regs_32b
[
c_ADDR_HASH_1
],
regs_32b
[
c_ADDR_HASH_0
]);
printf
(
"GIT TAG : %s
\n
"
,
git_tag_c
);
printf
(
"DNA : %08x%08x%08x
\n
"
,
regs_32b
[
c_ADDR_DNA_2
],
regs_32b
[
c_ADDR_DNA_1
],
regs_32b
[
c_ADDR_DNA_0
]);
}
else
{
printf
(
"BUILD DATE : %s
\n
"
,
build_date_c
);
printf
(
"GIT HASH : %08x%08x%08x%08x%08x
\n
"
,
regs_32b
[
c_ADDR_HASH_4
],
regs_32b
[
c_ADDR_HASH_3
],
regs_32b
[
c_ADDR_HASH_2
],
regs_32b
[
c_ADDR_HASH_1
],
regs_32b
[
c_ADDR_HASH_0
]);
printf
(
"GIT TAG : %s
\n
"
,
git_tag_c
);
}
munmap
(
regs_32b
,
c_SIZE_BYTES
);
close
(
fd
);
return;
*/
printf
(
"FPGA STATUS TO BE DONE"
);
return
0
;
}
/******************************************************************************/
/**
* This function seach for subcommands related with FPGA information
* This function implemets subcommand status related with FPGA information
*
******************************************************************************/
static
int
cmd_fpga_status
(
char
*
params
)
{
int
ret
=
0
;
char
*
aux_params
=
NULL
;
if
(
!
params
||
!
(
*
params
))
{
printf
(
"case no params
\n
"
);
ret
=
get_fpga_status
(
false
);
}
else
{
aux_params
=
strchr
(
params
,
' '
);
if
(
!
aux_params
||
!
(
*
aux_params
))
{
if
(
!
strncmp
(
params
,
"all"
,
strlen
(
"all"
)))
{
ret
=
get_fpga_status
(
true
);
}
else
{
cmd_help
(
"gateware"
);
}
}
else
{
cmd_help
(
"gateware"
);
}
}
if
(
ret
!=
0
)
{
perror
(
"Command gateware status failed"
);
}
return
ret
;
}
/******************************************************************************/
/**
* This function search for subcommands related with FPGA information
*
******************************************************************************/
int
cmd_fpga
(
char
*
params
)
{
struct
command_entry
*
entry
;
char
*
cmd_start_p
=
params
;
int
ret
;
int
ret
=
0
;
int
cmd_len
;
if
(
!
params
||
!
(
*
params
))
{
printf
(
"Please provide subcommand for the
G
ateware command
\n
"
);
printf
(
"Please provide subcommand for the
g
ateware command
\n
"
);
cmd_help
(
"gateware"
);
ret
urn
-
ENOENT
;
}
ret
=
-
ENOENT
;
}
else
{
params
=
strchr
(
params
,
' '
);
if
(
params
)
{
cmd_len
=
params
-
cmd_start_p
;
/* skip spaces for params */
while
(
*
params
&&
(
*
params
==
' '
))
{
params
++
;
params
=
strchr
(
params
,
' '
);
if
(
params
)
{
cmd_len
=
params
-
cmd_start_p
;
/* skip spaces for params */
while
(
*
params
&&
(
*
params
==
' '
))
{
params
++
;
}
}
else
{
cmd_len
=
strlen
(
cmd_start_p
);
}
}
else
{
cmd_len
=
strlen
(
cmd_start_p
);
}
entry
=
commands_list_fpga_device
;
while
(
entry
&&
entry
->
cmd_name
)
{
if
(
cmd_len
==
strlen
(
entry
->
cmd_name
)
&&
!
strncmp
(
entry
->
cmd_name
,
cmd_start_p
,
cmd_len
))
{
ret
=
entry
->
cmd_func
(
params
);
break
;
entry
=
commands_list_fpga_device
;
while
(
entry
&&
entry
->
cmd_name
)
{
if
(
cmd_len
==
strlen
(
entry
->
cmd_name
)
&&
!
strncmp
(
entry
->
cmd_name
,
cmd_start_p
,
cmd_len
))
{
ret
=
entry
->
cmd_func
(
params
);
break
;
}
entry
++
;
}
if
(
!
(
entry
&&
entry
->
cmd_name
))
{
printf
(
"Commad
\"
%s
\"
not found
\n
"
,
cmd_start_p
);
ret
=
-
ENOENT
;
}
entry
++
;
}
if
(
!
(
entry
&&
entry
->
cmd_name
))
{
printf
(
"Commad
\"
%s
\"
not found
\n
"
,
cmd_start_p
);
ret
=
-
ENOENT
;
}
return
0
;
return
ret
;
}
\ No newline at end of file
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