Intel

From Gentoo Wiki
Jump to:navigation Jump to:search

Intel is the open source graphics driver for Intel GMA on-board graphics cards and Intel Arc dedicated graphics cards, starting with the Intel 810.

Hardware detection

To choose the right driver, first detect the graphics card. lspci can be used for this task

root #lspci | grep -i VGA

This should show something like this:

root #lspci | grep -i VGA
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
Note
The lspci output for the graphics controller may refer to CPU generations, whereas the Feature support table below refers to GPU generations. E.g., “3rd Gen” in the example lspci output above corresponds to “Gen7” in the table below.

Feature support

Generation Chipset OpenGL OpenGL ES OpenCL VAAPI Vulkan VIDEO_CARDS
Gen 1 810, 815 No No No No No unsupported
Gen 2 i830M, 845G, 855GM, 865G 1.3 No No No No intel i915[table 1]
Gen 3 915G/GM, 945G/GM, G31, G/Q33, Q35, Atom D4xx/D5xx/N4xx/N5xx 1.4 No 1.2[table 2] No No intel i915[table 1]
Gen 4 965G/GM/Q, G35, G41, G/Q43, G/GM/Q45 2.1 2.0 1.2[table 2] G/GM45: MPEG2 only No intel
Gen 5 Nehalem (Ironlake) 2.1 2.0 1.2[table 2] Yes No intel
Gen 6 Sandy Bridge 3.3 3.0 2.0[table 2] Yes No intel
Gen 7 Ivy Bridge, Valley View[table 3] 4.2 3.0 2.0[table 4] Yes 1.0 intel
Gen 7.5 Haswell 4.6 3.2 2.0[table 4] Yes 1.0 intel
Gen 8 Broadwell, Cherryview[table 5] 4.6 3.2 3.0[table 6] Yes 1.1 intel
Gen 9 Skylake, Broxton[table 7] 4.6 3.2 3.0[table 6] Yes 1.2 intel
Gen 9.5 Kaby Lake, Coffee Lake 4.6 3.2 3.0[table 6] Yes 1.2 intel
Gen 11 Ice Lake 4.6 3.2 3.0[table 6] Yes 1.2 intel
Gen 12 Tiger Lake, Alder Lake, Raptor Lake 4.6 3.2 3.0[table 6] Yes 1.2 intel
DG2 Alchemist 4.6 3.2 3.0[table 6] Yes 1.3 intel[table 8]
  1. 1.0 1.1 Mesa 22.0 and higher have dropped support for i915 classic driver
  2. 2.0 2.1 2.2 2.3 Used to be supported by Beignet project which is now deprecated and no longer maintained.
  3. Valley View is the name of the graphics core associated with the Silvermont microarchitecture (Bay Trail platform, among others)
  4. 4.0 4.1 Used to be supported by proprietary Legacy OpenCL drivers from Intel, which are no longer maintained.
  5. Cherryview is the name of the graphics core associated with the Airmont microarchitecture (Braswell, Cherry Trail platforms, among others)
  6. 6.0 6.1 6.2 6.3 6.4 6.5 Supported by dev-libs/intel-compute-runtime
  7. Broxton is the name of the graphics core associated with the Goldmont microarchitecture (Apollo Lake platform, among others)
  8. Requires at least kernel version 6.0.0 and Mesa 22.2

A full list of Intel CPU graphic capabilities is here.

Installation

Firmware

Systems using Skylake, Broxton, or newer Intel graphics will need additional firmware[1] from sys-kernel/linux-firmware package:

root #emerge --ask sys-kernel/linux-firmware

Otherwise errors such as the following might appear in dmesg:

