1 /* Copyright (c) 2023 Intel Corporation
2  * SPDX-License-Identifier: Apache-2.0
3  */
4 
5 #ifndef __ZEPHYR_CAVS_LIB_ASM_MEMORY_MANAGEMENT_H__
6 #define __ZEPHYR_CAVS_LIB_ASM_MEMORY_MANAGEMENT_H__
7 
8 #ifdef _ASMLANGUAGE
9 
10 #define HSPGCTL0		0x71D10
11 #define HSRMCTL0		0x71D14
12 #define HSPGISTS0		0x71D18
13 
14 #define LSPGCTL			0x71D50
15 #define LSRMCTL			0x71D54
16 #define LSPGISTS		0x71D58
17 
18 #define SHIM_HSPGCTL(x)		(HSPGCTL0 + 0x10 * (x))
19 #define SHIM_HSPGISTS(x)	(HSPGISTS0 + 0x10 * (x))
20 
21 #define LPSRAM_MASK	0x1
22 /**
23  * Macro powers down entire HPSRAM. On entry literals and code for section from
24  * where this code is executed need to be placed in memory which is not
25  * HPSRAM (in case when this code is located in HPSRAM, lock memory in L1$ or
26  * L1 SRAM)
27  */
28 .macro m_cavs_hpsram_power_down_entire ax, ay, az
29 	/* SEGMENT #0 */
30 	movi \az, SHIM_HSPGCTL(0)
31 	movi \ax, SHIM_HSPGISTS(0)
32 	movi \ay, 0x1FFFFFFF /* HPSRAM_MASK(0) */
33 	s32i \ay, \ax, 0
34 	memw
35 1 :
36 	l32i \ax, \az, 0
37 	bne \ax, \ay, 1b
38 
39 	/* SEGMENT #1 */
40 	movi \az, SHIM_HSPGCTL(1)
41 	movi \ax, SHIM_HSPGISTS(1)
42 	movi \ay, 0x0FFFFFFF /* HPSRAM_MASK(1) */
43 	s32i \ay, \ax, 0
44 	memw
45 1 :
46 	l32i \ax, \az, 0
47 	bne \ax, \ay, 1b
48 .endm
49 
50 .macro m_cavs_hpsram_power_change segment_index, mask, ax, ay, az
51 	movi \ax, SHIM_HSPGCTL(\segment_index)
52 	movi \ay, SHIM_HSPGISTS(\segment_index)
53 	s32i \mask, \ax, 0
54 	memw
55 	/* assumed that HDA shared dma buffer will be in LPSRAM */
56 1 :
57 	l32i \ax, \ay, 0
58 	bne \ax, \mask, 1b
59 .endm
60 
61 .macro m_cavs_lpsram_power_down_entire ax, ay, az, loop_cnt_addr
62 	movi \az, LSPGISTS
63 	movi \ax, LSPGCTL
64 	movi \ay, LPSRAM_MASK
65 	s32i \ay, \ax, 0
66 	memw
67 	/* assumed that HDA shared dma buffer will be in LPSRAM */
68 	movi \ax, \loop_cnt_addr
69 	l32i \ax, \ax, 0
70 1 :
71 	addi \ax, \ax, -1
72 	bnez \ax, 1b
73 .endm
74 
75 #endif
76 #endif
77