Hi all,
Till now the SCMI transport layer was being built embedded into in the core
SCMI stack.
Some of these transports, despite being currently part of the main SCMI
module, are indeed also registered with different subsystems like optee or
virtio, and actively probed also by those: this led to a few awkward and
convoluted tricks to properly handle such interactions at boot time in the
SCMI stack.
Moreover some partner expressed the desire to be able to fully modularize
the transports components.
This series aim to make all such transports as standalone drivers that can
be optionally loaded as modules.
In order to do this, at first some new mechanism is introduced to support
this new capability while maintaining, in parallel, the old legacy embedded
transports; then each transport, one by one, is transitioned to be a
standalone driver and finally the old legacy support for embedded transport
is removed.
Patch [1/8] is a mostly unrelated (but much needed) clean-up from Peng,
which I included in this series to avoid conflicts at merge.
Patch [2/8] simply collects the existing datagram manipulation helpers in a
pair of function pointers structures, in preparation for later reworks.
Patch [3/8] adds the bulk of the new logic to the core SCMI stack and then
each existing transport is transitioned to be a standalone driver in
patches 4,5,6,7 while shuffling around the compatibles. (no DT change is
needed of curse for backward compatibility)
While doing this I kept the module authorship in line with the main
author(S) as spitted out by git-blame.
Finally patch [8/8] removes all the legacy dead code from the core SCMI
stack.
No new symbol EXPORT has been added.
The new transport drivers have been tested, as built-in and LKM, as
follows:
- mailbox on JUNO
- virtio on emulation
- optee on QEMU/optee using Linaro setup
Exercised using the regular SCMI drivers stack and the SCMI ACS suite,
testing commands, replies, delayed responses and notification.
Multiple virtual SCMI instances support has been tested too.
SMC has NOT been tested/exercised at run-time, only compile-tested.
(due to lack of hardware)
Note that in this new setup, all the probe deferral and retries between the
SCMI core stack and the transports has been removed, since no more needed.
Moreover the new drivers have been tested also with a fully modularized
SCMI stack, i.e.:
scmi-core.ko + scmi-module.ko + scmi_transport_*.ko [ + vendor modules ]
ToBeDone:
- completely remove any dependency at build time at the Kconfig level between
the SCMI core and the transport drivers: so that the transports will be
dependent only on the related subsystems (optee/virtio/mailbox/smc)
(easy to be done but maybe it is not worth...)
- integrate per-platform transport configuration capabilities
(max_rx_timeout_ms & friends..)
Based on sudeep/for-next/scmi/updates.
Any feedback, and especially testing (:D) is welcome.