mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 15:02:32 +00:00
e4af991220
All patches automatically rebased. Build system: x86_64 Build-tested: bcm2711/RPi4B, mt7622/RT3200 Run-tested: bcm2711/RPi4B, mt7622/RT3200 Signed-off-by: John Audia <therealgraysky@proton.me>
87 lines
2.8 KiB
Diff
87 lines
2.8 KiB
Diff
From 4899d3181465e16d548af03b7825c4b06e0f0e44 Mon Sep 17 00:00:00 2001
|
|
From: Dom Cobley <popcornmix@gmail.com>
|
|
Date: Thu, 28 Apr 2022 16:11:34 +0100
|
|
Subject: [PATCH] Revert "fbdev: Hot-unplug firmware fb devices on
|
|
forced removal"
|
|
|
|
This reverts commit c894ac44786cfed383a6c6b20c1bfb12eb96018a.
|
|
---
|
|
drivers/video/fbdev/core/fbmem.c | 29 +++--------------------------
|
|
include/linux/fb.h | 1 -
|
|
2 files changed, 3 insertions(+), 27 deletions(-)
|
|
|
|
--- a/drivers/video/fbdev/core/fbmem.c
|
|
+++ b/drivers/video/fbdev/core/fbmem.c
|
|
@@ -25,7 +25,6 @@
|
|
#include <linux/init.h>
|
|
#include <linux/linux_logo.h>
|
|
#include <linux/proc_fs.h>
|
|
-#include <linux/platform_device.h>
|
|
#include <linux/seq_file.h>
|
|
#include <linux/console.h>
|
|
#include <linux/kmod.h>
|
|
@@ -1605,36 +1604,18 @@ static void do_remove_conflicting_frameb
|
|
/* check all firmware fbs and kick off if the base addr overlaps */
|
|
for_each_registered_fb(i) {
|
|
struct apertures_struct *gen_aper;
|
|
- struct device *device;
|
|
|
|
if (!(registered_fb[i]->flags & FBINFO_MISC_FIRMWARE))
|
|
continue;
|
|
|
|
gen_aper = registered_fb[i]->apertures;
|
|
- device = registered_fb[i]->device;
|
|
if (fb_do_apertures_overlap(gen_aper, a) ||
|
|
(primary && gen_aper && gen_aper->count &&
|
|
gen_aper->ranges[0].base == VGA_FB_PHYS)) {
|
|
|
|
printk(KERN_INFO "fb%d: switching to %s from %s\n",
|
|
i, name, registered_fb[i]->fix.id);
|
|
-
|
|
- /*
|
|
- * If we kick-out a firmware driver, we also want to remove
|
|
- * the underlying platform device, such as simple-framebuffer,
|
|
- * VESA, EFI, etc. A native driver will then be able to
|
|
- * allocate the memory range.
|
|
- *
|
|
- * If it's not a platform device, at least print a warning. A
|
|
- * fix would add code to remove the device from the system.
|
|
- */
|
|
- if (dev_is_platform(device)) {
|
|
- registered_fb[i]->forced_out = true;
|
|
- platform_device_unregister(to_platform_device(device));
|
|
- } else {
|
|
- pr_warn("fb%d: cannot remove device\n", i);
|
|
- do_unregister_framebuffer(registered_fb[i]);
|
|
- }
|
|
+ do_unregister_framebuffer(registered_fb[i]);
|
|
}
|
|
}
|
|
}
|
|
@@ -1961,13 +1942,9 @@ EXPORT_SYMBOL(register_framebuffer);
|
|
void
|
|
unregister_framebuffer(struct fb_info *fb_info)
|
|
{
|
|
- bool forced_out = fb_info->forced_out;
|
|
-
|
|
- if (!forced_out)
|
|
- mutex_lock(®istration_lock);
|
|
+ mutex_lock(®istration_lock);
|
|
do_unregister_framebuffer(fb_info);
|
|
- if (!forced_out)
|
|
- mutex_unlock(®istration_lock);
|
|
+ mutex_unlock(®istration_lock);
|
|
}
|
|
EXPORT_SYMBOL(unregister_framebuffer);
|
|
|
|
--- a/include/linux/fb.h
|
|
+++ b/include/linux/fb.h
|
|
@@ -502,7 +502,6 @@ struct fb_info {
|
|
} *apertures;
|
|
|
|
bool skip_vt_switch; /* no VT switch on suspend/resume required */
|
|
- bool forced_out; /* set when being removed by another driver */
|
|
};
|
|
|
|
static inline struct apertures_struct *alloc_apertures(unsigned int max_num) {
|