mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-26 12:27:12 +00:00
fdt: Try to use fdt_address_cells()/fdt_size_cells()
Use these new functions where possible. They default to a value of 2 so we cannot use them in some places where we need a default value of 1. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@ti.com>
This commit is contained in:
parent
2640387148
commit
933cdbb479
2 changed files with 12 additions and 36 deletions
|
@ -123,7 +123,7 @@ int ft_board_setup(void *blob, bd_t *bd)
|
||||||
{
|
{
|
||||||
int off;
|
int off;
|
||||||
u64 *tmp;
|
u64 *tmp;
|
||||||
u32 *addrcells;
|
int addrcells;
|
||||||
|
|
||||||
ft_cpu_setup(blob, bd);
|
ft_cpu_setup(blob, bd);
|
||||||
|
|
||||||
|
@ -135,12 +135,13 @@ int ft_board_setup(void *blob, bd_t *bd)
|
||||||
* which is defined by the "reg" property in the soc node.
|
* which is defined by the "reg" property in the soc node.
|
||||||
*/
|
*/
|
||||||
off = fdt_path_offset(blob, "/soc8641");
|
off = fdt_path_offset(blob, "/soc8641");
|
||||||
addrcells = (u32 *)fdt_getprop(blob, 0, "#address-cells", NULL);
|
addrcells = fdt_address_cells(blob, 0);
|
||||||
tmp = (u64 *)fdt_getprop(blob, off, "reg", NULL);
|
tmp = (u64 *)fdt_getprop(blob, off, "reg", NULL);
|
||||||
|
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
u64 addr;
|
u64 addr;
|
||||||
if (addrcells && (*addrcells == 1))
|
|
||||||
|
if (addrcells == 1)
|
||||||
addr = *(u32 *)tmp;
|
addr = *(u32 *)tmp;
|
||||||
else
|
else
|
||||||
addr = *tmp;
|
addr = *tmp;
|
||||||
|
|
|
@ -16,22 +16,6 @@
|
||||||
#include <fdt_support.h>
|
#include <fdt_support.h>
|
||||||
#include <exports.h>
|
#include <exports.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* Get cells len in bytes
|
|
||||||
* if #NNNN-cells property is 2 then len is 8
|
|
||||||
* otherwise len is 4
|
|
||||||
*/
|
|
||||||
static int get_cells_len(const void *fdt, const char *nr_cells_name)
|
|
||||||
{
|
|
||||||
const fdt32_t *cell;
|
|
||||||
|
|
||||||
cell = fdt_getprop(fdt, 0, nr_cells_name, NULL);
|
|
||||||
if (cell && fdt32_to_cpu(*cell) == 2)
|
|
||||||
return 8;
|
|
||||||
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fdt_getprop_u32_default_node - Return a node's property or a default
|
* fdt_getprop_u32_default_node - Return a node's property or a default
|
||||||
*
|
*
|
||||||
|
@ -246,7 +230,7 @@ int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
is_u64 = (get_cells_len(fdt, "#address-cells") == 8);
|
is_u64 = (fdt_address_cells(fdt, 0) == 2);
|
||||||
|
|
||||||
err = fdt_setprop_uxx(fdt, nodeoffset, "linux,initrd-start",
|
err = fdt_setprop_uxx(fdt, nodeoffset, "linux,initrd-start",
|
||||||
(uint64_t)initrd_start, is_u64);
|
(uint64_t)initrd_start, is_u64);
|
||||||
|
@ -386,18 +370,18 @@ static int fdt_pack_reg(const void *fdt, void *buf, u64 *address, u64 *size,
|
||||||
int n)
|
int n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int address_len = get_cells_len(fdt, "#address-cells");
|
int address_len = fdt_address_cells(fdt, 0);
|
||||||
int size_len = get_cells_len(fdt, "#size-cells");
|
int size_len = fdt_size_cells(fdt, 0);
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
if (address_len == 8)
|
if (address_len == 2)
|
||||||
*(fdt64_t *)p = cpu_to_fdt64(address[i]);
|
*(fdt64_t *)p = cpu_to_fdt64(address[i]);
|
||||||
else
|
else
|
||||||
*(fdt32_t *)p = cpu_to_fdt32(address[i]);
|
*(fdt32_t *)p = cpu_to_fdt32(address[i]);
|
||||||
p += address_len;
|
p += address_len;
|
||||||
|
|
||||||
if (size_len == 8)
|
if (size_len == 2)
|
||||||
*(fdt64_t *)p = cpu_to_fdt64(size[i]);
|
*(fdt64_t *)p = cpu_to_fdt64(size[i]);
|
||||||
else
|
else
|
||||||
*(fdt32_t *)p = cpu_to_fdt32(size[i]);
|
*(fdt32_t *)p = cpu_to_fdt32(size[i]);
|
||||||
|
@ -968,13 +952,8 @@ void of_bus_default_count_cells(void *blob, int parentoffset,
|
||||||
{
|
{
|
||||||
const fdt32_t *prop;
|
const fdt32_t *prop;
|
||||||
|
|
||||||
if (addrc) {
|
if (addrc)
|
||||||
prop = fdt_getprop(blob, parentoffset, "#address-cells", NULL);
|
*addrc = fdt_address_cells(blob, parentoffset);
|
||||||
if (prop)
|
|
||||||
*addrc = be32_to_cpup(prop);
|
|
||||||
else
|
|
||||||
*addrc = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sizec) {
|
if (sizec) {
|
||||||
prop = fdt_getprop(blob, parentoffset, "#size-cells", NULL);
|
prop = fdt_getprop(blob, parentoffset, "#size-cells", NULL);
|
||||||
|
@ -1419,11 +1398,7 @@ u64 fdt_get_base_address(void *fdt, int node)
|
||||||
u32 naddr;
|
u32 naddr;
|
||||||
const fdt32_t *prop;
|
const fdt32_t *prop;
|
||||||
|
|
||||||
prop = fdt_getprop(fdt, node, "#address-cells", &size);
|
naddr = fdt_address_cells(fdt, node);
|
||||||
if (prop && size == 4)
|
|
||||||
naddr = be32_to_cpup(prop);
|
|
||||||
else
|
|
||||||
naddr = 2;
|
|
||||||
|
|
||||||
prop = fdt_getprop(fdt, node, "ranges", &size);
|
prop = fdt_getprop(fdt, node, "ranges", &size);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue