xref: /OK3568_Linux_fs/kernel/drivers/soc/rockchip/minidump/minidump_private.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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