136 lines
3.7 KiB
Diff
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
|
|
|