1. 18 Dec, 2023 5 commits
    • Shyam Sundar S K's avatar
      platform/x86/amd/pmf: change amd_pmf_init_features() call sequence · c7af1653
      Shyam Sundar S K authored
      To sideload pmf policy binaries, the Smart PC Solution Builder provides a
      debugfs file called "update_policy"; that gets created under a new debugfs
      directory called "pb" and this new directory has to be associated with
      existing parent directory for PMF driver called "amd_pmf".
      
      In the current code structure, amd_pmf_dbgfs_register() is called after
      amd_pmf_init_features(). This will not help when the Smart PC builder
      feature has to be assoicated to the parent directory.
      
      Hence change the order of amd_pmf_dbgfs_register() and call it before
      amd_pmf_init_features() so that when the Smart PC init happens, it has the
      parent debugfs directory to get itself hooked.
      Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
      Signed-off-by: default avatarShyam Sundar S K <Shyam-sundar.S-k@amd.com>
      Link: https://lore.kernel.org/r/20231212014705.2017474-6-Shyam-sundar.S-k@amd.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      c7af1653
    • Shyam Sundar S K's avatar
      platform/x86/amd/pmf: Add support for PMF Policy Binary · 7c45534a
      Shyam Sundar S K authored
      PMF Policy binary is a encrypted and signed binary that will be part
      of the BIOS. PMF driver via the ACPI interface checks the existence
      of Smart PC bit. If the advertised bit is found, PMF driver walks
      the acpi namespace to find out the policy binary size and the address
      which has to be passed to the TA during the TA init sequence.
      
      The policy binary is comprised of inputs (or the events) and outputs
      (or the actions). With the PMF ecosystem, OEMs generate the policy
      binary (or could be multiple binaries) that contains a supported set
      of inputs and outputs which could be specifically carved out for each
      usage segment (or for each user also) that could influence the system
      behavior either by enriching the user experience or/and boost/throttle
      power limits.
      
      Once the TA init command succeeds, the PMF driver sends the changing
      events in the current environment to the TA for a constant sampling
      frequency time (the event here could be a lid close or open) and
      if the policy binary has corresponding action built within it, the
      TA sends the action for it in the subsequent enact command.
      
      If the inputs sent to the TA has no output defined in the policy
      binary generated by OEMs, there will be no action to be performed
      by the PMF driver.
      
      Example policies:
      
      1) if slider is performance ; set the SPL to 40W
      Here PMF driver registers with the platform profile interface and
      when the slider position is changed, PMF driver lets the TA know
      about this. TA sends back an action to update the Sustained
      Power Limit (SPL). PMF driver updates this limit via the PMFW mailbox.
      
      2) if user_away ; then lock the system
      Here PMF driver hooks to the AMD SFH driver to know the user presence
      and send the inputs to TA and if the condition is met, the TA sends
      the action of locking the system. PMF driver generates a uevent and
      based on the udev rule in the userland the system gets locked with
      systemctl.
      
      The intent here is to provide the OEM's to make a policy to lock the
      system when the user is away ; but the userland can make a choice to
      ignore it.
      
      The OEMs will have an utility to create numerous such policies and
      the policies shall be reviewed by AMD before signing and encrypting
      them. Policies are shared between operating systems to have seemless user
      experience.
      
      Since all this action has to happen via the "amdtee" driver, currently
      there is no caller for it in the kernel which can load the amdtee driver.
      Without amdtee driver loading onto the system the "tee" calls shall fail
      from the PMF driver. Hence an explicit MODULE_SOFTDEP has been added
      to address this.
      Signed-off-by: default avatarShyam Sundar S K <Shyam-sundar.S-k@amd.com>
      Link: https://lore.kernel.org/r/20231212014705.2017474-5-Shyam-sundar.S-k@amd.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      7c45534a
    • Shyam Sundar S K's avatar
      platform/x86/amd/pmf: Change return type of amd_pmf_set_dram_addr() · 2b3a7f06
      Shyam Sundar S K authored
      In the current code, the metrics table information was required only
      for auto-mode or CnQF at a given time. Hence keeping the return type
      of amd_pmf_set_dram_addr() as static made sense.
      
      But with the addition of Smart PC builder feature, the metrics table
      information has to be shared by the Smart PC also and this feature
      resides outside of core.c.
      
      To make amd_pmf_set_dram_addr() visible outside of core.c make it
      as a non-static function and move the allocation of memory for
      metrics table from amd_pmf_init_metrics_table() to amd_pmf_set_dram_addr()
      as amd_pmf_set_dram_addr() is the common function to set the DRAM
      address.
      
      Add a suspend handler that can free up the allocated memory for getting
      the metrics table information.
      Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
      Signed-off-by: default avatarShyam Sundar S K <Shyam-sundar.S-k@amd.com>
      Link: https://lore.kernel.org/r/20231212014705.2017474-4-Shyam-sundar.S-k@amd.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      2b3a7f06
    • Shyam Sundar S K's avatar
      platform/x86/amd/pmf: Add support for PMF-TA interaction · ae82cef7
      Shyam Sundar S K authored
      PMF TA (Trusted Application) loads via the TEE environment into the
      AMD ASP.
      
      PMF-TA supports two commands:
      1) Init: Initialize the TA with the PMF Smart PC policy binary and
      start the policy engine. A policy is a combination of inputs and
      outputs, where;
       - the inputs are the changing dynamics of the system like the user
         behaviour, system heuristics etc.
       - the outputs, which are the actions to be set on the system which
         lead to better power management and enhanced user experience.
      
      PMF driver acts as a central manager in this case to supply the
      inputs required to the TA (either by getting the information from
      the other kernel subsystems or from userland)
      
      2) Enact: Enact the output actions from the TA. The action could be
      applying a new thermal limit to boost/throttle the power limits or
      change system behavior.
      Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
      Signed-off-by: default avatarShyam Sundar S K <Shyam-sundar.S-k@amd.com>
      Link: https://lore.kernel.org/r/20231212014705.2017474-3-Shyam-sundar.S-k@amd.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      ae82cef7
    • Shyam Sundar S K's avatar
      platform/x86/amd/pmf: Add PMF TEE interface · ac052d8c
      Shyam Sundar S K authored
      AMD PMF driver loads the PMF TA (Trusted Application) into the AMD
      ASP's (AMD Security Processor) TEE (Trusted Execution Environment).
      
      PMF Trusted Application is a secured firmware placed under
      /lib/firmware/amdtee gets loaded only when the TEE environment is
      initialized. Add the initial code path to build these pipes.
      Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
      Signed-off-by: default avatarShyam Sundar S K <Shyam-sundar.S-k@amd.com>
      Link: https://lore.kernel.org/r/20231212014705.2017474-2-Shyam-sundar.S-k@amd.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      ac052d8c
  2. 14 Dec, 2023 1 commit
  3. 11 Dec, 2023 17 commits
  4. 04 Dec, 2023 17 commits