kernel: i915 0000:00:02.0: Direct firmware load for i915/skl_dmc_ver1_27.bin failed with error -2
kernel: i915 0000:00:02.0: Failed to load DMC firmware [https://01.org/linuxgraphics/intel-linux-graphics-firmwares], disabling runtime power management.

DMC firmware

Display Microcontroller firmware provides support for advanced graphics low-power idle states.[1]

To build the DMC firmware into the kernel binary (in this case, i915/skl_dmc_ver1_27.bin):

KERNEL (Before Linux 4.18) Build firmware blobs into the kernel binary
Device Drivers  --->
    Generic Driver Options  --->
        -*- Userspace firmware loading support
        [*] Include in-kernel firmware blobs in kernel binary
            (i915/skl_dmc_ver1_27.bin) External firmware blobs to build into the kernel binary
            (/lib/firmware) Firmware blobs root directory
KERNEL (Since Linux 4.18) Build firmware blobs into the kernel binary
Device Drivers  --->
    Generic Driver Options  --->
            Firmware loader  --->
                -*- Firmware loading facility
                (i915/skl_dmc_ver1_27.bin) Build named firmware blobs into the kernel binary
                (/lib/firmware) Firmware blobs root directory
Warning
Including the firmware in-kernel may cause suspend-to-ram to fail, if this is a concern don't include the blob built into the kernel, instead, add the firmware blob into the initramfs. An example is available as a part of the dracut article.

Alternatively compile the i915 driver as a kernel module and it will automatically load the firmware from the filesystem.

GuC/HuC firmware

Graphics µController firmware offloads functions from the host driver. HEVC/H.265 µController firmware improves hardware acceleration of media decoding.[1]

For Gen11+ GPUs, GuC/HuC firmware loads by default since Linux 5.4 (see commit).

For Gen9 and Gen9.5 GPUs, GuC/HuC firmware won't load by default. It is possible to enable loading of the firmware using kernel parameter i915.enable_guc_loading=1 (before kernel 4.16) or i915.enable_guc=3 (since kernel 4.16). HuC firmware (and GuC as a dependent) is needed for AVC/HEVC/VP9 low power encoding bitrate control, including CBR, VBR, etc.. Enabling GuC/HuC firmware loading causes issues in some systems. Disable it if the system experiences freezing (for example, after resuming from hibernation).

GuC firmware for Gen 12+ now only uses major version numbers e.g. tgl_guc_70.bin[2] and HuC firmware does not have a version number e.g. tgl_huc.bin[3].

To identify the firmware file name, either by checking /var/log/kern.log:

FILE /var/log/kern.log
kernel: [    1.294069] [drm] GuC: Failed to fetch firmware i915/kbl_guc_ver9_33.bin (error -2)
kernel: [    1.294079] [drm] HuC: Failed to fetch firmware i915/kbl_huc_ver01_07_1398.bin (error -2)

Or by grepping the MODULE_FIRMWARE in the kernel source tree:

user $grep -rB1 'MODULE_FIRMWARE.*SKL' /usr/src/linux/drivers/gpu/drm/i915
/usr/src/linux/drivers/gpu/drm/i915/intel_guc_fw.c-#define I915_SKL_GUC_UCODE GUC_FW_PATH(skl, SKL_FW_MAJOR, SKL_FW_MINOR)
/usr/src/linux/drivers/gpu/drm/i915/intel_guc_fw.c:MODULE_FIRMWARE(I915_SKL_GUC_UCODE);
--
/usr/src/linux/drivers/gpu/drm/i915/intel_csr.c-#define I915_CSR_SKL "i915/skl_dmc_ver1_27.bin"
/usr/src/linux/drivers/gpu/drm/i915/intel_csr.c:MODULE_FIRMWARE(I915_CSR_SKL);
--
/usr/src/linux/drivers/gpu/drm/i915/intel_huc_fw.c-	SKL_HUC_FW_MINOR, SKL_BLD_NUM)
/usr/src/linux/drivers/gpu/drm/i915/intel_huc_fw.c:MODULE_FIRMWARE(I915_SKL_HUC_UCODE);

Then configure to build the firmware file into the kernel as above.

Kernel

The legacy fbdev support is required since kernel 3.14.14 at least for i915 (CONFIG_DRM_I915_FBDEV=y).[4][5]

For hybrid Intel/AMD systems, follow also the steps of radeon drivers.

Since kernel version 4.4 the driver has moved and the legacy fbdev support is now CONFIG_DRM_FBDEV_EMULATION=y.

KERNEL Linux 5.4
        Device Drivers  --->
            Graphics support  --->
                <*> /dev/agpgart (AGP Support)  --->
                    --- /dev/agpgart (AGP Support)
                    -*-   Intel 440LX/BX/GX, I8xx and E7x05 chipset support
                <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->
                    --- Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
                [*]   Enable legacy fbdev support for your modesetting driver
                <*> Intel 8xx/9xx/G3x/G4x/HD Graphics
                [ ]   Enable alpha quality support for new Intel hardware by default
                ()    Force probe driver for selected new Intel hardware
                [*]   Enable capturing GPU state following a hang
                [*]     Compress GPU error state
                [*]   Always enable userptr support
                [ ]   Enable Intel GVT-g graphics virtualization host support
        [*] IOMMU Hardware Support --->
            [*] Support for Intel IOMMU using DMA Remapping Devices
            [*]   Enable Intel DMA Remapping Devices by default
