diff options
Diffstat (limited to 'arch/arm/mach-tegra/common.c')
-rw-r--r-- | arch/arm/mach-tegra/common.c | 74 |
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); |