From 072de836f53be56a70cecf70b43ae43b7ce17376 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 10:08:36 +0000
Subject: [PATCH] mk-rootfs.sh
---
kernel/drivers/video/rockchip/rga3/rga_policy.c | 72 ++++++++++++++++++++++++++++++++++++
1 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/kernel/drivers/video/rockchip/rga3/rga_policy.c b/kernel/drivers/video/rockchip/rga3/rga_policy.c
index 4e26797..1afab89 100644
--- a/kernel/drivers/video/rockchip/rga3/rga_policy.c
+++ b/kernel/drivers/video/rockchip/rga3/rga_policy.c
@@ -46,6 +46,53 @@
return feature;
}
+static bool rga_check_csc_constant(const struct rga_hw_data *data, struct rga_req *rga_base,
+ uint32_t mode, uint32_t flag)
+{
+ if (mode & flag)
+ return true;
+
+ if ((rga_base->full_csc.flag & 0x1) && (data->feature & RGA_FULL_CSC))
+ return true;
+
+ return false;
+}
+
+static bool rga_check_csc(const struct rga_hw_data *data, struct rga_req *rga_base)
+{
+ switch (rga_base->yuv2rgb_mode) {
+ case 0x1:
+ return rga_check_csc_constant(data, rga_base,
+ data->csc_y2r_mode, RGA_MODE_CSC_BT601L);
+ case 0x2:
+ return rga_check_csc_constant(data, rga_base,
+ data->csc_y2r_mode, RGA_MODE_CSC_BT601F);
+ case 0x3:
+ return rga_check_csc_constant(data, rga_base,
+ data->csc_y2r_mode, RGA_MODE_CSC_BT709);
+ case 0x1 << 2:
+ return rga_check_csc_constant(data, rga_base,
+ data->csc_r2y_mode, RGA_MODE_CSC_BT601F);
+ case 0x2 << 2:
+ return rga_check_csc_constant(data, rga_base,
+ data->csc_r2y_mode, RGA_MODE_CSC_BT601L);
+ case 0x3 << 2:
+ return rga_check_csc_constant(data, rga_base,
+ data->csc_r2y_mode, RGA_MODE_CSC_BT709);
+ default:
+ break;
+ }
+
+ if ((rga_base->full_csc.flag & 0x1)) {
+ if (data->feature & RGA_FULL_CSC)
+ return true;
+ else
+ return false;
+ }
+
+ return true;
+}
+
static bool rga_check_resolution(const struct rga_rect_range *range, int width, int height)
{
if (width > range->max.width || height > range->max.height)
@@ -118,6 +165,12 @@
if (!rga_check_resolution(&data->input_range, src0->act_w, src0->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))
+ return false;
+
if (!rga_check_format(data, src0->rd_mode, src0->format, 0))
return false;
@@ -133,6 +186,12 @@
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;
@@ -146,6 +205,12 @@
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))
@@ -306,6 +371,13 @@
continue;
}
+ if (!rga_check_csc(data, rga_base)) {
+ if (DEBUGGER_EN(MSG))
+ pr_info("core = %d, break on rga_check_csc",
+ scheduler->core);
+ continue;
+ }
+
optional_cores |= scheduler->core;
}
--
Gitblit v1.6.2