Re: [PATCH 16/17] [NOT-FOR-MERGE] media: atomsip: pci: add DMI match for Microsoft Surface 3 with broken DMI (OEMB)

Hans de Goede
2021-10-21T18:46:40Z

Hi,

On 10/21/21 11:46, Tsuchiya Yuto wrote:
> On Mon, 2021-10-18 at 09:56 +0200, Hans de Goede wrote:
>> Hi,
>>
>> On 10/17/21 18:19, Tsuchiya Yuto wrote:
>>> This commit is added for Surface 3 with broken DMI table. HACK-ish.
>>> Not intended for upstreaming. Thus, NOT-FOR-MERGE. But, if someone
>>> knows a nicer way to address this, comments are welcome...
>>>
>>>> 8-----------------------------------------------------------------8<
>>>
>>> On some Microsoft Surface 3, the DMI table gets corrupted for unknown
>>> reasons and breaks existing DMI matching used for device-specific quirks.
>>>
>>> This commit adds the (broken) DMI data into dmi_system_id tables used
>>> for quirks so that the driver can enable quirks even on the affected
>>> systems.
>>>
>>> On affected systems, the DMI data will look like this:
>>>
>>> $ grep . /sys/devices/virtual/dmi/id/{bios_vendor,board_name,board_vendor,\
>>> chassis_vendor,product_name,sys_vendor}
>>> /sys/devices/virtual/dmi/id/bios_vendor:American Megatrends Inc.
>>> /sys/devices/virtual/dmi/id/board_name:OEMB
>>> /sys/devices/virtual/dmi/id/board_vendor:OEMB
>>> /sys/devices/virtual/dmi/id/chassis_vendor:OEMB
>>> /sys/devices/virtual/dmi/id/product_name:OEMB
>>> /sys/devices/virtual/dmi/id/sys_vendor:OEMB
>>
>> I wonder what the bios_date field contains ? Typically when the DMI strings
>> are no good (e.g. often they contain "Default String" or "To be filled by OEM")
>> we add a check on the bios-date, which together with the broken strings is
>> considered unique enough to still allow a match with broken strings in the
>> kernel.
>
> Thank you so much for the comment :-)
>
> Here is the full output of "/sys/devices/virtual/dmi/id/*" (not showing
> files that need root permission to read):
>
> $ grep . /sys/devices/virtual/dmi/id/*
> /sys/devices/virtual/dmi/id/bios_date:03/09/2015
> /sys/devices/virtual/dmi/id/bios_release:5.6
> /sys/devices/virtual/dmi/id/bios_vendor:American Megatrends Inc.
> /sys/devices/virtual/dmi/id/bios_version:1.51116.238

Interesting, this is the latest BIOS from july 2019 according to:
https://support.microsoft.com/en-us/surface/surface-3-update-history-5d86a7bc-03f7-2d27-d858-e90ce637fb52
yet the date is still set to 03/09/2015.

I just checked and the BIOS with not corrupted DMI strings also keeps
the date at 03/09/2015 in BIOS updates.

So the date is correct, and together with matching a coupleof the OEMB-s
(which I've never seen anywhere else either) this should be plenty
unique.

So this not only allows adding this mathc to atomisp, but also to fix
sound + wmi on bad DMI data OEMB Surface 3-s, by updating this patch:

https://github.com/linux-surface/linux-surface/blob/2fb7e9ae91350098db9a280277f424272816a9ab/patches/5.5/0003-surface3-oemb.patch

To include the BIOS-date match and then submitting this upstream
(as 2 separate patches please).

Tsuchiya, I take it that your Surface 3 has the OEMB issue, so you
can actually test this ?

If you can prepare 2 patches for the sound + wmi then; and submit
them upstream that would be great. Please Cc me on both patches.

Regards,

Hans

> /sys/devices/virtual/dmi/id/board_name:OEMB
> grep: /sys/devices/virtual/dmi/id/board_serial: Permission denied
> /sys/devices/virtual/dmi/id/board_vendor:OEMB
> /sys/devices/virtual/dmi/id/board_version:00
> grep: /sys/devices/virtual/dmi/id/chassis_serial: Permission denied
> /sys/devices/virtual/dmi/id/chassis_type:9
> /sys/devices/virtual/dmi/id/chassis_vendor:OEMB
> /sys/devices/virtual/dmi/id/modalias:dmi:bvnAmericanMegatrendsInc.:bvr1.51116.238:bd03/09/2015:br5.6:svnOEMB:pnOEMB:pvrB16D0SM1C4G1X1:rvnOEMB:rnOEMB:rvr00:cvnOEMB:ct9:cvr:sku:
> grep: /sys/devices/virtual/dmi/id/power: Is a directory
> /sys/devices/virtual/dmi/id/product_name:OEMB
> grep: /sys/devices/virtual/dmi/id/product_serial: Permission denied
> grep: /sys/devices/virtual/dmi/id/product_uuid: Permission denied
> /sys/devices/virtual/dmi/id/product_version:B16D0SM1C4G1X1
> grep: /sys/devices/virtual/dmi/id/subsystem: Is a directory
> /sys/devices/virtual/dmi/id/sys_vendor:OEMB
> /sys/devices/virtual/dmi/id/uevent:MODALIAS=dmi:bvnAmericanMegatrendsInc.:bvr1.51116.238:bd03/09/2015:br5.6:svnOEMB:pnOEMB:pvrB16D0SM1C4G1X1:rvnOEMB:rnOEMB:rvr00:cvnOEMB:ct9:cvr:sku:
>
> The "bios_date" ("03/09/2015") looks not broken.
>
> I also noticed when writing this mail, regarding the ones that need root
> permission to read, "board_serial" and "chassis_serial" are now empty.
> "product_serial" now shows "OEM":
>
> $ sudo cat /sys/devices/virtual/dmi/id/product_serial
> OEM
>
> "product_uuid" looks not broken.
>
>> Also have you tried doing something like "load bios/setup defaults" in
>> the BIOS setup ? Maybe that helps ?
>
> Unfortunately, there is no option like this...
>
> Regards,
> Tsuchiya Yuto
>