From 9370bb92b2d16684ee45cf24e879c93c509162da Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Thu, 19 Dec 2024 01:47:39 +0000
Subject: [PATCH] add wifi6 8852be driver

---
 kernel/drivers/video/rockchip/mpp/mpp_service.c |  108 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 91 insertions(+), 17 deletions(-)

diff --git a/kernel/drivers/video/rockchip/mpp/mpp_service.c b/kernel/drivers/video/rockchip/mpp/mpp_service.c
index 375f550..c04d6fb 100644
--- a/kernel/drivers/video/rockchip/mpp/mpp_service.c
+++ b/kernel/drivers/video/rockchip/mpp/mpp_service.c
@@ -27,8 +27,22 @@
 #define MPP_CLASS_NAME		"mpp_class"
 #define MPP_SERVICE_NAME	"mpp_service"
 
-#define MPP_REGISTER_DRIVER(srv, X, x) {\
-	if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_##X))\
+#define HAS_RKVDEC	IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVDEC)
+#define HAS_RKVENC	IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVENC)
+#define HAS_VDPU1	IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPU1)
+#define HAS_VEPU1	IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU1)
+#define HAS_VDPU2	IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPU2)
+#define HAS_VEPU2	IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU2)
+#define HAS_VEPU22	IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU22)
+#define HAS_IEP2	IS_ENABLED(CONFIG_ROCKCHIP_MPP_IEP2)
+#define HAS_JPGDEC	IS_ENABLED(CONFIG_ROCKCHIP_MPP_JPGDEC)
+#define HAS_RKVDEC2	IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVDEC2)
+#define HAS_RKVENC2	IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVENC2)
+#define HAS_AV1DEC	IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC)
+#define HAS_VDPP	IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPP)
+
+#define MPP_REGISTER_DRIVER(srv, flag, X, x) {\
+	if (flag)\
 		mpp_add_driver(srv, MPP_DRIVER_##X, &rockchip_##x##_driver, "grf_"#x);\
 	}
 
@@ -85,7 +99,10 @@
 		     &srv->grf_infos[type],
 		     grf_name);
 
-	ret = platform_driver_register(driver);
+	if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC) && type == MPP_DRIVER_AV1DEC)
+		ret = av1dec_driver_register(driver);
+	else
+		ret = platform_driver_register(driver);
 	if (ret)
 		return ret;
 
@@ -97,8 +114,12 @@
 static int mpp_remove_driver(struct mpp_service *srv, int i)
 {
 	if (srv && srv->sub_drivers[i]) {
-		mpp_set_grf(&srv->grf_infos[i]);
-		platform_driver_unregister(srv->sub_drivers[i]);
+		if (i != MPP_DRIVER_AV1DEC) {
+			mpp_set_grf(&srv->grf_infos[i]);
+			platform_driver_unregister(srv->sub_drivers[i]);
+		} else if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC)) {
+			av1dec_driver_unregister(srv->sub_drivers[i]);
+		}
 		srv->sub_drivers[i] = NULL;
 	}
 
@@ -162,6 +183,55 @@
 	return 0;
 }
 
