Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
R
reform-boundary-uboot
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
Service Desk
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
Jack Humbert
reform-boundary-uboot
Commits
8a5db0ab
Commit
8a5db0ab
authored
8 years ago
by
Michal Simek
Browse files
Options
Downloads
Patches
Plain Diff
zynqmp works
parent
64b67fb2
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
board/xilinx/zynq/board.c
+28
-28
28 additions, 28 deletions
board/xilinx/zynq/board.c
board/xilinx/zynqmp/zynqmp.c
+54
-102
54 additions, 102 deletions
board/xilinx/zynqmp/zynqmp.c
with
82 additions
and
130 deletions
board/xilinx/zynq/board.c
+
28
−
28
View file @
8a5db0ab
...
@@ -135,6 +135,34 @@ static const void *get_memory_reg_prop(const void *fdt, int *lenp)
...
@@ -135,6 +135,34 @@ static const void *get_memory_reg_prop(const void *fdt, int *lenp)
return
fdt_getprop
(
fdt
,
offset
,
"reg"
,
lenp
);
return
fdt_getprop
(
fdt
,
offset
,
"reg"
,
lenp
);
}
}
int
dram_init
(
void
)
{
const
void
*
fdt
=
gd
->
fdt_blob
;
const
fdt32_t
*
val
;
int
ac
,
sc
,
len
;
ac
=
fdt_address_cells
(
fdt
,
0
);
sc
=
fdt_size_cells
(
fdt
,
0
);
if
(
ac
<
0
||
sc
<
1
||
sc
>
2
)
{
printf
(
"invalid address/size cells
\n
"
);
return
-
EINVAL
;
}
val
=
get_memory_reg_prop
(
fdt
,
&
len
);
if
(
len
/
sizeof
(
*
val
)
<
ac
+
sc
)
return
-
EINVAL
;
val
+=
ac
;
gd
->
ram_size
=
fdtdec_get_number
(
val
,
sc
);
debug
(
"DRAM size = %08lx
\n
"
,
(
unsigned
long
)
gd
->
ram_size
);
zynq_ddrc_init
();
return
0
;
}
void
dram_init_banksize
(
void
)
void
dram_init_banksize
(
void
)
{
{
const
void
*
fdt
=
gd
->
fdt_blob
;
const
void
*
fdt
=
gd
->
fdt_blob
;
...
@@ -168,34 +196,6 @@ void dram_init_banksize(void)
...
@@ -168,34 +196,6 @@ void dram_init_banksize(void)
(
unsigned
long
)
gd
->
bd
->
bi_dram
[
i
].
size
);
(
unsigned
long
)
gd
->
bd
->
bi_dram
[
i
].
size
);
}
}
}
}
int
dram_init
(
void
)
{
const
void
*
fdt
=
gd
->
fdt_blob
;
const
fdt32_t
*
val
;
int
ac
,
sc
,
len
;
ac
=
fdt_address_cells
(
fdt
,
0
);
sc
=
fdt_size_cells
(
fdt
,
0
);
if
(
ac
<
0
||
sc
<
1
||
sc
>
2
)
{
printf
(
"invalid address/size cells
\n
"
);
return
-
EINVAL
;
}
val
=
get_memory_reg_prop
(
fdt
,
&
len
);
if
(
len
/
sizeof
(
*
val
)
<
ac
+
sc
)
return
-
EINVAL
;
val
+=
ac
;
gd
->
ram_size
=
fdtdec_get_number
(
val
,
sc
);
debug
(
"DRAM size = %08lx
\n
"
,
(
unsigned
long
)
gd
->
ram_size
);
zynq_ddrc_init
();
return
0
;
}
#else
#else
int
dram_init
(
void
)
int
dram_init
(
void
)
{
{
...
...
This diff is collapsed.
Click to expand it.
board/xilinx/zynqmp/zynqmp.c
+
54
−
102
View file @
8a5db0ab
...
@@ -180,123 +180,75 @@ int zynq_board_read_rom_ethaddr(unsigned char *ethaddr)
...
@@ -180,123 +180,75 @@ int zynq_board_read_rom_ethaddr(unsigned char *ethaddr)
}
}
#if !defined(CONFIG_SYS_SDRAM_BASE) && !defined(CONFIG_SYS_SDRAM_SIZE)
#if !defined(CONFIG_SYS_SDRAM_BASE) && !defined(CONFIG_SYS_SDRAM_SIZE)
/*
static
const
void
*
get_memory_reg_prop
(
const
void
*
fdt
,
int
*
lenp
)
* fdt_get_reg - Fill buffer by information from DT
*/
static
phys_size_t
fdt_get_reg
(
const
void
*
fdt
,
int
nodeoffset
,
void
*
buf
,
const
u32
*
cell
,
int
n
)
{
{
int
i
=
0
,
b
,
banks
;
int
offset
;
int
parent_offset
=
fdt_parent_offset
(
fdt
,
nodeoffset
);
int
address_cells
=
fdt_address_cells
(
fdt
,
parent_offset
);
int
size_cells
=
fdt_size_cells
(
fdt
,
parent_offset
);
char
*
p
=
buf
;
u64
val
;
u64
vals
;
debug
(
"%s: addr_cells=%x, size_cell=%x, buf=%p, cell=%p
\n
"
,
__func__
,
address_cells
,
size_cells
,
buf
,
cell
);
/* Check memory bank setup */
banks
=
n
%
(
address_cells
+
size_cells
);
if
(
banks
)
panic
(
"Incorrect memory setup cells=%d, ac=%d, sc=%d
\n
"
,
n
,
address_cells
,
size_cells
);
banks
=
n
/
(
address_cells
+
size_cells
);
for
(
b
=
0
;
b
<
banks
;
b
++
)
{
debug
(
"%s: Bank #%d:
\n
"
,
__func__
,
b
);
if
(
address_cells
==
2
)
{
val
=
cell
[
i
+
1
];
val
<<=
32
;
val
|=
cell
[
i
];
val
=
fdt64_to_cpu
(
val
);
debug
(
"%s: addr64=%llx, ptr=%p, cell=%p
\n
"
,
__func__
,
val
,
p
,
&
cell
[
i
]);
*
(
phys_addr_t
*
)
p
=
val
;
}
else
{
debug
(
"%s: addr32=%x, ptr=%p
\n
"
,
__func__
,
fdt32_to_cpu
(
cell
[
i
]),
p
);
*
(
phys_addr_t
*
)
p
=
fdt32_to_cpu
(
cell
[
i
]);
}
p
+=
sizeof
(
phys_addr_t
);
i
+=
address_cells
;
debug
(
"%s: pa=%p, i=%x, size=%zu
\n
"
,
__func__
,
p
,
i
,
sizeof
(
phys_addr_t
));
if
(
size_cells
==
2
)
{
vals
=
cell
[
i
+
1
];
vals
<<=
32
;
vals
|=
cell
[
i
];
vals
=
fdt64_to_cpu
(
vals
);
debug
(
"%s: size64=%llx, ptr=%p, cell=%p
\n
"
,
__func__
,
vals
,
p
,
&
cell
[
i
]);
*
(
phys_size_t
*
)
p
=
vals
;
}
else
{
debug
(
"%s: size32=%x, ptr=%p
\n
"
,
__func__
,
fdt32_to_cpu
(
cell
[
i
]),
p
);
*
(
phys_size_t
*
)
p
=
fdt32_to_cpu
(
cell
[
i
]);
}
p
+=
sizeof
(
phys_size_t
);
i
+=
size_cells
;
debug
(
"%s: ps=%p, i=%x, size=%zu
\n
"
,
offset
=
fdt_path_offset
(
fdt
,
"/memory"
);
__func__
,
p
,
i
,
sizeof
(
phys_size_t
));
if
(
offset
<
0
)
}
return
NULL
;
/* Return the first address size */
return
fdt_getprop
(
fdt
,
offset
,
"reg"
,
lenp
);
return
*
(
phys_size_t
*
)((
char
*
)
buf
+
sizeof
(
phys_addr_t
));
}
}
#define FDT_REG_SIZE sizeof(u32)
int
dram_init
(
void
)
/* Temp location for sharing data for storing */
/* Up to 64-bit address + 64-bit size */
static
u8
tmp
[
CONFIG_NR_DRAM_BANKS
*
16
];
void
dram_init_banksize
(
void
)
{
{
int
bank
;
const
void
*
fdt
=
gd
->
fdt_blob
;
const
fdt32_t
*
val
;
int
ac
,
sc
,
len
;
ac
=
fdt_address_cells
(
fdt
,
0
);
sc
=
fdt_size_cells
(
fdt
,
0
);
if
(
ac
<
0
||
sc
<
1
||
sc
>
2
)
{
printf
(
"invalid address/size cells
\n
"
);
return
-
EINVAL
;
}
memcpy
(
&
gd
->
bd
->
bi_dram
[
0
],
&
tmp
,
sizeof
(
tmp
));
val
=
get_memory_reg_prop
(
fdt
,
&
len
);
if
(
len
/
sizeof
(
*
val
)
<
ac
+
sc
)
return
-
EINVAL
;
for
(
bank
=
0
;
bank
<
CONFIG_NR_DRAM_BANKS
;
bank
++
)
{
val
+=
ac
;
debug
(
"Bank #%d: start %llx
\n
"
,
bank
,
(
unsigned
long
long
)
gd
->
bd
->
bi_dram
[
bank
].
start
);
debug
(
"Bank #%d: size %llx
\n
"
,
bank
,
(
unsigned
long
long
)
gd
->
bd
->
bi_dram
[
bank
].
size
);
}
}
int
dram_init
(
void
)
gd
->
ram_size
=
fdtdec_get_number
(
val
,
sc
);
{
int
node
,
len
;
const
void
*
blob
=
gd
->
fdt_blob
;
const
u32
*
cell
;
memset
(
&
tmp
,
0
,
sizeof
(
tmp
)
);
debug
(
"DRAM size = %08lx
\n
"
,
(
unsigned
long
)
gd
->
ram_size
);
/* find or create "/memory" node. */
return
0
;
node
=
fdt_subnode_offset
(
blob
,
0
,
"memory"
);
if
(
node
<
0
)
{
printf
(
"%s: Can't get memory node
\n
"
,
__func__
);
return
node
;
}
}
/* Get pointer to cells and lenght of it */
void
dram_init_banksize
(
void
)
cell
=
fdt_getprop
(
blob
,
node
,
"reg"
,
&
len
);
{
if
(
!
cell
)
{
const
void
*
fdt
=
gd
->
fdt_blob
;
printf
(
"%s: Can't get reg property
\n
"
,
__func__
);
const
fdt32_t
*
val
;
return
-
1
;
int
ac
,
sc
,
cells
,
len
,
i
;
val
=
get_memory_reg_prop
(
fdt
,
&
len
);
if
(
len
<
0
)
return
;
ac
=
fdt_address_cells
(
fdt
,
0
);
sc
=
fdt_size_cells
(
fdt
,
0
);
if
(
ac
<
1
||
sc
>
2
||
sc
<
1
||
sc
>
2
)
{
printf
(
"invalid address/size cells
\n
"
);
return
;
}
}
gd
->
ram_size
=
fdt_get_reg
(
blob
,
node
,
&
tmp
,
cell
,
len
/
FDT_REG_SIZE
)
;
cells
=
ac
+
sc
;
debug
(
"%s: Initial DRAM size %llx
\n
"
,
__func__
,
(
u64
)
gd
->
ram_size
);
len
/=
sizeof
(
*
val
);
return
0
;
for
(
i
=
0
;
i
<
CONFIG_NR_DRAM_BANKS
&&
len
>=
cells
;
i
++
,
len
-=
cells
)
{
gd
->
bd
->
bi_dram
[
i
].
start
=
fdtdec_get_number
(
val
,
ac
);
val
+=
ac
;
gd
->
bd
->
bi_dram
[
i
].
size
=
fdtdec_get_number
(
val
,
sc
);
val
+=
sc
;
debug
(
"DRAM bank %d: start = %08lx, size = %08lx
\n
"
,
i
,
(
unsigned
long
)
gd
->
bd
->
bi_dram
[
i
].
start
,
(
unsigned
long
)
gd
->
bd
->
bi_dram
[
i
].
size
);
}
}
}
#else
#else
int
dram_init
(
void
)
int
dram_init
(
void
)
...
...
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