1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2017-2019, 2021, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2023 Rockchip Electronics Co., Ltd. 5 */ 6 7 #ifndef __MINIDUMP_PRIVATE_H 8 #define __MINIDUMP_PRIVATE_H 9 10 #define MD_REVISION 1 11 #define SBL_MINIDUMP_SMEM_ID 0 12 #define MAX_NUM_OF_SS 10 13 #define MD_SS_HLOS_ID 0 14 #define SMEM_ENTRY_SIZE 40 15 16 /* Bootloader has 16 byte support, 4 bytes reserved for itself */ 17 #define MAX_REGION_NAME_LENGTH 16 18 19 #define MD_REGION_VALID ('V' << 24 | 'A' << 16 | 'L' << 8 | 'I' << 0) 20 #define MD_REGION_INVALID ('I' << 24 | 'N' << 16 | 'V' << 8 | 'A' << 0) 21 #define MD_REGION_INIT ('I' << 24 | 'N' << 16 | 'I' << 8 | 'T' << 0) 22 #define MD_REGION_NOINIT 0 23 24 #define MD_SS_ENCR_REQ (0 << 24 | 'Y' << 16 | 'E' << 8 | 'S' << 0) 25 #define MD_SS_ENCR_NOTREQ (0 << 24 | 0 << 16 | 'N' << 8 | 'R' << 0) 26 #define MD_SS_ENCR_NONE ('N' << 24 | 'O' << 16 | 'N' << 8 | 'E' << 0) 27 #define MD_SS_ENCR_DONE ('D' << 24 | 'O' << 16 | 'N' << 8 | 'E' << 0) 28 #define MD_SS_ENCR_START ('S' << 24 | 'T' << 16 | 'R' << 8 | 'T' << 0) 29 #define MD_SS_ENABLED ('E' << 24 | 'N' << 16 | 'B' << 8 | 'L' << 0) 30 #define MD_SS_DISABLED ('D' << 24 | 'S' << 16 | 'B' << 8 | 'L' << 0) 31 32 /** 33 * md_ss_region - Minidump region 34 * @name : Name of the region to be dumped 35 * @seq_num: : Use to differentiate regions with same name. 36 * @md_valid : This entry to be dumped (if set to 1) 37 * @region_base_address : Physical address of region to be dumped 38 * @region_size : Size of the region 39 */ 40 struct md_ss_region { 41 char name[MAX_REGION_NAME_LENGTH]; 42 u32 seq_num; 43 u32 md_valid; 44 u64 region_base_address; 45 u64 region_size; 46 }; 47 48 /** 49 * md_ss_toc: Sub system SMEM Table of content 50 * @md_ss_toc_init : SS toc init status 51 * @md_ss_enable_status : if set to 1, Bootloader would dump this SS regions 52 * @encryption_status: Encryption status for this subsystem 53 * @encryption_required : Decides to encrypt the SS regions or not 54 * @ss_region_count : Number of regions added in this SS toc 55 * @md_ss_smem_regions_baseptr : regions base pointer of the Subsystem 56 * @elf_header : base pointer of the minidump elf header 57 */ 58 struct md_ss_toc { 59 u32 md_ss_toc_init; 60 u32 md_ss_enable_status; 61 u32 encryption_status; 62 u32 encryption_required; 63 u32 ss_region_count; 64 u64 md_ss_smem_regions_baseptr; 65 u64 elf_header; 66 }; 67 68 /** 69 * md_global_toc: Global Table of Content 70 * @md_toc_init : Global Minidump init status 71 * @md_revision : Minidump revision 72 * @md_enable_status : Minidump enable status 73 * @md_ss_toc : Array of subsystems toc 74 */ 75 struct md_global_toc { 76 u32 md_toc_init; 77 u32 md_revision; 78 u32 md_enable_status; 79 struct md_ss_toc md_ss_toc[MAX_NUM_OF_SS]; 80 }; 81 82 int rk_minidump_log_init(void); 83 extern void rk_minidump_flush_elfheader(void); 84 extern void dump_stack_minidump(u64 sp); 85 extern struct md_region *md_get_region(char *name); 86 #endif 87