fbdev/core: Remove remove_conflicting_pci_framebuffers()
Remove remove_conflicting_pci_framebuffers() and implement similar functionality in aperture_remove_conflicting_pci_device(), which was the only caller. Removes an otherwise unused interface and streamlines the aperture helper. No functional changes. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220718072322.8927-5-tzimmermann@suse.de
This commit is contained in:
parent
8a611e0825
commit
9d69ef1838
@ -321,30 +321,36 @@ EXPORT_SYMBOL(aperture_remove_conflicting_devices);
|
|||||||
*/
|
*/
|
||||||
int aperture_remove_conflicting_pci_devices(struct pci_dev *pdev, const char *name)
|
int aperture_remove_conflicting_pci_devices(struct pci_dev *pdev, const char *name)
|
||||||
{
|
{
|
||||||
|
bool primary = false;
|
||||||
resource_size_t base, size;
|
resource_size_t base, size;
|
||||||
int bar, ret;
|
int bar, ret;
|
||||||
|
|
||||||
|
#ifdef CONFIG_X86
|
||||||
|
primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (bar = 0; bar < PCI_STD_NUM_BARS; ++bar) {
|
||||||
|
if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
base = pci_resource_start(pdev, bar);
|
||||||
|
size = pci_resource_len(pdev, bar);
|
||||||
|
ret = aperture_remove_conflicting_devices(base, size, primary, name);
|
||||||
|
if (ret)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* WARNING: Apparently we must kick fbdev drivers before vgacon,
|
* WARNING: Apparently we must kick fbdev drivers before vgacon,
|
||||||
* otherwise the vga fbdev driver falls over.
|
* otherwise the vga fbdev driver falls over.
|
||||||
*/
|
*/
|
||||||
#if IS_REACHABLE(CONFIG_FB)
|
|
||||||
ret = remove_conflicting_pci_framebuffers(pdev, name);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
#endif
|
|
||||||
ret = vga_remove_vgacon(pdev);
|
ret = vga_remove_vgacon(pdev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
for (bar = 0; bar < PCI_STD_NUM_BARS; ++bar) {
|
|
||||||
if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
|
|
||||||
continue;
|
|
||||||
base = pci_resource_start(pdev, bar);
|
|
||||||
size = pci_resource_len(pdev, bar);
|
|
||||||
aperture_detach_devices(base, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1799,54 +1799,6 @@ int remove_conflicting_framebuffers(struct apertures_struct *a,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(remove_conflicting_framebuffers);
|
EXPORT_SYMBOL(remove_conflicting_framebuffers);
|
||||||
|
|
||||||
/**
|
|
||||||
* remove_conflicting_pci_framebuffers - remove firmware-configured framebuffers for PCI devices
|
|
||||||
* @pdev: PCI device
|
|
||||||
* @name: requesting driver name
|
|
||||||
*
|
|
||||||
* This function removes framebuffer devices (eg. initialized by firmware)
|
|
||||||
* using memory range configured for any of @pdev's memory bars.
|
|
||||||
*
|
|
||||||
* The function assumes that PCI device with shadowed ROM drives a primary
|
|
||||||
* display and so kicks out vga16fb.
|
|
||||||
*/
|
|
||||||
int remove_conflicting_pci_framebuffers(struct pci_dev *pdev, const char *name)
|
|
||||||
{
|
|
||||||
struct apertures_struct *ap;
|
|
||||||
bool primary = false;
|
|
||||||
int err, idx, bar;
|
|
||||||
|
|
||||||
for (idx = 0, bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
|
|
||||||
if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
|
|
||||||
continue;
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
|
|
||||||
ap = alloc_apertures(idx);
|
|
||||||
if (!ap)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
for (idx = 0, bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
|
|
||||||
if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
|
|
||||||
continue;
|
|
||||||
ap->ranges[idx].base = pci_resource_start(pdev, bar);
|
|
||||||
ap->ranges[idx].size = pci_resource_len(pdev, bar);
|
|
||||||
pci_dbg(pdev, "%s: bar %d: 0x%lx -> 0x%lx\n", __func__, bar,
|
|
||||||
(unsigned long)pci_resource_start(pdev, bar),
|
|
||||||
(unsigned long)pci_resource_end(pdev, bar));
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86
|
|
||||||
primary = pdev->resource[PCI_ROM_RESOURCE].flags &
|
|
||||||
IORESOURCE_ROM_SHADOW;
|
|
||||||
#endif
|
|
||||||
err = remove_conflicting_framebuffers(ap, name, primary);
|
|
||||||
kfree(ap);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(remove_conflicting_pci_framebuffers);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* register_framebuffer - registers a frame buffer device
|
* register_framebuffer - registers a frame buffer device
|
||||||
* @fb_info: frame buffer info structure
|
* @fb_info: frame buffer info structure
|
||||||
|
@ -615,8 +615,6 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
|
|||||||
/* drivers/video/fbmem.c */
|
/* drivers/video/fbmem.c */
|
||||||
extern int register_framebuffer(struct fb_info *fb_info);
|
extern int register_framebuffer(struct fb_info *fb_info);
|
||||||
extern void unregister_framebuffer(struct fb_info *fb_info);
|
extern void unregister_framebuffer(struct fb_info *fb_info);
|
||||||
extern int remove_conflicting_pci_framebuffers(struct pci_dev *pdev,
|
|
||||||
const char *name);
|
|
||||||
extern int remove_conflicting_framebuffers(struct apertures_struct *a,
|
extern int remove_conflicting_framebuffers(struct apertures_struct *a,
|
||||||
const char *name, bool primary);
|
const char *name, bool primary);
|
||||||
extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
|
extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
|
||||||
|
Loading…
Reference in New Issue
Block a user