thesofproject / linux

Linux kernel source tree
Other
90 stars 131 forks source link

[BUG] Huawei MateBook D15 headphone and speaker not work #3831

Open tvelazquez opened 2 years ago

tvelazquez commented 2 years ago

@plbossart A few months ago I bought a Huawei Matebook D15 and the sound only works through HDMI. I have followed this guide https://github.com/thesofproject/linux/wiki/ES8336-support And I have compiled this branch https://github.com/thesofproject/linux/tree/es8336-v5.19 http://alsa-project.org/db/?f=77cd3bc0e0fa1b6a398e76f454fc11f017b10b4c

plbossart commented 2 years ago

You are not using the SOF driver!

snd_intel_dspcfg: dsp_driver=1 dyndbg= p

please remove this option, and read the wiki: https://github.com/thesofproject/linux/wiki/ES8336-support

tvelazquez commented 2 years ago

@plbossart I load the SOF driver and there is no sound card. http://alsa-project.org/db/?f=7b41c67fbe773bd8a70ecdb3946a3b264bc2a7d7

plbossart commented 2 years ago

The last line of the dmesg log shows you have started probing the machine driver

[ 21.210242] sof-essx8336 sof-essx8336: quirk mask 0x20

If you don't see a card created it means that that probe failed somewhere. Not sure what happens, you have dynamic debug enabled but nothing is shown.

You will have to trace manually where the issue happens, likely by adding some dev_info statements in sound/soc/intel/boards/sof_es8336.c

plbossart commented 2 years ago

you may also want to try and enable dynamic debug for the ASoC core, this will be very verbose but let you know why the card registration failed

options snd-soc-core dyndbg=+pmf

tvelazquez commented 2 years ago

@plbossart I add some dev_info:

priv->gpio_speakers = gpiod_get_optional(codec_dev, "speakers-enable", GPIOD_OUT_LOW);
if (IS_ERR(priv->gpio_speakers)) {
    ret = dev_err_probe(dev, PTR_ERR(priv->gpio_speakers),
                "could not get speakers-enable GPIO\n");
    dev_info(dev, "could not get speakers-enable GPIO\n");
    goto err_put_codec;
}

[ 52.247139] sof-essx8336 sof-essx8336: quirk mask 0x20 [ 52.247141] sof-essx8336 sof-essx8336: quirk SSP0 [ 52.247142] sof-essx8336 sof-essx8336: quirk DMIC enabled [ 52.247168] sof-essx8336 sof-essx8336: could not get speakers-enable GPIO

http://alsa-project.org/db/?f=5adfb126cedacfecb5bc021097816853ebeb769b

plbossart commented 2 years ago

That's not good news @tvelazquez, the problem is likely a BIOS issue or something. That's super hard to debug remotely. You are getting an error for an optional gpio, not sure what happens.

Try to add dynamic debug in https://elixir.bootlin.com/linux/latest/source/drivers/gpio/gpiolib.c and see what the results are.

You could also bypass this and just set priv->gpio_speakers = NULL and see what happens.

tvelazquez commented 2 years ago

@plbossart dynamic debug enabled for gpiolib and add priv->gpio_speakers = NULL;

[ 9.281388] sof-essx8336 sof-essx8336: quirk mask 0x20 [ 9.281390] sof-essx8336 sof-essx8336: quirk SSP0 [ 9.281391] sof-essx8336 sof-essx8336: quirk DMIC enabled [ 9.281413] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: GPIO lookup for consumer speakers-enable [ 9.281414] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: using ACPI for GPIO lookup [ 9.281428] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: No GPIO consumer speakers-enable found [ 9.281428] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: GPIO lookup for consumer headphone-enable [ 9.281429] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: using ACPI for GPIO lookup [ 9.281430] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: using lookup tables for GPIO lookup [ 9.281431] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: No GPIO consumer headphone-enable found [ 9.281433] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link SSP0-Codec [ 9.281433] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link dmic01 [ 9.281434] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link dmic16k [ 9.281435] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp1 [ 9.281435] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp2 [ 9.281436] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp3 [ 9.281437] snd_soc_core:snd_soc_add_pcm_runtime: sof-essx8336 sof-essx8336: ASoC: binding SSP0-Codec [ 9.281438] snd_soc_core:soc_dai_link_sanity_check: sof-essx8336 sof-essx8336: ASoC: codec component i2c-ESSX8336:00 not found for link SSP0-Codec [ 9.281440] sof-essx8336 sof-essx8336: snd_soc_register_card failed: -517

plbossart commented 2 years ago

[ 9.281437] snd_soc_core:snd_soc_add_pcm_runtime: sof-essx8336 sof-essx8336: ASoC: binding SSP0-Codec [ 9.281438] snd_soc_core:soc_dai_link_sanity_check: sof-essx8336 sof-essx8336: ASoC: codec component i2c-ESSX8336:00 not found for link SSP0-Codec

that's a completely different issue to the initial gpio issue. This hints at a configuration issue where maybe the codec is not probed.

I don't have any bandwidth to help in the next two weeks, sorry.

tvelazquez commented 2 years ago

@plbossart What dumps do you need to do the analysis? acpidump? I would like to provide you with all the information you need. Thanks.

plbossart commented 2 years ago

@tvelazquez make sure snd-soc-es8316 is probed and provide the information shown in /sys/kernel/debug/asoc/components

tvelazquez commented 2 years ago

@plbossart added some printk at es8316_probe() and es8316_i2c_probe() but dmesg doesn't show it.

/sys/kernel/debug/asoc/components: 0000:00:1f.3 ehdaudio0D2 dmic-codec snd-soc-dummy snd-soc-dummy

plbossart commented 2 years ago

@tvelazquez can you share the DSDT and also verify that this codec driver is part of the build? Wondering if there is some sort of I2C configuration issue.

tvelazquez commented 2 years ago

@plbossart here you have the DSDT https://github.com/tvelazquez/thesofproject/raw/main/dsdt.dat https://github.com/tvelazquez/thesofproject/raw/main/dsdt.dsl

plbossart commented 2 years ago

I don't see anything blantantly wrong in the DSDT @tvelazquez but it's also on the rather convoluted side.

I don't see why e.g. there are two addresses for this codec Name (SBUF, ResourceTemplate () { I2cSerialBusV2 (0x0010, ControllerInitiated, 0x00061A80, AddressingMode7Bit, "\_SB.PC00.I2C2", 0x00, ResourceConsumer, , Exclusive, ) I2cSerialBusV2 (0x0011, ControllerInitiated, 0x00061A80, AddressingMode7Bit, "\_SB.PC00.I2C2", 0x00, ResourceConsumer, , Exclusive, )

I think only the second one is valid, that's what I see for other devices.

I am afraid you'll have to look into other ways to debug why the driver is not probed, or ask @yangxiaohua2009

yangxiaohua2009 commented 2 years ago

@tvelazquez Do you know how to change ACPI in Linux? Please remove the second I2C address.

You can verify it by install i2c-tools and dump the i2c by sudo i2cdump -f -y 1 0x10 1 is your bus number, may be 0-10. 0x10 is your chip i2c address, 0x10 or 0x11. cc1e20a961e2af65cdde5303dcef824

plbossart commented 2 years ago

@andy-shev would you happen to know if there's a way to ignore one of the two addresses in ACPI? see above the DSDT contains two addresses for the same codec, this looks wrong?

tvelazquez commented 2 years ago

@plbossart Thanks for your analysis and support!

@yangxiaohua2009 I have never changed the ACPI and I have to study how to do it. The same i2cdump output for all combinations of bus number 0 to 10 and i2c addresses 0x10 or 0x11.

