Commit 0ba2fa8c authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

fbdev: Add support for the nomodeset kernel parameter



Support the kernel's nomodeset parameter for all PCI-based fbdev
drivers that use aperture helpers to remove other, hardware-agnostic
graphics drivers.

The parameter is a simple way of using the firmware-provided scanout
buffer if the hardware's native driver is broken. The same effect
could be achieved with per-driver options, but the importance of the
graphics output for many users makes a single, unified approach
worthwhile.

With nomodeset specified, the fbdev driver module will not load. This
unifies behavior with similar DRM drivers. In DRM helpers, modules
first check the nomodeset parameter before registering the PCI
driver. As fbdev has no such module helpers, we have to modify each
driver individually.

The name 'nomodeset' is slightly misleading, but has been chosen for
historical reasons. Several drivers implemented it before it became a
general option for DRM. So keeping the existing name was preferred over
introducing a new one.

v2:
	* print a warning if a driver does not init (Helge)
	* wrap video_firmware_drivers_only() in helper

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221111133024.9897-3-tzimmermann@suse.de
parent 9a758d87
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ config FB_SM750
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  Frame buffer driver for the Silicon Motion SM750 chip
	  with 2D accelearion and dual head support.
+3 −0
Original line number Diff line number Diff line
@@ -1168,6 +1168,9 @@ static int __init lynxfb_init(void)
{
	char *option;

	if (fb_modesetting_disabled("sm750fb"))
		return -ENODEV;

#ifdef MODULE
	option = g_option;
#else
+37 −0
Original line number Diff line number Diff line
@@ -227,6 +227,7 @@ config FB_CIRRUS
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This enables support for Cirrus Logic GD542x/543x based boards on
	  Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.
@@ -245,6 +246,7 @@ config FB_PM2
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for cards based on
	  the 3D Labs Permedia, Permedia 2 and Permedia 2V chips.
@@ -340,6 +342,7 @@ config FB_CYBER2000
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This enables support for the Integraphics CyberPro 20x0 and 5000
	  VGA chips used in the Rebel.com Netwinder and other machines.
@@ -504,6 +507,7 @@ config FB_CT65550
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for the Chips & Technologies
	  65550 graphics chip in PowerBooks.
@@ -514,6 +518,7 @@ config FB_ASILIANT
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for the Asiliant 69030 chipset

@@ -522,6 +527,7 @@ config FB_IMSTT
	depends on (FB = y) && PCI
	select FB_CFB_IMAGEBLIT
	select FB_MACMODES if PPC_PMAC
	select VIDEO_NOMODESET
	help
	  The IMS Twin Turbo is a PCI-based frame buffer card bundled with
	  many Macintosh and compatible computers.
@@ -585,6 +591,7 @@ config FB_TGA
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select BITREVERSE
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for generic TGA and SFB+
	  graphic cards.  These include DEC ZLXp-E1, -E2 and -E3 PCI cards,
@@ -777,6 +784,7 @@ config FB_XVR500
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This is the framebuffer device for the Sun XVR-500 and similar
	  graphics cards based upon the 3DLABS Wildcat chipset.  The driver
@@ -790,6 +798,7 @@ config FB_XVR2500
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This is the framebuffer device for the Sun XVR-2500 and similar
	  graphics cards based upon the 3DLABS Wildcat chipset.  The driver
@@ -816,6 +825,7 @@ config FB_PVR2
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  Say Y here if you have a PowerVR 2 card in your box.  If you plan to
	  run linux on your Dreamcast, you will have to say Y here.
@@ -881,6 +891,7 @@ config FB_NVIDIA
	select FB_CFB_IMAGEBLIT
	select BITREVERSE
	select VGASTATE
	select VIDEO_NOMODESET
	help
	  This driver supports graphics boards with the nVidia chips, TNT
	  and newer. For very old chipsets, such as the RIVA128, then use
@@ -928,6 +939,7 @@ config FB_RIVA
	select FB_CFB_IMAGEBLIT
	select BITREVERSE
	select VGASTATE
	select VIDEO_NOMODESET
	help
	  This driver supports graphics boards with the nVidia Riva/Geforce
	  chips.
@@ -972,6 +984,7 @@ config FB_I740
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VGASTATE
	select VIDEO_NOMODESET
	select FB_DDC
	help
	  This driver supports graphics cards based on Intel740 chip.
@@ -984,6 +997,7 @@ config FB_I810
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VGASTATE
	select VIDEO_NOMODESET
	help
	  This driver supports the on-board graphics built in to the Intel 810
	  and 815 chipsets.  Say Y if you have and plan to use such a board.
@@ -1034,6 +1048,7 @@ config FB_LE80578
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This driver supports the LE80578 (Vermilion Range) chipset

@@ -1051,6 +1066,7 @@ config FB_INTEL
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select BOOT_VESA_SUPPORT if FB_INTEL = y
	select VIDEO_NOMODESET
	depends on !DRM_I915
	help
	  This driver supports the on-board graphics built in to the Intel
@@ -1088,6 +1104,7 @@ config FB_MATROX
	select FB_CFB_IMAGEBLIT
	select FB_TILEBLITTING
	select FB_MACMODES if PPC_PMAC
	select VIDEO_NOMODESET
	help
	  Say Y here if you have a Matrox Millennium, Matrox Millennium II,
	  Matrox Mystique, Matrox Mystique 220, Matrox Productiva G100, Matrox
@@ -1208,6 +1225,7 @@ config FB_RADEON
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select FB_MACMODES if PPC
	select VIDEO_NOMODESET
	help
	  Choose this option if you want to use an ATI Radeon graphics card as
	  a framebuffer device.  There are both PCI and AGP versions.  You
@@ -1247,6 +1265,7 @@ config FB_ATY128
	select FB_CFB_IMAGEBLIT
	select FB_BACKLIGHT if FB_ATY128_BACKLIGHT
	select FB_MACMODES if PPC_PMAC
	select VIDEO_NOMODESET
	help
	  This driver supports graphics boards with the ATI Rage128 chips.
	  Say Y if you have such a graphics board and read
@@ -1271,6 +1290,7 @@ config FB_ATY
	select FB_BACKLIGHT if FB_ATY_BACKLIGHT
	select FB_MACMODES if PPC
	select FB_ATY_CT if SPARC64 && PCI
	select VIDEO_NOMODESET
	help
	  This driver supports graphics boards with the ATI Mach64 chips.
	  Say Y if you have such a graphics board.
@@ -1321,6 +1341,7 @@ config FB_S3
	select FB_TILEBLITTING
	select FB_SVGALIB
	select VGASTATE
	select VIDEO_NOMODESET
	select FONT_8x16 if FRAMEBUFFER_CONSOLE
	help
	  Driver for graphics boards with S3 Trio / S3 Virge chip.
@@ -1341,6 +1362,7 @@ config FB_SAVAGE
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VGASTATE
	select VIDEO_NOMODESET
	help
	  This driver supports notebooks and computers with S3 Savage PCI/AGP
	  chips.
@@ -1379,6 +1401,7 @@ config FB_SIS
	select FB_CFB_IMAGEBLIT
	select BOOT_VESA_SUPPORT if FB_SIS = y
	select FB_SIS_300 if !FB_SIS_315
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for the SiS 300, 315, 330
	  and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets.
@@ -1408,6 +1431,7 @@ config FB_VIA
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select I2C_ALGOBIT
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for Graphics chips of VIA
	  UniChrome (Pro) Family (CLE266,PM800/CN400,P4M800CE/P4M800Pro/
@@ -1447,6 +1471,7 @@ config FB_NEOMAGIC
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VGASTATE
	select VIDEO_NOMODESET
	help
	  This driver supports notebooks with NeoMagic PCI chips.
	  Say Y if you have such a graphics card.
@@ -1460,6 +1485,7 @@ config FB_KYRO
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  Say Y here if you have a STG4000 / Kyro / PowerVR 3 based
	  graphics board.
@@ -1474,6 +1500,7 @@ config FB_3DFX
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_MODE_HELPERS
	select VIDEO_NOMODESET
	help
	  This driver supports graphics boards with the 3Dfx Banshee,
	  Voodoo3 or VSA-100 (aka Voodoo4/5) chips. Say Y if you have
@@ -1503,6 +1530,7 @@ config FB_VOODOO1
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  Say Y here if you have a 3Dfx Voodoo Graphics (Voodoo1/sst1) or
	  Voodoo2 (cvg) based graphics card.
@@ -1524,6 +1552,7 @@ config FB_VT8623
	select FB_TILEBLITTING
	select FB_SVGALIB
	select VGASTATE
	select VIDEO_NOMODESET
	select FONT_8x16 if FRAMEBUFFER_CONSOLE
	help
	  Driver for CastleRock integrated graphics core in the
@@ -1537,6 +1566,7 @@ config FB_TRIDENT
	select FB_CFB_IMAGEBLIT
	select FB_DDC
	select FB_MODE_HELPERS
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for Trident PCI/AGP chipsets.
	  Supported chipset families are TGUI 9440/96XX, 3DImage, Blade3D
@@ -1560,6 +1590,7 @@ config FB_ARK
	select FB_TILEBLITTING
	select FB_SVGALIB
	select VGASTATE
	select VIDEO_NOMODESET
	select FONT_8x16 if FRAMEBUFFER_CONSOLE
	help
	  Driver for PCI graphics boards with ARK 2000PV chip
@@ -1571,6 +1602,7 @@ config FB_PM3
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for the 3DLabs Permedia3
	  chipset, used in Formac ProFormance III, 3DLabs Oxygen VX1 &
@@ -1583,6 +1615,7 @@ config FB_CARMINE
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  This is the frame buffer device driver for the Fujitsu Carmine chip.
	  The driver provides two independent frame buffer devices.
@@ -1961,6 +1994,7 @@ config FB_IBM_GXT4500
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  Say Y here to enable support for the IBM GXT4000P/6000P and
	  GXT4500P/6500P display adaptor based on Raster Engine RC1000,
@@ -2101,6 +2135,7 @@ config FB_MB862XX
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  Frame buffer driver for Fujitsu Carmine/Coral-P(A)/Lime controllers.

@@ -2188,6 +2223,7 @@ config FB_HYPERV
	select FB_CFB_IMAGEBLIT
	select FB_DEFERRED_IO
	select DMA_CMA if HAVE_DMA_CONTIGUOUS && CMA
	select VIDEO_NOMODESET
	help
	  This framebuffer driver supports Microsoft Hyper-V Synthetic Video.

@@ -2230,6 +2266,7 @@ config FB_SM712
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select VIDEO_NOMODESET
	help
	  Frame buffer driver for the Silicon Motion SM710, SM712, SM721
	  and SM722 chips.
+5 −0
Original line number Diff line number Diff line
@@ -1187,7 +1187,12 @@ static int __init arkfb_init(void)

#ifndef MODULE
	char *option = NULL;
#endif

	if (fb_modesetting_disabled("arkfb"))
		return -ENODEV;

#ifndef MODULE
	if (fb_get_options("arkfb", &option))
		return -ENODEV;

+3 −0
Original line number Diff line number Diff line
@@ -616,6 +616,9 @@ static struct pci_driver asiliantfb_driver = {

static int __init asiliantfb_init(void)
{
	if (fb_modesetting_disabled("asiliantfb"))
		return -ENODEV;

	if (fb_get_options("asiliantfb", NULL))
		return -ENODEV;

Loading