Go to

July 4, 2017

Stop Ubuntu from freezing completely with Intel Bay Trail

Ubuntu and Linux kernel seem to suffer from a cpu state bug which completely freezes the system when doing graphics intensive tasks such as playing games or videos. Many processors suffer from this bug including the following Intel processors:
  • Celeron J1900
  • Celeron N2940
  • Celeron N2840
  • Celeron N2930
  • Pentium N3520
  • Pentium N3530
  • Pentium N3540
To see whether you have one of the above processor put the following command in the terminal:

cat /proc/cpuinfo | grep 'model name'


This bug can easily be fixed by installing proper Microcode files and changing c-state flag for Linux kernel.

First step is to make sure you have Ubuntu microcode package installed by putting the following command in the terminal:

sudo apt-get install intel-microcode


Then, remove the existing microcode files by running the following command in the terminal as they are not recent:

sudo rm /lib/firmware/intel-ucode/*


After then, install Intel Microcode files by downloading Microcode package from the following site:

https://downloadcenter.intel.com/download/26798/Linux-Processor-Microcode-Data-File


Download the microcode*.tgz file and extract it in the Home folder. Now copy the extracted microcode files to system folder by opening a terminal in intel-ucode folder and running the following command:

sudo cp * /lib/firmware/intel-ucode/


Now edit the grub file to change c-state kernel flag by opening grub file in /etc folder by putting the following command:

sudo gedit /etc/default/grub


In the grub file under the line containing GRUB_CMDLINE_LINUX_DEFAULT=, add the following intel_idle.max_cstate=2, so the line should look like the following line:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_idle.max_cstate=2"


Now, save and close the grub file and put the following command in the terminal to update boot loader to reflect kernel flag:

sudo update-grub


Done! Now just reboot the system and check whether microcodes are loaded properly by running the following command in the terminal:

dmesg | grep microcode


You should be able to see something like following as output of above command:

[ 3.168100] microcode: CPU0 sig=0x30678, pf=0x8, revision=0x829
[ 3.168138] microcode: CPU1 sig=0x30678, pf=0x8, revision=0x829
[ 3.168445] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba


Cheers!
Imam