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