1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Firmware-Assisted Dump support on POWERVM platform. 4 * 5 * Copyright 2011, Mahesh Salgaonkar, IBM Corporation. 6 * Copyright 2019, Hari Bathini, IBM Corporation. 7 */ 8 9 #ifndef _PSERIES_RTAS_FADUMP_H 10 #define _PSERIES_RTAS_FADUMP_H 11 12 /* 13 * On some Power systems where RMO is 128MB, it still requires minimum of 14 * 256MB for kernel to boot successfully. When kdump infrastructure is 15 * configured to save vmcore over network, we run into OOM issue while 16 * loading modules related to network setup. Hence we need additional 64M 17 * of memory to avoid OOM issue. 18 */ 19 #define RTAS_FADUMP_MIN_BOOT_MEM ((0x1UL << 28) + (0x1UL << 26)) 20 21 /* Firmware provided dump sections */ 22 #define RTAS_FADUMP_CPU_STATE_DATA 0x0001 23 #define RTAS_FADUMP_HPTE_REGION 0x0002 24 #define RTAS_FADUMP_REAL_MODE_REGION 0x0011 25 26 /* Dump request flag */ 27 #define RTAS_FADUMP_REQUEST_FLAG 0x00000001 28 29 /* Dump status flag */ 30 #define RTAS_FADUMP_ERROR_FLAG 0x2000 31 32 /* Kernel Dump section info */ 33 struct rtas_fadump_section { 34 __be32 request_flag; 35 __be16 source_data_type; 36 __be16 error_flags; 37 __be64 source_address; 38 __be64 source_len; 39 __be64 bytes_dumped; 40 __be64 destination_address; 41 }; 42 43 /* ibm,configure-kernel-dump header. */ 44 struct rtas_fadump_section_header { 45 __be32 dump_format_version; 46 __be16 dump_num_sections; 47 __be16 dump_status_flag; 48 __be32 offset_first_dump_section; 49 50 /* Fields for disk dump option. */ 51 __be32 dd_block_size; 52 __be64 dd_block_offset; 53 __be64 dd_num_blocks; 54 __be32 dd_offset_disk_path; 55 56 /* Maximum time allowed to prevent an automatic dump-reboot. */ 57 __be32 max_time_auto; 58 }; 59 60 /* 61 * Firmware Assisted dump memory structure. This structure is required for 62 * registering future kernel dump with power firmware through rtas call. 63 * 64 * No disk dump option. Hence disk dump path string section is not included. 65 */ 66 struct rtas_fadump_mem_struct { 67 struct rtas_fadump_section_header header; 68 69 /* Kernel dump sections */ 70 struct rtas_fadump_section cpu_state_data; 71 struct rtas_fadump_section hpte_region; 72 73 /* 74 * TODO: Extend multiple boot memory regions support in the kernel 75 * for this platform. 76 */ 77 struct rtas_fadump_section rmr_region; 78 }; 79 80 /* 81 * The firmware-assisted dump format. 82 * 83 * The register save area is an area in the partition's memory used to preserve 84 * the register contents (CPU state data) for the active CPUs during a firmware 85 * assisted dump. The dump format contains register save area header followed 86 * by register entries. Each list of registers for a CPU starts with "CPUSTRT" 87 * and ends with "CPUEND". 88 */ 89 90 /* Register save area header. */ 91 struct rtas_fadump_reg_save_area_header { 92 __be64 magic_number; 93 __be32 version; 94 __be32 num_cpu_offset; 95 }; 96 97 /* Register entry. */ 98 struct rtas_fadump_reg_entry { 99 __be64 reg_id; 100 __be64 reg_value; 101 }; 102 103 /* Utility macros */ 104 #define RTAS_FADUMP_SKIP_TO_NEXT_CPU(reg_entry) \ 105 ({ \ 106 while (be64_to_cpu(reg_entry->reg_id) != \ 107 fadump_str_to_u64("CPUEND")) \ 108 reg_entry++; \ 109 reg_entry++; \ 110 }) 111 112 #define RTAS_FADUMP_CPU_ID_MASK ((1UL << 32) - 1) 113 114 #endif /* _PSERIES_RTAS_FADUMP_H */ 115