Note
Kernel version 4.19 or later is recommended for Coffee Lake because it will work without enabling alpha support. Kernel 4.14 requires loading module i915 with alpha_support=1 or enabling CONFIG_DRM_I915_ALPHA_SUPPORT in kernel config.

For DG2 successful loading of the HuC firmware requires Intel PXP support and the Intel Management Engine Interface.[6]

KERNEL DG2 HuC Authentication
        Device Drivers  --->
            Graphics support  --->
                [*] Enable Intel PXP support
            Misc devices  --->
                {*} Intel Management Engine Interface
                {*} ME Enabled Intel Chipsets
                <*> Intel MEI GSC embedded device
                <*> Intel PXP services of ME Interface

X drivers

Portage uses the VIDEO_CARDS variable, which expands into the USE_EXPAND variable, for supporting various graphics cards. Assuming the x11-base/xorg-drivers package has already been installed, setting the VIDEO_CARDS variable in /etc/portage/make.conf will pull in the correct video driver:

FILE /etc/portage/make.confGen 2 and Gen 3
VIDEO_CARDS="intel i915"
FILE /etc/portage/make.confGen 4 and higher
VIDEO_CARDS="intel"
Important
Beginning with x11-base/xorg-drivers-21.1, the x11-base/xorg-drivers package changes USE flag settings. This will omit selection of the deprecating x11-drivers/xf86-video-intel driver by default in favor of the more maintained, generic modesetting DDX driver built into x11-base/xorg-server. Older systems with the video_cards_i915 USE flag set will continue to have the Intel DDX driver installed.

After editing make.conf, update the system so the changes take effect by passing the --changed-use --deep options to emerge:

root #emerge --ask --changed-use --deep @world

Those wishing to not accept the Intel graphic driver defaults in the main repository can read on into the sub-sections below.

Intel DDX

Before proceeding with the Intel DDX driver, note that this driver has been slowly deprecating for several years. Other major[7][8] Linux distributions have switched to the modesetting DDX driver (detailed in the section below). Intel has not updated it for quite some time[9], thus burdening Gentoo's X11 package maintainers.

The Intel DDX driver may be faster than the generic modesetting driver on pre-Gen11 chipsets as it is able to more closely interact with hardware acceleration of these chips using SNA. On Gen11 and newer, SNA is not supported.[10] Using it is discouraged unless faced with concrete issues caused by the modesetting driver.

USE flags

Check the USE flags of x11-drivers/xf86-video-intel:

USE flags for x11-drivers/xf86-video-intel X.Org driver for Intel cards

+sna Enable SandyBridge's New Acceleration (useful on all chipsets, not just SandyBridge)
+udev Enable virtual/udev integration (device discovery, power and storage device support, etc)
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
dri Enable direct rendering: used for accelerated 3D and some 2D, like DMA
tools Build the intel-virtual-output tool
uxa Enable UMA Acceleration Architecture
valgrind Enable annotations for accuracy. May slow down runtime slightly. Safe to use even if not currently using dev-debug/valgrind
xvmc Enables X-Video Motion Compensation support

Emerge
root #emerge --ask x11-drivers/xf86-video-intel
xorg.conf

To force Xorg server to use the Intel DDX driver with SNA for hardware acceleration, the following file can be created in /etc/X11/xorg.conf.d/:

FILE /etc/X11/xorg.conf.d/20-intel.confForce Intel DDX
Section "Device"
        Identifier  "Intel Graphics"
        Driver      "intel"
        Option      "AccelMethod"    "sna"
        Option      "DRI"         "crocus"
EndSection

The value for the DRI option should be crocus for Gen 4 through Gen 7.5 and iris for Gen 8 and higher. This line should be omitted for Gen 2 and Gen 3.

Modesetting DDX

As mentioned above, the modesetting DDX driver is now the default driver on newer Intel graphics chipsets for Gentoo. This driver uses GLAMOR to accelerate 2D graphical over Mesa (the open source OpenGL implementation). As of x11-base/xorg-drivers-1.19 this has become the default for Gentoo.

