Bug 189801 - _ADR replaced by _WADR in DSDT required to get sd card reader and wifi (sdio) to work
Summary: _ADR replaced by _WADR in DSDT required to get sd card reader and wifi (sdio)...
Status: CLOSED DOCUMENTED
Alias: None
Product: ACPI
Classification: Unclassified
Component: BIOS (show other bugs)
Hardware: Intel Linux
: P1 normal
Assignee: Zhang Rui
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-12-07 09:57 UTC by Jonas Aaberg
Modified: 2016-12-22 07:15 UTC (History)
1 user (show)

See Also:
Kernel Version: 4.9-rc8
Subsystem:
Regression: No
Bisected commit-id:


Attachments
DSDT with WADR workaround (45.72 KB, application/x-bzip2)
2016-12-07 09:57 UTC, Jonas Aaberg
Details

Description Jonas Aaberg 2016-12-07 09:57:49 UTC
Created attachment 247071 [details]
DSDT with WADR workaround

To get the sd card reader and wifi (over sdio) to work on Asus T100HA (cherry trail based) computer you have to modify the DSDT.

I've not figured out the work around myself, but here is a description on the work around:

--
after lots of debugging I have wifi working under Linux. The problem is in ACPI DSDT table. The SB.PCI0.SDHB._ADR method returns 0, which is no unique. The makes Linux to guess how to glue devices together (see acpi_find_child_device in drivers/acpi/glue.c) and it ends wrong. The fix for DSDT, which helped me, is here https://github.com/p-an/T100HA-DSDT/...fdce6570537c96 (you can try this one, but better is to dump you own and fix that one).
--
from: http://www.transformerforums.com/forum/asus-transformer-book-t100-alternate-os-s-development/48417-any-success-alternative-os-t100ha-4.html#post358339

(Note this post says that there is fix in later bios updates from Asus, but that is wrong.)

Here is what needs to be done:
--
         Device (SDHB)
         {
-            Name (_ADR, Zero)  // _ADR: Address
+            Name (WADR, Zero)  // _ADR: Address
             Name (_HID, "80860F14" /* Intel Baytrail SDIO/MMC Host Controller */)  // _HID: Hardware ID
             Name (AHID, "INT33BB")
             Name (_CID, "PNP0D40" /* SDA Standard Compliant SD Host Controller */)  // _CID: Compatible ID
--
Comment 1 Zhang Rui 2016-12-22 03:25:19 UTC
According to ACPI spec section 6.1,
For any device that is on a non-enumerable type of bus (for example, an ISA bus), OSPM enumerates the devices' identifier(s) and the ACPI system firmware must supply an _HID object (plus one or more optional objects such as _CID, _CLS, _HRV, _SUB) for each device to enable OSPM to do that. For devices on an enumerable type of bus, such as a PCI bus, the ACPI system must identify which device on the enumerable bus is identified by a particular address; the ACPI
system firmware must supply an _ADR object for each device to enable this. A device object must contain either an _HID object or an _ADR object, but should not contain both.

This is apparently a BIOS bug.
Closed.
Comment 2 Jonas Aaberg 2016-12-22 07:15:53 UTC
Ok. Thanks for explaining.

Note You need to log in before you can comment on or make changes to this bug.