projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mtd: pxa3xx_nand: Fix initial controller configuration
[oweals/u-boot.git]
/
lib
/
fdtdec.c
diff --git
a/lib/fdtdec.c
b/lib/fdtdec.c
index fc92082b0bdf5777cac56004d77ca2646b47b4cb..bf5e0f6a57c0d25ca75efeac63d70ea963b3958e 100644
(file)
--- a/
lib/fdtdec.c
+++ b/
lib/fdtdec.c
@@
-11,7
+11,6
@@
#include <errno.h>
#include <fdtdec.h>
#include <fdt_support.h>
#include <errno.h>
#include <fdtdec.h>
#include <fdt_support.h>
-#include <inttypes.h>
#include <linux/libfdt.h>
#include <serial.h>
#include <asm/sections.h>
#include <linux/libfdt.h>
#include <serial.h>
#include <asm/sections.h>
@@
-1155,7
+1154,7
@@
int fdtdec_decode_display_timing(const void *blob, int parent, int index,
return ret;
}
return ret;
}
-int fdtdec_setup_mem
ory_siz
e(void)
+int fdtdec_setup_mem
_size_bas
e(void)
{
int ret, mem;
struct fdt_resource res;
{
int ret, mem;
struct fdt_resource res;
@@
-1173,6
+1172,7
@@
int fdtdec_setup_memory_size(void)
}
gd->ram_size = (phys_size_t)(res.end - res.start + 1);
}
gd->ram_size = (phys_size_t)(res.end - res.start + 1);
+ gd->ram_base = (unsigned long)res.start;
debug("%s: Initial DRAM size %llx\n", __func__,
(unsigned long long)gd->ram_size);
debug("%s: Initial DRAM size %llx\n", __func__,
(unsigned long long)gd->ram_size);
@@
-1180,13
+1180,23
@@
int fdtdec_setup_memory_size(void)
}
#if defined(CONFIG_NR_DRAM_BANKS)
}
#if defined(CONFIG_NR_DRAM_BANKS)
+
+static int get_next_memory_node(const void *blob, int mem)
+{
+ do {
+ mem = fdt_node_offset_by_prop_value(gd->fdt_blob, mem,
+ "device_type", "memory", 7);
+ } while (!fdtdec_get_is_enabled(blob, mem));
+
+ return mem;
+}
+
int fdtdec_setup_memory_banksize(void)
{
int bank, ret, mem, reg = 0;
struct fdt_resource res;
int fdtdec_setup_memory_banksize(void)
{
int bank, ret, mem, reg = 0;
struct fdt_resource res;
- mem = fdt_node_offset_by_prop_value(gd->fdt_blob, -1, "device_type",
- "memory", 7);
+ mem = get_next_memory_node(gd->fdt_blob, -1);
if (mem < 0) {
debug("%s: Missing /memory node\n", __func__);
return -EINVAL;
if (mem < 0) {
debug("%s: Missing /memory node\n", __func__);
return -EINVAL;
@@
-1196,9
+1206,7
@@
int fdtdec_setup_memory_banksize(void)
ret = fdt_get_resource(gd->fdt_blob, mem, "reg", reg++, &res);
if (ret == -FDT_ERR_NOTFOUND) {
reg = 0;
ret = fdt_get_resource(gd->fdt_blob, mem, "reg", reg++, &res);
if (ret == -FDT_ERR_NOTFOUND) {
reg = 0;
- mem = fdt_node_offset_by_prop_value(gd->fdt_blob, mem,
- "device_type",
- "memory", 7);
+ mem = get_next_memory_node(gd->fdt_blob, mem);
if (mem == -FDT_ERR_NOTFOUND)
break;
if (mem == -FDT_ERR_NOTFOUND)
break;
@@
-1324,8
+1332,12
@@
int fdtdec_setup(void)
# endif
# ifndef CONFIG_SPL_BUILD
/* Allow the early environment to override the fdt address */
# endif
# ifndef CONFIG_SPL_BUILD
/* Allow the early environment to override the fdt address */
+# if CONFIG_IS_ENABLED(OF_PRIOR_STAGE)
+ gd->fdt_blob = (void *)prior_stage_fdt_address;
+# else
gd->fdt_blob = (void *)env_get_ulong("fdtcontroladdr", 16,
(uintptr_t)gd->fdt_blob);
gd->fdt_blob = (void *)env_get_ulong("fdtcontroladdr", 16,
(uintptr_t)gd->fdt_blob);
+# endif
# endif
# if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
# endif
# if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
@@
-1435,13
+1447,12
@@
int fdtdec_decode_ram_size(const void *blob, const char *area, int board_id,
if (auto_size) {
u64 new_size;
if (auto_size) {
u64 new_size;
- debug("Auto-sizing %" PRIx64 ", size %" PRIx64 ": ",
- addr, size);
+ debug("Auto-sizing %llx, size %llx: ", addr, size);
new_size = get_ram_size((long *)(uintptr_t)addr, size);
if (new_size == size) {
debug("OK\n");
} else {
new_size = get_ram_size((long *)(uintptr_t)addr, size);
if (new_size == size) {
debug("OK\n");
} else {
- debug("sized to %
" PRIx64 "
\n", new_size);
+ debug("sized to %
llx
\n", new_size);
size = new_size;
}
}
size = new_size;
}
}
@@
-1451,7
+1462,7
@@
int fdtdec_decode_ram_size(const void *blob, const char *area, int board_id,
total_size += size;
}
total_size += size;
}
- debug("Memory size %
" PRIu64 "
\n", total_size);
+ debug("Memory size %
llu
\n", total_size);
if (sizep)
*sizep = (phys_size_t)total_size;
if (sizep)
*sizep = (phys_size_t)total_size;