kernel-brax3-ubuntu-touch/drivers/misc/mediatek/apusys/apusys_rv/apu_config.h
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

119 lines
2.4 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2020 MediaTek Inc.
*/
#ifndef APU_CONFIG_H
#define APU_CONFIG_H
struct mtk_apu;
struct apu_ipi_config {
u64 in_buf_da;
u64 out_buf_da;
} __packed;
struct vpu_init_info {
uint32_t vpu_num;
uint32_t cfg_addr;
uint32_t cfg_size;
uint32_t algo_info_ptr[3 * 2];
uint32_t rst_vec[3];
uint32_t dmem_addr[3];
uint32_t imem_addr[3];
uint32_t iram_addr[3];
uint32_t cmd_addr[3];
uint32_t log_addr[3];
uint32_t log_size[3];
} __packed;
struct apusys_chip_data {
uint32_t s_code;
uint32_t b_code;
uint32_t r_code;
uint32_t a_code;
} __packed;
struct logger_init_info {
uint32_t iova;
uint32_t iova_h;
uint32_t aov_iova;
uint32_t aov_iova_h;
uint32_t aov_buf_sz;
} __packed;
struct reviser_init_info {
uint32_t boundary;
uint64_t dram[32];
} __packed;
struct mvpu_preempt_data {
uint32_t itcm_buffer_core_0[5];
uint32_t l1_buffer_core_0[5];
uint32_t itcm_buffer_core_1[5];
uint32_t l1_buffer_core_1[5];
} __packed;
enum user_config {
eAPU_IPI_CONFIG = 0x0,
eVPU_INIT_INFO,
eAPUSYS_CHIP_DATA,
eLOGGER_INIT_INFO,
eREVISER_INIT_INFO,
eMVPU_PREEMPT_DATA,
eUSER_CONFIG_MAX
};
struct config_v1_entry_table {
u32 user_entry[eUSER_CONFIG_MAX];
} __packed;
struct config_v1 {
/* header begin */
u32 header_magic;
u32 header_rev;
u32 entry_offset;
u32 config_size;
/* header end */
/* do not add new member before this line */
/* system related config begin */
u32 ramdump_offset;
u32 ramdump_type;
u32 ramdump_module;
u64 time_offset;
/* system related config end */
/* entry table */
u8 entry_tbl[sizeof(struct config_v1_entry_table)];
/* user data payload begin */
u8 user0_data[sizeof(struct apu_ipi_config)];
u8 user1_data[sizeof(struct vpu_init_info)];
u8 user2_data[sizeof(struct apusys_chip_data)];
u8 user3_data[sizeof(struct logger_init_info)];
u8 user4_data[sizeof(struct reviser_init_info)];
u8 user5_data[sizeof(struct mvpu_preempt_data)];
/* user data payload end */
} __packed;
void apu_ipi_config_remove(struct mtk_apu *apu);
int apu_ipi_config_init(struct mtk_apu *apu);
static inline void *get_apu_config_user_ptr(struct config_v1 *conf,
enum user_config user_id)
{
struct config_v1_entry_table *entry_tbl;
if (!conf)
return NULL;
if (user_id >= eUSER_CONFIG_MAX)
return NULL;
entry_tbl = (struct config_v1_entry_table *)
((void *)conf + conf->entry_offset);
return (void *)conf + entry_tbl->user_entry[user_id];
}
#endif /* APU_CONFIG_H */