linux/drivers/firmware
Cristian Marussi 9ca5a1838e firmware: arm_scmi: Introduce monotonically increasing tokens
Tokens are sequence numbers embedded in the each SCMI message header: they
are used to correlate commands with responses (and delayed responses), but
their usage and policy of selection is entirely up to the caller (usually
the OSPM agent), while they are completely opaque to the callee (i.e. SCMI
platform) which merely copies them back from the command into the response
message header.
This also means that the platform does not, can not and should not enforce
any kind of policy on received messages depending on the contained sequence
number: platform can perfectly handle concurrent requests carrying the same
identifiying token if that should happen.

Moreover the platform is not required to produce in-order responses to
agent requests, the only constraint in these regards is that in case of
an asynchronous message the delayed response must be sent after the
immediate response for the synchronous part of the command transaction.

Currenly the SCMI stack of the OSPM agent selects a token for the egressing
commands picking the lowest possible number which is not already in use by
an existing in-flight transaction, which means, in other words, that we
immediately reuse any token after its transaction has completed or it has
timed out: this policy indeed does simplify management and lookup of tokens
and associated xfers.

Under the above assumptions and constraints, since there is really no state
shared between the agent and the platform to let the platform know when a
token and its associated message has timed out, the current policy of early
reuse of tokens can easily lead to the situation in which a spurious or
late received response (or delayed_response), related to an old stale and
timed out transaction, can be wrongly associated to a newer valid in-flight
xfer that just happens to have reused the same token.

This misbehaviour on such late/spurious responses is more easily exposed on
those transports that naturally have an higher level of parallelism in
processing multiple concurrent in-flight messages.

This commit introduces a new policy of selection of tokens for the OSPM
agent: each new command transfer now gets the next available, monotonically
increasing token, until tokens are exhausted and the counter rolls over.

Such new policy mitigates the above issues with late/spurious responses
since the tokens are now reused as late as possible (when they roll back
ideally) and so it is much easier to identify such late/spurious responses
to stale timed out transactions: this also helps in simplifying the
specific transports implementation since stale transport messages can be
easily identified and discarded early on in the rx path without the need
to cross check their actual state with the core transport layer.
This mitigation is even more effective when, as is usually the case, the
maximum number of pending messages is capped by the platform to a much
lower number than the whole possible range of tokens values (2^10).

This internal policy change in the core SCMI transport layer is fully
transparent to the specific transports so it has not and should not have
any impact on the transports implementation.

Link: https://lore.kernel.org/r/20210803131024.40280-5-cristian.marussi@arm.com
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
2021-08-05 10:23:22 +01:00
..
arm_ffa firmware: arm_ffa: Add support for MEM_* interfaces 2021-05-26 22:38:43 +01:00
arm_scmi firmware: arm_scmi: Introduce monotonically increasing tokens 2021-08-05 10:23:22 +01:00
broadcom firmware: bcm47xx_nvram: inline code checking NVRAM size 2021-03-12 15:53:07 +01:00
efi efi/dev-path-parser: Switch to use for_each_acpi_dev_match() 2021-05-22 14:07:00 +02:00
google kernel.h: split out panic and oops helpers 2021-07-01 11:06:04 -07:00
imx firmware: imx: scu-pd: add missed ADC1 pd 2021-03-29 09:34:37 +08:00
meson firmware: meson-sm: enable build as module 2020-10-26 13:36:05 -07:00
psci ARM development updates for 5.14-rc1: 2021-07-06 11:52:58 -07:00
smccc arm64: smccc: Support SMCCC v1.3 SVE register saving hint 2021-06-08 14:00:12 +01:00
tegra firmware: tegra: bpmp: Fix Tegra234-only builds 2021-06-11 13:31:51 +02:00
xilinx This is the bulk of the pin control changes for the v5.13 kernel cycle 2021-04-30 13:04:30 -07:00
arm_scpi.c ARM SCMI updates for v5.14 2021-06-12 08:42:29 -07:00
arm_sdei.c arm64: sdei: move uaccess logic to arch/arm64/ 2020-12-02 19:46:14 +00:00
dmi_scan.c ASoC: soc-core: fix DMI handling 2021-03-11 13:25:09 +00:00
dmi-id.c firmware/dmi: Include product_sku info to modalias 2020-10-28 09:51:50 +01:00
dmi-sysfs.c firmware: dmi-sysfs: Replace zero-length array with flexible-array member 2020-06-15 23:08:04 -05:00
edd.c
iscsi_ibft_find.c
iscsi_ibft.c ibft: Replace zero-length array with flexible-array 2020-06-15 23:08:31 -05:00
Kconfig Arm Firmware Framework for ARMv8-A(FFA) interface driver 2021-06-15 09:55:19 -07:00
Makefile firmware: arm_ffa: Add initial FFA bus support for device enumeration 2021-05-26 22:36:46 +01:00
memmap.c
pcdp.c
pcdp.h firmware: pcdp: Replace zero-length array with flexible-array 2020-06-15 23:08:32 -05:00
qcom_scm-legacy.c firmware: qcom_scm: Fix kernel-doc function names to match 2021-04-06 21:25:49 -05:00
qcom_scm-smc.c firmware: qcom_scm: Reduce locking section for __get_convention() 2021-04-06 21:25:23 -05:00
qcom_scm.c firmware: qcom_scm: Add MDM9607 compatible 2021-06-10 11:26:45 -05:00
qcom_scm.h firmware: qcom_scm: Reduce locking section for __get_convention() 2021-04-06 21:25:23 -05:00
qemu_fw_cfg.c qemu_fw_cfg: Make fw_cfg_rev_attr a proper kobj_attribute 2021-06-29 13:25:20 -07:00
raspberrypi.c firmware: raspberrypi: Introduce devm_rpi_firmware_get() 2021-03-22 17:59:51 +01:00
scpi_pm_domain.c
stratix10-rsu.c firmware: stratix10-rsu: fix warnings 2020-07-02 14:48:48 +02:00
stratix10-svc.c firmware: stratix10-svc: Fix a resource leak in an error handling path 2021-05-27 14:50:34 +02:00
ti_sci.c firmware: ti_sci: rm: Remove unused config() from ti_sci_rm_ringacc_ops 2020-11-01 19:38:04 -08:00
ti_sci.h firmware: ti_sci: rm: Add new ops for ring configuration 2020-11-01 19:38:02 -08:00
trusted_foundations.c
turris-mox-rwtm.c mvebu drivers for 5.14 (part 1) 2021-06-23 18:57:40 -07:00