Closed mchehab closed 7 months ago
Thanks @mchehab
Wondering if there is a way to make an ACPI device report "not present"? IOW, fix the misleading information rather than add a quirk to the intel-dsp-config already complicated logic.
I dunno. Didn't have to deal yet with masking devices reported by ACPI. If it helps, I'm enclosing the decoded file from the ACPI DSDT: dsdt.dsl.
A quirk to fix detection sounds easy enough: huawei_d14_2021_audio_detection_fix.patch, sent to ML for review: https://lore.kernel.org/linux-sound/20240418110453.10efcb60@sal.lan/T/#t
Tested on my notebook on Kernel 6.8.7, with the headset mix fixup patch and this one:
[ 6.757654] snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
[ 6.757676] snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002)
[ 6.758569] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
...
[ 6.830816] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC256: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
[ 6.830822] snd_hda_codec_realtek hdaudioC0D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[ 6.830825] snd_hda_codec_realtek hdaudioC0D0: hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[ 6.830828] snd_hda_codec_realtek hdaudioC0D0: mono: mono_out=0x0
[ 6.830830] snd_hda_codec_realtek hdaudioC0D0: inputs:
[ 6.830831] snd_hda_codec_realtek hdaudioC0D0: Headset Mic=0x19
[ 6.830833] snd_hda_codec_realtek hdaudioC0D0: Internal Mic=0x12
That was precisely what I was afraid of @mchehab, it's a can of worms with an ever-growing list of quirks to maintain....
The two other options are a) provide an option to disable the ES8336 device b) detect the HDaudio mask earlier and see if we detect an HDaudio external codec, in which case we could ignore the I2S selection and use HDaudio. The problem is that we have to enable hardware so it's less of an ACPI directly lookup.
Thanks @mchehab
Wondering if there is a way to make an ACPI device report "not present"? IOW, fix the misleading information rather than add a quirk to the intel-dsp-config already complicated logic.
If the question "how to disable ACPI enumeration of the I²C device with a HID ESSX8336 on any platform?" then ignore_serial_bus_ids
can be used. If the question of the certain platform, we need to have a quirk in one or another form I am afraid (DMI or as proposed by Mauro).
Actually AFAICS this device has 2 I²C resources, which is perfect case for SMI (drivers/platform/x86/serial-multi-instantiate.c) case, which is already covered by that list in the drivers/acpi/scan.c.
@andy-shev the question was if there's a way to change the 'status' reported by an ACPI device to 'not present'.
What causes the false detection is this:
/sys/bus/acpi/devices/ESSX8336:00/status 15
This is just wrong, so rather than update the intel-dsp-config logic i'd rather squelch that bad information at the source.
@plbossart, @andy-shev :
On a quick look, this is what we have here at the machine, with regards to I2C:
$ sudo grep . /sys/bus/acpi/devices/ESSX8336:00/*
/sys/bus/acpi/devices/ESSX8336:00/adr:0x00000000
/sys/bus/acpi/devices/ESSX8336:00/hid:ESSX8336
/sys/bus/acpi/devices/ESSX8336:00/modalias:acpi:ESSX8336:ESSX8336:
/sys/bus/acpi/devices/ESSX8336:00/path:\_SB_.PCI0.I2C1.ESSX
grep: /sys/bus/acpi/devices/ESSX8336:00/power: Is a directory
/sys/bus/acpi/devices/ESSX8336:00/power_state:D0
/sys/bus/acpi/devices/ESSX8336:00/status:15
grep: /sys/bus/acpi/devices/ESSX8336:00/subsystem: Is a directory
/sys/bus/acpi/devices/ESSX8336:00/uevent:MODALIAS=acpi:ESSX8336:ESSX8336:
/sys/bus/acpi/devices/ESSX8336:00/uid:1
$ sudo modprobe i2c-dev
$ sudo i2cdetect -l
i2c-3 i2c i915 gmbus dpb I2C adapter
i2c-1 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-8 i2c AUX C/DDI C/PHY C I2C adapter
i2c-6 i2c i915 gmbus dpd I2C adapter
i2c-4 i2c i915 gmbus dpc I2C adapter
i2c-2 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-0 i2c Synopsys DesignWare I2C adapter I2C adapter
i2c-9 smbus SMBus I801 adapter at efa0 SMBus adapter
i2c-7 i2c AUX A/DDI A/PHY A I2C adapter
i2c-5 i2c i915 gmbus misc I2C adapter
Maybe a 0-byte read or write to essx8336 could be used to check if the device or the I2C controller is present or not. Not sure how easy/hard would be to detect that.
That was precisely what I was afraid of @mchehab, it's a can of worms with an ever-growing list of quirks to maintain....
IMO, if we need to have a list of devices to block, placing them at intel-dsp-config.c seems to be better, as placing a quirk list elsewhere would be worse.
The two other options are a) provide an option to disable the ES8336 device
I don't think that helps. If you browse for Matebook D14, you'll see that there are other reports for the same device where people think that the bug is at es8336 support (instead of the simpler answer: older model using AC97).
Btw, I'm pretty sure that, when I installed Fedora on this machine, audio used to work (it was probably before some SOF-related changes, and before BIOS upgrades). In practice, when I noticed this bug I was suspecting of a regression - but as I was too busy on that time to seek for the bug - I just forced dspconfig to use legacy driver.
b) detect the HDaudio mask earlier and see if we detect an HDaudio external codec, in which case we could ignore the I2S selection and use HDaudio. The problem is that we have to enable hardware so it's less of an ACPI directly lookup.
As Andy mentioned, it is probably easier to detect it via I2C scan: if the I2C bus is not found, or if the device doesn't answer to its I2C port, fall back to AC97. We use such kind of detection on media devices, where it is common that the same USB or PCI hardware to come up with different tuners at different I2C addresses. This would make the code at intel-dsp-config.c a little bit more complex, as it would need to call an i2c scan function, but it may prevent or reduce the number of quirks there.
These ES8336 devices are so flaky that I2C may or may not work... There was an issue on this some time back.
There's also option c) c) detect the Hdaudio verb table somewhere in the BIOS tables. That might be a simpler problem to solve than accessing hardware.
These ES8336 devices are so flaky that I2C may or may not work... There was an issue on this some time back.
Perhaps some Runtime PM issue. We had a similar issue on atomisp driver: before probing, the driver needs to ensure that the device was properly reset and power state was successfully changed.
There's also option c) c) detect the Hdaudio verb table somewhere in the BIOS tables. That might be a simpler problem to solve than accessing hardware.
I don't think relying on BIOS would avoid quirks, as firmware developers usually share the same BIOS with different motherboards.
If I2C is not reliable, I suspect that the solution to avoid quirks would be to try probing one driver first (either AC97 or SOF), and, in case of failures, the other one. Some care should be taken with the logs, though, as a failure should be reported only after the second probe.
@mchehab does the device with the HDaudio codec have an NHLT table, and if yes can you share it?
sudo cat /sys/firmware/acpi/tables/NHLT > nhlt.dat
iasl -d nhlt.dat
The point is that if there is an NHLT we can double-check if indeed there is a link for the I2S codec or not. If there is no NHLT we can dismiss the ES8336 quirk and remove the SOF selection.
It does:
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20240322 (64-bit version)
* Copyright (c) 2000 - 2023 Intel Corporation
*
* Disassembly of nhlt.dat
*
* ACPI Data Table [NHLT]
*
* Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue (in hex)
*/
[000h 0000 004h] Signature : "NHLT" [Non HD Audio Link Table]
[004h 0004 004h] Table Length : 0000002D
[008h 0008 001h] Revision : 00
[009h 0009 001h] Checksum : BD
[00Ah 0010 006h] Oem ID : "XXXXXX"
[010h 0016 008h] Oem Table ID : "CML-ULT"
[018h 0024 004h] Oem Revision : 00000002
[01Ch 0028 004h] Asl Compiler ID : " "
[020h 0032 004h] Asl Compiler Revision : 01000013
Raw Table Data: Length 45 (0x2D)
0000: 4E 48 4C 54 2D 00 00 00 00 BD 58 58 58 58 58 58 // NHLT-.....XXXXXX
0010: 43 4D 4C 2D 55 4C 54 00 02 00 00 00 20 20 20 20 // CML-ULT.....
0020: 13 00 00 01 00 04 00 00 00 DE AD BE EF // .............
Btw, this week I'm able to get a the NHLT table from Matebook D15 with es8336:
Manufacturer: HUAWEI
Product Name: BOHB-WAX9
Version: M1110
SKU Number: C100
Family: MateBook D
and NHLT i2S detection works fine there:
[ 0.005847] ACPI: NHLT 0x000000008FC2F000 001973 (v00 XXXXXX CML-ULT 00000002 01000013)
[ 0.005876] ACPI: Reserving NHLT table memory at [mem 0x8fc2f000-0x8fc30972]
[ 4.931329] sof-audio-pci-intel-cnl 0000:00:1f.3: NHLT_DEVICE_I2S detected, ssp_mask 0x1
[ 4.931333] sof-audio-pci-intel-cnl 0000:00:1f.3: Overriding topology with MCLK mask 0x1 from NHLT
It is a lot bigger:
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20240322 (64-bit version)
* Copyright (c) 2000 - 2023 Intel Corporation
*
* Disassembly of /tmp/nhlt_matebook_d15.dat
*
* ACPI Data Table [NHLT]
*
* Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue (in hex)
*/
[000h 0000 004h] Signature : "NHLT" [Non HD Audio Link Table]
[004h 0004 004h] Table Length : 00001973
[008h 0008 001h] Revision : 00
[009h 0009 001h] Checksum : 36
[00Ah 0010 006h] Oem ID : "XXXXXX"
[010h 0016 008h] Oem Table ID : "CML-ULT"
[018h 0024 004h] Oem Revision : 00000002
[01Ch 0028 004h] Asl Compiler ID : " "
[020h 0032 004h] Asl Compiler Revision : 01000013
Raw Table Data: Length 6515 (0x1973)
0000: 4E 48 4C 54 73 19 00 00 00 36 58 58 58 58 58 58 // NHLTs....6XXXXXX
0010: 43 4D 4C 2D 55 4C 54 00 02 00 00 00 20 20 20 20 // CML-ULT.....
0020: 13 00 00 01 04 44 17 00 00 02 00 86 80 20 AE 01 // .....D....... ..
0030: 00 01 00 00 00 00 01 00 03 00 00 00 00 01 0A 02 // ................
0040: FE FF 02 00 80 BB 00 00 00 EE 02 00 04 00 10 00 // ................
0050: 16 00 10 00 03 00 00 00 01 00 00 00 00 00 10 00 // ................
0060: 80 00 00 AA 00 38 9B 71 68 0B 00 00 01 00 00 00 // .....8.qh.......
0070: 10 32 FF FF 10 FF FF FF 32 FF FF FF FF FF FF FF // .2......2.......
0080: 03 00 00 00 03 00 00 00 03 00 30 00 03 00 30 00 // ..........0...0.
0090: 03 00 00 00 01 00 00 00 03 13 00 09 00 00 00 00 // ................
00A0: 03 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
00B0: 00 00 00 00 11 00 00 00 A0 02 04 00 00 00 00 00 // ................
00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
00D0: 00 00 00 00 11 00 00 00 AE 03 0E 00 00 00 00 00 // ................
00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
00F0: 00 00 00 00 08 00 00 00 AE FF 0F 00 12 FF 0F 00 // ................
0100: FB FD 0F 00 61 FC 0F 00 5A FA 0F 00 2B F8 0F 00 // ....a...Z...+...
0110: 41 F6 0F 00 20 F5 0F 00 44 F5 0F 00 F4 F6 0F 00 // A... ...D.......
0120: 25 FA 0F 00 65 FE 0F 00 E0 02 00 00 8F 06 00 00 // %...e...........
0130: 76 08 00 00 F1 07 00 00 F5 04 00 00 2A 00 00 00 // v...........*...
0140: D4 FA 0F 00 8A F6 0F 00 BF F4 0F 00 4F F6 0F 00 // ............O...
0150: 20 FB 0F 00 0F 02 00 00 29 09 00 00 2D 0E 00 00 // .......)...-...
0160: 40 0F 00 00 92 0B 00 00 BF 03 00 00 CD F9 0F 00 // @...............
0170: B0 F0 0F 00 6E EB 0F 00 2A EC 0F 00 51 F3 0F 00 // ....n...*...Q...
0180: 4F FF 0F 00 CD 0C 00 00 9D 17 00 00 FC 1B 00 00 // O...............
0190: D7 17 00 00 A3 0B 00 00 7E FA 0F 00 6F E9 0F 00 // ........~...o...
01A0: F5 DD 0F 00 4D DC 0F 00 EE E5 0F 00 CE F8 0F 00 // ....M...........
01B0: B7 0F 00 00 A8 23 00 00 F5 2D 00 00 74 2A 00 00 // .....#...-..t*..
01C0: 10 19 00 00 2C FE 0F 00 9C E1 0F 00 64 CC 0F 00 // ....,.......d...
01D0: EE C5 0F 00 7E D1 0F 00 D4 EC 0F 00 71 10 00 00 // ....~.......q...
01E0: 98 31 00 00 7E 45 00 00 C9 44 00 00 24 2E 00 00 // .1..~E...D..$...
01F0: 28 07 00 00 0E DB 0F 00 81 B7 0F 00 6B A8 0F 00 // (...........k...
0200: 08 B4 0F 00 84 D8 0F 00 02 0C 00 00 37 3F 00 00 // ............7?..
0210: E8 61 00 00 07 68 00 00 C5 4D 00 00 54 19 00 00 // .a...h...M..T...
0220: 8C D9 0F 00 C8 A1 0F 00 0F 84 0F 00 52 8B 0F 00 // ............R...
0230: 8C B7 0F 00 23 FD 0F 00 DB 47 00 00 B1 80 00 00 // ....#....G......
0240: E3 94 00 00 08 7C 00 00 41 3B 00 00 5E E4 0F 00 // .....|..A;..^...
0250: 01 91 0F 00 1E 5B 0F 00 F4 54 0F 00 07 83 0F 00 // .....[...T......
0260: 0B DA 0F 00 8F 41 00 00 D0 9A 00 00 D6 C9 00 00 // .....A..........
0270: 16 BE 00 00 0B 78 00 00 DD 09 00 00 BA 92 0F 00 // .....x..........
0280: 06 36 0F 00 ED 10 0F 00 5E 31 0F 00 35 91 0F 00 // .6......^1..5...
0290: 2C 17 00 00 83 9D 00 00 9E FC 00 00 95 16 01 00 // ,...............
02A0: 5B E0 00 00 BF 65 00 00 ED C6 0F 00 F4 2F 0F 00 // [....e......./..
02B0: 96 CC 0E 00 C9 BB 0E 00 68 06 0F 00 E7 9B 0F 00 // ........h.......
02C0: 01 56 00 00 9E 02 01 00 40 71 01 00 65 80 01 00 // .V......@q..e...
02D0: 28 27 01 00 74 78 00 00 DB 9E 0F 00 02 D2 0E 00 // ('..tx..........
02E0: 6C 48 0E 00 4D 29 0E 00 0F 82 0E 00 4A 42 0F 00 // lH..M)......JB..
02F0: 29 3F 00 00 68 3D 01 00 61 FF 01 00 B2 53 02 00 // )?..h=..a....S..
0300: FA 20 02 00 E1 6B 01 00 38 56 00 00 98 17 0F 00 // . ...k..8V......
0310: 65 F1 0D 00 1A 21 0D 00 F9 D3 0C 00 B5 1E 0D 00 // e....!..........
0320: 89 FA 0D 00 02 48 0F 00 56 D6 00 00 63 6D 02 00 // .....H..V...cm..
0330: 08 D8 03 00 C3 EC 04 00 15 93 05 00 20 C5 05 00 // ............ ...
0340: B6 8D 05 00 D6 03 05 00 DD 44 04 00 CB 6E 03 00 // .........D...n..
0350: 9A 9B 02 00 5D DE 01 00 34 42 01 00 E0 CA 00 00 // ....]...4B......
0360: 69 76 00 00 40 3F 00 00 4E 1E 00 00 95 0C 00 00 // iv..@?..N.......
0370: 3B 04 00 00 F9 00 00 00 61 F9 0F 00 23 08 00 00 // ;.......a...#...
0380: 4F 08 00 00 39 0A 00 00 21 0D 00 00 A8 10 00 00 // O...9...!.......
0390: 9A 14 00 00 CC 18 00 00 15 1D 00 00 4D 21 00 00 // ............M!..
03A0: 43 25 00 00 C8 28 00 00 AA 2B 00 00 B8 2D 00 00 // C%...(...+...-..
03B0: C6 2E 00 00 AC 2E 00 00 4C 2D 00 00 90 2A 00 00 // ........L-...*..
03C0: 72 26 00 00 F9 20 00 00 3B 1A 00 00 5C 12 00 00 // r&... ..;...\...
03D0: 94 09 00 00 25 00 00 00 62 F6 0F 00 A3 EC 0F 00 // ....%...b.......
03E0: 4C E3 0F 00 BE DA 0F 00 64 D3 0F 00 94 CD 0F 00 // L.......d.......
03F0: A4 C9 0F 00 DD C7 0F 00 6B C8 0F 00 6E CB 0F 00 // ........k...n...
0400: E6 D0 0F 00 BB D8 0F 00 B9 E2 0F 00 8F EE 0F 00 // ................
0410: D5 FB 0F 00 0C 0A 00 00 A3 18 00 00 FC 26 00 00 // .............&..
0420: 74 34 00 00 65 40 00 00 36 4A 00 00 5A 51 00 00 // t4..e@..6J..ZQ..
0430: 5A 55 00 00 DF 55 00 00 B2 52 00 00 C3 4B 00 00 // ZU...U...R...K..
0440: 2C 41 00 00 32 33 00 00 42 22 00 00 F3 0E 00 00 // ,A..23..B"......
0450: FB F9 0F 00 30 E4 0F 00 78 CE 0F 00 C6 B9 0F 00 // ....0...x.......
0460: 0F A7 0F 00 3A 97 0F 00 1E 8B 0F 00 6E 83 0F 00 // ....:.......n...
0470: B7 80 0F 00 55 83 0F 00 6E 8B 0F 00 EA 98 0F 00 // ....U...n.......
0480: 78 AB 0F 00 88 C2 0F 00 52 DD 0F 00 DF FA 0F 00 // x.......R.......
0490: 0A 1A 00 00 92 39 00 00 23 58 00 00 65 74 00 00 // .....9..#X..et..
04A0: 0C 8D 00 00 E3 A0 00 00 DC AE 00 00 1F B6 00 00 // ................
04B0: 14 B6 00 00 6B AE 00 00 23 9F 00 00 8D 88 00 00 // ....k...#.......
04C0: 4C 6B 00 00 50 48 00 00 D3 20 00 00 47 F6 0F 00 // Lk..PH... ..G...
04D0: 4F CA 0F 00 AE 9E 0F 00 33 75 0F 00 A8 4F 0F 00 // O.......3u...O..
04E0: C0 2F 0F 00 02 17 0F 00 BA 06 0F 00 E6 FF 0E 00 // ./..............
04F0: 2D 03 0F 00 D3 10 0F 00 B4 28 0F 00 42 4A 0F 00 // -........(..BJ..
0500: 86 74 0F 00 2A A6 0F 00 81 DD 0F 00 96 18 00 00 // .t..*...........
0510: 3D 55 00 00 28 91 00 00 FE C9 00 00 6F FD 00 00 // =U..(.......o...
0520: 4E 29 01 00 A5 4B 01 00 CB 62 01 00 75 6D 01 00 // N)...K...b..um..
0530: C4 6A 01 00 52 5A 01 00 38 3C 01 00 0D 11 01 00 // .j..RZ..8<......
0540: E9 D9 00 00 56 98 00 00 4A 4E 00 00 17 FE 0F 00 // ....V...JN......
0550: 51 AA 0F 00 C4 55 0F 00 50 03 0F 00 D6 B5 0E 00 // Q....U..P.......
0560: 20 70 0E 00 C8 34 0E 00 20 06 0E 00 1C E6 0D 00 // p...4.. .......
0570: 4B D6 0D 00 BD D7 0D 00 03 EB 0D 00 2A 10 0E 00 // K...........*...
0580: B5 46 0E 00 AB 8D 0E 00 97 E3 0E 00 99 46 0F 00 // .F...........F..
0590: 79 B4 0F 00 B3 2A 00 00 91 A6 00 00 3C 25 01 00 // y....*......<%..
05A0: D9 A3 01 00 98 1F 02 00 CC 95 02 00 00 04 03 00 // ................
05B0: 03 68 03 00 F8 BF 03 00 63 0A 04 00 28 46 04 00 // .h......c...(F..
05C0: 9B 72 04 00 76 8F 04 00 D2 9C 04 00 35 9B 04 00 // .r..v.......5...
05D0: 71 8B 04 00 A5 6E 04 00 32 46 04 00 A6 13 04 00 // q....n..2F......
05E0: B3 D8 03 00 1B 97 03 00 A6 50 03 00 16 07 03 00 // .........P......
05F0: 15 BC 02 00 31 71 02 00 CB 27 02 00 1D E1 01 00 // ....1q...'......
0600: 2A 9E 01 00 C1 5F 01 00 7C 26 01 00 C0 F2 00 00 // *...._..|&......
0610: C2 C4 00 00 8B 9C 00 00 FB 79 00 00 D2 5C 00 00 // .........y...\..
0620: B2 44 00 00 2D 31 00 00 C5 21 00 00 F4 15 00 00 // .D..-1...!......
0630: 5E 13 00 00 01 00 00 00 03 13 00 09 00 00 00 00 // ^...............
0640: 03 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
0650: 00 00 00 00 11 00 00 00 A0 02 04 00 00 00 00 00 // ................
0660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
0670: 00 00 00 00 11 00 00 00 AE 03 0E 00 00 00 00 00 // ................
0680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
0690: 00 00 00 00 08 00 00 00 AE FF 0F 00 12 FF 0F 00 // ................
06A0: FB FD 0F 00 61 FC 0F 00 5A FA 0F 00 2B F8 0F 00 // ....a...Z...+...
06B0: 41 F6 0F 00 20 F5 0F 00 44 F5 0F 00 F4 F6 0F 00 // A... ...D.......
06C0: 25 FA 0F 00 65 FE 0F 00 E0 02 00 00 8F 06 00 00 // %...e...........
06D0: 76 08 00 00 F1 07 00 00 F5 04 00 00 2A 00 00 00 // v...........*...
06E0: D4 FA 0F 00 8A F6 0F 00 BF F4 0F 00 4F F6 0F 00 // ............O...
06F0: 20 FB 0F 00 0F 02 00 00 29 09 00 00 2D 0E 00 00 // .......)...-...
0700: 40 0F 00 00 92 0B 00 00 BF 03 00 00 CD F9 0F 00 // @...............
0710: B0 F0 0F 00 6E EB 0F 00 2A EC 0F 00 51 F3 0F 00 // ....n...*...Q...
0720: 4F FF 0F 00 CD 0C 00 00 9D 17 00 00 FC 1B 00 00 // O...............
0730: D7 17 00 00 A3 0B 00 00 7E FA 0F 00 6F E9 0F 00 // ........~...o...
0740: F5 DD 0F 00 4D DC 0F 00 EE E5 0F 00 CE F8 0F 00 // ....M...........
0750: B7 0F 00 00 A8 23 00 00 F5 2D 00 00 74 2A 00 00 // .....#...-..t*..
0760: 10 19 00 00 2C FE 0F 00 9C E1 0F 00 64 CC 0F 00 // ....,.......d...
0770: EE C5 0F 00 7E D1 0F 00 D4 EC 0F 00 71 10 00 00 // ....~.......q...
0780: 98 31 00 00 7E 45 00 00 C9 44 00 00 24 2E 00 00 // .1..~E...D..$...
0790: 28 07 00 00 0E DB 0F 00 81 B7 0F 00 6B A8 0F 00 // (...........k...
07A0: 08 B4 0F 00 84 D8 0F 00 02 0C 00 00 37 3F 00 00 // ............7?..
07B0: E8 61 00 00 07 68 00 00 C5 4D 00 00 54 19 00 00 // .a...h...M..T...
07C0: 8C D9 0F 00 C8 A1 0F 00 0F 84 0F 00 52 8B 0F 00 // ............R...
07D0: 8C B7 0F 00 23 FD 0F 00 DB 47 00 00 B1 80 00 00 // ....#....G......
07E0: E3 94 00 00 08 7C 00 00 41 3B 00 00 5E E4 0F 00 // .....|..A;..^...
07F0: 01 91 0F 00 1E 5B 0F 00 F4 54 0F 00 07 83 0F 00 // .....[...T......
0800: 0B DA 0F 00 8F 41 00 00 D0 9A 00 00 D6 C9 00 00 // .....A..........
0810: 16 BE 00 00 0B 78 00 00 DD 09 00 00 BA 92 0F 00 // .....x..........
0820: 06 36 0F 00 ED 10 0F 00 5E 31 0F 00 35 91 0F 00 // .6......^1..5...
0830: 2C 17 00 00 83 9D 00 00 9E FC 00 00 95 16 01 00 // ,...............
0840: 5B E0 00 00 BF 65 00 00 ED C6 0F 00 F4 2F 0F 00 // [....e......./..
0850: 96 CC 0E 00 C9 BB 0E 00 68 06 0F 00 E7 9B 0F 00 // ........h.......
0860: 01 56 00 00 9E 02 01 00 40 71 01 00 65 80 01 00 // .V......@q..e...
0870: 28 27 01 00 74 78 00 00 DB 9E 0F 00 02 D2 0E 00 // ('..tx..........
0880: 6C 48 0E 00 4D 29 0E 00 0F 82 0E 00 4A 42 0F 00 // lH..M)......JB..
0890: 29 3F 00 00 68 3D 01 00 61 FF 01 00 B2 53 02 00 // )?..h=..a....S..
08A0: FA 20 02 00 E1 6B 01 00 38 56 00 00 98 17 0F 00 // . ...k..8V......
08B0: 65 F1 0D 00 1A 21 0D 00 F9 D3 0C 00 B5 1E 0D 00 // e....!..........
08C0: 89 FA 0D 00 02 48 0F 00 56 D6 00 00 63 6D 02 00 // .....H..V...cm..
08D0: 08 D8 03 00 C3 EC 04 00 15 93 05 00 20 C5 05 00 // ............ ...
08E0: B6 8D 05 00 D6 03 05 00 DD 44 04 00 CB 6E 03 00 // .........D...n..
08F0: 9A 9B 02 00 5D DE 01 00 34 42 01 00 E0 CA 00 00 // ....]...4B......
0900: 69 76 00 00 40 3F 00 00 4E 1E 00 00 95 0C 00 00 // iv..@?..N.......
0910: 3B 04 00 00 F9 00 00 00 61 F9 0F 00 23 08 00 00 // ;.......a...#...
0920: 4F 08 00 00 39 0A 00 00 21 0D 00 00 A8 10 00 00 // O...9...!.......
0930: 9A 14 00 00 CC 18 00 00 15 1D 00 00 4D 21 00 00 // ............M!..
0940: 43 25 00 00 C8 28 00 00 AA 2B 00 00 B8 2D 00 00 // C%...(...+...-..
0950: C6 2E 00 00 AC 2E 00 00 4C 2D 00 00 90 2A 00 00 // ........L-...*..
0960: 72 26 00 00 F9 20 00 00 3B 1A 00 00 5C 12 00 00 // r&... ..;...\...
0970: 94 09 00 00 25 00 00 00 62 F6 0F 00 A3 EC 0F 00 // ....%...b.......
0980: 4C E3 0F 00 BE DA 0F 00 64 D3 0F 00 94 CD 0F 00 // L.......d.......
0990: A4 C9 0F 00 DD C7 0F 00 6B C8 0F 00 6E CB 0F 00 // ........k...n...
09A0: E6 D0 0F 00 BB D8 0F 00 B9 E2 0F 00 8F EE 0F 00 // ................
09B0: D5 FB 0F 00 0C 0A 00 00 A3 18 00 00 FC 26 00 00 // .............&..
09C0: 74 34 00 00 65 40 00 00 36 4A 00 00 5A 51 00 00 // t4..e@..6J..ZQ..
09D0: 5A 55 00 00 DF 55 00 00 B2 52 00 00 C3 4B 00 00 // ZU...U...R...K..
09E0: 2C 41 00 00 32 33 00 00 42 22 00 00 F3 0E 00 00 // ,A..23..B"......
09F0: FB F9 0F 00 30 E4 0F 00 78 CE 0F 00 C6 B9 0F 00 // ....0...x.......
0A00: 0F A7 0F 00 3A 97 0F 00 1E 8B 0F 00 6E 83 0F 00 // ....:.......n...
0A10: B7 80 0F 00 55 83 0F 00 6E 8B 0F 00 EA 98 0F 00 // ....U...n.......
0A20: 78 AB 0F 00 88 C2 0F 00 52 DD 0F 00 DF FA 0F 00 // x.......R.......
0A30: 0A 1A 00 00 92 39 00 00 23 58 00 00 65 74 00 00 // .....9..#X..et..
0A40: 0C 8D 00 00 E3 A0 00 00 DC AE 00 00 1F B6 00 00 // ................
0A50: 14 B6 00 00 6B AE 00 00 23 9F 00 00 8D 88 00 00 // ....k...#.......
0A60: 4C 6B 00 00 50 48 00 00 D3 20 00 00 47 F6 0F 00 // Lk..PH... ..G...
0A70: 4F CA 0F 00 AE 9E 0F 00 33 75 0F 00 A8 4F 0F 00 // O.......3u...O..
0A80: C0 2F 0F 00 02 17 0F 00 BA 06 0F 00 E6 FF 0E 00 // ./..............
0A90: 2D 03 0F 00 D3 10 0F 00 B4 28 0F 00 42 4A 0F 00 // -........(..BJ..
0AA0: 86 74 0F 00 2A A6 0F 00 81 DD 0F 00 96 18 00 00 // .t..*...........
0AB0: 3D 55 00 00 28 91 00 00 FE C9 00 00 6F FD 00 00 // =U..(.......o...
0AC0: 4E 29 01 00 A5 4B 01 00 CB 62 01 00 75 6D 01 00 // N)...K...b..um..
0AD0: C4 6A 01 00 52 5A 01 00 38 3C 01 00 0D 11 01 00 // .j..RZ..8<......
0AE0: E9 D9 00 00 56 98 00 00 4A 4E 00 00 17 FE 0F 00 // ....V...JN......
0AF0: 51 AA 0F 00 C4 55 0F 00 50 03 0F 00 D6 B5 0E 00 // Q....U..P.......
0B00: 20 70 0E 00 C8 34 0E 00 20 06 0E 00 1C E6 0D 00 // p...4.. .......
0B10: 4B D6 0D 00 BD D7 0D 00 03 EB 0D 00 2A 10 0E 00 // K...........*...
0B20: B5 46 0E 00 AB 8D 0E 00 97 E3 0E 00 99 46 0F 00 // .F...........F..
0B30: 79 B4 0F 00 B3 2A 00 00 91 A6 00 00 3C 25 01 00 // y....*......<%..
0B40: D9 A3 01 00 98 1F 02 00 CC 95 02 00 00 04 03 00 // ................
0B50: 03 68 03 00 F8 BF 03 00 63 0A 04 00 28 46 04 00 // .h......c...(F..
0B60: 9B 72 04 00 76 8F 04 00 D2 9C 04 00 35 9B 04 00 // .r..v.......5...
0B70: 71 8B 04 00 A5 6E 04 00 32 46 04 00 A6 13 04 00 // q....n..2F......
0B80: B3 D8 03 00 1B 97 03 00 A6 50 03 00 16 07 03 00 // .........P......
0B90: 15 BC 02 00 31 71 02 00 CB 27 02 00 1D E1 01 00 // ....1q...'......
0BA0: 2A 9E 01 00 C1 5F 01 00 7C 26 01 00 C0 F2 00 00 // *...._..|&......
0BB0: C2 C4 00 00 8B 9C 00 00 FB 79 00 00 D2 5C 00 00 // .........y...\..
0BC0: B2 44 00 00 2D 31 00 00 C5 21 00 00 F4 15 00 00 // .D..-1...!......
0BD0: 5E 13 00 00 FE FF 02 00 80 BB 00 00 00 DC 05 00 // ^...............
0BE0: 08 00 20 00 16 00 18 00 03 00 00 00 01 00 00 00 // .. .............
0BF0: 00 00 10 00 80 00 00 AA 00 38 9B 71 68 0B 00 00 // .........8.qh...
0C00: 01 00 00 00 10 32 FF FF 10 FF FF FF 32 FF FF FF // .....2......2...
0C10: FF FF FF FF 03 00 00 00 03 00 00 00 03 00 38 00 // ..............8.
0C20: 03 00 38 00 03 00 00 00 01 00 00 00 03 13 00 09 // ..8.............
0C30: 00 00 00 00 03 03 00 00 00 00 00 00 00 00 00 00 // ................
0C40: 00 00 00 00 00 00 00 00 11 00 00 00 A0 02 04 00 // ................
0C50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
0C60: 00 00 00 00 00 00 00 00 11 00 00 00 AE 03 0E 00 // ................
0C70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
0C80: 00 00 00 00 00 00 00 00 08 00 00 00 AE FF 0F 00 // ................
0C90: 12 FF 0F 00 FB FD 0F 00 61 FC 0F 00 5A FA 0F 00 // ........a...Z...
0CA0: 2B F8 0F 00 41 F6 0F 00 20 F5 0F 00 44 F5 0F 00 // +...A... ...D...
0CB0: F4 F6 0F 00 25 FA 0F 00 65 FE 0F 00 E0 02 00 00 // ....%...e.......
0CC0: 8F 06 00 00 76 08 00 00 F1 07 00 00 F5 04 00 00 // ....v...........
0CD0: 2A 00 00 00 D4 FA 0F 00 8A F6 0F 00 BF F4 0F 00 // *...............
0CE0: 4F F6 0F 00 20 FB 0F 00 0F 02 00 00 29 09 00 00 // O... .......)...
0CF0: 2D 0E 00 00 40 0F 00 00 92 0B 00 00 BF 03 00 00 // -...@...........
0D00: CD F9 0F 00 B0 F0 0F 00 6E EB 0F 00 2A EC 0F 00 // ........n...*...
0D10: 51 F3 0F 00 4F FF 0F 00 CD 0C 00 00 9D 17 00 00 // Q...O...........
0D20: FC 1B 00 00 D7 17 00 00 A3 0B 00 00 7E FA 0F 00 // ............~...
0D30: 6F E9 0F 00 F5 DD 0F 00 4D DC 0F 00 EE E5 0F 00 // o.......M.......
0D40: CE F8 0F 00 B7 0F 00 00 A8 23 00 00 F5 2D 00 00 // .........#...-..
0D50: 74 2A 00 00 10 19 00 00 2C FE 0F 00 9C E1 0F 00 // t*......,.......
0D60: 64 CC 0F 00 EE C5 0F 00 7E D1 0F 00 D4 EC 0F 00 // d.......~.......
0D70: 71 10 00 00 98 31 00 00 7E 45 00 00 C9 44 00 00 // q....1..~E...D..
0D80: 24 2E 00 00 28 07 00 00 0E DB 0F 00 81 B7 0F 00 // $...(...........
0D90: 6B A8 0F 00 08 B4 0F 00 84 D8 0F 00 02 0C 00 00 // k...............
0DA0: 37 3F 00 00 E8 61 00 00 07 68 00 00 C5 4D 00 00 // 7?...a...h...M..
0DB0: 54 19 00 00 8C D9 0F 00 C8 A1 0F 00 0F 84 0F 00 // T...............
0DC0: 52 8B 0F 00 8C B7 0F 00 23 FD 0F 00 DB 47 00 00 // R.......#....G..
0DD0: B1 80 00 00 E3 94 00 00 08 7C 00 00 41 3B 00 00 // .........|..A;..
0DE0: 5E E4 0F 00 01 91 0F 00 1E 5B 0F 00 F4 54 0F 00 // ^........[...T..
0DF0: 07 83 0F 00 0B DA 0F 00 8F 41 00 00 D0 9A 00 00 // .........A......
0E00: D6 C9 00 00 16 BE 00 00 0B 78 00 00 DD 09 00 00 // .........x......
0E10: BA 92 0F 00 06 36 0F 00 ED 10 0F 00 5E 31 0F 00 // .....6......^1..
0E20: 35 91 0F 00 2C 17 00 00 83 9D 00 00 9E FC 00 00 // 5...,...........
0E30: 95 16 01 00 5B E0 00 00 BF 65 00 00 ED C6 0F 00 // ....[....e......
0E40: F4 2F 0F 00 96 CC 0E 00 C9 BB 0E 00 68 06 0F 00 // ./..........h...
0E50: E7 9B 0F 00 01 56 00 00 9E 02 01 00 40 71 01 00 // .....V......@q..
0E60: 65 80 01 00 28 27 01 00 74 78 00 00 DB 9E 0F 00 // e...('..tx......
0E70: 02 D2 0E 00 6C 48 0E 00 4D 29 0E 00 0F 82 0E 00 // ....lH..M)......
0E80: 4A 42 0F 00 29 3F 00 00 68 3D 01 00 61 FF 01 00 // JB..)?..h=..a...
0E90: B2 53 02 00 FA 20 02 00 E1 6B 01 00 38 56 00 00 // .S... ...k..8V..
0EA0: 98 17 0F 00 65 F1 0D 00 1A 21 0D 00 F9 D3 0C 00 // ....e....!......
0EB0: B5 1E 0D 00 89 FA 0D 00 02 48 0F 00 56 D6 00 00 // .........H..V...
0EC0: 63 6D 02 00 08 D8 03 00 C3 EC 04 00 15 93 05 00 // cm..............
0ED0: 20 C5 05 00 B6 8D 05 00 D6 03 05 00 DD 44 04 00 // ............D..
0EE0: CB 6E 03 00 9A 9B 02 00 5D DE 01 00 34 42 01 00 // .n......]...4B..
0EF0: E0 CA 00 00 69 76 00 00 40 3F 00 00 4E 1E 00 00 // ....iv..@?..N...
0F00: 95 0C 00 00 3B 04 00 00 F9 00 00 00 61 F9 0F 00 // ....;.......a...
0F10: 23 08 00 00 4F 08 00 00 39 0A 00 00 21 0D 00 00 // #...O...9...!...
0F20: A8 10 00 00 9A 14 00 00 CC 18 00 00 15 1D 00 00 // ................
0F30: 4D 21 00 00 43 25 00 00 C8 28 00 00 AA 2B 00 00 // M!..C%...(...+..
0F40: B8 2D 00 00 C6 2E 00 00 AC 2E 00 00 4C 2D 00 00 // .-..........L-..
0F50: 90 2A 00 00 72 26 00 00 F9 20 00 00 3B 1A 00 00 // .*..r&... ..;...
0F60: 5C 12 00 00 94 09 00 00 25 00 00 00 62 F6 0F 00 // \.......%...b...
0F70: A3 EC 0F 00 4C E3 0F 00 BE DA 0F 00 64 D3 0F 00 // ....L.......d...
0F80: 94 CD 0F 00 A4 C9 0F 00 DD C7 0F 00 6B C8 0F 00 // ............k...
0F90: 6E CB 0F 00 E6 D0 0F 00 BB D8 0F 00 B9 E2 0F 00 // n...............
0FA0: 8F EE 0F 00 D5 FB 0F 00 0C 0A 00 00 A3 18 00 00 // ................
0FB0: FC 26 00 00 74 34 00 00 65 40 00 00 36 4A 00 00 // .&..t4..e@..6J..
0FC0: 5A 51 00 00 5A 55 00 00 DF 55 00 00 B2 52 00 00 // ZQ..ZU...U...R..
0FD0: C3 4B 00 00 2C 41 00 00 32 33 00 00 42 22 00 00 // .K..,A..23..B"..
0FE0: F3 0E 00 00 FB F9 0F 00 30 E4 0F 00 78 CE 0F 00 // ........0...x...
0FF0: C6 B9 0F 00 0F A7 0F 00 3A 97 0F 00 1E 8B 0F 00 // ........:.......
1000: 6E 83 0F 00 B7 80 0F 00 55 83 0F 00 6E 8B 0F 00 // n.......U...n...
1010: EA 98 0F 00 78 AB 0F 00 88 C2 0F 00 52 DD 0F 00 // ....x.......R...
1020: DF FA 0F 00 0A 1A 00 00 92 39 00 00 23 58 00 00 // .........9..#X..
1030: 65 74 00 00 0C 8D 00 00 E3 A0 00 00 DC AE 00 00 // et..............
1040: 1F B6 00 00 14 B6 00 00 6B AE 00 00 23 9F 00 00 // ........k...#...
1050: 8D 88 00 00 4C 6B 00 00 50 48 00 00 D3 20 00 00 // ....Lk..PH... ..
1060: 47 F6 0F 00 4F CA 0F 00 AE 9E 0F 00 33 75 0F 00 // G...O.......3u..
1070: A8 4F 0F 00 C0 2F 0F 00 02 17 0F 00 BA 06 0F 00 // .O.../..........
1080: E6 FF 0E 00 2D 03 0F 00 D3 10 0F 00 B4 28 0F 00 // ....-........(..
1090: 42 4A 0F 00 86 74 0F 00 2A A6 0F 00 81 DD 0F 00 // BJ...t..*.......
10A0: 96 18 00 00 3D 55 00 00 28 91 00 00 FE C9 00 00 // ....=U..(.......
10B0: 6F FD 00 00 4E 29 01 00 A5 4B 01 00 CB 62 01 00 // o...N)...K...b..
10C0: 75 6D 01 00 C4 6A 01 00 52 5A 01 00 38 3C 01 00 // um...j..RZ..8<..
10D0: 0D 11 01 00 E9 D9 00 00 56 98 00 00 4A 4E 00 00 // ........V...JN..
10E0: 17 FE 0F 00 51 AA 0F 00 C4 55 0F 00 50 03 0F 00 // ....Q....U..P...
10F0: D6 B5 0E 00 20 70 0E 00 C8 34 0E 00 20 06 0E 00 // .... p...4.. ...
1100: 1C E6 0D 00 4B D6 0D 00 BD D7 0D 00 03 EB 0D 00 // ....K...........
1110: 2A 10 0E 00 B5 46 0E 00 AB 8D 0E 00 97 E3 0E 00 // *....F..........
1120: 99 46 0F 00 79 B4 0F 00 B3 2A 00 00 91 A6 00 00 // .F..y....*......
1130: 3C 25 01 00 D9 A3 01 00 98 1F 02 00 CC 95 02 00 // <%..............
1140: 00 04 03 00 03 68 03 00 F8 BF 03 00 63 0A 04 00 // .....h......c...
1150: 28 46 04 00 9B 72 04 00 76 8F 04 00 D2 9C 04 00 // (F...r..v.......
1160: 35 9B 04 00 71 8B 04 00 A5 6E 04 00 32 46 04 00 // 5...q....n..2F..
1170: A6 13 04 00 B3 D8 03 00 1B 97 03 00 A6 50 03 00 // .............P..
1180: 16 07 03 00 15 BC 02 00 31 71 02 00 CB 27 02 00 // ........1q...'..
1190: 1D E1 01 00 2A 9E 01 00 C1 5F 01 00 7C 26 01 00 // ....*...._..|&..
11A0: C0 F2 00 00 C2 C4 00 00 8B 9C 00 00 FB 79 00 00 // .............y..
11B0: D2 5C 00 00 B2 44 00 00 2D 31 00 00 C5 21 00 00 // .\...D..-1...!..
11C0: F4 15 00 00 5E 13 00 00 01 00 00 00 03 13 00 09 // ....^...........
11D0: 00 00 00 00 03 03 00 00 00 00 00 00 00 00 00 00 // ................
11E0: 00 00 00 00 00 00 00 00 11 00 00 00 A0 02 04 00 // ................
11F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
1200: 00 00 00 00 00 00 00 00 11 00 00 00 AE 03 0E 00 // ................
1210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // ................
1220: 00 00 00 00 00 00 00 00 08 00 00 00 AE FF 0F 00 // ................
1230: 12 FF 0F 00 FB FD 0F 00 61 FC 0F 00 5A FA 0F 00 // ........a...Z...
1240: 2B F8 0F 00 41 F6 0F 00 20 F5 0F 00 44 F5 0F 00 // +...A... ...D...
1250: F4 F6 0F 00 25 FA 0F 00 65 FE 0F 00 E0 02 00 00 // ....%...e.......
1260: 8F 06 00 00 76 08 00 00 F1 07 00 00 F5 04 00 00 // ....v...........
1270: 2A 00 00 00 D4 FA 0F 00 8A F6 0F 00 BF F4 0F 00 // *...............
1280: 4F F6 0F 00 20 FB 0F 00 0F 02 00 00 29 09 00 00 // O... .......)...
1290: 2D 0E 00 00 40 0F 00 00 92 0B 00 00 BF 03 00 00 // -...@...........
12A0: CD F9 0F 00 B0 F0 0F 00 6E EB 0F 00 2A EC 0F 00 // ........n...*...
12B0: 51 F3 0F 00 4F FF 0F 00 CD 0C 00 00 9D 17 00 00 // Q...O...........
12C0: FC 1B 00 00 D7 17 00 00 A3 0B 00 00 7E FA 0F 00 // ............~...
12D0: 6F E9 0F 00 F5 DD 0F 00 4D DC 0F 00 EE E5 0F 00 // o.......M.......
12E0: CE F8 0F 00 B7 0F 00 00 A8 23 00 00 F5 2D 00 00 // .........#...-..
12F0: 74 2A 00 00 10 19 00 00 2C FE 0F 00 9C E1 0F 00 // t*......,.......
1300: 64 CC 0F 00 EE C5 0F 00 7E D1 0F 00 D4 EC 0F 00 // d.......~.......
1310: 71 10 00 00 98 31 00 00 7E 45 00 00 C9 44 00 00 // q....1..~E...D..
1320: 24 2E 00 00 28 07 00 00 0E DB 0F 00 81 B7 0F 00 // $...(...........
1330: 6B A8 0F 00 08 B4 0F 00 84 D8 0F 00 02 0C 00 00 // k...............
1340: 37 3F 00 00 E8 61 00 00 07 68 00 00 C5 4D 00 00 // 7?...a...h...M..
1350: 54 19 00 00 8C D9 0F 00 C8 A1 0F 00 0F 84 0F 00 // T...............
1360: 52 8B 0F 00 8C B7 0F 00 23 FD 0F 00 DB 47 00 00 // R.......#....G..
1370: B1 80 00 00 E3 94 00 00 08 7C 00 00 41 3B 00 00 // .........|..A;..
1380: 5E E4 0F 00 01 91 0F 00 1E 5B 0F 00 F4 54 0F 00 // ^........[...T..
1390: 07 83 0F 00 0B DA 0F 00 8F 41 00 00 D0 9A 00 00 // .........A......
13A0: D6 C9 00 00 16 BE 00 00 0B 78 00 00 DD 09 00 00 // .........x......
13B0: BA 92 0F 00 06 36 0F 00 ED 10 0F 00 5E 31 0F 00 // .....6......^1..
13C0: 35 91 0F 00 2C 17 00 00 83 9D 00 00 9E FC 00 00 // 5...,...........
13D0: 95 16 01 00 5B E0 00 00 BF 65 00 00 ED C6 0F 00 // ....[....e......
13E0: F4 2F 0F 00 96 CC 0E 00 C9 BB 0E 00 68 06 0F 00 // ./..........h...
13F0: E7 9B 0F 00 01 56 00 00 9E 02 01 00 40 71 01 00 // .....V......@q..
1400: 65 80 01 00 28 27 01 00 74 78 00 00 DB 9E 0F 00 // e...('..tx......
1410: 02 D2 0E 00 6C 48 0E 00 4D 29 0E 00 0F 82 0E 00 // ....lH..M)......
1420: 4A 42 0F 00 29 3F 00 00 68 3D 01 00 61 FF 01 00 // JB..)?..h=..a...
1430: B2 53 02 00 FA 20 02 00 E1 6B 01 00 38 56 00 00 // .S... ...k..8V..
1440: 98 17 0F 00 65 F1 0D 00 1A 21 0D 00 F9 D3 0C 00 // ....e....!......
1450: B5 1E 0D 00 89 FA 0D 00 02 48 0F 00 56 D6 00 00 // .........H..V...
1460: 63 6D 02 00 08 D8 03 00 C3 EC 04 00 15 93 05 00 // cm..............
1470: 20 C5 05 00 B6 8D 05 00 D6 03 05 00 DD 44 04 00 // ............D..
1480: CB 6E 03 00 9A 9B 02 00 5D DE 01 00 34 42 01 00 // .n......]...4B..
1490: E0 CA 00 00 69 76 00 00 40 3F 00 00 4E 1E 00 00 // ....iv..@?..N...
14A0: 95 0C 00 00 3B 04 00 00 F9 00 00 00 61 F9 0F 00 // ....;.......a...
14B0: 23 08 00 00 4F 08 00 00 39 0A 00 00 21 0D 00 00 // #...O...9...!...
14C0: A8 10 00 00 9A 14 00 00 CC 18 00 00 15 1D 00 00 // ................
14D0: 4D 21 00 00 43 25 00 00 C8 28 00 00 AA 2B 00 00 // M!..C%...(...+..
14E0: B8 2D 00 00 C6 2E 00 00 AC 2E 00 00 4C 2D 00 00 // .-..........L-..
14F0: 90 2A 00 00 72 26 00 00 F9 20 00 00 3B 1A 00 00 // .*..r&... ..;...
1500: 5C 12 00 00 94 09 00 00 25 00 00 00 62 F6 0F 00 // \.......%...b...
1510: A3 EC 0F 00 4C E3 0F 00 BE DA 0F 00 64 D3 0F 00 // ....L.......d...
1520: 94 CD 0F 00 A4 C9 0F 00 DD C7 0F 00 6B C8 0F 00 // ............k...
1530: 6E CB 0F 00 E6 D0 0F 00 BB D8 0F 00 B9 E2 0F 00 // n...............
1540: 8F EE 0F 00 D5 FB 0F 00 0C 0A 00 00 A3 18 00 00 // ................
1550: FC 26 00 00 74 34 00 00 65 40 00 00 36 4A 00 00 // .&..t4..e@..6J..
1560: 5A 51 00 00 5A 55 00 00 DF 55 00 00 B2 52 00 00 // ZQ..ZU...U...R..
1570: C3 4B 00 00 2C 41 00 00 32 33 00 00 42 22 00 00 // .K..,A..23..B"..
1580: F3 0E 00 00 FB F9 0F 00 30 E4 0F 00 78 CE 0F 00 // ........0...x...
1590: C6 B9 0F 00 0F A7 0F 00 3A 97 0F 00 1E 8B 0F 00 // ........:.......
15A0: 6E 83 0F 00 B7 80 0F 00 55 83 0F 00 6E 8B 0F 00 // n.......U...n...
15B0: EA 98 0F 00 78 AB 0F 00 88 C2 0F 00 52 DD 0F 00 // ....x.......R...
15C0: DF FA 0F 00 0A 1A 00 00 92 39 00 00 23 58 00 00 // .........9..#X..
15D0: 65 74 00 00 0C 8D 00 00 E3 A0 00 00 DC AE 00 00 // et..............
15E0: 1F B6 00 00 14 B6 00 00 6B AE 00 00 23 9F 00 00 // ........k...#...
15F0: 8D 88 00 00 4C 6B 00 00 50 48 00 00 D3 20 00 00 // ....Lk..PH... ..
1600: 47 F6 0F 00 4F CA 0F 00 AE 9E 0F 00 33 75 0F 00 // G...O.......3u..
1610: A8 4F 0F 00 C0 2F 0F 00 02 17 0F 00 BA 06 0F 00 // .O.../..........
1620: E6 FF 0E 00 2D 03 0F 00 D3 10 0F 00 B4 28 0F 00 // ....-........(..
1630: 42 4A 0F 00 86 74 0F 00 2A A6 0F 00 81 DD 0F 00 // BJ...t..*.......
1640: 96 18 00 00 3D 55 00 00 28 91 00 00 FE C9 00 00 // ....=U..(.......
1650: 6F FD 00 00 4E 29 01 00 A5 4B 01 00 CB 62 01 00 // o...N)...K...b..
1660: 75 6D 01 00 C4 6A 01 00 52 5A 01 00 38 3C 01 00 // um...j..RZ..8<..
1670: 0D 11 01 00 E9 D9 00 00 56 98 00 00 4A 4E 00 00 // ........V...JN..
1680: 17 FE 0F 00 51 AA 0F 00 C4 55 0F 00 50 03 0F 00 // ....Q....U..P...
1690: D6 B5 0E 00 20 70 0E 00 C8 34 0E 00 20 06 0E 00 // .... p...4.. ...
16A0: 1C E6 0D 00 4B D6 0D 00 BD D7 0D 00 03 EB 0D 00 // ....K...........
16B0: 2A 10 0E 00 B5 46 0E 00 AB 8D 0E 00 97 E3 0E 00 // *....F..........
16C0: 99 46 0F 00 79 B4 0F 00 B3 2A 00 00 91 A6 00 00 // .F..y....*......
16D0: 3C 25 01 00 D9 A3 01 00 98 1F 02 00 CC 95 02 00 // <%..............
16E0: 00 04 03 00 03 68 03 00 F8 BF 03 00 63 0A 04 00 // .....h......c...
16F0: 28 46 04 00 9B 72 04 00 76 8F 04 00 D2 9C 04 00 // (F...r..v.......
1700: 35 9B 04 00 71 8B 04 00 A5 6E 04 00 32 46 04 00 // 5...q....n..2F..
1710: A6 13 04 00 B3 D8 03 00 1B 97 03 00 A6 50 03 00 // .............P..
1720: 16 07 03 00 15 BC 02 00 31 71 02 00 CB 27 02 00 // ........1q...'..
1730: 1D E1 01 00 2A 9E 01 00 C1 5F 01 00 7C 26 01 00 // ....*...._..|&..
1740: C0 F2 00 00 C2 C4 00 00 8B 9C 00 00 FB 79 00 00 // .............y..
1750: D2 5C 00 00 B2 44 00 00 2D 31 00 00 C5 21 00 00 // .\...D..-1...!..
1760: F4 15 00 00 5E 13 00 00 00 AB 00 00 00 03 01 86 // ....^...........
1770: 80 34 AE 01 00 01 00 00 00 04 00 00 00 00 00 00 // .4..............
1780: 01 FE FF 02 00 80 BB 00 00 00 DC 05 00 08 00 20 // ...............
1790: 00 16 00 18 00 03 00 00 00 01 00 00 00 00 00 10 // ................
17A0: 00 80 00 00 AA 00 38 9B 71 54 00 00 00 00 00 00 // ......8.qT......
17B0: 00 10 FF FF FF 32 FF FF FF 10 32 FF FF 10 32 FF // .....2....2...2.
17C0: FF 10 32 FF FF 10 32 FF FF 10 32 FF FF 10 32 FF // ..2...2...2...2.
17D0: FF 37 04 D0 83 00 00 70 C0 00 00 00 00 04 00 01 // .7.....p........
17E0: 02 0F 00 00 00 0F 00 00 00 02 40 00 00 04 00 00 // ..........@.....
17F0: 00 00 0F 07 07 20 00 00 00 01 00 00 00 FF 0F 00 // ..... ..........
1800: 00 01 49 4E 54 33 34 43 32 00 00 00 00 00 00 00 // ..INT34C2.......
1810: 00 00 00 01 AC 00 00 00 03 01 86 80 34 AE 01 00 // ............4...
1820: 01 00 00 00 04 00 00 01 00 00 00 01 01 FE FF 02 // ................
1830: 00 80 BB 00 00 00 DC 05 00 08 00 20 00 16 00 18 // ........... ....
1840: 00 03 00 00 00 01 00 00 00 00 00 10 00 80 00 00 // ................
1850: AA 00 38 9B 71 54 00 00 00 00 00 00 00 10 FF FF // ..8.qT..........
1860: FF 32 FF FF FF 10 32 FF FF 10 32 FF FF 10 32 FF // .2....2...2...2.
1870: FF 10 32 FF FF 10 32 FF FF 10 32 FF FF 37 04 D0 // ..2...2...2..7..
1880: 83 00 00 70 C0 00 00 00 00 04 00 01 02 0F 00 00 // ...p............
1890: 00 0F 00 00 00 02 40 00 00 04 00 00 00 00 0F 07 // ......@.........
18A0: 07 20 00 00 00 01 00 00 00 FF 0F 00 00 01 49 4E // . ............IN
18B0: 54 33 34 43 32 00 00 00 00 00 00 00 00 00 00 01 // T34C2...........
18C0: AB 00 00 00 03 01 86 80 34 AE 01 00 01 00 00 00 // ........4.......
18D0: 04 01 00 00 00 00 00 01 FE FF 02 00 80 BB 00 00 // ................
18E0: 00 DC 05 00 08 00 20 00 16 00 18 00 03 00 00 00 // ...... .........
18F0: 01 00 00 00 00 00 10 00 80 00 00 AA 00 38 9B 71 // .............8.q
1900: 54 00 00 00 00 00 00 00 10 FF FF FF 10 FF FF FF // T...............
1910: 10 FF FF FF 10 FF FF FF 10 FF FF FF 10 FF FF FF // ................
1920: 10 FF FF FF 10 FF FF FF 37 04 D0 83 00 00 70 C0 // ........7.....p.
1930: 00 00 00 00 04 00 01 02 0F 00 00 00 0F 00 00 00 // ................
1940: 02 40 00 00 04 00 00 00 00 0F 07 07 20 00 00 00 // .@.......... ...
1950: 01 00 00 00 FF 0F 00 00 01 49 4E 54 33 34 43 32 // .........INT34C2
1960: 00 00 00 00 00 00 00 00 00 00 01 04 00 00 00 DE // ................
1970: AD BE EF // ...
ha, that's interesting, thanks @mchehab
Can you share the nhlt.dat, a more recent version of iasl should give a better printout with each endpoint listed.
I guess I can't share .dat here, as github doesn't like sharing binaries.
Yet, from the logs produced by sof-audio-pci-intel-cnl,, it sounds this is a good way to detect it:
machine with ES8336:
[ 4.912285] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040100
[ 4.912340] sof-audio-pci-intel-cnl 0000:00:1f.3: enabling device (0000 -> 0002)
[ 4.912463] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040100
[ 4.912505] sof-audio-pci-intel-cnl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[ 4.919447] sof-audio-pci-intel-cnl 0000:00:1f.3: use msi interrupt mode
[ 4.931329] sof-audio-pci-intel-cnl 0000:00:1f.3: NHLT_DEVICE_I2S detected, ssp_mask 0x1
[ 4.931333] sof-audio-pci-intel-cnl 0000:00:1f.3: Overriding topology with MCLK mask 0x1 from NHLT
[ 4.931335] sof-audio-pci-intel-cnl 0000:00:1f.3: hda codecs found, mask 4
[ 4.950220] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware paths/files for ipc type 0:
[ 4.950222] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware file: intel/sof/sof-cml.ri
[ 4.950223] sof-audio-pci-intel-cnl 0000:00:1f.3: Topology file: intel/sof-tplg/sof-cml-es8336-dmic2ch-ssp0.tplg
[ 4.966127] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:2:0-57864
[ 4.966129] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0
[ 4.966133] sof-audio-pci-intel-cnl 0000:00:1f.3: unknown sof_ext_man header type 3 size 0x30
[ 5.066596] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:2:0-57864
[ 5.066598] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0
[ 5.070760] sof-audio-pci-intel-cnl 0000:00:1f.3: Topology: ABI 3:20:1 Kernel ABI 3:23:0
The NHLT messages there detected an endpoint with I2S on it:
[ 4.931329] sof-audio-pci-intel-cnl 0000:00:1f.3: NHLT_DEVICE_I2S detected, ssp_mask 0x1
Now, the machine with AC97 reports, instead, with unpatched 6.8.6-300.fc40.x86_64 kernel:
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: enabling device (0000 -> 0002)
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040380
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: use msi interrupt mode
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: hda codecs found, mask 5
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware paths/files for ipc type 0:
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware file: intel/sof/sof-cml.ri
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Topology file: intel/sof-tplg/sof-cml-es8336
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:2:0-57864
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: unknown sof_ext_man header type 3 size 0x30
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:2:0-57864
kern :info : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0
No message related to NHLT, meaning that the logic at check_nhlt_ssp_mask() function from sound/soc/sof/intel/hda.c was unable to detect an endpoint with I2S data filled.
It sounds that, if we add a function similar to this at sound/hda/intel-dsp-config.c:
diff --git a/sound/hda/intel-dsp-config.c b/sound/hda/intel-dsp-config.c
index 6a384b922e4f..85d7b9b98237 100644
--- a/sound/hda/intel-dsp-config.c
+++ b/sound/hda/intel-dsp-config.c
@@ -568,6 +568,22 @@ static const struct config_entry *snd_intel_dsp_find_config
return NULL;
}
+static int snd_intel_dsp_has_sof_i2s_endpoint(struct pci_dev *pci)
+{
+ struct nhlt_acpi_table *nhlt;
+ int ret = 0;
+
+ nhlt = intel_nhlt_init(&pci->dev);
+ if (nhlt) {
+ if (intel_nhlt_has_endpoint_type(nhlt, NHLT_LINK_SSP))
+ if (intel_nhlt_ssp_endpoint_mask(nhlt, NHLT_DEVICE_I2S))
+ ret = 1;
+
+ intel_nhlt_free(nhlt);
+ }
+ return ret;
+}
+
static int snd_intel_dsp_check_dmic(struct pci_dev *pci)
{
struct nhlt_acpi_table *nhlt;
@@ -647,8 +665,11 @@ int snd_intel_dsp_driver_probe(struct pci_dev *pci)
/* find the configuration for the specific device */
cfg = snd_intel_dsp_find_config(pci, config_table, ARRAY_SIZE(config_table));
- if (!cfg)
- return SND_INTEL_DSP_DRIVER_ANY;
+ if (!cfg) {
+ if (snd_intel_dsp_has_sof_i2s_endpoint(pci))
+ return SND_INTEL_DSP_DRIVER_ANY;
+ return SND_INTEL_DSP_DRIVER_LEGACY;
+ }
if (cfg->flags & FLAG_SOF) {
if (cfg->flags & FLAG_SOF_ONLY_IF_SOUNDWIRE &&
This can be autodetected.
so the rule should be (in that order)
a) the number of endpoints is > 0 b) the number of ssp_endpoints is > 0 c) the number of ssp_endpoints with the device type AE34 (codec) > 0
From the Matebook DSP I can these those values which seem correct
Link Type : 03 [Type SSP]
Vendor Id : 8086
Device Id : AE34 [I2S/TDM Codecs]
Device Type : 04
Those are a clear sign of an SSP link enabled.
except that of course ACPI tells us of a different value for device Id haha
So I guess we should only use
Link Type : 03 [Type SSP]
Vendor Id : 8086
Device Type : 04
Could you prepare a patch? Mine didn't work, as the checks I added weren't enough.
Can you try this patch @mchehab:
https://github.com/plbossart/sound/commits/fix/es8336-detection/
Compile-tested only.
Can you try this patch @mchehab:
https://github.com/plbossart/sound/commits/fix/es8336-detection/
Compile-tested only.
It worked fine at the notebook with AC97. Didn't test with SOF.
Feel free to add to the patch a comment like:
Tested on Huawei Matebook D14 (NBLB-WAX9N) using an AC97
codec linked to HDA.
Tested-by: Mauro Carvalho Chehab <mchehab@kernel.org>
As a reference, those are the logs with the patch applied:
[ 7.858249] snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
[ 7.858312] snd_hda_intel 0000:00:1f.3: snd_intel_dsp_find_config: no valid SSP found for HID ESSX8336, skipped
[ 7.858470] snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002)
[ 7.859146] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[ 7.928616] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC256: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
[ 7.928622] snd_hda_codec_realtek hdaudioC0D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[ 7.928626] snd_hda_codec_realtek hdaudioC0D0: hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[ 7.928628] snd_hda_codec_realtek hdaudioC0D0: mono: mono_out=0x0
[ 7.928630] snd_hda_codec_realtek hdaudioC0D0: inputs:
[ 7.928632] snd_hda_codec_realtek hdaudioC0D0: Headset Mic=0x19
[ 7.928634] snd_hda_codec_realtek hdaudioC0D0: Internal Mic=0x12
[ 8.017903] input: HDA Intel PCH Headset Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input35
[ 8.017958] input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input36
[ 8.018008] input: HDA Intel PCH HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input37
[ 8.018054] input: HDA Intel PCH HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input38
[ 8.018099] input: HDA Intel PCH HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input39
Description
There are different models of Huawei Matebook D14. The newer ones come with ES8336, but older models may have different codecs. I had already access to one model with ES8336, and I own one with Realtek ALC 256.
The model with Realtek ALC 256 is reported as:
And it has its latest ACPI BIOS for such model:
Despite using Realtek ALC 256, its ACPI table also has entries for ES8336:
That makes snd-intel-dspcfg to try using the SOF driver for es8336, which fails, making the device unusable.
To Reproduce
Boot the Kernel 6.8 on such device without any module parameter. The same problem also happens on older Kernels.
Reproduction Rate
It happens 100% of the time with default detection logic enabled. Adding this to /etc/modprobe.d/alsa.conf fixes the issue:
Booting passing dsp_driver parameter makes it work properly [1]: https://alsa-project.org/db/?f=1a5ddeb0b151db8fe051407f5bb1c075b7dd3e4a
[1]: an additional is needed for headset microphone to work with intel_hda:
Expected behavior
A quirk at sound/hda/intel-dsp-config.c should be added to blacklist SOF detection on such device, letting it use the legacy intel HDA driver.
Impact
No audio.