From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 08:20:59 +0000
Subject: [PATCH] kernel_5.10 no rt

---
 kernel/drivers/video/rockchip/rga3/rga_policy.c |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/kernel/drivers/video/rockchip/rga3/rga_policy.c b/kernel/drivers/video/rockchip/rga3/rga_policy.c
index 9801e6d..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)
@@ -324,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