RE: [PATCH v6] ACPI: bus: For platform OSC negotiate capabilities

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

 



[AMD Official Use Only]



> -----Original Message-----
> From: Rafael J. Wysocki <rafael@xxxxxxxxxx>
> Sent: Monday, March 14, 2022 15:01
> To: Limonciello, Mario <Mario.Limonciello@xxxxxxx>
> Cc: Rafael J. Wysocki <rafael@xxxxxxxxxx>; Rafael J . Wysocki
> <rjw@xxxxxxxxxxxxx>; ACPI Devel Maling List <linux-acpi@xxxxxxxxxxxxxxx>;
> Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>; Hou, Xiaomeng
> (Matthew) <Xiaomeng.Hou@xxxxxxx>; Liu, Aaron <Aaron.Liu@xxxxxxx>;
> Huang, Ray <Ray.Huang@xxxxxxx>; Hans de Goede
> <hdegoede@xxxxxxxxxx>
> Subject: Re: [PATCH v6] ACPI: bus: For platform OSC negotiate capabilities
> 
> On Mon, Mar 14, 2022 at 12:45 AM Limonciello, Mario
> <Mario.Limonciello@xxxxxxx> wrote:
> >
> > [Public]
> >
> > > I would do
> > >
> > > if (capbuf[OSC_SUPPORT_DWORD] ==
> capbuf_ret[OSC_SUPPORT_DWORD])
> > >         capbuf[OSC_QUERY_DWORD] = 0;
> > > else
> > >         capbuf[OSC_SUPPORT_DWORD] &=
> capbuf_ret[OSC_SUPPORT_DWORD];
> > >
> > > so that the loop terminates even if the firmware does strange things
> > > and then it would only be necessary to check
> capbuf[OSC_QUERY_DWORD]
> > > in the loop termination condition.
> > >
> > > Would that work?
> > >
> >
> > I think it will.  I'll try it and send up a v7 if so.
> >
> > > > +               kfree(context.ret.pointer);
> > > > +       } while (capbuf[OSC_QUERY_DWORD] &&
> > > capbuf[OSC_SUPPORT_DWORD]);
> > > >
> > > > -       /* Now run _OSC again with query flag clear */
> > > > -       capbuf[OSC_QUERY_DWORD] = 0;
> > > > +       /*
> > > > +        * Avoid problems with BIOS dynamically loading tables by
> indicating
> > > > +        * support for CPPC even if it was masked.
> > >
> > > What exactly do you mean by "BIOS dynamically loading tables"?
> >
> > As mentioned in commit 159d8c274fd9:
> >
> >     On certain systems the BIOS loads SSDT tables dynamically based on the
> >     capabilities the OS claims to support. However, on these systems the
> >     _OSC actually clears some of the bits (under certain conditions) so what
> >     happens is that now when we call the _OSC twice the second time we
> pass
> >     the cleared values and that results errors like below to appear on the
> >     system log:
> >
> >       ACPI BIOS Error (bug): Could not resolve symbol [\_PR.PR00._CPC],
> AE_NOT_FOUND (20210105/psargs-330)
> >       ACPI Error: Aborting method \_PR.PR01._CPC due to previous error
> (AE_NOT_FOUND) (20210105/psparse-529)
> >
> > This block  is to avoid regressing that again by forcing it on these systems.
> 
> Well, this means that the code before and after the patch is not
> actually following the spec.
> 
> First off, as mentioned in the changelog of commit 159d8c274fd9 (in
> the part that has not been quoted above), the OS is required to pass
> the same set of capabilities every time _OSC is evaluated.  This
> doesn't happen after the change.
> 
> Second, acpi_bus_osc_negotiate_platform_control() should take the
> capabilities mask returned by the platform which it doesn't do without
> the patch.

Right on both points.

> 
> That latter piece appears to be the bug in question here and IMO
> fixing it doesn't even require calling acpi_run_osc() with the query
> flag set for multiple times.

I think just taking the results will re-introduce the CPC bug though
won't it?  So how to avoid it but also to take the results?

> 
> >
> > >
> > > > +        */
> > > > +#ifdef CONFIG_X86
> > > > +       if (boot_cpu_has(X86_FEATURE_HWP)) {
> > > > +               capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_SUPPORT;
> > > > +               capbuf[OSC_SUPPORT_DWORD] |=
> OSC_SB_CPCV2_SUPPORT;
> > > > +       }
> > > > +#endif
> > > >
> > > > +       /* Now run _OSC again with query flag clear */
> > > >         if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
> > > >                 return;
> > > >
> > > > --
> > > > 2.34.1
> > > >




[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