• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024, Rockchip, Inc. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef PLAT_PM_HELPERS_H
8 #define PLAT_PM_HELPERS_H
9 
10 #include <stdint.h>
11 
12 /**
13  * Use this macro to define a register region.
14  * start: start offset from the base address.
15  * end: end offset from the base address.
16  * stride: stride of registers in region.
17  * base: base address of registers in region.
18  * wmsk: write mask of registers in region.
19  */
20 #define REG_REGION(_start, _end, _stride, _base, _wmsk)	\
21 {							\
22 	.start = (_base) + (_start),			\
23 	.end   = (_base) + (_end),			\
24 	.stride   = _stride,				\
25 	.wmsk  = _wmsk					\
26 }
27 
28 struct reg_region {
29 	/* Start address of region */
30 	uint32_t start;
31 	/* End address of region */
32 	uint32_t end;
33 	/* Stride of registers in region */
34 	uint32_t stride;
35 	/* Write mask of registers in region */
36 	uint32_t wmsk;
37 	/* Buffer to save/restore registers in region */
38 	uint32_t *buf;
39 };
40 
41 void rockchip_alloc_region_mem(struct reg_region *rgns, uint32_t rgn_num);
42 void rockchip_reg_rgn_save(struct reg_region *rgns, uint32_t rgn_num);
43 void rockchip_reg_rgn_restore(struct reg_region *rgns, uint32_t rgn_num);
44 void rockchip_reg_rgn_restore_reverse(struct reg_region *rgns, uint32_t rgn_num);
45 void rockchip_regs_dump(uint32_t base,
46 			uint32_t start_offset,
47 			uint32_t end_offset,
48 			uint32_t stride);
49 void rockchip_dump_reg_rgns(struct reg_region *rgns, uint32_t rgn_num);
50 
51 #endif /* PLAT_PM_HELPERS_H */
52