kernel-brax3-ubuntu-touch/drivers/misc/mediatek/apusys/midware/2.0/mdw_import.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

144 lines
2.9 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2021 MediaTek Inc.
*/
#include "mdw_cmn.h"
#include "mdw_import.h"
#include "mdw_trace.h"
#include "reviser_export.h"
#include "reviser_mem_def.h"
#include "mnoc_api.h"
#include "apusys_power.h"
bool mdw_pwr_check(void)
{
return apusys_power_check();
}
int mdw_rvs_set_ctx(int type, int idx, uint8_t ctx)
{
int ret = 0;
mdw_trace_begin("apumdw:ctx_set|type:%d idx:%d ctx:%u",
type, idx, ctx);
ret = reviser_set_context(type, idx, ctx);
mdw_trace_end();
return ret;
}
int mdw_rvs_free_vlm(uint32_t ctx)
{
int ret = 0;
mdw_trace_begin("apumdw:ctx_free|ctx:%u", ctx);
ret = reviser_free_vlm(ctx);
mdw_trace_end();
return ret;
}
int mdw_rvs_get_vlm(uint32_t req_size, bool force,
uint32_t *id, uint32_t *tcm_size)
{
int ret = 0;
mdw_trace_begin("apumdw:ctx_alloc|size:%u", req_size);
ret = reviser_get_vlm(req_size, force, (unsigned long *)id, tcm_size);
mdw_trace_end();
return ret;
}
int mdw_rvs_get_vlm_property(uint64_t *start, uint32_t *size)
{
return reviser_get_resource_vlm((unsigned int *)start,
(unsigned int *)size);
}
static int mdw_rvs_type_convert(uint32_t type, uint32_t *out)
{
switch (type) {
case MDW_MEM_TYPE_VLM:
*out = REVISER_MEM_TYPE_VLM;
break;
case MDW_MEM_TYPE_LOCAL:
*out = REVISER_MEM_TYPE_RSV_T;
break;
case MDW_MEM_TYPE_SYSTEM_ISP:
*out = REVISER_MEM_TYPE_EXT;
break;
case MDW_MEM_TYPE_SYSTEM_APU:
*out = REVISER_MEM_TYPE_RSV_S;
break;
default:
return -EINVAL;
}
return 0;
}
int mdw_rvs_mem_alloc(uint32_t type, uint32_t size,
uint64_t *addr, uint32_t *sid)
{
uint32_t mapped_type = 0;
int ret = 0;
if (mdw_rvs_type_convert(type, &mapped_type))
return -EINVAL;
ret = reviser_alloc_mem(mapped_type, size, addr, sid);
mdw_flw_debug("type(%u->%u)size(%u)addr(0x%llx)sid(%u)\n",
type, mapped_type, size, *addr, *sid);
return ret;
}
int mdw_rvs_mem_free(uint32_t sid)
{
mdw_flw_debug("sid(%u)\n", sid);
return reviser_free_mem(sid);
}
int mdw_rvs_mem_import(uint64_t session, uint32_t sid)
{
mdw_flw_debug("s(0x%llx)sid(%u)\n", (uint64_t)session, sid);
return reviser_import_mem(session, sid);
}
int mdw_rvs_mem_unimport(uint64_t session, uint32_t sid)
{
mdw_flw_debug("s(0x%llx)sid(%u)\n", (uint64_t)session, sid);
return reviser_unimport_mem(session, sid);
}
int mdw_rvs_mem_map(uint64_t session, uint32_t sid, uint64_t *vaddr)
{
int ret = 0;
ret = reviser_map_mem(session, sid, vaddr);
mdw_flw_debug("s(0x%llx)sid(%u)vaddr(0x%llx)\n",
session, sid, *vaddr);
return ret;
}
int mdw_rvs_mem_unmap(uint64_t session, uint32_t sid)
{
mdw_flw_debug("s(0x%llx)sid(%u)\n", (uint64_t)session, sid);
return reviser_unmap_mem(session, sid);
}
int mdw_qos_cmd_start(uint64_t cmd_id, uint64_t sc_id,
int type, int core, uint32_t boost)
{
return apu_cmd_qos_start(cmd_id, sc_id, type, core, boost);
}
int mdw_qos_cmd_end(uint64_t cmd_id, uint64_t sc_id,
int type, int core)
{
return apu_cmd_qos_end(cmd_id, sc_id, type, core);
}