| /* Copyright (c) 2023 Intel Corporation |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef __ZEPHYR_CAVS_LIB_ASM_MEMORY_MANAGEMENT_H__ |
| #define __ZEPHYR_CAVS_LIB_ASM_MEMORY_MANAGEMENT_H__ |
| |
| #ifdef _ASMLANGUAGE |
| |
| #define HSPGCTL0 0x71D10 |
| #define HSRMCTL0 0x71D14 |
| #define HSPGISTS0 0x71D18 |
| |
| #define LSPGCTL 0x71D50 |
| #define LSRMCTL 0x71D54 |
| #define LSPGISTS 0x71D58 |
| |
| #define SHIM_HSPGCTL(x) (HSPGCTL0 + 0x10 * (x)) |
| #define SHIM_HSPGISTS(x) (HSPGISTS0 + 0x10 * (x)) |
| |
| #define LPSRAM_MASK 0x1 |
| /** |
| * Macro powers down entire HPSRAM. On entry literals and code for section from |
| * where this code is executed need to be placed in memory which is not |
| * HPSRAM (in case when this code is located in HPSRAM, lock memory in L1$ or |
| * L1 SRAM) |
| */ |
| .macro m_cavs_hpsram_power_down_entire ax, ay, az |
| /* SEGMENT #0 */ |
| movi \az, SHIM_HSPGCTL(0) |
| movi \ax, SHIM_HSPGISTS(0) |
| movi \ay, 0x1FFFFFFF /* HPSRAM_MASK(0) */ |
| s32i \ay, \ax, 0 |
| memw |
| 1 : |
| l32i \ax, \az, 0 |
| bne \ax, \ay, 1b |
| |
| /* SEGMENT #1 */ |
| movi \az, SHIM_HSPGCTL(1) |
| movi \ax, SHIM_HSPGISTS(1) |
| movi \ay, 0x0FFFFFFF /* HPSRAM_MASK(1) */ |
| s32i \ay, \ax, 0 |
| memw |
| 1 : |
| l32i \ax, \az, 0 |
| bne \ax, \ay, 1b |
| .endm |
| |
| .macro m_cavs_hpsram_power_change segment_index, mask, ax, ay, az |
| movi \ax, SHIM_HSPGCTL(\segment_index) |
| movi \ay, SHIM_HSPGISTS(\segment_index) |
| s32i \mask, \ax, 0 |
| memw |
| /* assumed that HDA shared dma buffer will be in LPSRAM */ |
| 1 : |
| l32i \ax, \ay, 0 |
| bne \ax, \mask, 1b |
| .endm |
| |
| .macro m_cavs_lpsram_power_down_entire ax, ay, az, loop_cnt_addr |
| movi \az, LSPGISTS |
| movi \ax, LSPGCTL |
| movi \ay, LPSRAM_MASK |
| s32i \ay, \ax, 0 |
| memw |
| /* assumed that HDA shared dma buffer will be in LPSRAM */ |
| movi \ax, \loop_cnt_addr |
| l32i \ax, \ax, 0 |
| 1 : |
| addi \ax, \ax, -1 |
| bnez \ax, 1b |
| .endm |
| |
| #endif |
| #endif |