video: rockchip: rga3: Add debug log when assign cores

Change-Id: I9e601fa14da96224acb68ced88ac4580b32b6822
Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
This commit is contained in:
Yu Qiaowei
2024-01-29 14:33:20 +08:00
committed by Tao Huang
parent e601ffeb04
commit 14e857ea06
2 changed files with 92 additions and 73 deletions

View File

@@ -1761,11 +1761,13 @@ static int rga3_scale_check(const struct rga3_req *req)
win0_dah = req->win0.dst_act_h;
if (((win0_saw >> 3) > win0_daw) || ((win0_sah >> 3) > win0_dah)) {
pr_info("win0 unsupported to scaling less than 1/8 times.\n");
pr_info("win0 unsupported to scaling less than 1/8 times. src[%d, %d], dst[%d, %d]\n",
win0_saw, win0_sah, win0_daw, win0_dah);
return -EINVAL;
}
if (((win0_daw >> 3) > win0_saw) || ((win0_dah >> 3) > win0_sah)) {
pr_info("win0 unsupported to scaling more than 8 times.\n");
pr_info("win0 unsupported to scaling more than 8 times. src[%d, %d], dst[%d, %d]\n",
win0_saw, win0_sah, win0_daw, win0_dah);
return -EINVAL;
}
@@ -1776,11 +1778,13 @@ static int rga3_scale_check(const struct rga3_req *req)
win1_dah = req->win1.dst_act_h;
if (((win1_saw >> 3) > win1_daw) || ((win1_sah >> 3) > win1_dah)) {
pr_info("win1 unsupported to scaling less than 1/8 times.\n");
pr_info("win1 unsupported to scaling less than 1/8 times. src[%d, %d], dst[%d, %d]\n",
win1_saw, win1_sah, win1_daw, win1_dah);
return -EINVAL;
}
if (((win1_daw >> 3) > win1_saw) || ((win1_dah >> 3) > win1_sah)) {
pr_info("win1 unsupported to scaling more than 8 times.\n");
pr_info("win1 unsupported to scaling more than 8 times. src[%d, %d], dst[%d, %d]\n",
win1_saw, win1_sah, win1_daw, win1_dah);
return -EINVAL;
}
}

View File

