Lenovo Yoga 910

Overview

What with the Yoga 900/710 debacle, it was fairly unclear for me whether or not I would be able to change between the notorious raid controller and ahci. Turns out on the 910 this is not an issue (as reflected by one Lenovo page I happened to stub my toe on, on one of the googling sessions). This blog deals with quirks in the i915 and wifi driver which can both be time sinks.

TL&DR

  • This blog entry was written 14/11/2016, the mainsteam Arch kernel is now fine, you just need 1 or 2 kernel parameters (disable rc6 at a minimum) in order to function. (If at all)
  • There have been updates to the firmware which seem suspiciously pertinent. (I am looking at “disable PCIE AER for Qualcomm wireless LAN report warning message in windows event log.” in particular). I dont have Windows, so I can’t consume them, and this is not the kind of Lenovo device where they suppoort BIOS updates outside of a living Windows install. Bear that in mind.
  • Everything can be trivially made to work but the Validity fingerprint sensor.
  • Wifi requires
    • ideapad_laptop to remove the hardware block (present in 4.9 tree (Note: Not required as of 4.9!!!)), blacklisting this module in 4.8 removes the hardware block, but might carry other costs
    • Firmware from this repo which replaces the crap in /usr/lib/firmware/ath10k/QCA6174/hw3.0. (Don’t worry, this muppet is the canonical source of firmware for these cards)
  • Video requires enable_rc6=0 to avoid booting to skittish artifacts (or no modesetting, but that is way more intrusive)
  • Machine runs well and looks good. Ain’t got shit on a Carbon X1.
  • Volume out of speakers is pitiful even at max. Watching movies outside of soundproof box is impossible.

Verbose instructions

  1. Get to the EFI/bios configuration. I got there via going to recovery options in Windows and rebooting to the EFI settings panel. I could not get there via any other mechanism. Once in the bios, enable AHCI support for the disk, disable secure boot and reset setup keys. (I had to do this in order for the Linux kernel to boot, or it would ceaselessly prompt me to add the kernel hash to the EFI array of trusted hashes.)
  2. After this, a standard Arch boot stick will get you to the command line (this assumes no mode setting, as mode setting on this hardware introduces artifacts unless you pass enable_rc6=0 on the kernel cmdline). Follow the install instructions as per usual.
  3. I used a wired network to do the initial provisioning as documented in the Arch install documentation. Interesting with one usb port, no hub and both a usb flashstick and a usb NIC. Awesome. I personally used an ArchBoot iso as it loads itself entirely into memory, freeing up the USB port for the NIC.
  4. I personally recommend systemd-bootd, here is my Arch boot entry:/boot/loader/entries/arch.conf:

     title arch
     linux /vmlinuz-linux
     initrd /intel-ucode.img
     initrd /initramfs-linux.img
     options root=PARTUUID=8457d2b8-ba4a-4f9b-9098-03241bdbd20f rw i915.enable_rc6=0 pci=noaer quiet splash
    
  5. Wifi is the only sticking point as noted above, and requires you to address both points articulated above. This is what healthy dmesg output for the ath10k module looks like:

     [    3.425555] ath10k_pci 0000:01:00.0: pci irq msi oper_irq_mode 2 irq_mode 0 reset_mode 0
     [    3.688718] ath10k_pci 0000:01:00.0: Direct firmware load for ath10k/pre-cal-pci-0000:01:00.0.bin failed with error -2
     [    3.688727] ath10k_pci 0000:01:00.0: Direct firmware load for ath10k/cal-pci-0000:01:00.0.bin failed with error -2
     [    3.689533] ath10k_pci 0000:01:00.0: Direct firmware load for ath10k/QCA6174/hw3.0/firmware-5.bin failed with error -2
     [    3.689536] ath10k_pci 0000:01:00.0: could not fetch firmware file 'ath10k/QCA6174/hw3.0/firmware-5.bin': -2
     [    3.691039] ath10k_pci 0000:01:00.0: qca6174 hw3.2 target 0x05030000 chip_id 0x00340aff sub 17aa:0827
     [    3.691041] ath10k_pci 0000:01:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 0 testmode 0
     [    3.691439] ath10k_pci 0000:01:00.0: firmware ver WLAN.RM.2.0-00180-QCARMSWPZ-1 api 4 features wowlan,ignore-otp,no-4addr-pad crc32 75dee6c5
     [    3.755748] ath10k_pci 0000:01:00.0: board_file api 2 bmi_id N/A crc32 6fc88fe7
     [    5.921449] ath10k_pci 0000:01:00.0: htt-ver 3.26 wmi-op 4 htt-op 3 cal otp max-sta 32 raw 0 hwcrypto 1
     [    6.005216] ath10k_pci 0000:01:00.0 wlp1s0: renamed from wlan0
    
  6. I kept on chasing the firmware-5.bin dragon for a while, but wifi works, so who gives a flying fig. The output of rfkill is way more important, as the hardware lock ends all dialogue.
  7. Those complications aside, everything is working and functioning at peak performance.

