#include <linux/efi-bgrt.h>
 #include <linux/errno.h>
 #include <linux/fb.h>
-#include <linux/pci.h>
 #include <linux/platform_device.h>
 #include <linux/printk.h>
 #include <linux/screen_info.h>
 static bool request_mem_succeeded = false;
 static u64 mem_flags = EFI_MEMORY_WC | EFI_MEMORY_UC;
 
-static struct pci_dev *efifb_pci_dev;  /* dev with BAR covering the efifb */
-
 struct efifb_par {
        u32 pseudo_palette[16];
        resource_size_t base;
 };
 ATTRIBUTE_GROUPS(efifb);
 
-static struct resource *bar_resource;
-static u64 bar_offset;
-
 static int efifb_probe(struct platform_device *dev)
 {
        struct screen_info *si;
                si->rsvd_pos = 24;
        }
 
-       efifb_fix.smem_start = si->lfb_base;
-
-       if (si->capabilities & VIDEO_CAPABILITY_64BIT_BASE) {
-               u64 ext_lfb_base;
-
-               ext_lfb_base = (u64)(unsigned long)si->ext_lfb_base << 32;
-               efifb_fix.smem_start |= ext_lfb_base;
-       }
-
-       if (bar_resource &&
-           bar_resource->start + bar_offset != efifb_fix.smem_start) {
-               dev_info(&efifb_pci_dev->dev,
-                        "BAR has moved, updating efifb address\n");
-               efifb_fix.smem_start = bar_resource->start + bar_offset;
-       }
+       efifb_fix.smem_start = __screen_info_lfb_base(si);
 
        efifb_defined.bits_per_pixel = si->lfb_depth;
        efifb_defined.xres = si->lfb_width;
 };
 
 builtin_platform_driver(efifb_driver);
-
-#if defined(CONFIG_PCI)
-
-static void record_efifb_bar_resource(struct pci_dev *dev, int idx, u64 offset)
-{
-       u16 word;
-
-       efifb_pci_dev = dev;
-
-       pci_read_config_word(dev, PCI_COMMAND, &word);
-       if (!(word & PCI_COMMAND_MEMORY)) {
-               dev_err(&dev->dev,
-                       "BAR %d: assigned to efifb but device is disabled!\n",
-                       idx);
-               return;
-       }
-
-       bar_resource = &dev->resource[idx];
-       bar_offset = offset;
-
-       dev_info(&dev->dev, "BAR %d: assigned to efifb\n", idx);
-}
-
-static void efifb_fixup_resources(struct pci_dev *dev)
-{
-       u64 base = screen_info.lfb_base;
-       u64 size = screen_info.lfb_size;
-       int i;
-
-       if (efifb_pci_dev || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
-               return;
-
-       if (screen_info.capabilities & VIDEO_CAPABILITY_64BIT_BASE)
-               base |= (u64)screen_info.ext_lfb_base << 32;
-
-       if (!base)
-               return;
-
-       for (i = 0; i < PCI_STD_NUM_BARS; i++) {
-               struct resource *res = &dev->resource[i];
-
-               if (!(res->flags & IORESOURCE_MEM))
-                       continue;
-
-               if (res->start <= base && res->end >= base + size - 1) {
-                       record_efifb_bar_resource(dev, i, base - res->start);
-                       break;
-               }
-       }
-}
-DECLARE_PCI_FIXUP_CLASS_HEADER(PCI_ANY_ID, PCI_ANY_ID, PCI_BASE_CLASS_DISPLAY,
-                              16, efifb_fixup_resources);
-
-#endif