History log of /freebsd-current/sys/dev/psci/psci.c
Revision Date Author Comments
# f91e9401 22-Apr-2024 Andrew Turner <andrew@FreeBSD.org>

dev/psci: Check all compat strings

When searching for the PSCI FDT node we only check a few compat strings.
Use the existing compat_data array to check all strings the driver may
attach to.

Sponsored by: Arm Ltd
Differential Revision: https://reviews.freebsd.org/D44913


# 0f354b2b 09-Jul-2021 Andriy Gapon <avg@FreeBSD.org>

psci: split off psci_reboot from psci_shutdown

Priority of psci_reboot set so that it is run after shutdown_panic is
executed. This is to provide uniform experience with other platforms.

MFC after: 3 weeks


# 53670ee1 15-Feb-2024 Stephen J. Kiernan <stevek@FreeBSD.org>

psci: Add FDT node status check

Consider the PSCI missing if the FDT node status says it is not okay.

Reviewed by: andrew
Obtained from: Juniper Networks, Inc.
Differential Revision: https://reviews.freebsd.org/D43920


# 685dc743 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

sys: Remove $FreeBSD$: one-line .c pattern

Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/


# 7ca55fcc 29-Jan-2023 Andrew Turner <andrew@FreeBSD.org>

Only call SMCCC init on arm64

We don't build the smccc code on arm so don't call into it there.


# 0600af1f 03-Jun-2022 Andrew Turner <andrew@FreeBSD.org>

Make SMCCC usable by device drivers

To allow device drivers to call into SMCCC we need to initialise it
earlier. As it depends on PSCI, and that is detected via ACPI or FDT
move the call to smccc_init to the PSCI driver.

Add a function for drivers to read the smccc version, or 0 if smccc
is not present.


# 866beaa0 26-Oct-2022 Kyle Evans <kevans@FreeBSD.org>

psci: set psci_present as early as possible

psci_attach is way too late to provide the intended semantics for
psci_present. psci calls can be made immediately after psci_init(),
called way earlier at SI_SUB_CPU + SI_ORDER_FIRST, and we need it to
be valid as early as we can possibly call a psci function.

This fixes booting RPi3+4 with the in-review spintable patch;
rpi3-psci-monitor patches the FDT to add a PSCI node, but it doesn't
patch each cpus' enable-method. Because of this, we would stall the
boot while enabling CPU 1 as we saw a valid looking enable-method and
"no" functional PSCI and attempted to use the spintable rather than
simply not starting secondary APs.

Fixes: 2218070b2c3c32 ("psci: finish psci_present implementation")
Reported by: karels


# 395bee12 09-May-2022 John Baldwin <jhb@FreeBSD.org>

psci: Remove unused devclass arguments to DRIVER_MODULE.


# 2218070b 18-Mar-2022 Kyle Evans <kevans@FreeBSD.org>

psci: finish psci_present implementation

This was already declared in psci.h, but it was never defined/set. Do
this now, so we can use it to decide if enable-method in /cpus FDT nodes
should be inspected later on. While we're here, convert it to a
boolean.

Reviewed by: andrew (slightly earlier version)
Differential Revision: https://reviews.freebsd.org/D34553


# 0bc26186 01-Sep-2020 Mateusz Guzik <mjg@FreeBSD.org>

psci: clean up empty lines in .c and .h files


# 7722d8c7 13-Sep-2019 Ruslan Bukin <br@FreeBSD.org>

Add generic arm/arm64 secure-monitor SMCCC interface and switch
PSCI code to use it.

This interface will also be used by Intel Stratix 10 platform.

This was not tested on arm due to lack of PSCI-enabled arm hardware
lying around.

Reviewed by: andrew
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D21439


# 91e44013 19-Mar-2019 Michal Meloun <mmel@FreeBSD.org>

PSCI: Don't take missing implementation of psci get_version() as fatal.
Minimalistic PSCI implementation in U-Boot doesn't implement get_version()
method for some SoC. In this case, use PSCI version declared by 'psci' node
in DT as fallback.

MFC after: 2 weeks


# 85ab1415 06-Jul-2018 Emmanuel Vadot <manu@FreeBSD.org>

psci: Add \n at the end of printf

Add a \n at the end of the printf if no PSCI function was found otherwise
it mess up the console log.


# 9e8cb3d2 13-Jun-2018 Andrew Turner <andrew@FreeBSD.org>

