]> git.proxmox.com Git - pve-kernel.git/blob - patches/kernel/0011-drm-simpledrm-Request-memory-region-in-driver.patch
add kinetic 22.10 sub module
[pve-kernel.git] / patches / kernel / 0011-drm-simpledrm-Request-memory-region-in-driver.patch
1 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2 From: Thomas Zimmermann <tzimmermann@suse.de>
3 Date: Tue, 25 Jan 2022 10:12:20 +0100
4 Subject: [PATCH] drm/simpledrm: Request memory region in driver
5
6 Requesting the framebuffer memory in simpledrm marks the memory
7 range as busy. This used to be done by the firmware sysfb code,
8 but the driver is the correct place.
9
10 v2:
11 * use I/O memory if request_mem_region() fails (Jocelyn)
12
13 Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
14 Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
15 Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
16 Signed-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
21 diff --git a/drivers/gpu/drm/tiny/simpledrm.c b/drivers/gpu/drm/tiny/simpledrm.c
22 index 3e3f9ba1e885..806fdc3237b3 100644
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)