As of xorg-server/xorg-server-1.20.6 GLAMOR support is enabled unless the minimal USE flag is enabled. No additional steps or configuration are necessary.

xorg.conf

If it's necessary to force Xorg to load the modesetting driver the following config snippet can be used:

FILE /etc/X11/xorg.conf.d/20-modesetting.confForce modesetting DDX
Section "Device"
        Identifier  "Intel Graphics"
        Driver      "modesetting"
        Option      "AccelMethod"    "glamor"
        Option      "DRI"            "3"
EndSection
Note
If both 20-intel.conf and 20-modesetting.conf files are defined in /etc/X11/xorg.conf.d/, the X server will attempt to load the files in alpha-numeric order.
Screen tearing

The TearFree option is not enabled by default (since it increases GPU memory consumption, among other things). If experiencing screen tear, you may create the configuration file, and enable it manually:

FILE /etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
   Identifier  "Intel Graphics"
   Driver      "intel"
   Option      "TearFree"    "true"
EndSection

Other options against screen tearing:

  1. Use Sway instead of Xorg (implementation of Wayland protocol, that is tear free by design).
Enable early KMS

To enable Kernel Mode Setting (KMS) as soon as possible, modesetting either needs to be built into the kernel, or be loaded with initramfs if it is built as a module. Distribution Kernels have the Modesetting DDX built as a module. So, in order to get early KMS, those who use it have to create a .conf file in /etc/dracut.conf.d and do the following:

FILE /etc/dracut.conf.d/intel.conf
add_drivers+=" i915 "

Then run:

root #dracut

Users of gentoo-kernel can also use savedconfig to change modesetting from module to built-in.

VAAPI

Intel GMA X4500HD / G45 / GM45 (late Gen 4) and newer supports VAAPI hardware video acceleration with package media-libs/libva-intel-driver.

root #emerge -a media-libs/libva-intel-driver

Newer Intel graphics since Gen 8 (Broadwell) have better support with media-libs/libva-intel-media-driver.

root #emerge -a media-libs/libva-intel-media-driver

Vulkan

Vulkan is supported in the main ebuild repository for Intel Core processors using the Mesa driver[11].

This will build a working Vulkan driver, but it will not provide a libvulkan.so.1, but a drivers-specific libvulkan_intel.so. The package media-libs/vulkan-loader provides libvulkan.so.1.

If libvulkan_intel.so is missing, then you need to compile media-libs/mesa with the vulkan USE flag.

Tools

x11-apps/igt-gpu-tools provides utilities for debugging.

For example, GPU min/max/current frequency can be displayed by:

root #intel_gpu_frequency

The intel_gpu_top utility displays the current GPU state in a top-like fashion:

root #intel_gpu_top
intel-gpu-top: Intel Ivybridge (Gen7) @ /dev/dri/card0
    437/ 441 MHz;  57% RC6;  0.70/12.20 W;       45 irqs/s
 
      IMC reads:        2 MiB/s
     IMC writes:      618 MiB/s
 
         ENGINES     BUSY                           MI_SEMA MI_WAIT
       Render/3D    8.99% |██                     |      0%      0%
         Blitter    0.00% |                       |      0%      0%
           Video    0.00% |                       |      0%      0%
Tip
Video BUSY on 0% means that hardware decoding/encoding is not used.

Configuration

Kernel

Fastboot

The i915 kernel driver reduces flickering caused by modesetting operations during boot time. It does so by avoiding unnecessary modesetting operations [12]. Fastboot is enabled by default on Skylake, Valleyview, Cherry Trail, and newer CPUs.

For CPUs older than Skylake, fastboot can be enabled by passing the i915.fastboot=1 parameter to the i915 kernel driver during boot. This can either be set using the built-in kernel command-line or via a bootloader's kernel options. GRUB users can see the /etc/default/grub file.

Permissions

If the acl USE flag is enabled globally and elogind is being used (default for desktop profiles) permissions to video cards will be handled automatically. It is possible to check the permissions using getfacl:

user $getfacl /dev/dri/card0 | grep larry
user:larry:rw-

A broader solution is to add the user(s) needing access the video card to the video group:

root #gpasswd -a larry video

