video: rockchip: mpp: add dump info when alloc failed

changes:
1. task->info ==> task->mpp_task.info
2. export mpp_task->reg for dump register setting

Change-Id: I78b024d083e04fcbf8fd76fbe5f24798d912103a
Signed-off-by: Ding Wei <leo.ding@rock-chips.com>
This commit is contained in:
Ding Wei
2020-04-27 09:18:47 +08:00
committed by Tao Huang
parent c5d6070c6b
commit f9bd64b480
9 changed files with 158 additions and 88 deletions

View File

@@ -1186,8 +1186,8 @@ int mpp_translate_reg_address(struct mpp_session *session,
mem_region = mpp_task_attach_fd(task, usr_fd);
if (IS_ERR(mem_region)) {
mpp_debug(DEBUG_IOMMU, "reg[%3d]: %08x fd %d failed\n",
tbl[i], reg[tbl[i]], usr_fd);
mpp_err("reg[%3d]: 0x%08x fd %d failed\n",
tbl[i], reg[tbl[i]], usr_fd);
return PTR_ERR(mem_region);
}
mpp_debug(DEBUG_IOMMU,
@@ -1333,24 +1333,16 @@ int mpp_task_finalize(struct mpp_session *session,
return 0;
}
static int mpp_iommu_handle(struct iommu_domain *iommu,
struct device *iommu_dev,
unsigned long iova,
int status, void *arg)
int mpp_task_dump_mem_region(struct mpp_dev *mpp,
struct mpp_task *task)
{
u32 i, s, e;
struct mpp_mem_region *mem = NULL, *n;
struct mpp_dev *mpp = (struct mpp_dev *)arg;
struct mpp_task *task = mpp->cur_task;
dev_err(mpp->dev, "fault addr 0x%08lx status %x\n", iova, status);
if (!task)
return -EIO;
mpp_err("--- dump mem region ---\n");
if (!list_empty(&task->mem_region_list)) {
/* dump mem region */
mpp_err("--- dump mem region ---\n");
list_for_each_entry_safe(mem, n,
&task->mem_region_list,
reg_link) {
@@ -1361,15 +1353,56 @@ static int mpp_iommu_handle(struct iommu_domain *iommu,
dev_err(mpp->dev, "no memory region mapped\n");
}
/* dump register */
s = mpp->var->hw_info->reg_start;
e = mpp->var->hw_info->reg_end;
return 0;
}
int mpp_task_dump_reg(struct mpp_dev *mpp,
struct mpp_task *task)
{
u32 i, s, e;
if (!task)
return -EIO;
mpp_err("--- dump register ---\n");
if (task->reg) {
s = task->hw_info->reg_start;
e = task->hw_info->reg_end;
for (i = s; i <= e; i++) {
u32 reg = i * sizeof(u32);
mpp_err("reg[%03d]: %04x: 0x%08x\n",
i, reg, task->reg[i]);
}
}
return 0;
}
static int mpp_iommu_handle(struct iommu_domain *iommu,
struct device *iommu_dev,
unsigned long iova,
int status, void *arg)
{
u32 i, s, e;
struct mpp_dev *mpp = (struct mpp_dev *)arg;
struct mpp_task *task = mpp->cur_task;
dev_err(mpp->dev, "fault addr 0x%08lx status %x\n", iova, status);
if (!task)
return -EIO;
mpp_task_dump_mem_region(mpp, task);
s = task->hw_info->reg_start;
e = task->hw_info->reg_end;
mpp_err("--- dump register ---\n");
for (i = s; i <= e; i++) {
u32 reg = i * sizeof(u32);
mpp_err("reg[%3d]: %08x\n",
i, readl_relaxed(mpp->reg_base + reg));
mpp_err("reg[%03d]: %04x: 0x%08x\n",
i, reg, readl_relaxed(mpp->reg_base + reg));
}
if (mpp->iommu_info->hdl)

View File

@@ -248,6 +248,9 @@ struct mpp_task {
/* record context running start time */
struct timeval start;
/* hardware info for current task */
struct mpp_hw_info *hw_info;
u32 *reg;
};
struct mpp_taskqueue {
@@ -378,6 +381,10 @@ int mpp_task_finish(struct mpp_session *session,
struct mpp_task *task);
int mpp_task_finalize(struct mpp_session *session,
struct mpp_task *task);
int mpp_task_dump_mem_region(struct mpp_dev *mpp,
struct mpp_task *task);
int mpp_task_dump_reg(struct mpp_dev *mpp,
struct mpp_task *task);
int mpp_dev_probe(struct mpp_dev *mpp,
struct platform_device *pdev);
@@ -407,7 +414,8 @@ static inline int mpp_write(struct mpp_dev *mpp, u32 reg, u32 val)
{
int idx = reg / sizeof(u32);
mpp_debug(DEBUG_SET_REG, "write reg[%3d]: %08x: %08x\n", idx, reg, val);
mpp_debug(DEBUG_SET_REG,
"write reg[%03d]: %04x: 0x%08x\n", idx, reg, val);
writel(val, mpp->reg_base + reg);
return 0;
@@ -417,7 +425,8 @@ static inline int mpp_write_relaxed(struct mpp_dev *mpp, u32 reg, u32 val)
{
int idx = reg / sizeof(u32);
mpp_debug(DEBUG_SET_REG, "write reg[%3d]: %08x: %08x\n", idx, reg, val);
mpp_debug(DEBUG_SET_REG,
"write reg[%03d]: %04x: 0x%08x\n", idx, reg, val);
writel_relaxed(val, mpp->reg_base + reg);
return 0;
@@ -429,7 +438,8 @@ static inline u32 mpp_read(struct mpp_dev *mpp, u32 reg)
int idx = reg / sizeof(u32);
val = readl(mpp->reg_base + reg);
mpp_debug(DEBUG_GET_REG, "read reg[%3d]: %08x: %08x\n", idx, reg, val);
mpp_debug(DEBUG_GET_REG,
"read reg[%03d]: %04x: 0x%08x\n", idx, reg, val);
return val;
}
@@ -440,7 +450,8 @@ static inline u32 mpp_read_relaxed(struct mpp_dev *mpp, u32 reg)
int idx = reg / sizeof(u32);
val = readl_relaxed(mpp->reg_base + reg);
mpp_debug(DEBUG_GET_REG, "read reg[%3d] %08x: %08x\n", idx, reg, val);
mpp_debug(DEBUG_GET_REG,
"read reg[%03d] %04x: 0x%08x\n", idx, reg, val);
return val;
}

View File

@@ -209,12 +209,14 @@ struct mpp_dma_buffer *mpp_dma_import_fd(struct mpp_iommu_info *iommu_info,
attach = dma_buf_attach(buffer->dmabuf, dma->dev);
if (IS_ERR(attach)) {
mpp_err("dma_buf_attach fd %d failed\n", fd);
ret = PTR_ERR(attach);
goto fail_attach;
}
sgt = dma_buf_map_attachment(attach, buffer->dir);
if (IS_ERR(sgt)) {
mpp_err("dma_buf_map_attachment fd %d failed\n", fd);
ret = PTR_ERR(sgt);
goto fail_map;
}

View File

@@ -136,7 +136,6 @@ enum RKVDEC_HW_ID {
struct rkvdec_task {
struct mpp_task mpp_task;
struct mpp_hw_info *hw_info;
unsigned long aclk_freq;
unsigned long clk_core_freq;
@@ -745,6 +744,7 @@ static int rkvdec_extract_task_msg(struct rkvdec_task *task,
int ret;
struct mpp_request *req;
struct reg_offset_info *off_inf = &task->off_inf;
struct mpp_hw_info *hw_info = task->mpp_task.hw_info;
for (i = 0; i < msgs->req_cnt; i++) {
u32 off_s, off_e;
@@ -755,8 +755,8 @@ static int rkvdec_extract_task_msg(struct rkvdec_task *task,
switch (req->cmd) {
case MPP_CMD_SET_REG_WRITE: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -770,8 +770,8 @@ static int rkvdec_extract_task_msg(struct rkvdec_task *task,
req, sizeof(*req));
} break;
case MPP_CMD_SET_REG_READ: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -808,6 +808,7 @@ static void *rkvdec_alloc_task(struct mpp_session *session,
struct mpp_task_msgs *msgs)
{
int ret;
struct mpp_task *mpp_task = NULL;
struct rkvdec_task *task = NULL;
struct mpp_dev *mpp = session->mpp;
@@ -817,8 +818,10 @@ static void *rkvdec_alloc_task(struct mpp_session *session,
if (!task)
return NULL;
mpp_task_init(session, &task->mpp_task);
task->hw_info = mpp->var->hw_info;
mpp_task = &task->mpp_task;
mpp_task_init(session, mpp_task);
mpp_task->hw_info = mpp->var->hw_info;
mpp_task->reg = task->reg;
/* extract reqs for current task */
ret = rkvdec_extract_task_msg(task, msgs);
if (ret)
@@ -839,10 +842,12 @@ static void *rkvdec_alloc_task(struct mpp_session *session,
mpp_debug_leave();
return &task->mpp_task;
return mpp_task;
fail:
mpp_task_finalize(session, &task->mpp_task);
mpp_task_dump_mem_region(mpp, mpp_task);
mpp_task_dump_reg(mpp, mpp_task);
mpp_task_finalize(session, mpp_task);
kfree(task);
return NULL;
}
@@ -874,7 +879,7 @@ static int rkvdec_run(struct mpp_dev *mpp,
dec = to_rkvdec_dev(mpp);
task = to_rkvdec_task(mpp_task);
reg_en = task->hw_info->reg_en;
reg_en = mpp_task->hw_info->reg_en;
switch (dec->state) {
case RKVDEC_STATE_NORMAL: {
u32 reg;

View File

@@ -118,7 +118,6 @@ enum RKVENC_MODE {
struct rkvenc_task {
struct mpp_task mpp_task;
struct mpp_hw_info *hw_info;
int link_flags;
int fmt;
@@ -294,8 +293,8 @@ static void *rkvenc_alloc_task(struct mpp_session *session,
struct mpp_task_msgs *msgs)
{
int ret;
struct rkvenc_task *task;
struct mpp_task *mpp_task = NULL;
struct rkvenc_task *task = NULL;
struct mpp_dev *mpp = session->mpp;
mpp_debug_enter();
@@ -304,9 +303,10 @@ static void *rkvenc_alloc_task(struct mpp_session *session,
if (!task)
return NULL;
mpp_task_init(session, &task->mpp_task);
task->hw_info = mpp->var->hw_info;
mpp_task = &task->mpp_task;
mpp_task_init(session, mpp_task);
mpp_task->hw_info = mpp->var->hw_info;
mpp_task->reg = task->reg;
/* extract reqs for current task */
ret = rkvenc_extract_task_msg(task, msgs);
if (ret)
@@ -314,21 +314,23 @@ static void *rkvenc_alloc_task(struct mpp_session *session,
/* process fd in register */
if (!(msgs->flags & MPP_FLAGS_REG_FD_NO_TRANS)) {
ret = mpp_translate_reg_address(session,
&task->mpp_task, task->fmt,
mpp_task, task->fmt,
task->reg, &task->off_inf);
if (ret)
goto fail;
mpp_translate_reg_offset_info(&task->mpp_task,
mpp_translate_reg_offset_info(mpp_task,
&task->off_inf, task->reg);
}
task->link_mode = RKVENC_MODE_ONEFRAME;
mpp_debug_leave();
return &task->mpp_task;
return mpp_task;
fail:
mpp_task_finalize(session, &task->mpp_task);
mpp_task_dump_mem_region(mpp, mpp_task);
mpp_task_dump_reg(mpp, mpp_task);
mpp_task_finalize(session, mpp_task);
kfree(task);
return NULL;
}
@@ -380,7 +382,7 @@ static int rkvenc_run(struct mpp_dev *mpp,
case RKVENC_MODE_ONEFRAME: {
int i;
struct mpp_request *req;
u32 reg_en = task->hw_info->reg_en;
u32 reg_en = mpp_task->hw_info->reg_en;
/*
* Tips: ensure osd plt clock is 0 before setting register,

View File

@@ -97,7 +97,6 @@ enum VPUD1_HW_ID {
struct vdpu_task {
struct mpp_task mpp_task;
struct mpp_hw_info *hw_info;
/* enable of post process */
bool pp_enable;
@@ -285,6 +284,7 @@ static int vdpu_extract_task_msg(struct vdpu_task *task,
int ret;
struct mpp_request *req;
struct reg_offset_info *off_inf = &task->off_inf;
struct mpp_hw_info *hw_info = task->mpp_task.hw_info;
for (i = 0; i < msgs->req_cnt; i++) {
u32 off_s, off_e;
@@ -295,8 +295,8 @@ static int vdpu_extract_task_msg(struct vdpu_task *task,
switch (req->cmd) {
case MPP_CMD_SET_REG_WRITE: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -310,8 +310,8 @@ static int vdpu_extract_task_msg(struct vdpu_task *task,
req, sizeof(*req));
} break;
case MPP_CMD_SET_REG_READ: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -348,7 +348,8 @@ static void *vdpu_alloc_task(struct mpp_session *session,
struct mpp_task_msgs *msgs)
{
int ret;
struct vdpu_task *task;
struct mpp_task *mpp_task = NULL;
struct vdpu_task *task = NULL;
struct mpp_dev *mpp = session->mpp;
mpp_debug_enter();
@@ -357,14 +358,15 @@ static void *vdpu_alloc_task(struct mpp_session *session,
if (!task)
return NULL;
mpp_task_init(session, &task->mpp_task);
mpp_task = &task->mpp_task;
mpp_task_init(session, mpp_task);
if (session->device_type == MPP_DEVICE_VDPU1_PP) {
task->pp_enable = true;
task->hw_info = &vdpu_pp_v1_hw_info;
mpp_task->hw_info = &vdpu_pp_v1_hw_info;
} else {
task->hw_info = mpp->var->hw_info;
mpp_task->hw_info = mpp->var->hw_info;
}
mpp_task->reg = task->reg;
/* extract reqs for current task */
ret = vdpu_extract_task_msg(task, msgs);
if (ret)
@@ -379,10 +381,12 @@ static void *vdpu_alloc_task(struct mpp_session *session,
mpp_debug_leave();
return &task->mpp_task;
return mpp_task;
fail:
mpp_task_finalize(session, &task->mpp_task);
mpp_task_dump_mem_region(mpp, mpp_task);
mpp_task_dump_reg(mpp, mpp_task);
mpp_task_finalize(session, mpp_task);
kfree(task);
return NULL;
}
@@ -405,7 +409,7 @@ static int vdpu_run(struct mpp_dev *mpp,
/* clear cache */
mpp_write_relaxed(mpp, VDPU1_REG_CLR_CACHE_BASE, 1);
/* set registers for hardware */
reg_en = task->hw_info->reg_en;
reg_en = mpp_task->hw_info->reg_en;
for (i = 0; i < task->w_req_cnt; i++) {
struct mpp_request *req = &task->w_reqs[i];
int s = req->offset / sizeof(u32);

View File

@@ -83,9 +83,6 @@
struct vdpu_task {
struct mpp_task mpp_task;
struct mpp_hw_info *hw_info;
/* enable of post process */
bool pp_enable;
unsigned long aclk_freq;
u32 reg[VDPU2_REG_NUM];
@@ -244,6 +241,7 @@ static int vdpu_extract_task_msg(struct vdpu_task *task,
int ret;
struct mpp_request *req;
struct reg_offset_info *off_inf = &task->off_inf;
struct mpp_hw_info *hw_info = task->mpp_task.hw_info;
for (i = 0; i < msgs->req_cnt; i++) {
u32 off_s, off_e;
@@ -254,8 +252,8 @@ static int vdpu_extract_task_msg(struct vdpu_task *task,
switch (req->cmd) {
case MPP_CMD_SET_REG_WRITE: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -269,8 +267,8 @@ static int vdpu_extract_task_msg(struct vdpu_task *task,
req, sizeof(*req));
} break;
case MPP_CMD_SET_REG_READ: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -307,6 +305,7 @@ static void *vdpu_alloc_task(struct mpp_session *session,
struct mpp_task_msgs *msgs)
{
int ret;
struct mpp_task *mpp_task = NULL;
struct vdpu_task *task = NULL;
struct mpp_dev *mpp = session->mpp;
@@ -316,8 +315,10 @@ static void *vdpu_alloc_task(struct mpp_session *session,
if (!task)
return NULL;
mpp_task_init(session, &task->mpp_task);
task->hw_info = mpp->var->hw_info;
mpp_task = &task->mpp_task;
mpp_task_init(session, mpp_task);
mpp_task->hw_info = mpp->var->hw_info;
mpp_task->reg = task->reg;
/* extract reqs for current task */
ret = vdpu_extract_task_msg(task, msgs);
if (ret)
@@ -332,10 +333,12 @@ static void *vdpu_alloc_task(struct mpp_session *session,
mpp_debug_leave();
return &task->mpp_task;
return mpp_task;
fail:
mpp_task_finalize(session, &task->mpp_task);
mpp_task_dump_mem_region(mpp, mpp_task);
mpp_task_dump_reg(mpp, mpp_task);
mpp_task_finalize(session, mpp_task);
kfree(task);
return NULL;
}
@@ -358,7 +361,7 @@ static int vdpu_run(struct mpp_dev *mpp,
/* clear cache */
mpp_write_relaxed(mpp, VDPU2_REG_CLR_CACHE_BASE, 1);
/* set registers for hardware */
reg_en = task->hw_info->reg_en;
reg_en = mpp_task->hw_info->reg_en;
for (i = 0; i < task->w_req_cnt; i++) {
struct mpp_request *req = &task->w_reqs[i];
int s = req->offset / sizeof(u32);

View File

@@ -68,7 +68,6 @@
struct vepu_task {
struct mpp_task mpp_task;
struct mpp_hw_info *hw_info;
unsigned long aclk_freq;
u32 reg[VEPU1_REG_NUM];
@@ -160,6 +159,7 @@ static int vepu_extract_task_msg(struct vepu_task *task,
int ret;
struct mpp_request *req;
struct reg_offset_info *off_inf = &task->off_inf;
struct mpp_hw_info *hw_info = task->mpp_task.hw_info;
for (i = 0; i < msgs->req_cnt; i++) {
u32 off_s, off_e;
@@ -170,8 +170,8 @@ static int vepu_extract_task_msg(struct vepu_task *task,
switch (req->cmd) {
case MPP_CMD_SET_REG_WRITE: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -185,8 +185,8 @@ static int vepu_extract_task_msg(struct vepu_task *task,
req, sizeof(*req));
} break;
case MPP_CMD_SET_REG_READ: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -223,6 +223,7 @@ static void *vepu_alloc_task(struct mpp_session *session,
struct mpp_task_msgs *msgs)
{
int ret;
struct mpp_task *mpp_task = NULL;
struct vepu_task *task = NULL;
struct mpp_dev *mpp = session->mpp;
@@ -232,8 +233,10 @@ static void *vepu_alloc_task(struct mpp_session *session,
if (!task)
return NULL;
mpp_task_init(session, &task->mpp_task);
task->hw_info = mpp->var->hw_info;
mpp_task = &task->mpp_task;
mpp_task_init(session, mpp_task);
mpp_task->hw_info = mpp->var->hw_info;
mpp_task->reg = task->reg;
/* extract reqs for current task */
ret = vepu_extract_task_msg(task, msgs);
if (ret)
@@ -247,10 +250,12 @@ static void *vepu_alloc_task(struct mpp_session *session,
mpp_debug_leave();
return &task->mpp_task;
return mpp_task;
fail:
mpp_task_finalize(session, &task->mpp_task);
mpp_task_dump_mem_region(mpp, mpp_task);
mpp_task_dump_reg(mpp, mpp_task);
mpp_task_finalize(session, mpp_task);
kfree(task);
return NULL;
}
@@ -273,7 +278,7 @@ static int vepu_run(struct mpp_dev *mpp,
/* clear cache */
mpp_write_relaxed(mpp, VEPU1_REG_CLR_CACHE_BASE, 1);
/* set registers for hardware */
reg_en = task->hw_info->reg_en;
reg_en = mpp_task->hw_info->reg_en;
/* First, flush correct encoder format */
mpp_write_relaxed(mpp, VEPU1_REG_ENC_EN,
task->reg[reg_en] & VEPU1_FORMAT_MASK);

View File

@@ -77,7 +77,6 @@
struct vepu_task {
struct mpp_task mpp_task;
struct mpp_hw_info *hw_info;
unsigned long aclk_freq;
u32 reg[VEPU2_REG_NUM];
@@ -169,6 +168,7 @@ static int vepu_extract_task_msg(struct vepu_task *task,
int ret;
struct mpp_request *req;
struct reg_offset_info *off_inf = &task->off_inf;
struct mpp_hw_info *hw_info = task->mpp_task.hw_info;
for (i = 0; i < msgs->req_cnt; i++) {
u32 off_s, off_e;
@@ -179,8 +179,8 @@ static int vepu_extract_task_msg(struct vepu_task *task,
switch (req->cmd) {
case MPP_CMD_SET_REG_WRITE: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -194,8 +194,8 @@ static int vepu_extract_task_msg(struct vepu_task *task,
req, sizeof(*req));
} break;
case MPP_CMD_SET_REG_READ: {
off_s = task->hw_info->reg_start * sizeof(u32);
off_e = task->hw_info->reg_end * sizeof(u32);
off_s = hw_info->reg_start * sizeof(u32);
off_e = hw_info->reg_end * sizeof(u32);
ret = mpp_check_req(req, 0, sizeof(task->reg),
off_s, off_e);
if (ret)
@@ -232,6 +232,7 @@ static void *vepu_alloc_task(struct mpp_session *session,
struct mpp_task_msgs *msgs)
{
int ret;
struct mpp_task *mpp_task = NULL;
struct vepu_task *task = NULL;
struct mpp_dev *mpp = session->mpp;
@@ -241,8 +242,10 @@ static void *vepu_alloc_task(struct mpp_session *session,
if (!task)
return NULL;
mpp_task_init(session, &task->mpp_task);
task->hw_info = mpp->var->hw_info;
mpp_task = &task->mpp_task;
mpp_task_init(session, mpp_task);
mpp_task->hw_info = mpp->var->hw_info;
mpp_task->reg = task->reg;
/* extract reqs for current task */
ret = vepu_extract_task_msg(task, msgs);
if (ret)
@@ -256,10 +259,12 @@ static void *vepu_alloc_task(struct mpp_session *session,
mpp_debug_leave();
return &task->mpp_task;
return mpp_task;
fail:
mpp_task_finalize(session, &task->mpp_task);
mpp_task_dump_mem_region(mpp, mpp_task);
mpp_task_dump_reg(mpp, mpp_task);
mpp_task_finalize(session, mpp_task);
kfree(task);
return NULL;
}
@@ -282,7 +287,7 @@ static int vepu_run(struct mpp_dev *mpp,
/* clear cache */
mpp_write_relaxed(mpp, VEPU2_REG_CLR_CACHE_BASE, 1);
reg_en = task->hw_info->reg_en;
reg_en = mpp_task->hw_info->reg_en;
/* First, flush correct encoder format */
mpp_write_relaxed(mpp, VEPU2_REG_ENC_EN,
task->reg[reg_en] & VEPU2_FORMAT_MASK);