diff options
Diffstat (limited to 'src/soc/mediatek/common/devapc.c')
-rw-r--r-- | src/soc/mediatek/common/devapc.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/soc/mediatek/common/devapc.c b/src/soc/mediatek/common/devapc.c new file mode 100644 index 0000000000..f491817f06 --- /dev/null +++ b/src/soc/mediatek/common/devapc.c @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ + +#include <console/console.h> +#include <soc/devapc.h> +#include <soc/devapc_common.h> + +void *getreg_domain(uintptr_t base, unsigned int offset, + enum domain_id domain_id, unsigned int index) +{ + return (void *)(base + offset + domain_id * DOMAIN_OFT + index * IDX_OFT); +} + +void *getreg(uintptr_t base, unsigned int offset) +{ + return getreg_domain(base, offset, 0, 0); +} + +void set_module_apc(uintptr_t base, uint32_t module, enum domain_id domain_id, + enum devapc_perm_type perm) +{ + uint32_t apc_register_index; + uint32_t apc_set_index; + + apc_register_index = module / MOD_NO_IN_1_DEVAPC; + apc_set_index = module % MOD_NO_IN_1_DEVAPC; + + clrsetbits32(getreg_domain(base, 0, domain_id, apc_register_index), + 0x3 << (apc_set_index * 2), + perm << (apc_set_index * 2)); +} |