aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2022-09-27 14:57:38 +0200
committerHans de Goede <hdegoede@redhat.com>2022-09-27 14:57:38 +0200
commita283781baa0c38a8e9c7b26780e3ee7a91a4f186 (patch)
tree257446cf3790b01bc6f6da5c744031891a99d9ae /drivers/platform
parentplatform/x86/amd/pmf: Remove unused power_delta instances (diff)
parentplatform/x86/amd/pmf: install notify handler after acpi init (diff)
downloadlinux-dev-a283781baa0c38a8e9c7b26780e3ee7a91a4f186.tar.xz
linux-dev-a283781baa0c38a8e9c7b26780e3ee7a91a4f186.zip
Merge branch 'platform-drivers-x86-amd-pmf' into review-hans
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/x86/amd/pmf/acpi.c38
-rw-r--r--drivers/platform/x86/amd/pmf/core.c1
-rw-r--r--drivers/platform/x86/amd/pmf/pmf.h1
3 files changed, 24 insertions, 16 deletions
diff --git a/drivers/platform/x86/amd/pmf/acpi.c b/drivers/platform/x86/amd/pmf/acpi.c
index 05a2b8a056fc..081e84e116e7 100644
--- a/drivers/platform/x86/amd/pmf/acpi.c
+++ b/drivers/platform/x86/amd/pmf/acpi.c
@@ -243,6 +243,28 @@ int apmf_get_dyn_slider_def_dc(struct amd_pmf_dev *pdev, struct apmf_dyn_slider_
return apmf_if_call_store_buffer(pdev, APMF_FUNC_DYN_SLIDER_DC, data, sizeof(*data));
}
+int apmf_install_handler(struct amd_pmf_dev *pmf_dev)
+{
+ acpi_handle ahandle = ACPI_HANDLE(pmf_dev->dev);
+ acpi_status status;
+
+ /* Install the APMF Notify handler */
+ if (is_apmf_func_supported(pmf_dev, APMF_FUNC_AUTO_MODE) &&
+ is_apmf_func_supported(pmf_dev, APMF_FUNC_SBIOS_REQUESTS)) {
+ status = acpi_install_notify_handler(ahandle, ACPI_ALL_NOTIFY,
+ apmf_event_handler, pmf_dev);
+ if (ACPI_FAILURE(status)) {
+ dev_err(pmf_dev->dev, "failed to install notify handler\n");
+ return -ENODEV;
+ }
+
+ /* Call the handler once manually to catch up with possibly missed notifies. */
+ apmf_event_handler(ahandle, 0, pmf_dev);
+ }
+
+ return 0;
+}
+
void apmf_acpi_deinit(struct amd_pmf_dev *pmf_dev)
{
acpi_handle ahandle = ACPI_HANDLE(pmf_dev->dev);
@@ -257,8 +279,6 @@ void apmf_acpi_deinit(struct amd_pmf_dev *pmf_dev)
int apmf_acpi_init(struct amd_pmf_dev *pmf_dev)
{
- acpi_handle ahandle = ACPI_HANDLE(pmf_dev->dev);
- acpi_status status;
int ret;
ret = apmf_if_verify_interface(pmf_dev);
@@ -279,20 +299,6 @@ int apmf_acpi_init(struct amd_pmf_dev *pmf_dev)
schedule_delayed_work(&pmf_dev->heart_beat, 0);
}
- /* Install the APMF Notify handler */
- if (is_apmf_func_supported(pmf_dev, APMF_FUNC_AUTO_MODE) &&
- is_apmf_func_supported(pmf_dev, APMF_FUNC_SBIOS_REQUESTS)) {
- status = acpi_install_notify_handler(ahandle,
- ACPI_ALL_NOTIFY,
- apmf_event_handler, pmf_dev);
- if (ACPI_FAILURE(status)) {
- dev_err(pmf_dev->dev, "failed to install notify handler\n");
- return -ENODEV;
- }
- /* Call the handler once manually to catch up with possibly missed notifies. */
- apmf_event_handler(ahandle, 0, pmf_dev);
- }
-
out:
return ret;
}
diff --git a/drivers/platform/x86/amd/pmf/core.c b/drivers/platform/x86/amd/pmf/core.c
index 44fe30726b62..a5f5a4bcff6d 100644
--- a/drivers/platform/x86/amd/pmf/core.c
+++ b/drivers/platform/x86/amd/pmf/core.c
@@ -369,6 +369,7 @@ static int amd_pmf_probe(struct platform_device *pdev)
apmf_acpi_init(dev);
platform_set_drvdata(pdev, dev);
amd_pmf_init_features(dev);
+ apmf_install_handler(dev);
amd_pmf_dbgfs_register(dev);
mutex_init(&dev->lock);
diff --git a/drivers/platform/x86/amd/pmf/pmf.h b/drivers/platform/x86/amd/pmf/pmf.h
index e5dc3ae238c7..84bbe2c6ea61 100644
--- a/drivers/platform/x86/amd/pmf/pmf.h
+++ b/drivers/platform/x86/amd/pmf/pmf.h
@@ -381,6 +381,7 @@ int is_apmf_func_supported(struct amd_pmf_dev *pdev, unsigned long index);
int amd_pmf_send_cmd(struct amd_pmf_dev *dev, u8 message, bool get, u32 arg, u32 *data);
int amd_pmf_init_metrics_table(struct amd_pmf_dev *dev);
int amd_pmf_get_power_source(void);
+int apmf_install_handler(struct amd_pmf_dev *pmf_dev);
/* SPS Layer */
int amd_pmf_get_pprof_modes(struct amd_pmf_dev *pmf);