| /* Copyright (c) 2023 Intel Corporation |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef __ZEPHYR_CAVS_LIB_ASM_LDO_MANAGEMENT_H__ |
| #define __ZEPHYR_CAVS_LIB_ASM_LDO_MANAGEMENT_H__ |
| |
| #ifdef _ASMLANGUAGE |
| |
| #define SHIM_BASE 0x00071F00 |
| #define SHIM_LDOCTL 0xA4 |
| #define SHIM_LDOCTL_HPSRAM_MASK (3 << 0 | 3 << 16) |
| #define SHIM_LDOCTL_LPSRAM_MASK (3 << 2) |
| #define SHIM_LDOCTL_HPSRAM_LDO_ON (3 << 0 | 3 << 16) |
| #define SHIM_LDOCTL_LPSRAM_LDO_ON (3 << 2) |
| #define SHIM_LDOCTL_HPSRAM_LDO_OFF (0 << 0) |
| #define SHIM_LDOCTL_LPSRAM_LDO_OFF (0 << 2) |
| #define SHIM_LDOCTL_HPSRAM_LDO_BYPASS (BIT(0) | BIT(16)) |
| #define SHIM_LDOCTL_LPSRAM_LDO_BYPASS BIT(2) |
| |
| .macro m_cavs_set_ldo_state state, ax |
| movi \ax, (SHIM_BASE + SHIM_LDOCTL) |
| s32i \state, \ax, 0 |
| memw |
| /* wait loop > 300ns (min 100ns required) */ |
| movi \ax, 128 |
| 1 : |
| addi \ax, \ax, -1 |
| nop |
| bnez \ax, 1b |
| .endm |
| |
| .macro m_cavs_set_hpldo_state state, ax, ay |
| movi \ax, (SHIM_BASE + SHIM_LDOCTL) |
| l32i \ay, \ax, 0 |
| |
| movi \ax, ~(SHIM_LDOCTL_HPSRAM_MASK) |
| and \ay, \ax, \ay |
| or \state, \ay, \state |
| |
| m_cavs_set_ldo_state \state, \ax |
| .endm |
| |
| .macro m_cavs_set_lpldo_state state, ax, ay |
| movi \ax, (SHIM_BASE + SHIM_LDOCTL) |
| l32i \ay, \ax, 0 |
| /* LP SRAM mask */ |
| movi \ax, ~(SHIM_LDOCTL_LPSRAM_MASK) |
| and \ay, \ax, \ay |
| or \state, \ay, \state |
| |
| m_cavs_set_ldo_state \state, \ax |
| .endm |
| |
| .macro m_cavs_set_ldo_on_state ax, ay, az |
| movi \ay, (SHIM_BASE + SHIM_LDOCTL) |
| l32i \az, \ay, 0 |
| |
| movi \ax, ~(SHIM_LDOCTL_HPSRAM_MASK | SHIM_LDOCTL_LPSRAM_MASK) |
| and \az, \ax, \az |
| movi \ax, (SHIM_LDOCTL_HPSRAM_LDO_ON | SHIM_LDOCTL_LPSRAM_LDO_ON) |
| or \ax, \az, \ax |
| |
| m_cavs_set_ldo_state \ax, \ay |
| .endm |
| |
| .macro m_cavs_set_ldo_off_state ax, ay, az |
| /* wait loop > 300ns (min 100ns required) */ |
| movi \ax, 128 |
| 1 : |
| addi \ax, \ax, -1 |
| nop |
| bnez \ax, 1b |
| movi \ay, (SHIM_BASE + SHIM_LDOCTL) |
| l32i \az, \ay, 0 |
| |
| movi \ax, ~(SHIM_LDOCTL_HPSRAM_MASK | SHIM_LDOCTL_LPSRAM_MASK) |
| and \az, \az, \ax |
| |
| movi \ax, (SHIM_LDOCTL_HPSRAM_LDO_OFF | SHIM_LDOCTL_LPSRAM_LDO_OFF) |
| or \ax, \ax, \az |
| |
| s32i \ax, \ay, 0 |
| l32i \ax, \ay, 0 |
| .endm |
| |
| .macro m_cavs_set_ldo_bypass_state ax, ay, az |
| /* wait loop > 300ns (min 100ns required) */ |
| movi \ax, 128 |
| 1 : |
| addi \ax, \ax, -1 |
| nop |
| bnez \ax, 1b |
| movi \ay, (SHIM_BASE + SHIM_LDOCTL) |
| l32i \az, \ay, 0 |
| |
| movi \ax, ~(SHIM_LDOCTL_HPSRAM_MASK | SHIM_LDOCTL_LPSRAM_MASK) |
| and \az, \az, \ax |
| |
| movi \ax, (SHIM_LDOCTL_HPSRAM_LDO_BYPASS | SHIM_LDOCTL_LPSRAM_LDO_BYPASS) |
| or \ax, \ax, \az |
| |
| s32i \ax, \ay, 0 |
| l32i \ax, \ay, 0 |
| .endm |
| |
| #endif |
| #endif /* __ZEPHYR_CAVS_LIB_ASM_LDO_MANAGEMENT_H__ */ |