Lines Matching +full:os +full:- +full:initiated

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Firmware-Assisted Dump support on POWERVM platform.
22 #include <asm/fadump-internal.h>
24 #include "rtas-fadump.h"
32 fadump_conf->boot_mem_dest_addr = in rtas_fadump_update_config()
33 be64_to_cpu(fdm->rmr_region.destination_address); in rtas_fadump_update_config()
35 fadump_conf->fadumphdr_addr = (fadump_conf->boot_mem_dest_addr + in rtas_fadump_update_config()
36 fadump_conf->boot_memory_size); in rtas_fadump_update_config()
46 fadump_conf->boot_mem_addr[0] = in rtas_fadump_get_config()
47 be64_to_cpu(fdm->rmr_region.source_address); in rtas_fadump_get_config()
48 fadump_conf->boot_mem_sz[0] = be64_to_cpu(fdm->rmr_region.source_len); in rtas_fadump_get_config()
49 fadump_conf->boot_memory_size = fadump_conf->boot_mem_sz[0]; in rtas_fadump_get_config()
51 fadump_conf->boot_mem_top = fadump_conf->boot_memory_size; in rtas_fadump_get_config()
52 fadump_conf->boot_mem_regs_cnt = 1; in rtas_fadump_get_config()
56 * re-registering FADump after dump capture. in rtas_fadump_get_config()
58 fadump_conf->reserve_dump_area_start = in rtas_fadump_get_config()
59 be64_to_cpu(fdm->cpu_state_data.destination_address); in rtas_fadump_get_config()
66 u64 addr = fadump_conf->reserve_dump_area_start; in rtas_fadump_init_mem_struct()
87 /* set 0 to disable an automatic dump-reboot. */ in rtas_fadump_init_mem_struct()
98 cpu_to_be64(fadump_conf->cpu_state_data_size); in rtas_fadump_init_mem_struct()
100 addr += fadump_conf->cpu_state_data_size; in rtas_fadump_init_mem_struct()
108 cpu_to_be64(fadump_conf->hpte_region_size); in rtas_fadump_init_mem_struct()
110 addr += fadump_conf->hpte_region_size; in rtas_fadump_init_mem_struct()
123 fdm.rmr_region.source_len = cpu_to_be64(fadump_conf->boot_memory_size); in rtas_fadump_init_mem_struct()
125 addr += fadump_conf->boot_memory_size; in rtas_fadump_init_mem_struct()
140 int rc, err = -EIO; in rtas_fadump_register()
144 rc = rtas_call(fadump_conf->ibm_configure_kernel_dump, 3, 1, in rtas_fadump_register()
157 fadump_conf->dump_registered = 1; in rtas_fadump_register()
160 case -1: in rtas_fadump_register()
163 case -3: in rtas_fadump_register()
170 err = -EINVAL; in rtas_fadump_register()
172 case -9: in rtas_fadump_register()
174 fadump_conf->dump_registered = 1; in rtas_fadump_register()
175 err = -EEXIST; in rtas_fadump_register()
192 rc = rtas_call(fadump_conf->ibm_configure_kernel_dump, 3, 1, in rtas_fadump_unregister()
202 pr_err("Failed to un-register - unexpected error(%d).\n", rc); in rtas_fadump_unregister()
203 return -EIO; in rtas_fadump_unregister()
206 fadump_conf->dump_registered = 0; in rtas_fadump_unregister()
217 rc = rtas_call(fadump_conf->ibm_configure_kernel_dump, 3, 1, in rtas_fadump_invalidate()
227 pr_err("Failed to invalidate - unexpected error (%d).\n", rc); in rtas_fadump_invalidate()
228 return -EIO; in rtas_fadump_invalidate()
231 fadump_conf->dump_active = 0; in rtas_fadump_invalidate()
240 int i = -1; in rtas_fadump_gpr_index()
250 i = -EINVAL; in rtas_fadump_gpr_index()
252 i = -1; in rtas_fadump_gpr_index()
263 regs->gpr[i] = (unsigned long)reg_val; in rtas_fadump_set_regval()
265 regs->nip = (unsigned long)reg_val; in rtas_fadump_set_regval()
267 regs->msr = (unsigned long)reg_val; in rtas_fadump_set_regval()
269 regs->ctr = (unsigned long)reg_val; in rtas_fadump_set_regval()
271 regs->link = (unsigned long)reg_val; in rtas_fadump_set_regval()
273 regs->xer = (unsigned long)reg_val; in rtas_fadump_set_regval()
275 regs->ccr = (unsigned long)reg_val; in rtas_fadump_set_regval()
277 regs->dar = (unsigned long)reg_val; in rtas_fadump_set_regval()
279 regs->dsisr = (unsigned long)reg_val; in rtas_fadump_set_regval()
288 while (be64_to_cpu(reg_entry->reg_id) != fadump_str_to_u64("CPUEND")) { in rtas_fadump_read_regs()
289 rtas_fadump_set_regval(regs, be64_to_cpu(reg_entry->reg_id), in rtas_fadump_read_regs()
290 be64_to_cpu(reg_entry->reg_value)); in rtas_fadump_read_regs()
322 addr = be64_to_cpu(fdm_active->cpu_state_data.destination_address); in rtas_fadump_build_cpu_notes()
326 if (be64_to_cpu(reg_header->magic_number) != in rtas_fadump_build_cpu_notes()
329 return -ENOENT; in rtas_fadump_build_cpu_notes()
332 pr_debug("--------CPU State Data------------\n"); in rtas_fadump_build_cpu_notes()
333 pr_debug("Magic Number: %llx\n", be64_to_cpu(reg_header->magic_number)); in rtas_fadump_build_cpu_notes()
334 pr_debug("NumCpuOffset: %x\n", be32_to_cpu(reg_header->num_cpu_offset)); in rtas_fadump_build_cpu_notes()
336 vaddr += be32_to_cpu(reg_header->num_cpu_offset); in rtas_fadump_build_cpu_notes()
346 note_buf = (u32 *)fadump_conf->cpu_notes_buf_vaddr; in rtas_fadump_build_cpu_notes()
348 if (fadump_conf->fadumphdr_addr) in rtas_fadump_build_cpu_notes()
349 fdh = __va(fadump_conf->fadumphdr_addr); in rtas_fadump_build_cpu_notes()
352 if (be64_to_cpu(reg_entry->reg_id) != in rtas_fadump_build_cpu_notes()
355 rc = -ENOENT; in rtas_fadump_build_cpu_notes()
359 cpu = (be64_to_cpu(reg_entry->reg_value) & in rtas_fadump_build_cpu_notes()
361 if (fdh && !cpumask_test_cpu(cpu, &fdh->cpu_mask)) { in rtas_fadump_build_cpu_notes()
366 if (fdh && fdh->crashing_cpu == cpu) { in rtas_fadump_build_cpu_notes()
367 regs = fdh->regs; in rtas_fadump_build_cpu_notes()
380 fdh->elfcorehdr_addr); in rtas_fadump_build_cpu_notes()
381 fadump_update_elfcore_header(__va(fdh->elfcorehdr_addr)); in rtas_fadump_build_cpu_notes()
400 if (!fdm_active || !fadump_conf->fadumphdr_addr) in rtas_fadump_process()
401 return -EINVAL; in rtas_fadump_process()
404 if ((be16_to_cpu(fdm_active->header.dump_status_flag) == in rtas_fadump_process()
406 (fdm_active->cpu_state_data.error_flags != 0) || in rtas_fadump_process()
407 (fdm_active->rmr_region.error_flags != 0)) { in rtas_fadump_process()
409 return -EINVAL; in rtas_fadump_process()
411 if ((fdm_active->rmr_region.bytes_dumped != in rtas_fadump_process()
412 fdm_active->rmr_region.source_len) || in rtas_fadump_process()
413 !fdm_active->cpu_state_data.bytes_dumped) { in rtas_fadump_process()
415 return -EINVAL; in rtas_fadump_process()
419 fdh = __va(fadump_conf->fadumphdr_addr); in rtas_fadump_process()
420 if (fdh->magic_number != FADUMP_CRASH_INFO_MAGIC) { in rtas_fadump_process()
422 return -EINVAL; in rtas_fadump_process()
434 elfcorehdr_addr = fdh->elfcorehdr_addr; in rtas_fadump_process()
450 cpu_data_section = &(fdm_ptr->cpu_state_data); in rtas_fadump_region_show()
451 seq_printf(m, "CPU :[%#016llx-%#016llx] %#llx bytes, Dumped: %#llx\n", in rtas_fadump_region_show()
452 be64_to_cpu(cpu_data_section->destination_address), in rtas_fadump_region_show()
453 be64_to_cpu(cpu_data_section->destination_address) + in rtas_fadump_region_show()
454 be64_to_cpu(cpu_data_section->source_len) - 1, in rtas_fadump_region_show()
455 be64_to_cpu(cpu_data_section->source_len), in rtas_fadump_region_show()
456 be64_to_cpu(cpu_data_section->bytes_dumped)); in rtas_fadump_region_show()
458 seq_printf(m, "HPTE:[%#016llx-%#016llx] %#llx bytes, Dumped: %#llx\n", in rtas_fadump_region_show()
459 be64_to_cpu(fdm_ptr->hpte_region.destination_address), in rtas_fadump_region_show()
460 be64_to_cpu(fdm_ptr->hpte_region.destination_address) + in rtas_fadump_region_show()
461 be64_to_cpu(fdm_ptr->hpte_region.source_len) - 1, in rtas_fadump_region_show()
462 be64_to_cpu(fdm_ptr->hpte_region.source_len), in rtas_fadump_region_show()
463 be64_to_cpu(fdm_ptr->hpte_region.bytes_dumped)); in rtas_fadump_region_show()
466 be64_to_cpu(fdm_ptr->rmr_region.source_address), in rtas_fadump_region_show()
467 be64_to_cpu(fdm_ptr->rmr_region.destination_address)); in rtas_fadump_region_show()
469 be64_to_cpu(fdm_ptr->rmr_region.source_len), in rtas_fadump_region_show()
470 be64_to_cpu(fdm_ptr->rmr_region.bytes_dumped)); in rtas_fadump_region_show()
475 fadump_conf->boot_mem_top); in rtas_fadump_region_show()
482 /* Call ibm,os-term rtas call to trigger firmware assisted dump */ in rtas_fadump_trigger()
505 * if dump has been initiated on last reboot. in rtas_fadump_dt_scan()
507 token = of_get_flat_dt_prop(node, "ibm,configure-kernel-dump", NULL); in rtas_fadump_dt_scan()
511 fadump_conf->ibm_configure_kernel_dump = be32_to_cpu(*token); in rtas_fadump_dt_scan()
512 fadump_conf->ops = &rtas_fadump_ops; in rtas_fadump_dt_scan()
513 fadump_conf->fadump_supported = 1; in rtas_fadump_dt_scan()
515 /* Firmware supports 64-bit value for size, align it to pagesize. */ in rtas_fadump_dt_scan()
516 fadump_conf->max_copy_size = ALIGN_DOWN(U64_MAX, PAGE_SIZE); in rtas_fadump_dt_scan()
519 * The 'ibm,kernel-dump' rtas node is present only if there is in rtas_fadump_dt_scan()
522 fdm_active = of_get_flat_dt_prop(node, "ibm,kernel-dump", NULL); in rtas_fadump_dt_scan()
524 pr_info("Firmware-assisted dump is active.\n"); in rtas_fadump_dt_scan()
525 fadump_conf->dump_active = 1; in rtas_fadump_dt_scan()
535 sections = of_get_flat_dt_prop(node, "ibm,configure-kernel-dump-sizes", in rtas_fadump_dt_scan()
548 fadump_conf->cpu_state_data_size = in rtas_fadump_dt_scan()
552 fadump_conf->hpte_region_size = in rtas_fadump_dt_scan()