It is quite some time now that I tried to get my otherwise nice Thinkpad Tablet 10 to behave with Linux. To make a long story short I think I have a quite stable version now, here is my kernel package which I use on top of Ubuntu 16.04LTS:
linux-image-4.5.4_01_amd64.deb
Additionally to the kernel you might want to add to your kernel commandline the following option:
hpet=disable intel_idle.max_cstate=0
HPET will get disabled by the kernel anyway. The more important option is to disable the Intel C-state idle driver. By adding this option the Intel specific C-state driver is disabled and the ACPI idle driver will be used instead. So far this is much more stable than the Intel idle driver.
You should also simply remove (delete) the ACPI AC power adapter driver from the modules directory after installing the package since it causes tons of false AC events, overflowing the kernel message buffer and flooding the logs:
rm /lib/modules/4.5.4/kernel/drivers/acpi/ac.ko depmod -a
Background to this is that I found that the i915 GPU driver still has issues with Baytrail. If you look through the net you will find lots of mentions that lower C states confuse the i915 driver with various results, also permanent hangs and freezes. I was able to reproduce the freezes pretty quickly by playing an arbitrary video using e.g.
mpv -ao null -vo vaapi <video>
Sooner or later the machine would freeze completely. After disabling the Intel C-state driver these freezes seems to be gone – I am still testing it. The TPT10 is BTW a very nice video player, once it’s working properly. The IPS panel is a really nice display and the playback is perfectly tearing free! Really very nice, also with full-HD content.
I also tried other kernel options like
i915.enable_execlists=0 i915.semaphores=1
but those did not help, rather to the contrary, while I had the semaphores enabled I had a severe crash which caused severe damage to the eMMC and filesystem. Even after a power cycle all operating refused to boot, even Win10 – strange.
Update: The additional i915.* kernel options do not seems to help with anything. I am now on kernel 4.6 which runs pretty smoothly. From time to time I still have i915 pipeline stalls which recover quickly when the mouse pointer is moved. This is actually pretty strange since it is only the mouse pointer that seems to recover from the stall. I will try to switch Xorg to software cursor and see what happens. Either it will not recover anymore or maybe the stalls stop? For kernel 4.6 I also had to explicitely disable the so called „panel self refresh“, or PSR in short: i915.enable_psr=0. This got enabled by default in 4.6 but causes the display to flicker not only on Baytrail i915 like on the TPT10 but also e.g. on Haswell, I also own a Yoga S1 which also started to flicker using 4.6. I need to report this to the i915 guys. So far with 4.6 I had no permanent hang or freeze at all anymore! Which I am very happy about. With 4.6 you also need to change the Bluetooth init, hciattach will not work anymore, you now need to use btattach:
btattach -B /dev/ttyS4 -P bcm
and you will need to copy the HCD patch file to /lib/firmware/brcm/BCM.hcd. Pretty bad name for the file since there couls be more than just one patch file depending on the chip version, so I copied it as BCM4324B5.hcd and created a symlink BCM.hcd. But I also have the impression that Bluetooth is less stable than with 4.5.x versions. After some time not using it the interface seems to got to sleep and will either wake up by turning Bluetooth off and on again or if this fails, by killing btattach and starting it again. I need to talk to the Bluetooth guys about that. Might also be a too aggreesive powermanagement in some place.
Still open issues:
- no battery status and no AC status either
- no sound
- no cameras
- no NFC
- no fingerprint
I got a reply from Synaptics stating that the device is an OEM part and that they can not provide any documentation for it, oh well… there are Windows drivers to reverse engineer - WAN modem (SIerra) unclear, might work
Update: It does work! And is pretty fast! But ModemManager from NetworkManager is pretty bogus and confuses the device very often. I can revover it by issuing the following commands, with some waiting time between the commands:service ModemManager stop rmmod cdc_mbim modprobe cdc_mbim mbimcli -d /dev/cdc-wdm1 --set-radio-state=on service ModemManager start
- when waking the device from sleep using a key from the ultrabook keyboard the acpi_irq fires too early and gets disabled – but it seems that this does not cause any harm
- vibration motor – completely forgot that one all the time. When pressing the Windows button below the screen a vibration can be felt. But only when pressing the button. I am pretty sure that this can also be controlled by software, somehow…