mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.1 KiB
114 lines
3.1 KiB
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|
/* |
|
* Firmware-Assisted Dump support on POWERVM platform. |
|
* |
|
* Copyright 2011, Mahesh Salgaonkar, IBM Corporation. |
|
* Copyright 2019, Hari Bathini, IBM Corporation. |
|
*/ |
|
|
|
#ifndef _PSERIES_RTAS_FADUMP_H |
|
#define _PSERIES_RTAS_FADUMP_H |
|
|
|
/* |
|
* On some Power systems where RMO is 128MB, it still requires minimum of |
|
* 256MB for kernel to boot successfully. When kdump infrastructure is |
|
* configured to save vmcore over network, we run into OOM issue while |
|
* loading modules related to network setup. Hence we need additional 64M |
|
* of memory to avoid OOM issue. |
|
*/ |
|
#define RTAS_FADUMP_MIN_BOOT_MEM ((0x1UL << 28) + (0x1UL << 26)) |
|
|
|
/* Firmware provided dump sections */ |
|
#define RTAS_FADUMP_CPU_STATE_DATA 0x0001 |
|
#define RTAS_FADUMP_HPTE_REGION 0x0002 |
|
#define RTAS_FADUMP_REAL_MODE_REGION 0x0011 |
|
|
|
/* Dump request flag */ |
|
#define RTAS_FADUMP_REQUEST_FLAG 0x00000001 |
|
|
|
/* Dump status flag */ |
|
#define RTAS_FADUMP_ERROR_FLAG 0x2000 |
|
|
|
/* Kernel Dump section info */ |
|
struct rtas_fadump_section { |
|
__be32 request_flag; |
|
__be16 source_data_type; |
|
__be16 error_flags; |
|
__be64 source_address; |
|
__be64 source_len; |
|
__be64 bytes_dumped; |
|
__be64 destination_address; |
|
}; |
|
|
|
/* ibm,configure-kernel-dump header. */ |
|
struct rtas_fadump_section_header { |
|
__be32 dump_format_version; |
|
__be16 dump_num_sections; |
|
__be16 dump_status_flag; |
|
__be32 offset_first_dump_section; |
|
|
|
/* Fields for disk dump option. */ |
|
__be32 dd_block_size; |
|
__be64 dd_block_offset; |
|
__be64 dd_num_blocks; |
|
__be32 dd_offset_disk_path; |
|
|
|
/* Maximum time allowed to prevent an automatic dump-reboot. */ |
|
__be32 max_time_auto; |
|
}; |
|
|
|
/* |
|
* Firmware Assisted dump memory structure. This structure is required for |
|
* registering future kernel dump with power firmware through rtas call. |
|
* |
|
* No disk dump option. Hence disk dump path string section is not included. |
|
*/ |
|
struct rtas_fadump_mem_struct { |
|
struct rtas_fadump_section_header header; |
|
|
|
/* Kernel dump sections */ |
|
struct rtas_fadump_section cpu_state_data; |
|
struct rtas_fadump_section hpte_region; |
|
|
|
/* |
|
* TODO: Extend multiple boot memory regions support in the kernel |
|
* for this platform. |
|
*/ |
|
struct rtas_fadump_section rmr_region; |
|
}; |
|
|
|
/* |
|
* The firmware-assisted dump format. |
|
* |
|
* The register save area is an area in the partition's memory used to preserve |
|
* the register contents (CPU state data) for the active CPUs during a firmware |
|
* assisted dump. The dump format contains register save area header followed |
|
* by register entries. Each list of registers for a CPU starts with "CPUSTRT" |
|
* and ends with "CPUEND". |
|
*/ |
|
|
|
/* Register save area header. */ |
|
struct rtas_fadump_reg_save_area_header { |
|
__be64 magic_number; |
|
__be32 version; |
|
__be32 num_cpu_offset; |
|
}; |
|
|
|
/* Register entry. */ |
|
struct rtas_fadump_reg_entry { |
|
__be64 reg_id; |
|
__be64 reg_value; |
|
}; |
|
|
|
/* Utility macros */ |
|
#define RTAS_FADUMP_SKIP_TO_NEXT_CPU(reg_entry) \ |
|
({ \ |
|
while (be64_to_cpu(reg_entry->reg_id) != \ |
|
fadump_str_to_u64("CPUEND")) \ |
|
reg_entry++; \ |
|
reg_entry++; \ |
|
}) |
|
|
|
#define RTAS_FADUMP_CPU_ID_MASK ((1UL << 32) - 1) |
|
|
|
#endif /* _PSERIES_RTAS_FADUMP_H */
|
|
|