+static int mpp_dump_session(struct mpp_session *session, struct seq_file *s)
+{
+	struct mpp_dma_session *dma = session->dma;
+	struct mpp_dma_buffer *n;
+	struct mpp_dma_buffer *buffer;
+	phys_addr_t end;
+	unsigned long z = 0, t = 0;
+	int i = 0;
+#define K(size) ((unsigned long)((size) >> 10))
+
+	if (!dma)
+		return 0;
+
+	seq_puts(s, "session iova range dump:\n");
+
+	mutex_lock(&dma->list_mutex);
+	list_for_each_entry_safe(buffer, n, &dma->used_list, link) {
+		end = buffer->iova + buffer->size - 1;
+		z = (unsigned long)buffer->size;
+		t += z;
+
+		seq_printf(s, "%4d: ", i++);
+		seq_printf(s, "%pa..%pa (%10lu %s)\n", &buffer->iova, &end,
+			   (z >= 1024) ? (K(z)) : z,
+			   (z >= 1024) ? "KiB" : "Bytes");
+	}
+	i = 0;
+	list_for_each_entry_safe(buffer, n, &dma->unused_list, link) {
+		if (!buffer->dmabuf)
+			continue;
+
+		end = buffer->iova + buffer->size - 1;
+		z = (unsigned long)buffer->size;
+		t += z;
+
+		seq_printf(s, "%4d: ", i++);
+		seq_printf(s, "%pa..%pa (%10lu %s)\n", &buffer->iova, &end,
+			   (z >= 1024) ? (K(z)) : z,
+			   (z >= 1024) ? "KiB" : "Bytes");
+	}
+
+	mutex_unlock(&dma->list_mutex);
+	seq_printf(s, "session: pid=%d index=%d\n", session->pid, session->index);
+	seq_printf(s, " device: %s\n", dev_name(session->mpp->dev));
+	seq_printf(s, " memory: %lu MiB\n", K(K(t)));
+
+	return 0;
+}
+
 static int mpp_show_session_summary(struct seq_file *seq, void *offset)
 {
 	struct mpp_session *session = NULL, *n;
@@ -179,6 +249,8 @@
 		if (!session->mpp)
 			continue;
 		mpp = session->mpp;
+
+		mpp_dump_session(session, seq);
 
 		if (mpp->dev_ops->dump_session)
 			mpp->dev_ops->dump_session(session, seq);
@@ -261,6 +333,7 @@
 	/* show support devices */
 	proc_create_single_data("supports-device", 0444,
 				srv->procfs, mpp_show_support_device, srv);
+	mpp_procfs_create_u32("timing_en", 0644, srv->procfs, &srv->timing_en);
 
 	return 0;
 }
@@ -349,18 +422,19 @@
 	mpp_procfs_init(srv);
 
 	/* register sub drivers */
-	MPP_REGISTER_DRIVER(srv, RKVDEC, rkvdec);
-	MPP_REGISTER_DRIVER(srv, RKVENC, rkvenc);
-	MPP_REGISTER_DRIVER(srv, VDPU1, vdpu1);
-	MPP_REGISTER_DRIVER(srv, VEPU1, vepu1);
-	MPP_REGISTER_DRIVER(srv, VDPU2, vdpu2);
-	MPP_REGISTER_DRIVER(srv, VEPU2, vepu2);
-	MPP_REGISTER_DRIVER(srv, VEPU22, vepu22);
-	MPP_REGISTER_DRIVER(srv, IEP2, iep2);
-	MPP_REGISTER_DRIVER(srv, JPGDEC, jpgdec);
-	MPP_REGISTER_DRIVER(srv, RKVDEC2, rkvdec2);
-	MPP_REGISTER_DRIVER(srv, VDPP, vdpp);
-	MPP_REGISTER_DRIVER(srv, RKVENC2, rkvenc2);
+	MPP_REGISTER_DRIVER(srv, HAS_RKVDEC, RKVDEC, rkvdec);
+	MPP_REGISTER_DRIVER(srv, HAS_RKVENC, RKVENC, rkvenc);
+	MPP_REGISTER_DRIVER(srv, HAS_VDPU1, VDPU1, vdpu1);
+	MPP_REGISTER_DRIVER(srv, HAS_VEPU1, VEPU1, vepu1);
+	MPP_REGISTER_DRIVER(srv, HAS_VDPU2, VDPU2, vdpu2);
+	MPP_REGISTER_DRIVER(srv, HAS_VEPU2, VEPU2, vepu2);
+	MPP_REGISTER_DRIVER(srv, HAS_VEPU22, VEPU22, vepu22);
+	MPP_REGISTER_DRIVER(srv, HAS_IEP2, IEP2, iep2);
+	MPP_REGISTER_DRIVER(srv, HAS_JPGDEC, JPGDEC, jpgdec);
+	MPP_REGISTER_DRIVER(srv, HAS_RKVDEC2, RKVDEC2, rkvdec2);
+	MPP_REGISTER_DRIVER(srv, HAS_RKVENC2, RKVENC2, rkvenc2);
+	MPP_REGISTER_DRIVER(srv, HAS_AV1DEC, AV1DEC, av1dec);
+	MPP_REGISTER_DRIVER(srv, HAS_VDPP, VDPP, vdpp);
 
 	dev_info(dev, "probe success\n");
 

--
Gitblit v1.6.2