Re: [PATCH] ACPI: CPPC: Add support for setting EPP register in FFH

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Sep 10, 2024 at 5:15 AM Mario Limonciello <superm1@xxxxxxxxxx> wrote:
>
> From: Mario Limonciello <mario.limonciello@xxxxxxx>
>
> Some Asus AMD systems are reported to not be able to change EPP values
> because the BIOS doesn't advertise support for the CPPC MSR and the PCC
> region is not configured.
>
> However the ACPI 6.2 specification allows CPC registers to be declared
> in FFH:
> ```
> Starting with ACPI Specification 6.2, all _CPC registers can be in
> PCC, System Memory, System IO, or Functional Fixed Hardware address
> spaces. OSPM support for this more flexible register space scheme
> is indicated by the “Flexible Address Space for CPPC Registers” _OSC
> bit.
> ```
>
> If this _OSC has been set allow using FFH to configure EPP.
>
> Reported-by: al0uette@xxxxxxxxxxx
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218686
> Suggested-by: al0uette@xxxxxxxxxxx
> Tested-by: vderp@xxxxxxxxxx
> Tested-by: al0uette@xxxxxxxxxxx
> Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
> ---
>  drivers/acpi/cppc_acpi.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
> index dd3d3082c8c7..3b5b695bb80b 100644
> --- a/drivers/acpi/cppc_acpi.c
> +++ b/drivers/acpi/cppc_acpi.c
> @@ -103,6 +103,11 @@ static DEFINE_PER_CPU(struct cpc_desc *, cpc_desc_ptr);
>                                 (cpc)->cpc_entry.reg.space_id ==        \
>                                 ACPI_ADR_SPACE_PLATFORM_COMM)
>
> +/* Check if a CPC register is in FFH */
> +#define CPC_IN_FFH(cpc) ((cpc)->type == ACPI_TYPE_BUFFER &&            \
> +                               (cpc)->cpc_entry.reg.space_id ==        \
> +                               ACPI_ADR_SPACE_FIXED_HARDWARE)
> +
>  /* Check if a CPC register is in SystemMemory */
>  #define CPC_IN_SYSTEM_MEMORY(cpc) ((cpc)->type == ACPI_TYPE_BUFFER &&  \
>                                 (cpc)->cpc_entry.reg.space_id ==        \
> @@ -1486,9 +1491,12 @@ int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable)
>                 /* after writing CPC, transfer the ownership of PCC to platform */
>                 ret = send_pcc_cmd(pcc_ss_id, CMD_WRITE);
>                 up_write(&pcc_ss_data->pcc_lock);
> +       } else if (osc_cpc_flexible_adr_space_confirmed &&
> +                  CPC_SUPPORTED(epp_set_reg) && CPC_IN_FFH(epp_set_reg)) {
> +               ret = cpc_write(cpu, epp_set_reg, perf_ctrls->energy_perf);
>         } else {
>                 ret = -ENOTSUPP;
> -               pr_debug("_CPC in PCC is not supported\n");
> +               pr_debug("_CPC in PCC and _CPC in FFH are not supported\n");
>         }
>
>         return ret;
> --

Applied as 6.12 material, thanks!





[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux