Re: [PATCH v2 1/5] ACPI: CPPC: Check _OSC for flexible address space

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

 



On Wed, May 18, 2022 at 11:09 AM Pierre Gondois <pierre.gondois@xxxxxxx> wrote:
>
> ACPI 6.2 Section 6.2.11.2 'Platform-Wide OSPM Capabilities':
>   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
>
> Otherwise (cf ACPI 6.1, s8.4.7.1.1.X), _CPC registers must be in:
> - PCC or Functional Fixed Hardware address space if defined
> - SystemMemory address space (NULL register) if not defined
>
> Add the corresponding _OSC bit and check it when parsing _CPC objects.
>
> Signed-off-by: Pierre Gondois <pierre.gondois@xxxxxxx>
> Reviewed-by: Sudeep Holla <sudeep.holla@xxxxxxx>
> ---
>  drivers/acpi/bus.c       | 18 ++++++++++++++++++
>  drivers/acpi/cppc_acpi.c |  9 +++++++++
>  include/linux/acpi.h     |  2 ++
>  3 files changed, 29 insertions(+)
>
> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
> index 3e58b613a2c4..9eca43d1d941 100644
> --- a/drivers/acpi/bus.c
> +++ b/drivers/acpi/bus.c
> @@ -278,6 +278,20 @@ bool osc_sb_apei_support_acked;
>  bool osc_pc_lpi_support_confirmed;
>  EXPORT_SYMBOL_GPL(osc_pc_lpi_support_confirmed);
>
> +/*
> + * ACPI 6.2 Section 6.2.11.2 'Platform-Wide OSPM Capabilities':
> + *   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.
> + *
> + * Otherwise (cf ACPI 6.1, s8.4.7.1.1.X), _CPC registers must be in:
> + * - PCC or Functional Fixed Hardware address space if defined
> + * - SystemMemory address space (NULL register) if not defined
> + */
> +bool osc_cpc_flexible_adr_space_confirmed;
> +EXPORT_SYMBOL_GPL(osc_cpc_flexible_adr_space_confirmed);
> +
>  /*
>   * ACPI 6.4 Operating System Capabilities for USB.
>   */
> @@ -321,6 +335,8 @@ static void acpi_bus_osc_negotiate_platform_control(void)
>         }
>  #endif
>
> +       capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_FLEXIBLE_ADR_SPACE;
> +
>         if (IS_ENABLED(CONFIG_SCHED_MC_PRIO))
>                 capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_DIVERSE_HIGH_SUPPORT;
>
> @@ -366,6 +382,8 @@ static void acpi_bus_osc_negotiate_platform_control(void)
>                         capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_PCLPI_SUPPORT;
>                 osc_sb_native_usb4_support_confirmed =
>                         capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_NATIVE_USB4_SUPPORT;
> +               osc_cpc_flexible_adr_space_confirmed =
> +                       capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_CPC_FLEXIBLE_ADR_SPACE;
>         }
>
>         kfree(context.ret.pointer);
> diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
> index bc1454789a06..6f09fe011544 100644
> --- a/drivers/acpi/cppc_acpi.c
> +++ b/drivers/acpi/cppc_acpi.c
> @@ -736,6 +736,11 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr)
>                                 if (gas_t->address) {
>                                         void __iomem *addr;
>
> +                                       if (!osc_cpc_flexible_adr_space_confirmed) {
> +                                               pr_debug("Flexible address space capability not supported\n");
> +                                               goto out_free;
> +                                       }
> +
>                                         addr = ioremap(gas_t->address, gas_t->bit_width/8);
>                                         if (!addr)
>                                                 goto out_free;
> @@ -758,6 +763,10 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr)
>                                                  gas_t->address);
>                                         goto out_free;
>                                 }
> +                               if (!osc_cpc_flexible_adr_space_confirmed) {
> +                                       pr_debug("Flexible address space capability not supported\n");
> +                                       goto out_free;
> +                               }
>                         } else {
>                                 if (gas_t->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE || !cpc_ffh_supported()) {
>                                         /* Support only PCC, SystemMemory, SystemIO, and FFH type regs. */
> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
> index d7136d13aa44..03465db16b68 100644
> --- a/include/linux/acpi.h
> +++ b/include/linux/acpi.h
> @@ -574,6 +574,7 @@ acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context);
>  #define OSC_SB_OSLPI_SUPPORT                   0x00000100
>  #define OSC_SB_CPC_DIVERSE_HIGH_SUPPORT                0x00001000
>  #define OSC_SB_GENERIC_INITIATOR_SUPPORT       0x00002000
> +#define OSC_SB_CPC_FLEXIBLE_ADR_SPACE          0x00004000
>  #define OSC_SB_NATIVE_USB4_SUPPORT             0x00040000
>  #define OSC_SB_PRM_SUPPORT                     0x00200000
>
> @@ -581,6 +582,7 @@ extern bool osc_sb_apei_support_acked;
>  extern bool osc_pc_lpi_support_confirmed;
>  extern bool osc_sb_native_usb4_support_confirmed;
>  extern bool osc_sb_cppc_not_supported;
> +extern bool osc_cpc_flexible_adr_space_confirmed;
>
>  /* USB4 Capabilities */
>  #define OSC_USB_USB3_TUNNELING                 0x00000001
> --

Applied as 5.19 material along with the rest of the series, 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