Re: [PATCH 3/3] AMD_SFH: Add DMI quirk table for BIOS-es which don't set the activestatus bits

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,
On 1/28/2021 5:42 PM, Hans de Goede wrote:
> Some BIOS-es do not initialize the activestatus bits of the AMD_P2C_MSG3
> register. This cause the AMD_SFH driver to not register any sensors even
> though the laptops in question do have sensors.
>
> Add a DMI quirk-table for specifying sensor-mask overrides based on
> DMI match, to make the sensors work OOTB on these laptop models.
>
> BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=199715
> BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1651886
> Fixes: 4f567b9f8141 ("SFH: PCIe driver to add support of AMD sensor fusion hub")
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
> ---
>  drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>
> diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
> index ab0a9443e252..ddecc84fd6f0 100644
> --- a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
> +++ b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
> @@ -10,6 +10,7 @@
>  #include <linux/bitops.h>
>  #include <linux/delay.h>
>  #include <linux/dma-mapping.h>
> +#include <linux/dmi.h>
>  #include <linux/interrupt.h>
>  #include <linux/io-64-nonatomic-lo-hi.h>
>  #include <linux/module.h>
> @@ -77,11 +78,34 @@ void amd_stop_all_sensors(struct amd_mp2_dev *privdata)
>  	writel(cmd_base.ul, privdata->mmio + AMD_C2P_MSG0);
>  }
>  
> +static const struct dmi_system_id dmi_sensor_mask_overrides[] = {
> +	{
> +		.matches = {
> +			DMI_MATCH(DMI_PRODUCT_NAME, "HP ENVY x360 Convertible 13-ag0xxx"),
> +		},
> +		.driver_data = (void *)(ACEL_EN | MAGNO_EN),
> +	},
> +	{
> +		.matches = {
> +			DMI_MATCH(DMI_PRODUCT_NAME, "HP ENVY x360 Convertible 15-cp0xxx"),
> +		},
> +		.driver_data = (void *)(ACEL_EN | MAGNO_EN),
> +	},
> +	{ }
> +};
> +
>  int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id)
>  {
>  	int activestatus, num_of_sensors = 0;
> +	const struct dmi_system_id *dmi_id;
>  	u32 activecontrolstatus;
>  
> +	if (sensor_mask_override == -1) {
> +		dmi_id = dmi_first_match(dmi_sensor_mask_overrides);
> +		if (dmi_id)
> +			sensor_mask_override = (long)dmi_id->driver_data;
> +	}
> +
>  	if (sensor_mask_override >= 0) {
>  		activestatus = sensor_mask_override;
>  	} else {
Can you please confirm that HP Envy x360  is whether ryzen 4000 (Renior based) series or ryzen 3000 (Raven based) series? As of now current upstream code does not have support for Ryzen 4000 series
for which work is in progress. However, for Ryzen 3000 based series this patch looks fine and thanks for the contribution.


Regards

Nehal





[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux