void lge_set_panic_reason(void) { if (subsys_crash_magic == 0) lge_set_restart_reason(LGE_RB_MAGIC | LGE_ERR_KERN); else lge_set_restart_reason(subsys_crash_magic); }
static int __init lge_panic_handler_early_init(void) { struct device_node *np; uint32_t crash_handler_magic = 0; panic_handler = kzalloc(sizeof(*panic_handler), GFP_KERNEL); if (!panic_handler) { pr_err("could not allocate memory for panic_handler\n"); return -ENOMEM; } np = of_find_compatible_node(NULL, NULL, "qcom,msm-imem"); if (!np) { pr_err("unable to find DT imem node\n"); return -ENODEV; } msm_imem_base = of_iomap(np, 0); if (!msm_imem_base) { pr_err("unable to map imem\n"); return -ENODEV; } np = of_find_compatible_node(NULL, NULL, "crash_fb"); if (!np) { pr_err("unable to find crash_fb node\n"); return -ENODEV; } of_property_read_u32(np, "mem-addr", (u32*)&panic_handler->fb_addr); of_property_read_u32(np, "mem-size", (u32*)&panic_handler->fb_size); pr_info("%s: reserved[@0x%lx+@0x%lx)\n", PANIC_HANDLER_NAME, panic_handler->fb_addr, panic_handler->fb_size); /* check struct boot_shared_imem_cookie_type is matched */ crash_handler_magic = __raw_readl(CRASH_HANDLER_MAGIC); WARN(crash_handler_magic != CRASH_HANDLER_MAGIC_NUM, "Check sbl's struct boot_shared_imem_cookie_type.\n" "Need to update lge_handle_panic's imem offset.\n"); /* Set default restart_reason to Unknown reset. */ lge_set_restart_reason(LGE_RB_MAGIC | LGE_ERR_TZ); return 0; }
static int __init lge_panic_handler_early_init(void) { struct device_node *np; uint32_t crash_handler_magic = 0; uint32_t mem_addr = 0; uint32_t mem_size = 0; np = of_find_compatible_node(NULL, NULL, "qcom,msm-imem"); if (!np) { pr_err("unable to find DT imem node\n"); return -ENODEV; } msm_imem_base = of_iomap(np, 0); if (!msm_imem_base) { pr_err("unable to map imem\n"); return -ENODEV; } np = of_find_compatible_node(NULL, NULL, "ramoops"); if (!np) { pr_err("unable to find DT ramoops node\n"); return -ENODEV; } of_property_read_u32(np, "mem-address", &mem_addr); of_property_read_u32(np, "mem-size", &mem_size); pr_info("mem-address=%d\n", mem_addr); pr_info("mem-size=%d\n", mem_size); lge_set_ram_console_addr(mem_addr, mem_size); /* check struct boot_shared_imem_cookie_type is matched */ crash_handler_magic = __raw_readl(CRASH_HANDLER_MAGIC); WARN(crash_handler_magic != CRASH_HANDLER_MAGIC_VALUE, "Check sbl's struct boot_shared_imem_cookie_type.\n" "Need to update lge_handle_panic's imem offset.\n"); /* Set default restart_reason to hw reset. */ lge_set_restart_reason(LGE_RB_MAGIC | LGE_ERR_TZ); return 0; }