Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Firmware-Assisted Dump support on POWERVM platform.
0004  *
0005  * Copyright 2011, Mahesh Salgaonkar, IBM Corporation.
0006  * Copyright 2019, Hari Bathini, IBM Corporation.
0007  */
0008 
0009 #ifndef _PSERIES_RTAS_FADUMP_H
0010 #define _PSERIES_RTAS_FADUMP_H
0011 
0012 /*
0013  * On some Power systems where RMO is 128MB, it still requires minimum of
0014  * 256MB for kernel to boot successfully. When kdump infrastructure is
0015  * configured to save vmcore over network, we run into OOM issue while
0016  * loading modules related to network setup. Hence we need additional 64M
0017  * of memory to avoid OOM issue.
0018  */
0019 #define RTAS_FADUMP_MIN_BOOT_MEM    ((0x1UL << 28) + (0x1UL << 26))
0020 
0021 /* Firmware provided dump sections */
0022 #define RTAS_FADUMP_CPU_STATE_DATA  0x0001
0023 #define RTAS_FADUMP_HPTE_REGION     0x0002
0024 #define RTAS_FADUMP_REAL_MODE_REGION    0x0011
0025 
0026 /* Dump request flag */
0027 #define RTAS_FADUMP_REQUEST_FLAG    0x00000001
0028 
0029 /* Dump status flag */
0030 #define RTAS_FADUMP_ERROR_FLAG      0x2000
0031 
0032 /* Kernel Dump section info */
0033 struct rtas_fadump_section {
0034     __be32  request_flag;
0035     __be16  source_data_type;
0036     __be16  error_flags;
0037     __be64  source_address;
0038     __be64  source_len;
0039     __be64  bytes_dumped;
0040     __be64  destination_address;
0041 };
0042 
0043 /* ibm,configure-kernel-dump header. */
0044 struct rtas_fadump_section_header {
0045     __be32  dump_format_version;
0046     __be16  dump_num_sections;
0047     __be16  dump_status_flag;
0048     __be32  offset_first_dump_section;
0049 
0050     /* Fields for disk dump option. */
0051     __be32  dd_block_size;
0052     __be64  dd_block_offset;
0053     __be64  dd_num_blocks;
0054     __be32  dd_offset_disk_path;
0055 
0056     /* Maximum time allowed to prevent an automatic dump-reboot. */
0057     __be32  max_time_auto;
0058 };
0059 
0060 /*
0061  * Firmware Assisted dump memory structure. This structure is required for
0062  * registering future kernel dump with power firmware through rtas call.
0063  *
0064  * No disk dump option. Hence disk dump path string section is not included.
0065  */
0066 struct rtas_fadump_mem_struct {
0067     struct rtas_fadump_section_header   header;
0068 
0069     /* Kernel dump sections */
0070     struct rtas_fadump_section      cpu_state_data;
0071     struct rtas_fadump_section      hpte_region;
0072 
0073     /*
0074      * TODO: Extend multiple boot memory regions support in the kernel
0075      *       for this platform.
0076      */
0077     struct rtas_fadump_section      rmr_region;
0078 };
0079 
0080 /*
0081  * The firmware-assisted dump format.
0082  *
0083  * The register save area is an area in the partition's memory used to preserve
0084  * the register contents (CPU state data) for the active CPUs during a firmware
0085  * assisted dump. The dump format contains register save area header followed
0086  * by register entries. Each list of registers for a CPU starts with "CPUSTRT"
0087  * and ends with "CPUEND".
0088  */
0089 
0090 /* Register save area header. */
0091 struct rtas_fadump_reg_save_area_header {
0092     __be64      magic_number;
0093     __be32      version;
0094     __be32      num_cpu_offset;
0095 };
0096 
0097 /* Register entry. */
0098 struct rtas_fadump_reg_entry {
0099     __be64      reg_id;
0100     __be64      reg_value;
0101 };
0102 
0103 /* Utility macros */
0104 #define RTAS_FADUMP_SKIP_TO_NEXT_CPU(reg_entry)             \
0105 ({                                  \
0106     while (be64_to_cpu(reg_entry->reg_id) !=            \
0107            fadump_str_to_u64("CPUEND"))             \
0108         reg_entry++;                        \
0109     reg_entry++;                            \
0110 })
0111 
0112 #define RTAS_FADUMP_CPU_ID_MASK         ((1UL << 32) - 1)
0113 
0114 #endif /* _PSERIES_RTAS_FADUMP_H */