summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/common.c')
-rw-r--r--arch/arm/mach-tegra/common.c74
1 files changed, 40 insertions, 34 deletions
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
index 1b76f7ecd804..f4961dd48308 100644
--- a/arch/arm/mach-tegra/common.c
+++ b/arch/arm/mach-tegra/common.c
@@ -113,6 +113,11 @@
#define ADDR_BNDRY(x) (((x) & 0xf) << 21)
#define INACTIVITY_TIMEOUT(x) (((x) & 0xffff) << 0)
+#ifdef CONFIG_PSTORE_RAM
+#define RAMOOPS_MEM_SIZE SZ_2M
+#define FTRACE_MEM_SIZE SZ_1M
+#endif
+
phys_addr_t tegra_bootloader_fb_start;
phys_addr_t tegra_bootloader_fb_size;
phys_addr_t tegra_bootloader_fb2_start;
@@ -881,7 +886,6 @@ void __init tegra20_init_early(void)
tegra_init_power();
tegra_init_ahb_gizmo_settings();
tegra_init_debug_uart_rate();
- tegra_ram_console_debug_reserve(SZ_1M);
}
#endif
#ifdef CONFIG_ARCH_TEGRA_3x_SOC
@@ -928,7 +932,6 @@ void __init tegra30_init_early(void)
tegra_init_power();
tegra_init_ahb_gizmo_settings();
tegra_init_debug_uart_rate();
- tegra_ram_console_debug_reserve(SZ_1M);
init_dma_coherent_pool_size(SZ_1M);
}
@@ -1024,7 +1027,6 @@ void __init tegra14x_init_early(void)
tegra_init_power();
tegra_init_ahb_gizmo_settings();
tegra_init_debug_uart_rate();
- tegra_ram_console_debug_reserve(SZ_1M);
}
#endif
static int __init tegra_lp0_vec_arg(char *options)
@@ -1835,6 +1837,38 @@ void __tegra_clear_framebuffer(struct platform_device *pdev,
iounmap(to_io);
}
+#ifdef CONFIG_PSTORE_RAM
+static struct ramoops_platform_data ramoops_data;
+
+static struct platform_device ramoops_dev = {
+ .name = "ramoops",
+ .dev = {
+ .platform_data = &ramoops_data,
+ },
+};
+
+static void __init tegra_reserve_ramoops_memory(unsigned long reserve_size)
+{
+ ramoops_data.mem_size = reserve_size;
+ ramoops_data.mem_address = memblock_end_of_4G() - reserve_size;
+ ramoops_data.console_size = reserve_size - FTRACE_MEM_SIZE;
+ ramoops_data.ftrace_size = FTRACE_MEM_SIZE;
+ ramoops_data.dump_oops = 1;
+ memblock_reserve(ramoops_data.mem_address, ramoops_data.mem_size);
+}
+
+static int __init tegra_register_ramoops_device(void)
+{
+ int ret = platform_device_register(&ramoops_dev);
+ if (ret) {
+ pr_info("Unable to register ramoops platform device\n");
+ return ret;
+ }
+ return ret;
+}
+core_initcall(tegra_register_ramoops_device);
+#endif
+
void __init tegra_reserve(unsigned long carveout_size, unsigned long fb_size,
unsigned long fb2_size)
{
@@ -2126,6 +2160,9 @@ void __init tegra_reserve(unsigned long carveout_size, unsigned long fb_size,
#endif
tegra_fb_linear_set(map);
+#ifdef CONFIG_PSTORE_RAM
+ tegra_reserve_ramoops_memory(RAMOOPS_MEM_SIZE);
+#endif
}
void tegra_get_fb_resource(struct resource *fb_res)
@@ -2142,37 +2179,6 @@ void tegra_get_fb2_resource(struct resource *fb2_res)
(resource_size_t) tegra_fb2_size - 1;
}
-#ifdef CONFIG_PSTORE_RAM
-static struct persistent_ram_descriptor desc = {
- .name = "ramoops",
-};
-
-static struct persistent_ram ram = {
- .descs = &desc,
- .num_descs = 1,
-};
-
-void __init tegra_ram_console_debug_reserve(unsigned long ram_console_size)
-{
- int ret;
-
- ram.start = memblock_end_of_DRAM() - ram_console_size;
- ram.size = ram_console_size;
- ram.descs->size = ram_console_size;
-
- INIT_LIST_HEAD(&ram.node);
-
- ret = persistent_ram_early_init(&ram);
- if (ret)
- goto fail;
-
- return;
-
-fail:
- pr_err("Failed to reserve memory block for ram console\n");
-}
-#endif
-
int __init tegra_register_fuse(void)
{
return platform_device_register(&tegra_fuse_device);