@@ -161,65 +161,55 @@ static bool rga_check_align(uint32_t byte_stride_align, uint32_t format, uint16_
return false;
}
static bool rga_check_src0(const struct rga_hw_data *data,
struct rga_img_info_t *src0)
static bool rga_check_channel(const struct rga_hw_data *data,
struct rga_img_info_t *img,
const char *name, int input, int win_num)
{
if (!rga_check_resolution(&data->input_range, src0->act_w, src0->act_h))
const struct rga_rect_range *range;
if (input)
range = &data->input_range;
else
range = &data->output_range;
if (!rga_check_resolution(range, img->act_w, img->act_h)) {
if (DEBUGGER_EN(MSG))
pr_info("%s resolution check error, input range[%dx%d ~ %dx%d], [w,h] = [%d, %d]\n",
name,
data->input_range.min.width, data->input_range.min.height,
data->input_range.max.width, data->input_range.max.height,
img->act_w, img->act_h);
return false;
}
if (data == &rga3_data &&
!rga_check_resolution(&data->input_range,
src0->act_w + src0->x_offset,
src0->act_h + src0->y_offset))
img->act_w + img->x_offset,
img->act_h + img->y_offset)) {
if (DEBUGGER_EN(MSG))
pr_info("%s RGA3 resolution check error, input range[%dx%d ~ %dx%d], [w+x,h+y] = [%d, %d]\n",
name,
data->input_range.min.width, data->input_range.min.height,
data->input_range.max.width, data->input_range.max.height,
img->act_w + img->x_offset,
img->act_h + img->y_offset);
return false;
}
if (!rga_check_format(data, src0->rd_mode, src0->format, 0))
if (!rga_check_format(data, img->rd_mode, img->format, win_num)) {
if (DEBUGGER_EN(MSG))
pr_info("%s format check error, mode = %#x, format = %#x\n",
name, img->rd_mode, img->format);
return false;
}
if (!rga_check_align(data->byte_stride_align, src0->format, src0->vir_w))
return false;
return true;
}
static bool rga_check_src1(const struct rga_hw_data *data,
struct rga_img_info_t *src1)
{
if (!rga_check_resolution(&data->input_range, src1->act_w, src1->act_h))
return false;
if (data == &rga3_data &&
!rga_check_resolution(&data->input_range,
src1->act_w + src1->x_offset,
src1->act_h + src1->y_offset))
return false;
if (!rga_check_format(data, src1->rd_mode, src1->format, 1))
return false;
if (!rga_check_align(data->byte_stride_align, src1->format, src1->vir_w))
return false;
return true;
}
static bool rga_check_dst(const struct rga_hw_data *data,
struct rga_img_info_t *dst)
{
if (!rga_check_resolution(&data->output_range, dst->act_w, dst->act_h))
return false;
if (data == &rga3_data &&
!rga_check_resolution(&data->output_range,
dst->act_w + dst->x_offset,
dst->act_h + dst->y_offset))
return false;
if (!rga_check_format(data, dst->rd_mode, dst->format, 2))
return false;
if (!rga_check_align(data->byte_stride_align, dst->format, dst->vir_w))
if (!rga_check_align(data->byte_stride_align, img->format, img->vir_w)) {
if (DEBUGGER_EN(MSG))
pr_info("%s align check error, byte_stride_align[%d], format[%#x], vir_w[%d]\n",
name, data->byte_stride_align, img->format, img->vir_w);
return false;
}
return true;
}
@@ -247,21 +237,28 @@ static bool rga_check_scale(const struct rga_hw_data *data,
if (sw > dw) {
if ((sw >> data->max_downscale_factor) > dw)
return false;
goto check_error;
} else if (sw < dw) {
if ((sw << data->max_upscale_factor) < dw)
return false;
goto check_error;
}
if (sh > dh) {
if ((sh >> data->max_downscale_factor) > dh)
return false;
goto check_error;
} else if (sh < dh) {
if ((sh << data->max_upscale_factor) < dh)
return false;
goto check_error;
}
return true;
check_error:
if (DEBUGGER_EN(MSG))
pr_info("scale check error, scale limit[1/%d ~ %d], src[%d, %d], dst[%d, %d]\n",
(1 << data->max_downscale_factor), (1 << data->max_upscale_factor),
sw, sh, dw, dh);
return false;
}
int rga_job_assign(struct rga_job *job)
@@ -315,7 +312,7 @@ int rga_job_assign(struct rga_job *job)
if (feature > 0) {
if (!(feature & data->feature)) {
if (DEBUGGER_EN(MSG))
pr_info("core = %d, break on feature",
pr_info("core = %d, break on feature\n",
scheduler->core);
continue;
}
@@ -324,20 +321,38 @@ int rga_job_assign(struct rga_job *job)
/* only colorfill need single win (colorpalette?) */
if (!(feature & 1)) {
if (src1->yrgb_addr > 0) {
if ((!(src0->rd_mode & data->win[0].rd_mode)) ||
(!(src1->rd_mode & data->win[1].rd_mode)) ||
(!(dst->rd_mode & data->win[2].rd_mode))) {
if (!(src0->rd_mode & data->win[0].rd_mode)) {
if (DEBUGGER_EN(MSG))
pr_info("core = %d, ABC break on rd_mode",
scheduler->core);
pr_info("core[%#x], src0 break on rd_mode[%#x]\n",
scheduler->core, src0->rd_mode);
continue;
}
if (!(src1->rd_mode & data->win[1].rd_mode)) {
if (DEBUGGER_EN(MSG))
pr_info("core[%#x], src1 break on rd_mode[%#x]\n",
scheduler->core, src1->rd_mode);
continue;
}
if (!(dst->rd_mode & data->win[2].rd_mode)) {
if (DEBUGGER_EN(MSG))
pr_info("core[%#x], dst break on rd_mode[%#x]\n",
scheduler->core, dst->rd_mode);
continue;
}
} else {
if ((!(src0->rd_mode & data->win[0].rd_mode)) ||
(!(dst->rd_mode & data->win[2].rd_mode))) {
if (!(src0->rd_mode & data->win[0].rd_mode)) {
if (DEBUGGER_EN(MSG))
pr_info("core = %d, ABB break on rd_mode",
scheduler->core);
pr_info("core[%#x], src break on rd_mode[%#x]\n",
scheduler->core, src0->rd_mode);
continue;
}
if (!(dst->rd_mode & data->win[2].rd_mode)) {
if (DEBUGGER_EN(MSG))
pr_info("core[%#x], dst break on rd_mode[%#x]\n",
scheduler->core, dst->rd_mode);
continue;
}
}
@@ -349,26 +364,26 @@ int rga_job_assign(struct rga_job *job)
continue;
}
if (!rga_check_src0(data, src0)) {
if (!rga_check_channel(data, src0, "src0", true, 0)) {
if (DEBUGGER_EN(MSG))
pr_info("core = %d, break on rga_check_src0",
pr_info("core = %d, break on src0",
scheduler->core);
continue;
}
if (src1->yrgb_addr > 0) {
if (!rga_check_src1(data, src1)) {
if (!rga_check_channel(data, src1, "src1", true, 1)) {
if (DEBUGGER_EN(MSG))
pr_info("core = %d, break on rga_check_src1",
pr_info("core = %d, break on src1",
scheduler->core);
continue;
}
}
}
if (!rga_check_dst(data, dst)) {
if (!rga_check_channel(data, dst, "dst", false, 2)) {
if (DEBUGGER_EN(MSG))
pr_info("core = %d, break on rga_check_dst",
pr_info("core = %d, break on dst",
scheduler->core);
continue;
}