From: Mario Limonciello <mario.limonciello@amd.com>
To: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>,
hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com
Cc: platform-driver-x86@vger.kernel.org, Patil.Reddy@amd.com
Subject: Re: [PATCH v1 1/2] platform/x86/amd/pmf: Use existing input event codes to update system states
Date: Tue, 2 Jul 2024 08:14:01 -0500 [thread overview]
Message-ID: <7da18d2a-8eb9-4ee9-b487-895221a3b4a4@amd.com> (raw)
In-Reply-To: <20240702080626.2902171-1-Shyam-sundar.S-k@amd.com>
On 7/2/2024 3:06, Shyam Sundar S K wrote:
> At present, the PMF driver employs custom system state codes to update
> system states. It is recommended to replace these with existing input
> event codes (KEY_SLEEP, KEY_SUSPEND, and KEY_SCREENLOCK) to align system
> updates with the PMF-TA output actions.
>
> Co-developed-by: Patil Rajesh Reddy <Patil.Reddy@amd.com>
> Signed-off-by: Patil Rajesh Reddy <Patil.Reddy@amd.com>
> Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> drivers/platform/x86/amd/pmf/pmf.h | 2 +
> drivers/platform/x86/amd/pmf/tee-if.c | 62 +++++++++++++++++++++------
> 2 files changed, 52 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/platform/x86/amd/pmf/pmf.h b/drivers/platform/x86/amd/pmf/pmf.h
> index eeedd0c0395a..753d5662c080 100644
> --- a/drivers/platform/x86/amd/pmf/pmf.h
> +++ b/drivers/platform/x86/amd/pmf/pmf.h
> @@ -12,6 +12,7 @@
> #define PMF_H
>
> #include <linux/acpi.h>
> +#include <linux/input.h>
> #include <linux/platform_profile.h>
>
> #define POLICY_BUF_MAX_SZ 0x4b000
> @@ -300,6 +301,7 @@ struct amd_pmf_dev {
> void __iomem *policy_base;
> bool smart_pc_enabled;
> u16 pmf_if_version;
> + struct input_dev *pmf_idev;
> };
>
> struct apmf_sps_prop_granular_v2 {
> diff --git a/drivers/platform/x86/amd/pmf/tee-if.c b/drivers/platform/x86/amd/pmf/tee-if.c
> index b438de4d6bfc..b0449f912048 100644
> --- a/drivers/platform/x86/amd/pmf/tee-if.c
> +++ b/drivers/platform/x86/amd/pmf/tee-if.c
> @@ -62,18 +62,12 @@ static void amd_pmf_prepare_args(struct amd_pmf_dev *dev, int cmd,
> param[0].u.memref.shm_offs = 0;
> }
>
> -static int amd_pmf_update_uevents(struct amd_pmf_dev *dev, u16 event)
> +static void amd_pmf_update_uevents(struct amd_pmf_dev *dev, u16 event)
> {
> - char *envp[2] = {};
> -
> - envp[0] = kasprintf(GFP_KERNEL, "EVENT_ID=%d", event);
> - if (!envp[0])
> - return -EINVAL;
> -
> - kobject_uevent_env(&dev->dev->kobj, KOBJ_CHANGE, envp);
> -
> - kfree(envp[0]);
> - return 0;
> + input_report_key(dev->pmf_idev, event, 1); /* key press */
> + input_sync(dev->pmf_idev);
> + input_report_key(dev->pmf_idev, event, 0); /* key release */
> + input_sync(dev->pmf_idev);
> }
>
> static void amd_pmf_apply_policies(struct amd_pmf_dev *dev, struct ta_pmf_enact_result *out)
> @@ -149,7 +143,20 @@ static void amd_pmf_apply_policies(struct amd_pmf_dev *dev, struct ta_pmf_enact_
> break;
>
> case PMF_POLICY_SYSTEM_STATE:
> - amd_pmf_update_uevents(dev, val);
> + switch (val) {
> + case 0:
> + amd_pmf_update_uevents(dev, KEY_SLEEP);
> + break;
> + case 1:
> + amd_pmf_update_uevents(dev, KEY_SUSPEND);
> + break;
> + case 2:
> + amd_pmf_update_uevents(dev, KEY_SCREENLOCK);
> + break;
> + default:
> + dev_err(dev->dev, "Invalid PMF policy system state: %d\n", val);
> + }
> +
> dev_dbg(dev->dev, "update SYSTEM_STATE: %s\n",
> amd_pmf_uevent_as_str(val));
> break;
> @@ -368,6 +375,30 @@ static int amd_pmf_ta_open_session(struct tee_context *ctx, u32 *id)
> return rc;
> }
>
> +static int amd_pmf_register_input_device(struct amd_pmf_dev *dev)
> +{
> + int err;
> +
> + dev->pmf_idev = devm_input_allocate_device(dev->dev);
> + if (!dev->pmf_idev)
> + return -ENOMEM;
> +
> + dev->pmf_idev->name = "PMF-TA output events";
> + dev->pmf_idev->phys = "amd-pmf/input0";
> +
> + input_set_capability(dev->pmf_idev, EV_KEY, KEY_SLEEP);
> + input_set_capability(dev->pmf_idev, EV_KEY, KEY_SCREENLOCK);
> + input_set_capability(dev->pmf_idev, EV_KEY, KEY_SUSPEND);
> +
> + err = input_register_device(dev->pmf_idev);
> + if (err) {
> + dev_err(dev->dev, "Failed to register input device: %d\n", err);
> + return err;
> + }
> +
> + return 0;
> +}
> +
> static int amd_pmf_tee_init(struct amd_pmf_dev *dev)
> {
> u32 size;
> @@ -475,6 +506,10 @@ int amd_pmf_init_smart_pc(struct amd_pmf_dev *dev)
> if (pb_side_load)
> amd_pmf_open_pb(dev, dev->dbgfs_dir);
>
> + ret = amd_pmf_register_input_device(dev);
> + if (ret)
> + goto error;
> +
> return 0;
>
> error:
> @@ -488,6 +523,9 @@ void amd_pmf_deinit_smart_pc(struct amd_pmf_dev *dev)
> if (pb_side_load && dev->esbin)
> amd_pmf_remove_pb(dev);
>
> + if (dev->pmf_idev)
> + input_unregister_device(dev->pmf_idev);
> +
> cancel_delayed_work_sync(&dev->pb_work);
> kfree(dev->prev_data);
> dev->prev_data = NULL;
next prev parent reply other threads:[~2024-07-02 13:14 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-02 8:06 [PATCH v1 1/2] platform/x86/amd/pmf: Use existing input event codes to update system states Shyam Sundar S K
2024-07-02 8:06 ` [PATCH v1 2/2] platform/x86/amd/pmf: Remove update system state document Shyam Sundar S K
2024-07-02 13:14 ` Mario Limonciello
2024-07-02 13:14 ` Mario Limonciello [this message]
2024-07-06 13:09 ` [PATCH v1 1/2] platform/x86/amd/pmf: Use existing input event codes to update system states Ilpo Järvinen
2024-07-06 14:28 ` Shyam Sundar S K
2024-07-10 8:43 ` Hans de Goede
2024-07-10 11:03 ` Ilpo Järvinen
2024-07-10 11:06 ` Ilpo Järvinen
2024-07-11 5:06 ` Shyam Sundar S K
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7da18d2a-8eb9-4ee9-b487-895221a3b4a4@amd.com \
--to=mario.limonciello@amd.com \
--cc=Patil.Reddy@amd.com \
--cc=Shyam-sundar.S-k@amd.com \
--cc=hdegoede@redhat.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=platform-driver-x86@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox