As many of you already know, Skylake and other Intel CPUs now require graphics firmware blobs to properly run.
Recently, a new major version of the GuC firmware for Skylake came out. This firmware has already been included in the latest linux-firmware git repository but, of course, not all the distros are updating this package on a regular basis.
Ubuntu is one of these distros, so I had to manually update both the linux-firmware and the kernel packages on my own. This was easy to achieve though :-)
I was using Ubuntu GNOME 16.04 but it should work also on the other flavors.
EDIT: I am now using Arch Linux and it works fine also on it. The procedure is slightly different though (no need to create deb packages).
- Download the latest Skylake GuC from here;
- Download the linux-firmware sources with
apt source linux-firmware;
- Unpack the file sklgucver61.tar.bz2 and copy the firmware to the proper folder:
cp /tmp/skl_guc_ver6_1/skl_guc_ver6_1.bin ~/linux-firmware-1.157/i915;
- Create the needed symlink with
ln -s ~/linux-firmware-1.157/skl_guc_ver6_1.bin ~/linux-firmware-1.157/skl_guc_ver6.bin;
- Edit the
debian/changelogfile and either increase the version number to
1.158or change the version number
- Create the package with
dpkg-buildpackage -us -uc;
- Install the new package
After the new linux-firmware package has been installed, verify that the new firmware blob and its symlink are present inside the folder
/lib/firmware/i915. If they are, it is now time to change the kernel sources to use the newest firmware.
- Install the needed tools with
sudo apt install build-essentials dh-autoreconf gawk debhelper;
- Download the kernel sources with
apt source linux-image-$(uname -r);
- Edit the files
linux-image-$(uname -r)/ubuntu/i915/intel_guc_loader.cand change:
#define I915_SKL_GUC_UCODE "i915/skl_guc_ver4.bin"to
#define I915_SKL_GUC_UCODE "i915/skl_guc_ver6.bin";
- around line 588:
- Edit the files
debian.master/changelogand increase the version number from
- Recreate the package with
DEB_BUILD_OPTIONS=parallel=X AUTOBUILD=1 NOEXTRAS=1 fakeroot debian/rules binary-genericwhere X is the number of CPU cores available on your system;
- Install the new packages;
- Verify if the new Skylake firmware is inside the initramfs with
lsinitramfs /boot/initrd.img-$(uname -r) | grep skl