Note that users will be able to run X without permission to the DRI subsystem, but hardware acceleration will be disabled.

xorg.conf

Choose one of the following configurations.

Classic (Intel DDX) driver x11-drivers/xf86-video-intel:

The X server is not aware of i915 or i965 they will need to be addressed as Driver intel.
FILE /etc/X11/xorg.conf.d/intel.confExplicit intel driver section
Section "Device"
   Identifier  "intel"
   Driver      "intel"
EndSection

Gen 4+ driver (Mesa's modesetting):

Note
Experiences of this configuration can be found in the Discussion of this page. Add any difficulties there so this section can be improved.
As of xorg-server-1.17, the modesetting driver was moved into x11-base/xorg-server. This driver has more features than the classic driver, such as the ability to support acceleration via GLAMOR.
This configuration is the default for VIDEO_CARDS="intel i965" beginning with x11-base/xorg-drivers-1.19. If the classic (Intel CCX) driver is desired, then x11-drivers/xf86-video-intel must be installed manually:
root #emerge --ask x11-drivers/xf86-video-intel
xorg-server is easily configured to prefer modesetting over the older intel driver.
FILE /etc/X11/xorg.conf.d/modesetting.confExplicit modesetting driver section
Section "Device"
   Identifier  "modesetting"
   Driver      "modesetting"
EndSection

The X server is designed to work out-of-the-box, with no need to manually edit X.Org's configuration files. It should detect and configure devices such as displays, keyboards, and mice.

In any case, the main configuration file of the X server is the xorg.conf.

Troubleshooting

Screen flickering

Panel Self Refresh (PSR), a power saving feature used by Intel iGPUs, causes flickering in some instances. A temporary solution is to disable this feature using the kernel parameter i915.enable_psr=0

KDE Plasma eating CPU

If /usr/bin/plasmashell is always consuming several percent of CPU, perhaps this is related to a vsync problem. Qt Quick Animation seems to loop too fast when the driver does not manage vsync (Reference).

A way to enable vsync with SNA is to enable the TearFree option in xorg.conf:

FILE /etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
        Identifier "Device0"
        Driver "intel"
        Option      "AccelMethod" "SNA"
        Option      "TearFree"    "true"
EndSection

See also this Linux Mint tutorial.

Black screen

CONFIG_FRAMEBUFFER_CONSOLE must be set to "y" (i.e. built-in to the kernel). Otherwise, it is possible to always have a black screen unless nomodeset is passed to the kernel, thus disabling kernel mode setting (KMS). acpi_osi="Linux" can be passed to the kernel command line to try to solve this issue. This is usually done through the bootloader.

Kernel with version 4.2 or newer is needed with some 8th generation chipsets[13].

Brightness does not change with keyboard shortcuts

First, make sure vendor compatibility is on in the kernel configuration: Toshiba for Toshiba, etc.

If it is, or when the brightness buttons are working, the issue is that the kernel can not detect where the brightness control is.

Luckily, this is easy enough to modify, as long as the kernel version is >= 3.13.x and < 4.2.

Add the following argument to the kernel command-line:

CODE Pre-4.2 kernel command-line argument
video.use_native_backlight=1

On kernels >= 4.2, the video.use_native_backlight option is no longer available.[14] One of the following should be used instead (experiment to see which works on the system):

CODE 4.2+ kernel command-line argument
acpi_backlight=video
CODE 4.2+ kernel command-line argument
acpi_backlight=native
CODE 4.2+ kernel command-line argument
acpi_backlight=vendor

Do the key bindings map to actions viewable in xev? Can the screen brightness be adjusted using xbacklight? You can always do a work around via a keyboard remapping. For LXDE it can be done via:

FILE ~/.config/openbox/lxde-rc.xml
<keybind key="XF86MonBrightnessUp">
      <action name="Execute">
          <command>xbacklight +5</command>
      </action>
</keybind>
<keybind key="XF86MonBrightnessDown">
      <action name="Execute">
          <command>xbacklight -5</command>
      </action>
</keybind>
Warning
With the Modesetting DDX, the x11-apps/xbacklight package will not work[15]. Use sys-power/acpilight for a compatible interface.

See also

  • Xorg/Guide — explains what Xorg is, how to install it, and the various configuration options.
  • Hprofile — an application that can be used to manage multiple profiles be it hardware or software.

External resources

References