Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
M
Mock Turtle
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
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
Mock Turtle
Commits
2729723d
Commit
2729723d
authored
Aug 11, 2015
by
Tomasz Wlostowski
Committed by
Federico Vaga
Aug 11, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel: get memory size dynamically from the FPGA
parent
0b0a7f18
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
17 additions
and
14 deletions
+17
-14
wrnc-cpu.c
kernel/wrnc-cpu.c
+17
-14
No files found.
kernel/wrnc-cpu.c
View file @
2729723d
...
...
@@ -177,12 +177,16 @@ static int wrnc_cpu_firmware_load(struct wrnc_cpu *cpu, void *fw_buf,
struct
wrnc_dev
*
wrnc
=
to_wrnc_dev
(
cpu
->
dev
.
parent
);
struct
fmc_device
*
fmc
=
to_fmc_dev
(
wrnc
);
uint32_t
*
fw
=
fw_buf
,
word
,
word_rb
;
int
size
,
offset
,
i
;
int
size
,
offset
,
i
,
cpu_memsize
;
if
(
off
+
count
>
WRNC_CPU_MEM_SIZE_BYTE
)
{
/* Select the CPU memory to write */
fmc_writel
(
fmc
,
cpu
->
index
,
wrnc
->
base_csr
+
WRN_CPU_CSR_REG_CORE_SEL
);
cpu_memsize
=
fmc_readl
(
fmc
,
wrnc
->
base_csr
+
WRN_CPU_CSR_REG_CORE_MEMSIZE
);
if
(
off
+
count
>
cpu_memsize
)
{
dev_err
(
&
cpu
->
dev
,
"Cannot load firmware: size limit %d byte
\n
"
,
WRNC_CPU_MEM_SIZE_BYTE
);
cpu_memsize
);
return
-
ENOMEM
;
}
...
...
@@ -193,12 +197,8 @@ static int wrnc_cpu_firmware_load(struct wrnc_cpu *cpu, void *fw_buf,
/* Reset the CPU before overwrite its memory */
wrnc_cpu_reset_set
(
wrnc
,
(
1
<<
cpu
->
index
));
/* Select the CPU memory to write */
fmc_writel
(
fmc
,
cpu
->
index
,
wrnc
->
base_csr
+
WRN_CPU_CSR_REG_CORE_SEL
);
/* Clean CPU memory */
/* FIXME get size dynamically*/
for
(
i
=
offset
;
i
<
WRNC_CPU_MEM_SIZE_WORD
;
++
i
)
{
for
(
i
=
offset
;
i
<
cpu_memsize
/
1024
;
++
i
)
{
fmc_writel
(
fmc
,
i
,
wrnc
->
base_csr
+
WRN_CPU_CSR_REG_UADDR
);
fmc_writel
(
fmc
,
0
,
wrnc
->
base_csr
+
WRN_CPU_CSR_REG_UDATA
);
}
...
...
@@ -228,13 +228,8 @@ static int wrnc_cpu_firmware_dump(struct wrnc_cpu *cpu, void *fw_buf,
struct
wrnc_dev
*
wrnc
=
to_wrnc_dev
(
cpu
->
dev
.
parent
);
struct
fmc_device
*
fmc
=
to_fmc_dev
(
wrnc
);
uint32_t
*
fw
=
fw_buf
,
word
;
int
size
,
offset
,
i
;
int
size
,
offset
,
i
,
cpu_memsize
;
if
(
off
+
count
>
WRNC_CPU_MEM_SIZE_BYTE
)
{
dev_err
(
&
cpu
->
dev
,
"Cannot dump firmware: size limit %d byte
\n
"
,
WRNC_CPU_MEM_SIZE_BYTE
);
return
-
ENOMEM
;
}
/* Calculate code size in 32bit word*/
size
=
(
count
+
3
)
/
4
;
...
...
@@ -243,6 +238,14 @@ static int wrnc_cpu_firmware_dump(struct wrnc_cpu *cpu, void *fw_buf,
/* Select the CPU memory to write */
fmc_writel
(
fmc
,
cpu
->
index
,
wrnc
->
base_csr
+
WRN_CPU_CSR_REG_CORE_SEL
);
cpu_memsize
=
fmc_readl
(
fmc
,
wrnc
->
base_csr
+
WRN_CPU_CSR_REG_CORE_MEMSIZE
);
if
(
off
+
count
>
cpu_memsize
)
{
dev_err
(
&
cpu
->
dev
,
"Cannot dump firmware: size limit %d byte
\n
"
,
cpu_memsize
);
return
-
ENOMEM
;
}
/* Dump the firmware */
for
(
i
=
0
;
i
<
size
;
++
i
)
{
fmc_writel
(
fmc
,
i
+
offset
,
...
...
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