No size specified (using byte-data access) 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 10: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 20: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 30: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 40: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 50: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 60: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 70: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 80: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 90: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX a0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX b0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX c0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX d0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX e0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX f0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX

andy-shev commented 2 years ago

@andy-shev would you happen to know if there's a way to ignore one of the two addresses in ACPI? see above the DSDT contains two addresses for the same codec, this looks wrong?

Why do you think it's a single codec there? We already have an example of two or more codecs in the same device node in ACPI (see serial-multi-instantiate.c for the details). I.o.w. without schematic and datasheet to the codec itself it's hard to say if it's wrong table or driver or something else (might be a multi-functional device, e.g. camera sensor + motion coil + ... but for the audio case).

plbossart commented 2 years ago

@andy-shev we've never seen a form-factor device with e.g. two headset codecs and jacks. This sort of low-cost devices only rely on one codec, that's a safe assumption. Put differently, all the existing devices with this ES8336 rely on a single codec so there's no precedent with two.

andy-shev commented 2 years ago

@andy-shev we've never seen a form-factor device with e.g. two headset codecs and jacks. This sort of low-cost devices only rely on one codec, that's a safe assumption. Put differently, all the existing devices with this ES8336 rely on a single codec so there's no precedent with two.

What about multifunction device then? Is it possible to find a schematic of the board?

yangxiaohua2009 commented 2 years ago

@plbossart lt's a longer story behind the two I2C address. We recommand less than two reflow soldering, but the OEM reflow soldering four times. The high temperature causes detachment between bonding wire and the lead frame, making CE pin (I2C address pin) float, so the I2C address becomes float. It may be either 0x10 or 0x11. When they found the problem, tens of thousands has been made so it's impossible to modify the hardware. They then came up with the idea that they can set up two I2C addresses in the ACPI so that the driver can get two I2C addresses. Since at least one of them can work, the CODEC can now work well.

The problem was solved later with new chips, and the problematic chips recalled. As a conclusion, the two I2C addresses is just a way to solve I2C failure and only for the specific model, no need to pay special attention for it.

plbossart commented 2 years ago

Thanks for the explanations @yangxiaohua2009.

"the codec works well" might be a true statement for the Windows drivers, it's not true for LInux, as measured by es8316_probe() and es8316_i2c_probe() not being invoked (see results from @tvelazquez above), likely due to an earlier error handling in the ACPI or I2C subsystems.

andy-shev commented 2 years ago

@jwrdegoede, read above, very interesting case! It also might affect serial-multi-instantiate.c.

jwrdegoede commented 2 years ago

@jwrdegoede, read above, very interesting case! It also might affect serial-multi-instantiate.c.

Ugh, this is just so ugly (the 1 codec which will have 1 of 2 possible addresses thing).

So the only way I can come up with to solve this would be to

  1. Add the ACPI HID for the codec to ignore_serial_bus_idsignore_serial_bus_ids in drivers/acpi/scan.c: acpi_device_enumeration_by_parent()
  2. Write a new driver binding to the ACPI HID, which checks both addresses and instantiates a codec device for the working one. While passing through the firmware-node as fwnode for the instantiated i2c-client.

Note doing things this way will break ACPI HID based driver <-> device matching. So this will require the codec driver to get an old fashioned i2c_client_id added to it for the binding to still work.

An even uglier alternative would be would be to modify drivers/i2c/i2c-core-acpi.c to recognize this ACPI HID and then if there is more then 1 i2c address to do some simple i2c connectivity check and then pick the address based on that check.

That even uglier approach is probably easier, so it might be a good way to at least get things to work for @tvelazquez . Although if @plbossart has at least 1 similar device, then implementing the addition to ignore_serial_bus_ids + special driver should not be that much work and it should be testable on a device with just 1 i2cresource in the ACPI table.

A 3th option would be to just use a DSDT overlay and drop the first I2Cresource. But that is not really a generic fix for other users impacted by the same issue.

andy-shev commented 2 years ago

@jwrdegoede, thanks for your ideas! From hw perspective my understanding is that the floating pin can take any state at any time (especially taking into account temperature differences as cold start), the robust solution is to try two addresses for each transaction, and it sounds to me like a dirty hack in I2C core would be needed. But the more I think about this the more I tend to tell users that this hardware is broken for any sane software.

plbossart commented 2 years ago

I tend to agree with @andy-shev, what are the odds that the address used on startup remains functional during a typical 'day use' scenario. In addition I don't have ANY device to test, so can't really help.

jwrdegoede commented 2 years ago

@andy-shev you are right about the floating pin being able to take any value, but this is likely a dual-purpose bootstrap + other-purpose pin. So at power-on-reset it gets read once (the bootstrap) to determine the i2c address and that then gets latched and after that the pin switches to its other purpose which is unused in this design.

So the address can be different every boot, but it is stable after boot.

I believe that if each transfer would potentially need a different address that things then would not even work under Windows.

@plbossart ah I assumed you had at least one alderlake device with an es83x6 in there. Yeah without hardware developing a fix is going to be very hard.

koffiato commented 1 year ago

Still no luck unfortunately, can't get any sound input/output to work.

tvelazquez commented 1 year ago

@yangxiaohua2009 I compiled https://github.com/thesofproject/linux/tree/es8336-v6.0 and removed the second I2C address, but same results.

[ 0.008024] ACPI: DSDT ACPI table found in initrd [kernel/firmware/acpi/dsdt.aml][0x3b562] [ 0.008074] ACPI: Table Upgrade: override [DSDT-HUAWEI- TGL-ULT] [ 0.008075] ACPI: DSDT 0x0000000075BA2000 Physical table override, new table: 0x0000000072AB2000 [ 0.008076] ACPI: DSDT 0x0000000072AB2000 03B562 (v02 HUAWEI TGL-ULT 00000003 INTL 20220331) [ 21.064509] sof-essx8336 sof-essx8336: quirk mask 0x20 [ 21.064510] sof-essx8336 sof-essx8336: quirk SSP0 [ 21.064510] sof-essx8336 sof-essx8336: quirk DMIC enabled [ 21.064556] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link SSP0-Codec [ 21.064557] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link dmic01 [ 21.064558] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link dmic16k [ 21.064558] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp1 [ 21.064559] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp2 [ 21.064559] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp3 [ 21.064560] snd_soc_core:snd_soc_add_pcm_runtime: sof-essx8336 sof-essx8336: ASoC: binding SSP0-Codec [ 21.064561] snd_soc_core:soc_dai_link_sanity_check: sof-essx8336 sof-essx8336: ASoC: codec component i2c-ESSX8336:00 not found for link SSP0-Codec [ 21.064563] sof-essx8336 sof-essx8336: snd_soc_register_card failed: -517 [ 21.064660] platform sof-essx8336: deferred probe pending [ 21.064667] i2c i2c-GXTP7863:00: deferred probe pending

It seems that now i2cdump works:

