]> git.proxmox.com Git - pve-kernel.git/blobdiff - 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
diff --git a/patches/kernel/0011-drm-simpledrm-Request-memory-region-in-driver.patch b/patches/kernel/0011-drm-simpledrm-Request-memory-region-in-driver.patch
new file mode 100644 (file)
index 0000000..4249147
--- /dev/null
@@ -0,0 +1,63 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Thomas Zimmermann <tzimmermann@suse.de>
+Date: Tue, 25 Jan 2022 10:12:20 +0100
+Subject: [PATCH] drm/simpledrm: Request memory region in driver
+
+Requesting the framebuffer memory in simpledrm marks the memory
+range as busy. This used to be done by the firmware sysfb code,
+but the driver is the correct place.
+
+v2:
+       * use I/O memory if request_mem_region() fails (Jocelyn)
+
+Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
+Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
+Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
+Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
+---
+ drivers/gpu/drm/tiny/simpledrm.c | 22 +++++++++++++++++-----
+ 1 file changed, 17 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/tiny/simpledrm.c b/drivers/gpu/drm/tiny/simpledrm.c
+index 3e3f9ba1e885..806fdc3237b3 100644
+--- a/drivers/gpu/drm/tiny/simpledrm.c
++++ b/drivers/gpu/drm/tiny/simpledrm.c
+@@ -525,21 +525,33 @@ static int simpledrm_device_init_mm(struct simpledrm_device *sdev)
+ {
+       struct drm_device *dev = &sdev->dev;
+       struct platform_device *pdev = sdev->pdev;
+-      struct resource *mem;
++      struct resource *res, *mem;
+       void __iomem *screen_base;
+       int ret;
+-      mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+-      if (!mem)
++      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++      if (!res)
+               return -EINVAL;
+-      ret = devm_aperture_acquire_from_firmware(dev, mem->start, resource_size(mem));
++      ret = devm_aperture_acquire_from_firmware(dev, res->start, resource_size(res));
+       if (ret) {
+               drm_err(dev, "could not acquire memory range %pr: error %d\n",
+-                      mem, ret);
++                      res, ret);
+               return ret;
+       }
++      mem = devm_request_mem_region(&pdev->dev, res->start, resource_size(res),
++                                    sdev->dev.driver->name);
++      if (!mem) {
++              /*
++               * We cannot make this fatal. Sometimes this comes from magic
++               * spaces our resource handlers simply don't know about. Use
++               * the I/O-memory resource as-is and try to map that instead.
++               */
++              drm_warn(dev, "could not acquire memory region %pr\n", res);
++              mem = res;
++      }
++
+       screen_base = devm_ioremap_wc(&pdev->dev, mem->start,
+                                     resource_size(mem));
+       if (!screen_base)