162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2022 MediaTek Inc. 462306a36Sopenharmony_ci * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef __MTK_MDP3_VPU_H__ 862306a36Sopenharmony_ci#define __MTK_MDP3_VPU_H__ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/platform_device.h> 1162306a36Sopenharmony_ci#include "mtk-img-ipi.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cienum mdp_ipi_result { 1462306a36Sopenharmony_ci MDP_IPI_SUCCESS = 0, 1562306a36Sopenharmony_ci MDP_IPI_ENOMEM = 12, 1662306a36Sopenharmony_ci MDP_IPI_EBUSY = 16, 1762306a36Sopenharmony_ci MDP_IPI_EINVAL = 22, 1862306a36Sopenharmony_ci MDP_IPI_EMINST = 24, 1962306a36Sopenharmony_ci MDP_IPI_ERANGE = 34, 2062306a36Sopenharmony_ci MDP_IPI_NR_ERRNO, 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci MDP_IPI_EOTHER = MDP_IPI_NR_ERRNO, 2362306a36Sopenharmony_ci MDP_IPI_PATH_CANT_MERGE, 2462306a36Sopenharmony_ci MDP_IPI_OP_FAIL, 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct mdp_ipi_init_msg { 2862306a36Sopenharmony_ci u32 status; 2962306a36Sopenharmony_ci u64 drv_data; 3062306a36Sopenharmony_ci u32 work_addr; /* [in] working buffer address */ 3162306a36Sopenharmony_ci u32 work_size; /* [in] working buffer size */ 3262306a36Sopenharmony_ci} __packed; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct mdp_ipi_deinit_msg { 3562306a36Sopenharmony_ci u32 status; 3662306a36Sopenharmony_ci u64 drv_data; 3762306a36Sopenharmony_ci u32 work_addr; 3862306a36Sopenharmony_ci} __packed; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistruct mdp_vpu_dev { 4162306a36Sopenharmony_ci /* synchronization protect for accessing vpu working buffer info */ 4262306a36Sopenharmony_ci struct mutex *lock; 4362306a36Sopenharmony_ci struct mtk_scp *scp; 4462306a36Sopenharmony_ci struct completion ipi_acked; 4562306a36Sopenharmony_ci void *param; 4662306a36Sopenharmony_ci dma_addr_t param_addr; 4762306a36Sopenharmony_ci size_t param_size; 4862306a36Sopenharmony_ci void *work; 4962306a36Sopenharmony_ci dma_addr_t work_addr; 5062306a36Sopenharmony_ci size_t work_size; 5162306a36Sopenharmony_ci void *config; 5262306a36Sopenharmony_ci dma_addr_t config_addr; 5362306a36Sopenharmony_ci size_t config_size; 5462306a36Sopenharmony_ci u32 status; 5562306a36Sopenharmony_ci}; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_civoid mdp_vpu_shared_mem_free(struct mdp_vpu_dev *vpu); 5862306a36Sopenharmony_ciint mdp_vpu_dev_init(struct mdp_vpu_dev *vpu, struct mtk_scp *scp, 5962306a36Sopenharmony_ci struct mutex *lock /* for sync */); 6062306a36Sopenharmony_ciint mdp_vpu_dev_deinit(struct mdp_vpu_dev *vpu); 6162306a36Sopenharmony_ciint mdp_vpu_process(struct mdp_vpu_dev *vpu, struct img_ipi_frameparam *param); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci#endif /* __MTK_MDP3_VPU_H__ */ 64