Comments

  • My Backspace key arrived feeling slightly broken and lopsided. Anything other than a direct strike failed to register on the key, and pressing on the bottom makes the top rise up, which feels a little broken.
  • Touchpad feels good, screen looks good if a little glossy. Gnome looks really good at 1080p on a 13.9 inch screen
  • Function keys are inverted by default and I have not established how to flip that at a system wide level

Review

  • Yoga 910 is pretty fucking nice. The hinge is quite spiffy, but is really kinda academic if you have zero intention of using the device for its 2-in-1 functionality. I am actually disabling the touchscreen with supreme prejudice since I have never seen a beneficial touch experience in Linux. (Outside of Android)
  • Carbon X1 gen 2 kicked the shit out of this device. Keyboard is incomparably good, and I don’t find the bezel difference on the screens enough of a perk to even tilt my head in that direction. The bezel on the X1 ain’t bad at all.

Raw dumps

lspci

00:00.0 Host bridge: Intel Corporation Device 5904 (rev 02)
00:02.0 VGA compatible controller: Intel Corporation Device 5916 (rev 02)
00:04.0 Signal processing controller: Intel Corporation Skylake Processor Thermal Subsystem (rev 02)
00:08.0 System peripheral: Intel Corporation Skylake Gaussian Mixture Model
00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)
00:14.2 Signal processing controller: Intel Corporation Sunrise Point-LP Thermal subsystem (rev 21)
00:15.0 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #0 (rev 21)
00:15.1 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #1 (rev 21)
00:15.3 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #3 (rev 21)
00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI #1 (rev 21)
00:1c.0 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #5 (rev f1)
00:1d.0 PCI bridge: Intel Corporation Device 9d18 (rev f1)
00:1f.0 ISA bridge: Intel Corporation Device 9d58 (rev 21)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)
00:1f.3 Audio device: Intel Corporation Device 9d71 (rev 21)
00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)
01:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)
02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller (rev 01)

lsusb

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 003: ID 138a:0094 Validity Sensors, Inc. 
Bus 001 Device 002: ID 04f2:b5a4 Chicony Electronics Co., Ltd 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

rfkill

0: hci0: Bluetooth
	Soft blocked: no
	Hard blocked: no
1: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no

upower -i $(upower -e | grep ‘BAT’)

  native-path:          BAT1
  vendor:               Simplo
  model:                BASE-BAT
  serial:               123456789
  power supply:         yes
  updated:              Wed 16 Nov 2016 12:16:42 PM PST (33 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               discharging
    warning-level:       none
    energy:              70 Wh
    energy-empty:        0 Wh
    energy-full:         82.11 Wh
    energy-full-design:  78 Wh
    energy-rate:         11.12 W
    voltage:             8.28 V
    time to empty:       6.3 hours
    percentage:          85%
    capacity:            100%
    technology:          lithium-polymer
    icon-name:          'battery-full-symbolic'
  History (rate):
    1479327402	11.120	discharging

Compilation

Linux

* MAKEFLAGS=-j5
* make localmodconfig
* make clean (git clean -xdff, with the .config preserved)
* time make

real    7m52.257s
user    28m7.763s
sys 1m35.333s

Lenovo also has a high performance mode (vs balanced) which I enabled in the bios before repeating this compile just to see the impact

real    7m49.803s
user    27m58.650s
sys 1m33.703s

Irony at zenith, if you compile the Linux firmware for ath10k yourself, it will not fucking work. I don’t know where the functional firmware harks from, but if you simply build the kernel and the intree firmware, you get QCA6174/hw3.0-original with all the right names, in the wrong location (looks in hw3.0) and with fuck all chance of actually functioning (even with the correct symlink in place). I don’t think I will be buying a laptop with Qualcomm Atheros QCA6174 ever again.

Standing mysteries

Graphical corruption when wifi firmware is present and i915.enable_rc6 is not explicitly disabled.