forked from luck/tmp_suning_uos_patched
platform/x86: intel_pmc_core: Don't use global pmcdev in quirks
[ Upstream commit c9f86d6ca6b5e23d30d16ade4b9fff5b922a610a ] The DMI callbacks, used for quirks, currently access the PMC by getting the address a global pmc_dev struct. Instead, have the callbacks set a global quirk specific variable. In probe, after calling dmi_check_system(), pass pmc_dev to a function that will handle each quirk if its variable condition is met. This allows removing the global pmc_dev later. Signed-off-by: David E. Box <david.e.box@linux.intel.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Rajneesh Bhardwaj <irenic.rajneesh@gmail.com> Link: https://lore.kernel.org/r/20210417031252.3020837-2-david.e.box@linux.intel.com Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
5d60792d12
commit
b82e8f0bb0
|
@ -1186,9 +1186,15 @@ static const struct pci_device_id pmc_pci_ids[] = {
|
|||
* the platform BIOS enforces 24Mhz crystal to shutdown
|
||||
* before PMC can assert SLP_S0#.
|
||||
*/
|
||||
static bool xtal_ignore;
|
||||
static int quirk_xtal_ignore(const struct dmi_system_id *id)
|
||||
{
|
||||
struct pmc_dev *pmcdev = &pmc;
|
||||
xtal_ignore = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pmc_core_xtal_ignore(struct pmc_dev *pmcdev)
|
||||
{
|
||||
u32 value;
|
||||
|
||||
value = pmc_core_reg_read(pmcdev, pmcdev->map->pm_vric1_offset);
|
||||
|
@ -1197,7 +1203,6 @@ static int quirk_xtal_ignore(const struct dmi_system_id *id)
|
|||
/* Low Voltage Mode Enable */
|
||||
value &= ~SPT_PMC_VRIC1_SLPS0LVEN;
|
||||
pmc_core_reg_write(pmcdev, pmcdev->map->pm_vric1_offset, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dmi_system_id pmc_core_dmi_table[] = {
|
||||
|
@ -1212,6 +1217,14 @@ static const struct dmi_system_id pmc_core_dmi_table[] = {
|
|||
{}
|
||||
};
|
||||
|
||||
static void pmc_core_do_dmi_quirks(struct pmc_dev *pmcdev)
|
||||
{
|
||||
dmi_check_system(pmc_core_dmi_table);
|
||||
|
||||
if (xtal_ignore)
|
||||
pmc_core_xtal_ignore(pmcdev);
|
||||
}
|
||||
|
||||
static int pmc_core_probe(struct platform_device *pdev)
|
||||
{
|
||||
static bool device_initialized;
|
||||
|
@ -1253,7 +1266,7 @@ static int pmc_core_probe(struct platform_device *pdev)
|
|||
mutex_init(&pmcdev->lock);
|
||||
platform_set_drvdata(pdev, pmcdev);
|
||||
pmcdev->pmc_xram_read_bit = pmc_core_check_read_lock_bit();
|
||||
dmi_check_system(pmc_core_dmi_table);
|
||||
pmc_core_do_dmi_quirks(pmcdev);
|
||||
|
||||
/*
|
||||
* On TGL, due to a hardware limitation, the GBE LTR blocks PC10 when
|
||||
|
|
Loading…
Reference in New Issue
Block a user