DISCLAIMER:
Introduction
My starting point is: Installing FreeBSD 14.0-RELEASE on Dell Vostro (GPT+ZFS on SSD). Next I set to get X11 running on it as well so I perform the usual
Setup
After struggling for some time browsing documentation and forums on the Internet I've finally come to know that I would need DRM kernel-mode drivers as well as some firmware (or blobs) from the manufacturer. Fortunately, AFAIK, since FreeBSD 13.0-RELEASE things are becoming easier. For instance, on FreeBSD 14.0-RELEASE, looking at the results of
But then difficulty strikes in again because the firmware files are named after two keywords (the first one related to an Intel codename and the second related to its "functionality") which are hard-to-find and hard-to-select the ones that are required for a particular system. In addition, the "lazy" strategy of installing everything in the hope the right one will be automatically selected and used may lead to hang during the boot phase when kernel modules are loaded if an incompatible module somehow happens to be loaded. So I'm aiming to install just the "presumably" right kernel modules and graphics firmware.
IMHO the "best" point to start getting the essential practical concepts and basic understanding towards selecting what's right for a particular installation is:
And without performing any single X11 manual configuration/tweak (so far) I've got the TWM default out-of-the-box config with XTerm displaying crisp text at a 1920x1080@60 resolution and quite good speed for my "graphical console" workings even though my display is capable of achieving 120Hz:
PS
For the correct Intel keywords I would give up searching the Internet and just rely on the diagnostic output from
Along this thread I cannot know at large if what particularly happened to me could be in fact general, nor could I state that the workaround would be the best practice or the right thing to do in a similar case. Thus, what I'm trying to share here is to be taken as a mere contribution which may or may not work under other circumstances or scenarios and I shall not be held responsible for anything that could go wrong, that is, if you try what I've successfully did, in part or in its entirety, do at your own risk. Thank you.
Introduction
My starting point is: Installing FreeBSD 14.0-RELEASE on Dell Vostro (GPT+ZFS on SSD). Next I set to get X11 running on it as well so I perform the usual
pkg install xorg
and add user to the video
group. But before launching X for the very first time it's probably undoubtedly reasonable to install the graphical video drivers and firmware for getting the best experience. When the graphics cards is from some NVidia flavor chances are that the processes will be smoother and nearly optimum. Unfortunately, by comparison, for reasons that I believe don't matter to debate, on the Intel side in relation to Unix things seems to be yet in a relatively early stage, although some remarkable (IMHO) progress has been made in the last couple of years. The problem I've got was to make use of an Intel UHD Graphics 630 which is capable of providing a 1920x1080 resolution at 60Hz.Setup
After struggling for some time browsing documentation and forums on the Internet I've finally come to know that I would need DRM kernel-mode drivers as well as some firmware (or blobs) from the manufacturer. Fortunately, AFAIK, since FreeBSD 13.0-RELEASE things are becoming easier. For instance, on FreeBSD 14.0-RELEASE, looking at the results of
pkg search drm
and pkg search firmware-intel
I can see packages such as:- drm-515-kmod
- drm_info
- gpu-firmware-intel-kmod-...
drm_info
seems to be handy for the first time.# drm_info |grep Device
... Intel Corporation CoffeeLake-S GT2 [UHD Graphics 630]
But then difficulty strikes in again because the firmware files are named after two keywords (the first one related to an Intel codename and the second related to its "functionality") which are hard-to-find and hard-to-select the ones that are required for a particular system. In addition, the "lazy" strategy of installing everything in the hope the right one will be automatically selected and used may lead to hang during the boot phase when kernel modules are loaded if an incompatible module somehow happens to be loaded. So I'm aiming to install just the "presumably" right kernel modules and graphics firmware.
IMHO the "best" point to start getting the essential practical concepts and basic understanding towards selecting what's right for a particular installation is:
- Find out if
dmesg
reveals some load failure about DRM by inspecting the output ofdmesg |grep drm |grep load
which in my particular case revealed the unforeseen need of the i915/kbl_dmc_ver1_04.bin file. - With the hint from the previous step I could narrow down the search for the missing file(s) within the available gpu-firmware-intel-kmod-... packages by guessing that kbl would be an acronym for KabyLake. Without the hint I would probably not deduce that my CoffeeLake is somehow related to KabyLake! If the hint was of no help unfortunately I would be required to perform the uncomfortable repetitive task of installing-viewing-uninstalling each candidate package out of a total of at most 11 by the time of this writing:
# pkg search gpu-firmware-intel
gpu-firmware-intel-kmod-alderlake-20230210_1 Firmware modules for alderlake Intel GPUs
gpu-firmware-intel-kmod-broxton-20230210_1 Firmware modules for broxton Intel GPUs
gpu-firmware-intel-kmod-cannonlake-20230210_1 Firmware modules for cannonlake Intel GPUs
gpu-firmware-intel-kmod-dg1-20230210_1 Firmware modules for dg1 Intel GPUs
gpu-firmware-intel-kmod-elkhartlake-20230210_1 Firmware modules for elkhartlake Intel GPUs
gpu-firmware-intel-kmod-geminilake-20230210_1 Firmware modules for geminilake Intel GPUs
gpu-firmware-intel-kmod-icelake-20230210_1 Firmware modules for icelake Intel GPUs
gpu-firmware-intel-kmod-kabylake-20230210_1 Firmware modules for kabylake Intel GPUs
gpu-firmware-intel-kmod-rocketlake-20230210_1 Firmware modules for rocketlake Intel GPUs
gpu-firmware-intel-kmod-skylake-20230210_1 Firmware modules for skylake Intel GPUs
gpu-firmware-intel-kmod-tigerlake-20230210_1 Firmware modules for tigerlake Intel GPUs
pkg install gpu-firmware-intel-kabylake
which installed the required file on /boot/modules and solved the issue. # dmesg |grep drm
drmn0: <drmn> on vgapci0
vgapci0: child drmn0 requested pci_enable_io
vgapci0: child drmn0 requested pci_enable_io
[drm] Unable to create a private tmpfs mount, hugepage support will be disabled(-19).
[drm] Got stolen memory base 0xbb800000, size 0x2000000
lkpi_iic0: <LinuxKPI I2C> on drmn0
lkpi_iic1: <LinuxKPI I2C> on drmn0
lkpi_iic2: <LinuxKPI I2C> on drmn0
lkpi_iic3: <LinuxKPI I2C> on drmn0
drmn0: [drm] [ENCODER:102:DDI E/PHY E] is disabled/in DSI mode with an ungated DDI clock, gate it
drmn0: successfully loaded firmware image 'i915/kbl_dmc_ver1_04.bin'
drmn0: [drm] Finished loading DMC firmware i915/kbl_dmc_ver1_04.bin (v1.4
)lkpi_iic4: <LinuxKPI I2C> on drm2
[drm] Initialized i915 1.6.0 20201103 for drmn0 on minor 0
name=drmn0 flags=0x0 stride=7680 bpp=32
And without performing any single X11 manual configuration/tweak (so far) I've got the TWM default out-of-the-box config with XTerm displaying crisp text at a 1920x1080@60 resolution and quite good speed for my "graphical console" workings even though my display is capable of achieving 120Hz:
# xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 298mm
1920x1080 60.00*+
120.00 100.00 119.88 119.98 99.93 74.99 50.00 59.94
1280x1024 119.96 75.02 60.02
1440x900 119.85
1152x864 75.00
1280x720 60.00 50.00 59.94
1024x768 119.99 75.03 60.00
800x600 119.97 75.00 60.32
720x576 50.00
720x480 60.00 59.94
640x480 75.00 60.00 59.94
720x400 70.08
DP-1 disconnected (normal left inverted right x axis y axis)
PS
For the correct Intel keywords I would give up searching the Internet and just rely on the diagnostic output from
dmesg
for getting hints on what is presumably missing/desired. For the "functionality" keywords, considering that the lowercase "u" in GuC and HuC would in fact represent the Greek letter "µ" for micro, some search on the Internet seems to reasonably indicate that:- DMC means Display Micro Controller.
In this context it provides for low power idle-states. - GuC means Graphics Micro Controller.
In this context it provides for workload scheduling and parallel engines. - HuC means HEVC/H.265 Micro Controller.
In this context it provides CPU offloading (hardware acceleration) for media functions.