Move psci_call to a header file so we can use it in other files to
communicate with the firmware.

Sponsored by: DARPA, AFRL


# 5add8393 12-Jun-2018 Andrew Turner <andrew@FreeBSD.org>

Add a handler for the PSCI_FEATURES function. This needs PSCI 1.0, so
check for this, returning an error if the version is too old.

Sponsored by: DARPA, AFRL


# 4493861b 12-Jun-2018 Andrew Turner <andrew@FreeBSD.org>

Find and cache the PSCI version on driver attach.

Sponsored by: DARPA, AFRL


# 0c38b2d3 12-Jun-2018 Andrew Turner <andrew@FreeBSD.org>

Rework PSCI so it only searches for the call function once.

This is in preperation for supporting newer smccc functions that also use
the same call method.

Reviewed by: manu
Differential Revision: https://reviews.freebsd.org/D15745


# 8ab09f8a 09-Jan-2018 Andrew Turner <andrew@FreeBSD.org>

Add a function to find the PSCI version the firmware implements from
outside the PSCI driver.

MFC after: 1 week
Sponsored by: DARPA, AFRL


# a5c9ec37 19-Oct-2017 Ed Maste <emaste@FreeBSD.org>

psci: change bootverbose string to 'PSCI 0.2 compatible'

Prior to r324754 we treated PSCI 0.2 and 1.0 as identical, and r324754
extended that to include all PSCI 1.x revisions. Change the string
emitted under bootverbose to reference '0.2 compatible' to avoid
confusion when the system includes a later PSCI rev.

Discussed with: andrew
Sponsored by: The FreeBSD Foundation


# 833a983e 19-Oct-2017 Andrew Turner <andrew@FreeBSD.org>

Allow later PSCI revisions to also work. The latest ARM Trusted Firmware
reports version 1.1 so the check was failing. As thjis is a minor change
from 1.0, and future 1.x revisions are also expected to be backwards
compatible just ignore the minor revision in the init handler.

Sponsored by: DARPA, AFRL


# 845ed716 06-Oct-2017 Andrew Turner <andrew@FreeBSD.org>

Also handle psci 1.0. This can be seen as a bug fix update for the 0.2
specification we already support, with the only changes in functions we
don't currently use.

Sponsored by: DARPA, AFRL


# 574a7c6c 24-Apr-2017 Andrew Turner <andrew@FreeBSD.org>

Call the PSCI reset from cpu_reset on arm64. When rebooting from DDB the
kernel calls this directly so the event handler is not called, meaning
the computer fails to reboot.

Tested by: cognet
MFC after: 1 week
Sponsored by: DARPA, AFRL


# 2b5014f6 07-Dec-2016 Andrew Turner <andrew@FreeBSD.org>

Add ACPI support to the PSCI driver. This checks the Fixed ACPI Description
Table to find if the hardware supports PSCI, and if so what method the
kernel should use to interact with it.

Obtained from: ABT Systems Ltd
Sponsored by: The FreeBSD Foundation


# c2dd354b 25-Oct-2016 Andrew Turner <andrew@FreeBSD.org>

Create a new PSCI error code and use it to signal that starting the CPU is
impossible as the PSCI firmware is missing.

Sponsored by: ABT Systmes Ltd


# 6e3244f5 11-Aug-2015 Andrew Turner <andrew@FreeBSD.org>

Start to support PSCI 1.0. For all the functions we currently support this
can be seen as the same as 0.2. There are changes with the data passed to
CPU_SUSPEND, however we don't yet use this call.

Sponsored by: ABT Systems Ltd


# 7ad1ac7d 24-May-2015 Andrew Turner <andrew@FreeBSD.org>

Rework the PSCI cpu on code to allow it to work before device drivers have
started. This allows this functions to be used with the regular ARM SMP
initialisation sequence.


# 46b1fe92 12-Apr-2015 Andrew Turner <andrew@FreeBSD.org>

Add a driver for the ARM Power State Coordination Interface (PSCI). This
handles versions 0.1 and 0.2 of the standard on 32-bit ARM.

With this driver we can shutdown in QEMU. Further work is needed to
turn secondary cores on on boot and to support later revisions of the
specification.

Submitted by: Robin Randhawa <Robin.Randhawa at ARM.com>
Sponsored by: The FreeBSD Foundation