platform/x86/amd/pmf: Register notify handler only if SPS is enabled
Power source notify handler is getting registered even when none of the PMF feature in enabled leading to a crash. ... [ 22.592162] Call Trace: [ 22.592164] <TASK> [ 22.592164] ? rcu_note_context_switch+0x5e0/0x660 [ 22.592166] ? __warn+0x81/0x130 [ 22.592171] ? rcu_note_context_switch+0x5e0/0x660 [ 22.592172] ? report_bug+0x171/0x1a0 [ 22.592175] ? prb_read_valid+0x1b/0x30 [ 22.592177] ? handle_bug+0x3c/0x80 [ 22.592178] ? exc_invalid_op+0x17/0x70 [ 22.592179] ? asm_exc_invalid_op+0x1a/0x20 [ 22.592182] ? rcu_note_context_switch+0x5e0/0x660 [ 22.592183] ? acpi_ut_delete_object_desc+0x86/0xb0 [ 22.592186] ? acpi_ut_update_ref_count.part.0+0x22d/0x930 [ 22.592187] __schedule+0xc0/0x1410 [ 22.592189] ? ktime_get+0x3c/0xa0 [ 22.592191] ? lapic_next_event+0x1d/0x30 [ 22.592193] ? hrtimer_start_range_ns+0x25b/0x350 [ 22.592196] schedule+0x5e/0xd0 [ 22.592197] schedule_hrtimeout_range_clock+0xbe/0x140 [ 22.592199] ? __pfx_hrtimer_wakeup+0x10/0x10 [ 22.592200] usleep_range_state+0x64/0x90 [ 22.592203] amd_pmf_send_cmd+0x106/0x2a0 [amd_pmf bddfe0fe3712aaa99acce3d5487405c5213c6616] [ 22.592207] amd_pmf_update_slider+0x56/0x1b0 [amd_pmf bddfe0fe3712aaa99acce3d5487405c5213c6616] [ 22.592210] amd_pmf_set_sps_power_limits+0x72/0x80 [amd_pmf bddfe0fe3712aaa99acce3d5487405c5213c6616] [ 22.592213] amd_pmf_pwr_src_notify_call+0x49/0x90 [amd_pmf bddfe0fe3712aaa99acce3d5487405c5213c6616] [ 22.592216] notifier_call_chain+0x5a/0xd0 [ 22.592218] atomic_notifier_call_chain+0x32/0x50 ... Fix this by moving the registration of source change notify handler only when SPS(Static Slider) is advertised as supported. Reported-by: Allen Zhong <allen@atr.me> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217571 Fixes: 4c71ae414474 ("platform/x86/amd/pmf: Add support SPS PMF feature") Tested-by: Patil Rajesh Reddy <Patil.Reddy@amd.com> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com> Link: https://lore.kernel.org/r/20230622060309.310001-1-Shyam-sundar.S-k@amd.com Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
fb109fba72
commit
146b6f6855
@ -297,6 +297,8 @@ static void amd_pmf_init_features(struct amd_pmf_dev *dev)
|
|||||||
/* Enable Static Slider */
|
/* Enable Static Slider */
|
||||||
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) {
|
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) {
|
||||||
amd_pmf_init_sps(dev);
|
amd_pmf_init_sps(dev);
|
||||||
|
dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call;
|
||||||
|
power_supply_reg_notifier(&dev->pwr_src_notifier);
|
||||||
dev_dbg(dev->dev, "SPS enabled and Platform Profiles registered\n");
|
dev_dbg(dev->dev, "SPS enabled and Platform Profiles registered\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,8 +317,10 @@ static void amd_pmf_init_features(struct amd_pmf_dev *dev)
|
|||||||
|
|
||||||
static void amd_pmf_deinit_features(struct amd_pmf_dev *dev)
|
static void amd_pmf_deinit_features(struct amd_pmf_dev *dev)
|
||||||
{
|
{
|
||||||
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR))
|
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) {
|
||||||
|
power_supply_unreg_notifier(&dev->pwr_src_notifier);
|
||||||
amd_pmf_deinit_sps(dev);
|
amd_pmf_deinit_sps(dev);
|
||||||
|
}
|
||||||
|
|
||||||
if (is_apmf_func_supported(dev, APMF_FUNC_AUTO_MODE)) {
|
if (is_apmf_func_supported(dev, APMF_FUNC_AUTO_MODE)) {
|
||||||
amd_pmf_deinit_auto_mode(dev);
|
amd_pmf_deinit_auto_mode(dev);
|
||||||
@ -399,9 +403,6 @@ static int amd_pmf_probe(struct platform_device *pdev)
|
|||||||
apmf_install_handler(dev);
|
apmf_install_handler(dev);
|
||||||
amd_pmf_dbgfs_register(dev);
|
amd_pmf_dbgfs_register(dev);
|
||||||
|
|
||||||
dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call;
|
|
||||||
power_supply_reg_notifier(&dev->pwr_src_notifier);
|
|
||||||
|
|
||||||
dev_info(dev->dev, "registered PMF device successfully\n");
|
dev_info(dev->dev, "registered PMF device successfully\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -411,7 +412,6 @@ static void amd_pmf_remove(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct amd_pmf_dev *dev = platform_get_drvdata(pdev);
|
struct amd_pmf_dev *dev = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
power_supply_unreg_notifier(&dev->pwr_src_notifier);
|
|
||||||
amd_pmf_deinit_features(dev);
|
amd_pmf_deinit_features(dev);
|
||||||
apmf_acpi_deinit(dev);
|
apmf_acpi_deinit(dev);
|
||||||
amd_pmf_dbgfs_unregister(dev);
|
amd_pmf_dbgfs_unregister(dev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user