kernel-brax3-ubuntu-touch/drivers/misc/mediatek/adsp/adsp_awake.c
erascape f319b992b1 kernel-5.15: Initial import brax3 UT kernel
* halium configs enabled

Signed-off-by: erascape <erascape@proton.me>
2025-09-23 15:17:10 +00:00

87 lines
1.7 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2019 MediaTek Inc.
*/
#include <linux/io.h>
#include <linux/mutex.h>
#include <linux/ktime.h>
#include "adsp_core.h"
#include "adsp_feature_define.h"
#include "adsp_reserved_mem.h"
#include "adsp_platform.h"
#include "adsp_platform_driver.h"
#define WAIT_MS (1000)
#define AP_AWAKE_LOCK_BIT (0)
#define AP_AWAKE_UNLOCK_BIT (1)
#define AP_AWAKE_LOCK_MASK (0x1 << AP_AWAKE_LOCK_BIT)
#define AP_AWAKE_UNLOCK_MASK (0x1 << AP_AWAKE_UNLOCK_BIT)
/*
* acquire adsp lock flag, keep adsp awake
* @param adsp_id: adsp core id
* return 0 : get lock success
* non-0 : get lock fail
*/
int adsp_awake_lock(u32 cid)
{
int msg = AP_AWAKE_LOCK_MASK;
int ret = ADSP_IPI_BUSY;
if (cid >= get_adsp_core_total()) {
ret = -EINVAL;
goto ERROR;
}
if (!is_adsp_ready(cid) || !adsp_feature_is_active(cid)) {
ret = -ENODEV;
goto ERROR;
}
ret = adsp_push_message(ADSP_IPI_DVFS_WAKE, &msg, sizeof(u32), WAIT_MS, cid);
if (ret)
goto ERROR;
return ADSP_IPI_DONE;
ERROR:
pr_info("%s, lock fail, ret = %d", __func__, ret);
return ret;
}
/*
* release adsp awake lock flag
* @param adsp_id: adsp core id
* return 0 : release lock success
* non-0 : release lock fail
*/
int adsp_awake_unlock(u32 cid)
{
int msg = AP_AWAKE_UNLOCK_MASK;
int ret = ADSP_IPI_BUSY;
if (cid >= get_adsp_core_total()) {
ret = -EINVAL;
goto ERROR;
}
if (!is_adsp_ready(cid) || !adsp_feature_is_active(cid)) {
ret = -ENODEV;
goto ERROR;
}
ret = adsp_push_message(ADSP_IPI_DVFS_WAKE, &msg, sizeof(u32), WAIT_MS, cid);
if (ret)
goto ERROR;
return ADSP_IPI_DONE;
ERROR:
pr_info("%s, unlock fail, ret = %d", __func__, ret);
return ret;
}