cancel
Showing results for 
Search instead for 
Did you mean: 
arcooke
Punch Card
Posts: 18
Registered: ‎08-31-2018
Location: US
Views: 17,065

ThinkPad E485/E585 - Firmware bug ACPI IVRS table

Hey all.  I know Linux is not officially supported on these laptops but it would be nice if this information could be relayed to the UEFI folks.  It could also have an impact in Windows, I'm not sure.

 

This is a bit beyond my level of knowlege, so someone smarter than me will need to make sense of it. 

 

Essentially, Linux will not boot on these devices unless you add "ivrs_ioapic[32]=00:14.0" to the kernel parameters.  I found out this information from a blog post where someone else did some extensive testing.  I don't know if anyone else has actually reported this to Lenovo yet.

 

Blog post here: https://evilazrael.de/node/401

 

Relevant text:

 

Ok, this is really a firmware bug, the ACPI IVRS table lacks at least one entry. Adding ivrs_ioapic[32]=00:14.0 instead of intremap=off is sufficient to make the system boot until Lenovo releases an UEFI update with a working IVRS table. At least UEFI 1.27 (2018-07-24) needs this override. And spec_store_bypass_disable=prctl is still needed for Ubuntu & co. 

The clue is the line "[Firmware Bug]: AMD-Vi: IOAPIC[32] not in IVRS table". I decompiled the ACPI tables, started to read the AMD documentation, but in the end I just guessed the 32 from the error message and 00:14.0 from the lspci output and the Stack Overflow/Ubuntu forum entries.  Interesting stuff, but too much to read in my little time. 

What was helpful is the Linux boot parameter amd_iommu_dump=1 which will dump information from the IVRS table:
[    0.851042] AMD-Vi: Using IVHD type 0x11
[    0.851401] AMD-Vi: device: 00:00.2 cap: 0040 seg: 0 flags: b0 info 0000
[    0.851401] AMD-Vi:        mmio-addr: 00000000feb80000
[    0.851430] AMD-Vi:   DEV_SELECT_RANGE_START  devid: 00:01.0 flags: 00
[    0.851431] AMD-Vi:   DEV_RANGE_END           devid: ff:1f.6
[    0.851870] AMD-Vi:   DEV_ALIAS_RANGE                 devid: ff:00.0 flags: 00 devid_to: 00:14.4
[    0.851871] AMD-Vi:   DEV_RANGE_END           devid: ff:1f.7
[    0.851875] AMD-Vi:   DEV_SPECIAL(HPET[0])           devid: 00:14.0
[    0.851876] AMD-Vi:   DEV_SPECIAL(IOAPIC[33])                devid: 00:14.0
[    0.851877] AMD-Vi:   DEV_SPECIAL(IOAPIC[34])                devid: 00:00.1
[    1.171028] AMD-Vi: IOMMU performance counters supported
 

Resolving devid 00:14.0 was easy via lspci:

 00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 61)
but for 00:00.1 I have not found the device. If anybody knows how to list all device ids and their associate devices/drivers/etc, please mail me. 

 

It's also necessary to add spec_store_bypass_disable=prctl for Ubuntu as mentioned above, though I'm enitrely sure of the function of that.

 

Other than that, Linux is working very well on my E585 with kernel 4.18.5+ and nightly mesa/amdgpu drivers.

 

 

Thanks

Who Me Too'd this topic