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