]> git.proxmox.com Git - pve-kernel.git/blame - patches/kernel/0011-drm-simpledrm-Request-memory-region-in-driver.patch
rebase patches on top of Ubuntu-5.15.0-29.30
[pve-kernel.git] / patches / kernel / 0011-drm-simpledrm-Request-memory-region-in-driver.patch
CommitLineData
09d62646
TL
1From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2From: Thomas Zimmermann <tzimmermann@suse.de>
3Date: Tue, 25 Jan 2022 10:12:20 +0100
4Subject: [PATCH] drm/simpledrm: Request memory region in driver
5
6Requesting the framebuffer memory in simpledrm marks the memory
7range as busy. This used to be done by the firmware sysfb code,
8but the driver is the correct place.
9
10v2:
11 * use I/O memory if request_mem_region() fails (Jocelyn)
12
13Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
14Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
15Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
16Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17---
18 drivers/gpu/drm/tiny/simpledrm.c | 22 +++++++++++++++++-----
19 1 file changed, 17 insertions(+), 5 deletions(-)
20
21diff --git a/drivers/gpu/drm/tiny/simpledrm.c b/drivers/gpu/drm/tiny/simpledrm.c
6ef2b41a 22index 3e3f9ba1e885..806fdc3237b3 100644
09d62646
TL
23--- a/drivers/gpu/drm/tiny/simpledrm.c
24+++ b/drivers/gpu/drm/tiny/simpledrm.c
25@@ -525,21 +525,33 @@ static int simpledrm_device_init_mm(struct simpledrm_device *sdev)
26 {
27 struct drm_device *dev = &sdev->dev;
28 struct platform_device *pdev = sdev->pdev;
29- struct resource *mem;
30+ struct resource *res, *mem;
31 void __iomem *screen_base;
32 int ret;
33
34- mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
35- if (!mem)
36+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
37+ if (!res)
38 return -EINVAL;
39
40- ret = devm_aperture_acquire_from_firmware(dev, mem->start, resource_size(mem));
41+ ret = devm_aperture_acquire_from_firmware(dev, res->start, resource_size(res));
42 if (ret) {
43 drm_err(dev, "could not acquire memory range %pr: error %d\n",
44- mem, ret);
45+ res, ret);
46 return ret;
47 }
48
49+ mem = devm_request_mem_region(&pdev->dev, res->start, resource_size(res),
50+ sdev->dev.driver->name);
51+ if (!mem) {
52+ /*
53+ * We cannot make this fatal. Sometimes this comes from magic
54+ * spaces our resource handlers simply don't know about. Use
55+ * the I/O-memory resource as-is and try to map that instead.
56+ */
57+ drm_warn(dev, "could not acquire memory region %pr\n", res);
58+ mem = res;
59+ }
60+
61 screen_base = devm_ioremap_wc(&pdev->dev, mem->start,
62 resource_size(mem));
63 if (!screen_base)