Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Sunxi Tools
Commits
f52cd869
Commit
f52cd869
authored
Aug 18, 2014
by
Luc Verhaegen
Browse files
meminfo: rewrite /dev/mem handling
Signed-off-by:
Luc Verhaegen
<
libv@skynet.be
>
parent
9ebe16b2
Changes
1
Hide whitespace changes
Inline
Side-by-side
meminfo.c
View file @
f52cd869
...
...
@@ -19,6 +19,7 @@
#include <sys/stat.h>
#include <unistd.h>
#include <stdint.h>
#include <errno.h>
#define SUNXI_DRAMC_BASE 0x01c01000
#define SUNXI_CCM_BASE 0x01C20000
...
...
@@ -194,20 +195,14 @@ struct sunxi_ccm_reg {
u32
mbus_clk_cfg
;
/* 0x15c */
};
#define DEVMEM_FILE "/dev/mem"
static
int
devmem_fd
;
int
mem_fd
=
-
1
;
volatile
unsigned
*
map_physical_memory
(
uint32_t
addr
,
size_t
len
)
volatile
void
*
map_physical_memory
(
uint32_t
addr
,
size_t
len
)
{
volatile
unsigne
d
*
mem
;
volatile
voi
d
*
mem
;
if
(
mem_fd
==
-
1
&&
(
mem_fd
=
open
(
"/dev/mem"
,
O_RDWR
|
O_SYNC
)
)
<
0
)
{
perror
(
"opening /dev/mem"
);
exit
(
1
);
}
mem
=
(
volatile
unsigned
*
)
mmap
(
NULL
,
len
,
PROT_READ
,
MAP_SHARED
,
mem_fd
,
(
off_t
)
addr
);
mem
=
(
volatile
void
*
)
mmap
(
NULL
,
len
,
PROT_READ
,
MAP_SHARED
,
devmem_fd
,
(
off_t
)
addr
);
if
(
mem
==
MAP_FAILED
)
{
...
...
@@ -221,10 +216,20 @@ volatile unsigned *map_physical_memory(uint32_t addr, size_t len)
int
main
(
int
argc
,
char
**
argv
)
{
volatile
struct
sunxi_dram_reg
*
r
=
(
volatile
struct
sunxi_dram_reg
*
)
map_physical_memory
(
SUNXI_DRAMC_BASE
,
4096
);
volatile
struct
sunxi_ccm_reg
*
ccm
=
(
volatile
struct
sunxi_ccm_reg
*
)
map_physical_memory
(
SUNXI_CCM_BASE
,
4096
);
struct
dram_para
p
=
{
0
};
volatile
struct
sunxi_dram_reg
*
r
;
volatile
struct
sunxi_ccm_reg
*
ccm
;
struct
dram_para
p
=
{
0
};
devmem_fd
=
open
(
DEVMEM_FILE
,
O_RDWR
);
if
(
devmem_fd
==
-
1
)
{
fprintf
(
stderr
,
"Error: failed to open %s: %s
\n
"
,
DEVMEM_FILE
,
strerror
(
errno
));
return
errno
;
}
r
=
map_physical_memory
(
SUNXI_DRAMC_BASE
,
4096
);
ccm
=
map_physical_memory
(
SUNXI_CCM_BASE
,
4096
);
/* Convert information found inside registers back to dram_para struct */
p
.
tpr0
=
r
->
tpr0
;
p
.
tpr1
=
r
->
tpr1
;
...
...
@@ -282,7 +287,7 @@ int main(int argc, char **argv)
/* Clean up */
munmap
((
void
*
)
r
,
4096
);
munmap
((
void
*
)
ccm
,
4096
);
close
(
mem_fd
);
return
0
;
}
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