# i2cdump -f -y 1 0x10
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 03 03 00 20 11 00 11 00 00 01 00 00 f8 3f 00 00    ??. ?.?..?..??..
10: 01 fc 28 00 00 33 00 00 88 06 22 03 0f 00 80 80    ??(..3..??"??.??
20: 00 00 c0 00 01 08 10 c0 00 1c 00 b0 32 03 00 11    ..?.????.?.?2?.?
30: 10 00 00 c0 c0 1f f7 fd ff 1f f7 fd ff 1f f7 fd    ?..?????.???.???
40: ff 1f f7 fd ff 1f f7 fd ff 1f f7 fd ff 00 00 00    .???.???.???....
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 03 03 00 20 11 00 11 00 00 01 00 00 f8 3f 00 00    ??. ?.?..?..??..
90: 01 fc 28 00 00 33 00 00 88 06 22 03 0f 00 80 80    ??(..3..??"??.??
a0: 00 00 c0 00 01 08 10 c0 00 1c 00 b0 32 03 00 11    ..?.????.?.?2?.?
b0: 10 00 00 c0 c0 1f f7 fd ff 1f f7 fd ff 1f f7 fd    ?..?????.???.???
c0: ff 1f f7 fd ff 1f f7 fd ff 1f f7 fd ff 00 00 00    .???.???.???....
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
koffiato commented 1 year ago

Why is this issue closed?

yangxiaohua2009 commented 1 year ago

@tvelazquez Is the codec driver loaded properly? can you see snd_soc_es8316 using lsmod | grep snd ?

tvelazquez commented 1 year ago

@yangxiaohua2009 the codec driver is loaded.

http://alsa-project.org/db/?f=e8575fee7c036dfff3bb12f6880b6a32037c62f7

tvelazquez commented 1 year ago

@yangxiaohua2009 @plbossart What additional tests could I do?

yangxiaohua2009 commented 1 year ago

You can see the codec driver in lsmod, but the es8316_i2c_probe fuction is not called, making the probe of sound card failed. can you add print message to make sure the es8316_i2c_probe failed to be called? If so, it's because the dsdt is wrong. Can you show your overriding dsdt table?

tvelazquez commented 1 year ago

@yangxiaohua2009 here you have the DSDT https://github.com/tvelazquez/thesofproject/blob/main/dsdt_override.dat https://github.com/tvelazquez/thesofproject/blob/main/dsdt_override.dsl

Added a printk at es8316_i2c_probe() but dmesg doesn't show it.

yangxiaohua2009 commented 1 year ago

The dsdt looks good but es8316_i2c_probe is not called. Usually when the HID 'ESSX8336' in dsdt matches the ID in es8316.c, es8316_i2c_probe is called. I also see a device named ESSX8336 in your alsainfo.

Can you see the device /sys/bus/i2c/devices/i2c-ESSX8336\:00 ? Can you blacklist and then manuelly probe the module snd_soc_es8316 and snd_soc_sof_es8336 using modprobe and see what happens?

tvelazquez commented 1 year ago

@yangxiaohua2009 the device exist:

~ # ls -l  /sys/bus/i2c/devices/i2c-ESSX8336:00
lrwxrwxrwx 1 root root 0 en   27 17:37 /sys/bus/i2c/devices/i2c-ESSX8336:00 -> ../../../devices/pci0000:00/0000:00:15.2/i2c_designware.1/i2c-1/i2c-ESSX8336:00
~ # ls -l  /sys/bus/i2c/devices/i2c-ESSX8336:00/
total 0
lrwxrwxrwx 1 root root    0 en   27 17:37 firmware_node -> ../../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:7c/ESSX8336:00
-r--r--r-- 1 root root 4096 en   27 17:36 modalias
-r--r--r-- 1 root root 4096 en   27 17:37 name
drwxr-xr-x 2 root root    0 en   27 17:36 power
lrwxrwxrwx 1 root root    0 en   27 17:37 subsystem -> ../../../../../../bus/i2c
-rw-r--r-- 1 root root 4096 en   27 17:36 uevent
-r--r--r-- 1 root root 4096 en   27 17:37 waiting_for_supplier

snd_soc_es8316 and snd_soc_sof_es8336 blacklisted and then manually loaded, but the same result, the es8316_i2c_probe() is not called:

[  191.686000] sof-essx8336 sof-essx8336: quirk mask 0x20
[  191.686003] sof-essx8336 sof-essx8336: quirk SSP0
[  191.686003] sof-essx8336 sof-essx8336: quirk DMIC enabled
[  191.686051] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link SSP0-Codec
[  191.686052] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link dmic01
[  191.686053] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link dmic16k
[  191.686054] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp1
[  191.686054] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp2
[  191.686055] snd_soc_core:soc_check_tplg_fes: sof-essx8336 sof-essx8336: info: override BE DAI link iDisp3
[  191.686057] snd_soc_core:snd_soc_add_pcm_runtime: sof-essx8336 sof-essx8336: ASoC: binding SSP0-Codec
[  191.686058] snd_soc_core:soc_dai_link_sanity_check: sof-essx8336 sof-essx8336: ASoC: codec component i2c-ESSX8336:00 not found for link SSP0-Codec
[  191.686060] sof-essx8336 sof-essx8336: snd_soc_register_card failed: -517
yangxiaohua2009 commented 1 year ago

@tvelazquez Can you change the _CRS part and see what happens? Basically I changed the _CRS and _INI part according to working dsl here cnl_dsdt.zip

If this still not work I have no idea why es8316_i2c_probe failed to be called.

        Device (ESSX)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Name (_HID, "ESSX8336")  // _HID: Hardware ID
            Name (_SUB, "12345678")  // _SUB: Subsystem ID
            Name (_CID, "ESSX8336")  // _CID: Compatible ID
            Name (_DDN, "ES8336")  // _DDN: DOS Device Name
            Name (_UID, One)  // _UID: Unique ID
            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                 Name (SBUF, ResourceTemplate ()
                    {
                    I2cSerialBusV2 (0x0010, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PC00.I2C2",
                    0x00, ResourceConsumer, , Exclusive,
                    )
                GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
                    "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
                GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
                    "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
                GpioInt (Edge, ActiveBoth, ExclusiveAndWake, PullDefault, 0x0000,
                    "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
            })
                CreateWordField (SBUF, 0x59, PIN1)
                CreateWordField (SBUF, 0x7C, PIN2)
                CreateWordField (SBUF, 0x9F, INT1)
                PIN1 = GNUM (0x09000010)
                PIN2 = GNUM (0x09000011)
                INT1 = GNUM (0x090B000D)
                Return (SBUF) /* \_SB_.PC00.I2C2.ESSX.SBUF */
            }

            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                Return (0x0F)
            }

            Method (_PS3, 0, NotSerialized)  // _PS3: Power State 3
            {
            }

            Method (_PS0, 0, NotSerialized)  // _PS0: Power State 0
            {
            }

            Method (_DIS, 0, NotSerialized)  // _DIS: Disable Device
            {
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                If ((Arg0 == Buffer (0x10)
                        {
                            /* 0000 */  0x04, 0x0C, 0x80, 0xA9, 0x16, 0xE0, 0x3E, 0x34,  // ......>4
                            /* 0008 */  0x41, 0xF4, 0x6B, 0xCC, 0xE7, 0x0F, 0x43, 0x32   // A.k...C2
                        }))
                {
                    If ((Arg2 == Zero))
                    {
                        Return (0xBB)
                    }

                    If ((Arg2 == One))
                    {
                        Return (0xBB)
                    }

                    If ((Arg2 == 0x02))
                    {
                        Return (0x02)
                    }

                    If ((Arg2 == 0x03))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x06))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x0F))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x10))
                    {
                        Return (0x06)
                    }

                    If ((Arg2 == 0x20))
                    {
                        Return (0x08)
                    }

                    If ((Arg2 == 0x2C))
                    {
                        Return (0x03)
                    }

                    If ((Arg2 == 0x2D))
                    {
                        Return (0x1B)
                    }

                    If ((Arg2 == 0x11))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x21))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x12))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x22))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x13))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x23))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x14))
                    {
                        Return (0x0A)
                    }

                    If ((Arg2 == 0x24))
                    {
                        Return (0x0A)
                    }

                    If ((Arg2 == 0x15))
                    {
                        Return (0x12)
                    }

                    If ((Arg2 == 0x25))
                    {
                        Return (0x12)
                    }

                    If ((Arg2 == 0x16))
                    {
                        Return (0x08)
                    }

                    If ((Arg2 == 0x26))
                    {
                        Return (0x08)
                    }

                    If ((Arg2 == 0x17))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x27))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x18))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x28))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x19))
                    {
                        Return (0x02)
                    }

                    If ((Arg2 == 0x29))
                    {
                        Return (0x02)
                    }

                    If ((Arg2 == 0x1A))
                    {
                        Return (0x03)
                    }

                    If ((Arg2 == 0x2A))
                    {
                        Return (0x03)
                    }

                    If ((Arg2 == 0x1B))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x2B))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x40))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x50))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x41))
                    {
                        Return (0xBB)
                    }

                    If ((Arg2 == 0x51))
                    {
                        Return (0xBB)
                    }

                    If ((Arg2 == 0x42))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x52))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x44))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x54))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x45))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x55))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x4A))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x5A))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x46))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x56))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x5B))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x86))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x8E))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x8F))
                    {
                        Return (0x11)
                    }

                    If ((Arg2 == 0x90))
                    {
                        Return (0x22)
                    }

                    If ((Arg2 == 0x91))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x92))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x93))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0x94))
                    {
                        Return (0x61)
                    }

                    If ((Arg2 == 0x95))
                    {
                        Return (0x41)
                    }

                    If ((Arg2 == 0x96))
                    {
                        Return (0x41)
                    }

                    If ((Arg2 == 0x97))
                    {
                        Return (0x41)
                    }

                    If ((Arg2 == 0x98))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x99))
                    {
                        Return (0x80)
                    }

                    If ((Arg2 == 0x9A))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x9B))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x9C))
                    {
                        Return (0x80)
                    }

                    If ((Arg2 == 0x9D))
                    {
                        Return (0x80)
                    }

                    If ((Arg2 == 0x9E))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0x9F))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0xA0))
                    {
                        Return (0x71)
                    }

                    If ((Arg2 == 0xA1))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xA2))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xA3))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xA4))
                    {
                        Return (0x71)
                    }

                    If ((Arg2 == 0xA5))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xA6))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xA7))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xA8))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xA9))
                    {
                        Return (0x30)
                    }

                    If ((Arg2 == 0xAA))
                    {
                        Return (0x30)
                    }

                    If ((Arg2 == 0xAB))
                    {
                        Return (0x30)
                    }

                    If ((Arg2 == 0xAC))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xAD))
                    {
                        Return (0x30)
                    }

                    If ((Arg2 == 0xAE))
                    {
                        Return (0x30)
                    }

                    If ((Arg2 == 0xAF))
                    {
                        Return (0x30)
                    }

                    If ((Arg2 == 0xB0))
                    {
                        Return (0x10)
                    }

                    If ((Arg2 == 0xB1))
                    {
                        Return (0x20)
                    }

                    If ((Arg2 == 0xB2))
                    {
                        Return (0x20)
                    }

                    If ((Arg2 == 0xB3))
                    {
                        Return (0x20)
                    }

                    If ((Arg2 == 0xB4))
                    {
                        Return (0xA0)
                    }

                    If ((Arg2 == 0xB5))
                    {
                        Return (0xB0)
                    }

                    If ((Arg2 == 0xB6))
                    {
                        Return (0xB0)
                    }

                    If ((Arg2 == 0xB7))
                    {
                        Return (0xB0)
                    }

                    If ((Arg2 == 0xB8))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0xB9))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0xBA))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0xBB))
                    {
                        Return (One)
                    }

                    If ((Arg2 == 0xBC))
                    {
                        Return (0x03)
                    }

                    If ((Arg2 == 0xBD))
                    {
                        Return (0x04)
                    }

                    If ((Arg2 == 0xBE))
                    {
                        Return (0x04)
                    }

                    If ((Arg2 == 0xBF))
                    {
                        Return (0x04)
                    }

                    If ((Arg2 == 0xC0))
                    {
                        Return (0xFF)
                    }

                    If ((Arg2 == 0xC1))
                    {
                        Return (0xFF)
                    }

                    If ((Arg2 == 0xC2))
                    {
                        Return (0xFF)
                    }

                    If ((Arg2 == 0xC3))
                    {
                        Return (0xFF)
                    }

                    If ((Arg2 == 0xC4))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0xC5))
                    {
                        Return (0xB3)
                    }

                    If ((Arg2 == 0xC6))
                    {
                        Return (0xC9)
                    }

                    If ((Arg2 == 0xC7))
                    {
                        Return (0x8C)
                    }

                    If ((Arg2 == 0xC8))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0xC9))
                    {
                        Return (0xB3)
                    }

                    If ((Arg2 == 0xCA))
                    {
                        Return (0xC9)
                    }

                    If ((Arg2 == 0xCB))
                    {
                        Return (0x8C)
                    }

                    If ((Arg2 == 0xCC))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0xCD))
                    {
                        Return (0xB3)
                    }

                    If ((Arg2 == 0xCE))
                    {
                        Return (0xC9)
                    }

                    If ((Arg2 == 0xCF))
                    {
                        Return (0x8C)
                    }

                    If ((Arg2 == 0xD0))
                    {
                        Return (0xFF)
                    }

                    If ((Arg2 == 0xD1))
                    {
                        Return (0xFF)
                    }

                    If ((Arg2 == 0xD2))
                    {
                        Return (0xFF)
                    }

                    If ((Arg2 == 0xD3))
                    {
                        Return (0xFF)
                    }

                    If ((Arg2 == 0xD4))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0xD5))
                    {
                        Return (0xC6)
                    }

                    If ((Arg2 == 0xD6))
                    {
                        Return (0x73)
                    }

                    If ((Arg2 == 0xD7))
                    {
                        Return (0x86)
                    }

                    If ((Arg2 == 0xD8))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0xD9))
                    {
                        Return (0xC6)
                    }

                    If ((Arg2 == 0xDA))
                    {
                        Return (0x73)
                    }

                    If ((Arg2 == 0xDB))
                    {
                        Return (0x86)
                    }

                    If ((Arg2 == 0xDC))
                    {
                        Return (Zero)
                    }

                    If ((Arg2 == 0xDD))
                    {
                        Return (0xC6)
                    }

                    If ((Arg2 == 0xDE))
                    {
                        Return (0x73)
                    }

                    If ((Arg2 == 0xDF))
                    {
                        Return (0x86)
                    }

                    If ((Arg2 == 0xFE))
                    {
                        ^^^LPCB.EC0.XXJC = One
                        Return (0xAA)
                    }
                }

                Return (0xFF)
            }
        }
