summaryrefslogtreecommitdiff
path: root/arch/arc/kernel/devtree.c
diff options
context:
space:
mode:
authorVineet Gupta <vgupta@synopsys.com>2013-01-18 15:12:20 +0530
committerVineet Gupta <vgupta@synopsys.com>2013-02-15 23:15:56 +0530
commit450dd430bf45ab212a91acfb9bed2528d17f30cd (patch)
treedeaf7d7aef0616834e804de041eea9de3e0a52c8 /arch/arc/kernel/devtree.c
parent999159a5381bff3bd6f688c5d20fbec9d8789e53 (diff)
ARC: [DeviceTree] Convert some Kconfig items to runtime values
* mem size now runtime configured (prev CONFIG_ARC_PLAT_SDRAM_SIZE) * core cpu clk runtime configured (prev CONFIG_ARC_PLAT_CLK) Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'arch/arc/kernel/devtree.c')
-rw-r--r--arch/arc/kernel/devtree.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arc/kernel/devtree.c b/arch/arc/kernel/devtree.c
index 48e157efad15..c8166dc02c38 100644
--- a/arch/arc/kernel/devtree.c
+++ b/arch/arc/kernel/devtree.c
@@ -15,6 +15,7 @@
#include <linux/of.h>
#include <linux/of_fdt.h>
#include <asm/prom.h>
+#include <asm/clk.h>
/* called from unflatten_device_tree() to bootstrap devicetree itself */
void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
@@ -34,7 +35,9 @@ int __init setup_machine_fdt(void *dt)
struct boot_param_header *devtree = dt;
unsigned long dt_root;
char *model, *compat;
+ void *clk;
char manufacturer[16];
+ unsigned long len;
/* check device tree validity */
if (be32_to_cpu(devtree->magic) != OF_DT_HEADER)
@@ -60,5 +63,15 @@ int __init setup_machine_fdt(void *dt)
/* Retrieve various information from the /chosen node */
of_scan_flat_dt(early_init_dt_scan_chosen, boot_command_line);
+ /* Initialize {size,address}-cells info */
+ of_scan_flat_dt(early_init_dt_scan_root, NULL);
+
+ /* Setup memory, calling early_init_dt_add_memory_arch */
+ of_scan_flat_dt(early_init_dt_scan_memory, NULL);
+
+ clk = of_get_flat_dt_prop(dt_root, "clock-frequency", &len);
+ if (clk)
+ arc_set_core_freq(of_read_ulong(clk, len/4));
+
return 0;
}