diff options
author | Mario Limonciello <mario.limonciello@amd.com> | 2022-08-29 19:29:52 +0300 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2022-09-09 18:37:41 +0300 |
commit | db55fb8a06f241e168a4f275970f2701d52040c6 (patch) | |
tree | e96520f3abb877277167d711f8b440bd1f87c7e2 /drivers/platform | |
parent | 90bec2855c566b6d07cc3e2bb47befb6266cf1ec (diff) | |
download | linux-db55fb8a06f241e168a4f275970f2701d52040c6.tar.xz |
platform/x86/amd: pmc: Add an extra STB message for checking s2idle entry
The `check` callback is run right before the cores are put into HLT.
This will allow checking synchronization problems with other software
that writes into the STB.
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://lore.kernel.org/r/20220829162953.5947-5-mario.limonciello@amd.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r-- | drivers/platform/x86/amd/pmc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/platform/x86/amd/pmc.c b/drivers/platform/x86/amd/pmc.c index fba42036682d..32887687f888 100644 --- a/drivers/platform/x86/amd/pmc.c +++ b/drivers/platform/x86/amd/pmc.c @@ -41,6 +41,7 @@ #define AMD_PMC_STB_PMI_0 0x03E30600 #define AMD_PMC_STB_S2IDLE_PREPARE 0xC6000001 #define AMD_PMC_STB_S2IDLE_RESTORE 0xC6000002 +#define AMD_PMC_STB_S2IDLE_CHECK 0xC6000003 /* STB S2D(Spill to DRAM) has different message port offset */ #define STB_SPILL_TO_DRAM 0xBE @@ -706,6 +707,16 @@ static void amd_pmc_s2idle_prepare(void) dev_err(pdev->dev, "error writing to STB: %d\n", rc); } +static void amd_pmc_s2idle_check(void) +{ + struct amd_pmc_dev *pdev = &pmc; + int rc; + + rc = amd_pmc_write_stb(pdev, AMD_PMC_STB_S2IDLE_CHECK); + if (rc) + dev_err(pdev->dev, "error writing to STB: %d\n", rc); +} + static void amd_pmc_s2idle_restore(void) { struct amd_pmc_dev *pdev = &pmc; @@ -733,6 +744,7 @@ static void amd_pmc_s2idle_restore(void) static struct acpi_s2idle_dev_ops amd_pmc_s2idle_dev_ops = { .prepare = amd_pmc_s2idle_prepare, + .check = amd_pmc_s2idle_check, .restore = amd_pmc_s2idle_restore, }; #endif |