Re: [PATCH 0/4] Broadcom STB PM PSCI extensions

From: Florian Fainelli
Date: Thu Feb 03 2022 - 13:32:42 EST


Hello Mark,

On 2/3/2022 2:47 AM, Mark Rutland wrote:
On Fri, Jan 21, 2022 at 07:54:17PM -0800, Florian Fainelli wrote:
Hi all,

Hi Florian,

This patch series contains the Broadcom STB PSCI extensions which adds
some additional functions on top of the existing standard PSCI interface
which is the reason for having the driver implement a custom
suspend_ops.

I *really* don't like the idea of having non-standard PSCI extensions, because
it somewhat defeats the point of PSCI being a standard, and opens the door for
the zoo of mechanisms we had on 32-bit.

I think this needs a fair amount more explanation and justification.

These platforms have traditionally supported a mode that is akin to
ACPI's S2 with the CPU in WFI and all of the chip being clock gated
which is entered with "echo standby > /sys/power/state". Additional a
true suspend to DRAM as defined in ACPI by S3 is implemented with "echo
mem > /sys/power/state".

Why isn't a combination of CPU_SUSPEND and SYSTEM_SUSPEND sufficient here?

This is exactly what we are using, just the use of CPU_SUSPEND is not done via the CPU IDLE framework because our platforms did not wire up the ARM GIC power controller interrupt signals back to the power management controller of the system, but via registering a "standby" state into suspend_ops instead.


What specifically *can't* you do with standard PSCI calls?

Since you looked at the patches now, nothing at all, everything we do (with the exception of the funky SIP calls which are not strictly mandatory for system suspend operations) is done by using standard PSCI calls and leveraging the existing vendor space when needed (as with SYSTEM_RESET2 for instance).


These platforms also may have an external Broadcom PMIC chip which can
cause the SoC to be powercycled assuming that we communicate that intent
via a vendor specific PSCI SYSTEM_RESET2.

Since it is desirable to get any new functionality added to the kernel
to be loadable as a module as part of shipping said products in a Google
Kernel Image (GKI) environment, we need to export a couple of symbols from
drivers/firmware/psci/psci.c.

I really don't want to export the guts of psci.c.

I can appreciate that, and really the sticking point that required me to export the couple of symbols needed was because the alternatives would be to:

- to not make this code modular in the first place but that won't fly in the Google Kernel Image grand scheme of things where *everything* that is not necessary for boot must be a loadable module

- not support the "standby" mode which is not really an option since we rely on it to achieve our power targets

- export cpu_suspend from arch/*/kernel/suspend.c which is probably going to be a no-go plus duplicate the entire set of PSCI function calls to re-implement the psci_system_suspend_enter() functions

Thanks for taking a look!
--
Florian