kernel/0349-WIN2030-16550-fix-7702-interleave-can-not-display-is.patch
2025-02-27 20:57:56 -05:00

136 lines
3.7 KiB
Diff

From 79318f45a344306f4db1ea78a54197c0d79107df Mon Sep 17 00:00:00 2001
From: lilijun <lilijun@eswincomputing.com>
Date: Thu, 19 Dec 2024 16:51:25 +0800
Subject: [PATCH 349/416] WIN2030-16550:fix:7702 interleave can not display
issue
Changelogs:
1.7702 interleave can not display, reserved memory for display on
its owner die.
2.vo reserve 512M per die, if it's not enough, increase dc_reserved
Change-Id: Ifa544c03c5d8c9ec48898ef4981c385d4814ba1e
Signed-off-by: lilijun <lilijun@eswincomputing.com>
---
.../dts/eswin/eic7702-evb-a1-interleave.dts | 32 ++++++++++++++++---
drivers/gpu/drm/eswin/es_drv.c | 11 ++++++-
2 files changed, 37 insertions(+), 6 deletions(-)
diff --git a/arch/riscv/boot/dts/eswin/eic7702-evb-a1-interleave.dts b/arch/riscv/boot/dts/eswin/eic7702-evb-a1-interleave.dts
index b7ea2eea76cb..8e38dc5e7f59 100644
--- a/arch/riscv/boot/dts/eswin/eic7702-evb-a1-interleave.dts
+++ b/arch/riscv/boot/dts/eswin/eic7702-evb-a1-interleave.dts
@@ -81,16 +81,14 @@ memory@4000000000 {
};
memory@4100000000 {
device_type = "memory";
- reg = <0x41 0x00000000 0x2 0x0>;
+ reg = <0x41 0x00000000 0x1 0xe0000000>;
numa-node-id = <0>;
};
-
- memory@4300000000 {
+ memory@42e0000000 {
device_type = "memory";
- reg = <0x43 0x00000000 0x2 0x0>;
+ reg = <0x42 0xe0000000 0x1 0xe0000000>;
numa-node-id = <1>;
};
-
memory@c0000000 {
device_type = "memory";
reg = <0x00 0xc0000000 0x0 0x40000000>;
@@ -111,6 +109,16 @@ memory@2280000000 {
reg = <0x22 0x80000000 0x1 0x80000000>;
numa-node-id = <1>;
};
+ memory@2e00000000 {
+ device_type = "memory";
+ reg = <0x2 0xe0000000 0x0 0x20000000>;
+ numa-node-id = <0>;
+ };
+ memory@2260000000 {
+ device_type = "memory";
+ reg = <0x22 0x60000000 0x0 0x20000000>;
+ numa-node-id = <1>;
+ };
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
@@ -143,6 +151,18 @@ npu1_reserved: sprammemory@79000000 {
reg = <0x0 0x79000000 0x0 0x400000>;
};
+ d0_dc_reserved: d0_dc_reserved@2e00000000 {
+ compatible = "shared-dma-pool";
+ reusable;
+ reg = <0x2 0xe0000000 0x0 0x20000000>;
+ };
+
+ d1_dc_reserved: d1_dc_reserved@2260000000 {
+ compatible = "shared-dma-pool";
+ reusable;
+ reg = <0x22 0x60000000 0x0 0x20000000>;
+ };
+
// g2d_4GB_boundary_reserved_4k {
// no-map;
// reg = <0x0 0xfffff000 0x0 0x1000>;
@@ -484,10 +504,12 @@ &venc1 {
&video_output {
status = "okay";
+ memory-region = <&d0_dc_reserved>;
};
&d1_video_output {
status = "okay";
+ memory-region = <&d1_dc_reserved>;
};
&dc {
diff --git a/drivers/gpu/drm/eswin/es_drv.c b/drivers/gpu/drm/eswin/es_drv.c
index 1c588106e39c..d29c3572857c 100644
--- a/drivers/gpu/drm/eswin/es_drv.c
+++ b/drivers/gpu/drm/eswin/es_drv.c
@@ -25,6 +25,9 @@
#include <linux/version.h>
#include <linux/of_address.h>
#include <linux/dma-map-ops.h>
+#include <linux/of.h>
+#include <linux/of_reserved_mem.h>
+#include <linux/platform_device.h>
#include <drm/drm_drv.h>
#include <drm/drm_file.h>
@@ -367,10 +370,16 @@ static int es_drm_of_component_probe(struct device *dev,
int i;
bool found = false;
bool matched = false;
+ int ret;
if (!dev->of_node)
return -EINVAL;
+ ret = of_reserved_mem_device_init(dev);
+ if (ret) {
+ dev_info(dev, "No memory-region specified, use system cma, ret:%d\n", ret);
+ }
+
/*
* Bind the crtc's ports first, so that drm_of_find_possible_crtcs()
* called from encoder's .bind callbacks works as expected
@@ -465,7 +474,7 @@ static int es_drm_of_component_probe(struct device *dev,
compare_of, remote);
matched = false;
dev_dbg(dev, "matched: %pOF, remote->name:%s\n",
- remote, remote->name);
+ remote, remote->name);
}
of_node_put(remote);
--
2.47.0