tvelazquez commented 1 year ago

@yangxiaohua2009 same result with _CRS & _INI changed. The es8316_i2c_probe failed to be called. This is a nightmare.

@mchehab @plbossart good job with Improve quirks detection for es8336 #4112 I tried mchehab:sound-es8336 with dynamic debug enabled and this is the

dmesg ``` [ 10.596304] acpi:acpi_bus_get_status: ACPI: Device [I2C1] status [0000000f] [ 10.596305] acpi:acpi_util_eval_error: ACPI: \_SB_.PC00.I2C2: ACPI: utils: Evaluate [_STA]: AE_NOT_FOUND [ 10.596306] acpi:acpi_bus_get_status: ACPI: Device [I2C2] status [0000000f] [ 10.596310] acpi:acpi_evaluate_integer: ACPI: \_SB_.PC00.I2C2.ESSX: ACPI: utils: Return value [15] [ 10.596311] acpi:acpi_bus_get_status: ACPI: Device [ESSX] status [0000000f] [ 10.596316] acpi:acpi_util_eval_error: ACPI: \_SB_.PC00.I2C3: ACPI: utils: Evaluate [_STA]: AE_NOT_FOUND -- [ 10.598744] i2c_core:i2c_new_client_device: i2c i2c-0: client [GXTP7863:00] registered with bus id i2c-GXTP7863:00 [ 10.598751] acpi:acpi_evaluate_integer: ACPI: \_SB_.PC00.I2C2.ESSX: ACPI: utils: Return value [15] [ 10.598752] acpi:acpi_bus_get_status: ACPI: Device [ESSX] status [0000000f] [ 10.599133] acpi:acpi_evaluate_integer: ACPI: \_SB_.PC00.I2C3.HWSP: ACPI: utils: Return value [15] -- [ 10.599546] acpi:acpi_iommu_configure_id: intel-lpss 0000:00:15.2: Adding to IOMMU failed: -19 [ 10.599594] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state change: D0 -> D0 [ 10.599596] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Already in D0 [ 10.599715] acpi:acpi_device_notify: wakeup wakeup32: No ACPI support -- [ 10.611409] acpi:acpi_pci_irq_enable: intel-lpss 0000:00:15.2: PCI INT C -> GSI 29 (level, low) -> IRQ 29 [ 10.611462] acpi:acpi_device_notify: ACPI: \_SB_.PC00.I2C2: ACPI: Bound to device idma64.1 [ 10.611475] acpi:acpi_iommu_configure_id: idma64 idma64.1: Adding to IOMMU failed: -19 -- [ 10.611720] idma64 idma64.1: Found Intel integrated DMA 64-bit [ 10.611732] acpi:acpi_device_notify: ACPI: \_SB_.PC00.I2C2: ACPI: Bound to device i2c_designware.1 [ 10.611740] acpi:acpi_iommu_configure_id: i2c_designware i2c_designware.1: Adding to IOMMU failed: -19 -- [ 10.612525] acpi:acpi_bus_get_status: ACPI: Device [I2C1] status [0000000f] [ 10.612527] acpi:acpi_util_eval_error: ACPI: \_SB_.PC00.I2C2: ACPI: utils: Evaluate [_STA]: AE_NOT_FOUND [ 10.612527] acpi:acpi_bus_get_status: ACPI: Device [I2C2] status [0000000f] [ 10.612530] acpi:acpi_evaluate_integer: ACPI: \_SB_.PC00.I2C2.ESSX: ACPI: utils: Return value [15] [ 10.612531] acpi:acpi_bus_get_status: ACPI: Device [ESSX] status [0000000f] [ 10.612537] acpi:acpi_util_eval_error: ACPI: \_SB_.PC00.I2C3: ACPI: utils: Evaluate [_STA]: AE_NOT_FOUND -- [ 10.613738] acpi:acpi_bus_get_status: ACPI: Device [PSM] status [00000000] [ 10.613741] acpi:acpi_util_eval_error: ACPI: \_SB_.PC00.I2C2: ACPI: utils: Evaluate [_SEM]: AE_NOT_FOUND [ 10.613742] i2c_core:i2c_detect_slave_mode: i2c_designware i2c_designware.1: ACPI slave is not supported yet -- [ 10.613776] gpiolib:gpiod_get_index: i2c_designware i2c_designware.1: No GPIO consumer scl found [ 10.613780] acpi:acpi_device_notify: ACPI: \_SB_.PC00.I2C2: ACPI: Bound to device i2c-1 [ 10.613790] i2c_core:i2c_register_adapter: i2c i2c-1: adapter [Synopsys DesignWare I2C adapter] registered -- [ 10.613888] acpi:acpi_bus_get_status: ACPI: Device [XDCI] status [00000000] [ 10.613905] acpi:acpi_evaluate_integer: ACPI: \_SB_.PC00.I2C2.ESSX: ACPI: utils: Return value [15] [ 10.613906] acpi:acpi_bus_get_status: ACPI: Device [ESSX] status [0000000f] [ 10.613914] acpi:acpi_device_notify: ACPI: \_SB_.PC00.I2C2.ESSX: ACPI: Bound to device i2c-ESSX8336:00 [ 10.613922] i2c_core:i2c_new_client_device: i2c i2c-1: client [ESSX8336:00] registered with bus id i2c-ESSX8336:00 [ 10.614234] acpi:acpi_evaluate_integer: ACPI: \_SB_.PC00.I2C3.HWSP: ACPI: utils: Return value [15] -- [ 10.625204] acpi:acpi_device_probe: ACPI: Found driver [tpm_crb] for device [TPM] [ 10.626263] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state change: D0 -> D3cold [ 10.626273] intel-lpss 0000:00:15.3: enabling device (0004 -> 0006) [ 10.626450] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state changed to D3hot [ 10.626464] acpi:acpi_pci_irq_check_entry: ACPI: PCI: 0000:00:15[D] -> [30] -- [ 10.627812] acpi:acpi_bus_get_status: ACPI: Device [I2C1] status [0000000f] [ 10.627813] acpi:acpi_util_eval_error: ACPI: \_SB_.PC00.I2C2: ACPI: utils: Evaluate [_STA]: AE_NOT_FOUND [ 10.627814] acpi:acpi_bus_get_status: ACPI: Device [I2C2] status [0000000f] [ 10.627819] acpi:acpi_evaluate_integer: ACPI: \_SB_.PC00.I2C2.ESSX: ACPI: utils: Return value [15] [ 10.627820] acpi:acpi_bus_get_status: ACPI: Device [ESSX] status [0000000f] [ 10.627829] acpi:acpi_util_eval_error: ACPI: \_SB_.PC00.I2C3: ACPI: utils: Evaluate [_STA]: AE_NOT_FOUND -- [ 10.784106] acpi:acpi_device_probe: ACPI: Found driver [video] for device [GFX0] [ 10.803856] acpi:acpi_device_notify: platform snd-soc-dummy: No ACPI support [ 10.803903] snd_soc_core:snd_soc_register_dai: snd-soc-dummy snd-soc-dummy: ASoC: dynamically register DAI snd-soc-dummy [ 10.803904] snd_soc_core:snd_soc_register_dai: snd-soc-dummy snd-soc-dummy: ASoC: Registered DAI 'snd-soc-dummy-dai' -- [ 11.849678] mousedev: PS/2 mouse device common for all mice [ 11.849921] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state change: D3hot -> D0 [ 11.849932] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state changed to D0 [ 11.851307] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C0: PM: Power state change: D3hot -> D0 -- [ 11.854117] videodev: Linux video capture interface: v2.00 [ 11.861456] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 11.861471] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 11.861480] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 11.861507] i2c_core:i2c_register_driver: i2c-core: driver [es8316] registered [ 11.863378] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS -- [ 11.863855] acpi:acpi_device_notify: hwmon hwmon1: No ACPI support [ 11.863887] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 11.863897] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 11.863903] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 11.863955] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS -- [ 11.867136] acpi:acpi_device_notify: powercap intel-rapl:1: No ACPI support [ 11.867182] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 11.867188] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 11.867192] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 11.867275] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS -- [ 12.057552] i2c_core:i2c_new_scanned_device: i2c i2c-13: Probing failed, no device found [ 12.057623] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.057634] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.057638] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.057697] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS -- [ 12.062416] iTCO_wdt iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0) [ 12.062441] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.062451] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.062456] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.062505] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS -- [ 12.062974] gpiolib:gpiod_get_index: usb 1-10: No GPIO consumer reset found [ 12.062989] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.062995] acpi:acpi_device_notify: bluetooth hci0: No ACPI support [ 12.062995] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.063002] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.063011] acpi:acpi_device_notify: rfkill rfkill1: No ACPI support -- [ 12.063043] usbcore: registered new interface driver btusb [ 12.063084] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.063100] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.063107] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.063139] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.063214] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.063215] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS [ 12.063268] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.064267] Bluetooth: hci0: Bootloader revision 0.4 build 0 week 30 2018 -- [ 12.065275] Bluetooth: hci0: Minimum firmware build 1 week 10 2014 [ 12.066326] acpi:acpi_iommu_configure_id: snd_hda_intel 0000:00:1f.3: Adding to IOMMU failed: -19 [ 12.066330] snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040100 [ 12.066838] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS [ 12.066841] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.066875] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.066883] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.067435] Bluetooth: hci0: Found device firmware: intel/ibt-19-0-4.sfi -- [ 12.072248] usbcore: registered new interface driver uvcvideo [ 12.072261] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.072311] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS [ 12.072316] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.072356] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.108274] acpi:acpi_iommu_configure_id: sof-audio-pci-intel-tgl 0000:00:1f.3: Adding to IOMMU failed: -19 [ 12.108279] sof-audio-pci-intel-tgl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040100 [ 12.108333] snd_sof_pci:sof_pci_probe: sof-audio-pci-intel-tgl 0000:00:1f.3: PCI DSP detected [ 12.108340] sof-audio-pci-intel-tgl 0000:00:1f.3: enabling device (0000 -> 0002) -- [ 12.108555] sof-audio-pci-intel-tgl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_exit [i915]) [ 12.108656] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.108659] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS [ 12.108695] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.108710] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.110097] snd_soc_core:snd_soc_register_dai: dmic-codec dmic-codec: ASoC: dynamically register DAI dmic-codec [ 12.110100] snd_soc_core:snd_soc_register_dai: dmic-codec dmic-codec: ASoC: Registered DAI 'dmic-hifi' [ 12.110121] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.110154] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS [ 12.110157] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.110186] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.114769] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: checking for capabilities at offset 0xc00 [ 12.114774] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: found ML capability at 0xc00 [ 12.114775] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: checking for capabilities at offset 0x800 [ 12.114779] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: found DSP capability at 0x800 [ 12.114781] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: checking for capabilities at offset 0x500 [ 12.114786] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: found GTS capability at 0x500 [ 12.114787] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: checking for capabilities at offset 0x1f00 [ 12.114791] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: found DRSM capability at 0x1f00 [ 12.114792] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: checking for capabilities at offset 0x700 [ 12.114797] snd_sof_intel_hda_common:hda_dsp_ctrl_get_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: found SPIB capability at 0x700 [ 12.114811] snd_sof_intel_hda_common:hda_dsp_stream_init: sof-audio-pci-intel-tgl 0000:00:1f.3: hda global caps = 0x1009701 [ 12.114812] snd_sof_intel_hda_common:hda_dsp_stream_init: sof-audio-pci-intel-tgl 0000:00:1f.3: detected 9 playback and 7 capture streams [ 12.114904] sof-audio-pci-intel-tgl 0000:00:1f.3: use msi interrupt mode [ 12.114905] snd_sof_intel_hda_common:hda_dsp_probe: sof-audio-pci-intel-tgl 0000:00:1f.3: using IPC IRQ 145 [ 12.114978] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIR: 00000000 at 00000044 [ 12.114980] snd_sof_intel_hda_common:hda_init_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: PP capability, will probe DSP later. [ 12.117729] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIR: 00000040 at 00000048 [ 12.117734] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIW: 00000000 at 00000048 [ 12.119760] snd_sof_intel_hda:hda_codec_detect_mask: sof-audio-pci-intel-tgl 0000:00:1f.3: codec_mask = 0x4 [ 12.119769] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIR: 00000000 at 00000048 [ 12.119771] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIW: 00000040 at 00000048 [ 12.121241] acpi:acpi_evaluate_integer: ACPI: \_SB_.PC00.HDAS.SNDW: ACPI: utils: Return value [1073741824] [ 12.121245] snd_intel_sdw_acpi:sdw_intel_scan_controller: acpi PRP00001:00: ACPI reports 4 SDW Link devices [ 12.121247] snd_intel_sdw_acpi:sdw_intel_scan_controller: acpi PRP00001:00: Link 0 not selected in firmware [ 12.121248] snd_intel_sdw_acpi:sdw_intel_scan_controller: acpi PRP00001:00: Link 1 not selected in firmware [ 12.121249] snd_intel_sdw_acpi:sdw_intel_scan_controller: acpi PRP00001:00: Link 2 not selected in firmware [ 12.121251] snd_intel_sdw_acpi:sdw_intel_scan_controller: acpi PRP00001:00: Link 3 not selected in firmware [ 12.121251] snd_sof_intel_hda_common:hda_init_caps: sof-audio-pci-intel-tgl 0000:00:1f.3: skipping SoundWire, no links enabled [ 12.121325] snd_sof_intel_hda:hda_codec_probe: sof-audio-pci-intel-tgl 0000:00:1f.3: HDA codec #2 probed OK: response: 80862812 [ 12.121945] acpi:acpi_device_notify: hdaudio ehdaudio0D2: No ACPI support [ 12.121965] snd_sof_intel_hda:request_codec_module: hdaudio ehdaudio0D2: loading codec module: hdaudio:v80862812r00100000a01 [ 12.130425] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: dynamically register DAI ehdaudio0D2 [ 12.130427] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: Registered DAI 'Analog Codec DAI' [ 12.130428] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: dynamically register DAI ehdaudio0D2 [ 12.130429] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: Registered DAI 'Digital Codec DAI' [ 12.130429] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: dynamically register DAI ehdaudio0D2 [ 12.130430] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: Registered DAI 'Alt Analog Codec DAI' [ 12.130431] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: dynamically register DAI ehdaudio0D2 [ 12.130432] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: Registered DAI 'intel-hdmi-hifi1' [ 12.130433] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: dynamically register DAI ehdaudio0D2 [ 12.130433] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: Registered DAI 'intel-hdmi-hifi2' [ 12.130434] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: dynamically register DAI ehdaudio0D2 [ 12.130435] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: Registered DAI 'intel-hdmi-hifi3' [ 12.130435] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: dynamically register DAI ehdaudio0D2 [ 12.130436] snd_soc_core:snd_soc_register_dai: snd_hda_codec_hdmi ehdaudio0D2: ASoC: Registered DAI 'intel-hdmi-hifi4' [ 12.130461] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 0 in _CRS [ 12.130504] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS [ 12.130506] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 1 in _CRS [ 12.130538] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up 2 in _CRS [ 12.130789] snd_sof:sof_set_fw_state: sof-audio-pci-intel-tgl 0000:00:1f.3: fw_state change: 0 -> 2 [ 12.130895] snd_intel_dspcfg:intel_nhlt_get_dmic_geo: sof-audio-pci-intel-tgl 0000:00:1f.3: found 2 format definitions [ 12.130898] snd_intel_dspcfg:intel_nhlt_get_dmic_geo: sof-audio-pci-intel-tgl 0000:00:1f.3: max channels found 2 [ 12.130899] snd_intel_dspcfg:intel_nhlt_get_dmic_geo: sof-audio-pci-intel-tgl 0000:00:1f.3: Array with 2 dmics [ 12.130900] snd_intel_dspcfg:intel_nhlt_get_dmic_geo: sof-audio-pci-intel-tgl 0000:00:1f.3: dmic number 2 max_ch 2 [ 12.130903] sof-audio-pci-intel-tgl 0000:00:1f.3: NHLT_DEVICE_I2S detected, ssp_mask 0x1 [ 12.130905] snd_sof_intel_hda_common:hda_machine_select: sof-audio-pci-intel-tgl 0000:00:1f.3: MCLK mask 0x1 found in NHLT [ 12.130906] sof-audio-pci-intel-tgl 0000:00:1f.3: Overriding topology with MCLK mask 0x1 from NHLT [ 12.130908] sof-audio-pci-intel-tgl 0000:00:1f.3: hda codecs found, mask 4 [ 12.130916] snd_sof:snd_sof_load_firmware: sof-audio-pci-intel-tgl 0000:00:1f.3: loading firmware [ 12.133083] snd_sof:snd_sof_load_firmware_raw: sof-audio-pci-intel-tgl 0000:00:1f.3: request_firmware intel/sof/sof-tgl.ri successful [ 12.133087] snd_sof:sof_ipc3_fw_parse_ext_man: sof-audio-pci-intel-tgl 0000:00:1f.3: found sof_ext_man header type 1 size 0x1a0 [ 12.133089] snd_sof:sof_ipc3_fw_parse_ext_man: sof-audio-pci-intel-tgl 0000:00:1f.3: found sof_ext_man header type 6 size 0x20 [ 12.133090] snd_sof_intel_hda_common:hda_dsp_ext_man_get_cavs_config_data: sof-audio-pci-intel-tgl 0000:00:1f.3: FW clock config: HPRO [ 12.133091] snd_sof:sof_ipc3_fw_parse_ext_man: sof-audio-pci-intel-tgl 0000:00:1f.3: found sof_ext_man header type 0 size 0x50 [ 12.133092] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware info: version 2:2:0-57864 [ 12.133093] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0 [ 12.133094] snd_sof:sof_ipc3_fw_parse_ext_man: sof-audio-pci-intel-tgl 0000:00:1f.3: found sof_ext_man header type 2 size 0x70 [ 12.133095] snd_sof:sof_ipc3_get_cc_info: sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware info: used compiler XCC 12:0:8 used optimization flags -O2 [ 12.133101] snd_sof:sof_ipc3_fw_parse_ext_man: sof-audio-pci-intel-tgl 0000:00:1f.3: found sof_ext_man header type 3 size 0x30 [ 12.133103] sof-audio-pci-intel-tgl 0000:00:1f.3: unknown sof_ext_man header type 3 size 0x30 [ 12.133103] snd_sof:sof_ipc3_fw_parse_ext_man: sof-audio-pci-intel-tgl 0000:00:1f.3: found sof_ext_man header type 4 size 0x20 [ 12.133104] snd_sof:ipc3_fw_ext_man_get_dbg_abi_info: sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware: DBG_ABI 5:3:0 [ 12.133105] snd_sof:sof_ipc3_fw_parse_ext_man: sof-audio-pci-intel-tgl 0000:00:1f.3: found sof_ext_man header type 5 size 0x20 [ 12.133106] snd_sof:ipc3_fw_ext_man_get_config_data: sof-audio-pci-intel-tgl 0000:00:1f.3: manifest can hold up to 3 config elements [ 12.133107] snd_sof:ipc3_fw_ext_man_get_config_data: sof-audio-pci-intel-tgl 0000:00:1f.3: get index 0 token 1 val 384 [ 12.133108] snd_sof:ipc3_fw_ext_man_get_config_data: sof-audio-pci-intel-tgl 0000:00:1f.3: get index 1 token 2 val 1 [ 12.133109] snd_sof:ipc3_fw_ext_man_get_config_data: sof-audio-pci-intel-tgl 0000:00:1f.3: get index 2 token 0 val 0 [ 12.133110] snd_sof:sof_set_fw_state: sof-audio-pci-intel-tgl 0000:00:1f.3: fw_state change: 2 -> 3 [ 12.133115] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIR: 00000002 at 00000048 [ 12.133120] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIW: 00000000 at 00000048 [ 12.133129] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIR: 00000000 at 00000044 [ 12.133134] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIW: 00000004 at 00000044 [ 12.133135] snd_sof:snd_sof_run_firmware: sof-audio-pci-intel-tgl 0000:00:1f.3: booting DSP firmware [ 12.133151] snd_sof_intel_hda_common:hda_dsp_stream_setup_bdl: sof-audio-pci-intel-tgl 0000:00:1f.3: period_bytes:0x0 [ 12.133153] snd_sof_intel_hda_common:hda_dsp_stream_setup_bdl: sof-audio-pci-intel-tgl 0000:00:1f.3: periods:1 [ 12.133210] snd_sof_intel_hda_common:hda_dsp_stream_hw_params: sof-audio-pci-intel-tgl 0000:00:1f.3: FW Poll Status: reg[0x160]=0x40000 successful [ 12.133229] snd_sof_intel_hda_common:hda_dsp_stream_hw_params: sof-audio-pci-intel-tgl 0000:00:1f.3: FW Poll Status: reg[0x160]=0x40000 successful [ 12.133231] snd_sof_intel_hda_common:hda_dsp_stream_setup_bdl: sof-audio-pci-intel-tgl 0000:00:1f.3: period_bytes:0x0 [ 12.133232] snd_sof_intel_hda_common:hda_dsp_stream_setup_bdl: sof-audio-pci-intel-tgl 0000:00:1f.3: periods:1 [ 12.133276] snd_sof_intel_hda_common:hda_dsp_cl_boot_firmware: sof-audio-pci-intel-tgl 0000:00:1f.3: Attempting iteration 0 of Core En/ROM load... [ 12.133785] snd_sof_intel_hda_common:hda_dsp_core_power_up: sof-audio-pci-intel-tgl 0000:00:1f.3: FW Poll Status: reg[0x4]=0xf010f0f successful [ 12.133801] snd_sof_intel_hda_common:hda_dsp_core_reset_leave: sof-audio-pci-intel-tgl 0000:00:1f.3: FW Poll Status: reg[0x4]=0xf010f0e successful [ 12.133803] snd_sof_intel_hda_common:hda_dsp_core_run: sof-audio-pci-intel-tgl 0000:00:1f.3: unstall/run core: core_mask = 1 [ 12.133806] snd_sof_intel_hda_common:hda_dsp_core_is_enabled: sof-audio-pci-intel-tgl 0000:00:1f.3: DSP core(s) enabled? 1 : core_mask 1 [ 12.134729] snd_sof_intel_hda_common:cl_dsp_init: sof-audio-pci-intel-tgl 0000:00:1f.3: FW Poll Status: reg[0xd4]=0x80000000 successful [ 12.206748] snd_sof_intel_hda_common:cl_dsp_init: sof-audio-pci-intel-tgl 0000:00:1f.3: FW Poll Status: reg[0x80000]=0x5000001 successful [ 12.227233] snd_sof_intel_hda_common:hda_cl_copy_fw: sof-audio-pci-intel-tgl 0000:00:1f.3: FW Poll Status: reg[0x80000]=0x5 successful [ 12.227747] snd_sof_intel_hda_common:hda_dsp_stream_trigger: sof-audio-pci-intel-tgl 0000:00:1f.3: FW Poll Status: reg[0x160]=0x140000 successful [ 12.227750] snd_sof_intel_hda_common:hda_dsp_cl_boot_firmware: sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware download successful, booting... [ 12.242460] snd_sof:ipc3_log_header: sof-audio-pci-intel-tgl 0000:00:1f.3: ipc rx: 0x70000000 [ 12.242462] snd_sof:ipc3_fw_ready: sof-audio-pci-intel-tgl 0000:00:1f.3: DSP is ready 0x70000000 offset 0x81000 [ 12.242580] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware info: version 2:2:0-57864 [ 12.242581] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0 [ 12.242605] snd_sof:ipc3_get_windows: sof-audio-pci-intel-tgl 0000:00:1f.3: mailbox upstream 0x81000 - size 0x1000 [ 12.242606] snd_sof:ipc3_get_windows: sof-audio-pci-intel-tgl 0000:00:1f.3: mailbox downstream 0xa0000 - size 0x2000 [ 12.242607] snd_sof:ipc3_get_windows: sof-audio-pci-intel-tgl 0000:00:1f.3: stream region 0xc1000 - size 0x1000 [ 12.242607] snd_sof:ipc3_get_windows: sof-audio-pci-intel-tgl 0000:00:1f.3: debug region 0xc0000 - size 0x800 [ 12.242608] snd_sof:sof_set_fw_state: sof-audio-pci-intel-tgl 0000:00:1f.3: fw_state change: 3 -> 6 [ 12.242612] snd_sof:snd_sof_run_firmware: sof-audio-pci-intel-tgl 0000:00:1f.3: firmware boot complete [ 12.242614] snd_sof:sof_set_fw_state: sof-audio-pci-intel-tgl 0000:00:1f.3: fw_state change: 6 -> 7 [ 12.242622] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIR: 00000000 at 00000048 [ 12.242631] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIW: 00000002 at 00000048 [ 12.242644] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIR: 00000004 at 00000044 [ 12.242647] snd_sof:snd_sof_pci_update_bits_unlocked: sof-audio-pci-intel-tgl 0000:00:1f.3: Debug PCIW: 00000000 at 00000044 [ 12.242648] snd_sof:sof_probe_continue: sof-audio-pci-intel-tgl 0000:00:1f.3: SOF firmware trace disabled [ 12.242651] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242652] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'SSP0 Pin' [ 12.242652] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242653] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'SSP1 Pin' [ 12.242654] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242655] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'SSP2 Pin' [ 12.242656] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242656] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'SSP3 Pin' [ 12.242657] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242658] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'SSP4 Pin' [ 12.242659] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242659] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'SSP5 Pin' [ 12.242660] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242661] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'DMIC01 Pin' [ 12.242662] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242663] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'DMIC16k Pin' [ 12.242664] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242665] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'iDisp1 Pin' [ 12.242665] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242666] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'iDisp2 Pin' [ 12.242668] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242668] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'iDisp3 Pin' [ 12.242669] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242670] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'iDisp4 Pin' [ 12.242670] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242671] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'Analog CPU DAI' [ 12.242672] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242673] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'Digital CPU DAI' [ 12.242673] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: dynamically register DAI 0000:00:1f.3 [ 12.242674] snd_soc_core:snd_soc_register_dai: sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: Registered DAI 'Alt Analog CPU DAI' [ 12.242679] acpi:acpi_device_notify: platform sof-essx8336: No ACPI support [ 12.242699] snd_sof:sof_machine_register: sof-audio-pci-intel-tgl 0000:00:1f.3: created machine sof-essx8336 [ 12.242703] acpi:acpi_device_notify: auxiliary snd_sof.hda-probes.0: No ACPI support [ 12.242709] snd_sof_pci:sof_pci_probe_complete: sof-audio-pci-intel-tgl 0000:00:1f.3: Completing SOF PCI probe [ 12.242746] snd_sof:ipc3_log_header: sof-audio-pci-intel-tgl 0000:00:1f.3: ipc rx done: 0x70000000 [ 12.257624] sof-essx8336 sof-essx8336: quirk mask 0x20 [ 12.257626] sof-essx8336 sof-essx8336: quirk SSP0 [ 12.257626] sof-essx8336 sof-essx8336: quirk DMIC enabled [ 12.257814] i2c i2c-ESSX8336:00: speaker gpio 0 active high, headphone gpio 1 active low [ 12.257816] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: GPIO lookup for consumer speakers-enable [ 12.257817] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: using ACPI for GPIO lookup [ 12.257818] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up speakers-enable-gpios [ 12.257819] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: _DSD returned ESSX8336:00 0 0 0 [ 12.257828] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: No GPIO consumer speakers-enable found [ 12.433815] NET: Registered PF_PACKET protocol family [ 13.123348] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state change: D0 -> D3cold [ 13.124479] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state changed to D3hot [ 13.125785] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C0: PM: Power state change: D0 -> D3cold -- [ 22.575370] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C0: PM: Power state changed to D0 [ 22.587746] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state change: D3hot -> D0 [ 22.587751] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state changed to D0 [ 22.587883] gpiolib_acpi:acpi_get_gpiod_by_index: acpi GXTP7863:00: GPIO: looking up 0 in _CRS [ 22.599978] i2c i2c-ESSX8336:00: Resources present before probing [ 22.599994] sof-essx8336 sof-essx8336: quirk mask 0x20 [ 22.599995] sof-essx8336 sof-essx8336: quirk SSP0 [ 22.599996] sof-essx8336 sof-essx8336: quirk DMIC enabled [ 22.600155] i2c i2c-ESSX8336:00: speaker gpio 0 active high, headphone gpio 1 active low [ 22.600157] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: GPIO lookup for consumer speakers-enable [ 22.600158] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: using ACPI for GPIO lookup [ 22.600159] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: looking up speakers-enable-gpios [ 22.600160] gpiolib_acpi:acpi_get_gpiod_by_index: acpi ESSX8336:00: GPIO: _DSD returned ESSX8336:00 0 0 0 [ 22.600167] gpiolib:gpiod_get_index: i2c i2c-ESSX8336:00: No GPIO consumer speakers-enable found [ 22.600267] i2c i2c-GXTP7863:00: deferred probe pending [ 22.600269] platform sof-essx8336: deferred probe pending [ 23.611867] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C0: PM: Power state change: D0 -> D3cold [ 23.612024] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C0: PM: Power state changed to D3hot [ 23.788859] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state change: D0 -> D3cold [ 23.789460] acpi:acpi_device_set_power: ACPI: \_SB_.PC00.I2C2: PM: Power state changed to D3hot [ 26.593640] acpi:acpi_device_notify: vc vcs2: No ACPI support ```

@plbossart Is fw_state 7 a SOF_FW_CRASHED?

[   12.242614] snd_sof:sof_set_fw_state: sof-audio-pci-intel-tgl 0000:00:1f.3: fw_state change: 6 -> 7

How do I activate the firmware trace?

[   12.242648] snd_sof:sof_probe_continue: sof-audio-pci-intel-tgl 0000:00:1f.3: SOF firmware trace disabled
plbossart commented 1 year ago

You're looking at an 'old' kernel code @tvelazquez, state 7 is @SOF_FW_BOOT_COMPLETE: firmware is booted up and functional

for the trace, you have to keep BIT(0) of the sof_debug parameter set.

/* Flag definitions used in sof_core_debug (sof_debug module parameter) */
#define SOF_DBG_ENABLE_TRACE    BIT(0)
plbossart commented 1 year ago

btw the quirk detection only works if you are able to probe a codec driver...

koffiato commented 1 year ago

I'm assuming there are no updates for this? I wasn't able to get anything to be detected at all.