e6d0edd2 | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Add sysctl transport properties
Expose as read-only the configured transport properties.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: htt
scmi: Add sysctl transport properties
Expose as read-only the configured transport properties.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D47428 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
984f9fb8 | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Add SDT traces to the core stack
Add a few basic traces to track SCMI messages lifecycle.
Tested on: Arm Morello Board Reviewed by: Andrew Sponsored by: Arm Ltd Differential Revision: ht
scmi: Add SDT traces to the core stack
Add a few basic traces to track SCMI messages lifecycle.
Tested on: Arm Morello Board Reviewed by: Andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D47427 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
b802926b | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Add optional asynchronous handling of replies
Add the core logic to handle the replies to pending command in an asynchronous manner.
Tested on: Arm Morello Board Reviewed by: andrew Spon
scmi: Add optional asynchronous handling of replies
Add the core logic to handle the replies to pending command in an asynchronous manner.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D47426 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
341d8fd9 | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Refactor scmi_request internal logic
Split scmi_request internals into a TX and an RX phase, which will be called, anyway, in sequence as before when a normal transmission is requested.
No fu
scmi: Refactor scmi_request internal logic
Split scmi_request internals into a TX and an RX phase, which will be called, anyway, in sequence as before when a normal transmission is requested.
No functional change.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D47425 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
c508841d | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Add scmi_token_reserve helper
During normal operation, the SCMI stack, upon each transmission attempt, takes care to automatically pick an appropriate, monotonically increasing, sequence numbe
scmi: Add scmi_token_reserve helper
During normal operation, the SCMI stack, upon each transmission attempt, takes care to automatically pick an appropriate, monotonically increasing, sequence number to fill-in the token field in the egressing message.
This does not cope well with the alternative scenario in which, instead, a complete and fully formed message is provided upfront: in such a case the SCMI stack will have to use the already provided sequence number, embedded in the message, to track such transaction.
Add a method to attempt to reserve a specific sequence number to be used when a fully firmed (raw) message is handled.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Pull Request: https://reviews.freebsd.org/D47424 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
e887179d | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Add helper to manipulate scmi_msg descriptors
Refactor allocation logic for scmi_req and introduce new helpers to be able to obtain an scmi_msg reference to a freshly allocated request.
Teste
scmi: Add helper to manipulate scmi_msg descriptors
Refactor allocation logic for scmi_req and introduce new helpers to be able to obtain an scmi_msg reference to a freshly allocated request.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D47423 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
103ea03e | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Add devicetree transport properties
SCMI transport characteristics can be optionally described in the devicetree to override the default build-time values.
Tested on: Arm Morello Board R
scmi: Add devicetree transport properties
SCMI transport characteristics can be optionally described in the devicetree to override the default build-time values.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D47422 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
f0216239 | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Redefine max message payload size
The defined maximum payload size should not include header and status field. Fix the definition accordingly, so that it matches the definitions as can be foun
scmi: Redefine max message payload size
The defined maximum payload size should not include header and status field. Fix the definition accordingly, so that it matches the definitions as can be found in the Linux SCMI stack. The semantic of this define is important since it will then be possible to override such values from devicetree, like in Linux.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D47421 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
9342829d | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Make transports report the effective length of the received messages
Once a message is received that fits into the RX buffer, update the msg.rx_len field with the effective length of the messa
scmi: Make transports report the effective length of the received messages
Once a message is received that fits into the RX buffer, update the msg.rx_len field with the effective length of the message received.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Pull Request: https://reviews.freebsd.org/D47420 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
c56e586f | 23-Jan-2025 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Fix race on timed out transmissions
When a waited-for outstanding request is determined to have timed out, mark such request immediately as such, so as to avoid any possible race on the IRQ pa
scmi: Fix race on timed out transmissions
When a waited-for outstanding request is determined to have timed out, mark such request immediately as such, so as to avoid any possible race on the IRQ path with code path evaluating that same timed out condition.
Tested on: Arm Morello Board Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D47419 Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
show more ...
|
35f93203 | 11-Dec-2023 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Introduce a new SCMI API and port CLK SCMI driver to it
Expose new scmi_buf_get/put API methods to build and send messages; command request descriptors are now pre-allocated when the SCMI core
scmi: Introduce a new SCMI API and port CLK SCMI driver to it
Expose new scmi_buf_get/put API methods to build and send messages; command request descriptors are now pre-allocated when the SCMI core is initialized and kept in a free list, instead of being allocated on the stack of the caller of the SCMI request.
Dynamically allocated descriptors enable the SCMI core to keep around and track outstanding transactions for as long as needed, outliving the lifetime of the caller stack: this allows tracking of late or missing replies and it will be needed when adding support for SCMI transports that allows for more messages to be inflight concurrently.
Move the existing CLK SCMI driver to the new API.
Reviewed by: andrew Tested on: Arm Morello Board Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43046
show more ...
|
3595f18f | 07-Dec-2023 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Add SCMI message tracking and centralize tx/rx logic
In order to be able to support also new, more parallel, SCMI transports that by nature can allow multiple concurrent commands to be in-flig
scmi: Add SCMI message tracking and centralize tx/rx logic
In order to be able to support also new, more parallel, SCMI transports that by nature can allow multiple concurrent commands to be in-flight, pending a reply, we must be able to use the sequence number provided in the SCMI messages to track the message status, matching commands and replies while keeping track of timeouts and duplicates.
Add the needed message tracking machinery in the core SCMI stack and move the residual common tx/rx logic from the specific transports to the core SCMI stack, while adding one more interface to let the transports customize ther behaviour.
Reviewed by: andrew Tested on: Arm Morello Board Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43045
show more ...
|
403ca28c | 07-Dec-2023 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Add new SCMI interfaces for init and message processing
Introduce a couple of new SCMI interface methods to allow centralized initialization of transport-specific features and a couple of meth
scmi: Add new SCMI interfaces for init and message processing
Introduce a couple of new SCMI interface methods to allow centralized initialization of transport-specific features and a couple of methods to handle message reception from the SCMI core.
Move SCMI SMT related calls out of the core common SCMI code into the transport specific layers Mailbox/SMC.
Make SCMI Mailbox/SMC transports use the new interface methods for initialization and message reception.
Reviewed by: andrew Tested on: Arm Morello Board Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43044
show more ...
|
a0ba2a97 | 07-Dec-2023 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Protect SCMI/SMT channels from concurrent transmissions
The SCMI/SMT memory areas are used from the agent and the platform as channels to exchage commands and replies.
Once the platform has c
scmi: Protect SCMI/SMT channels from concurrent transmissions
The SCMI/SMT memory areas are used from the agent and the platform as channels to exchage commands and replies.
Once the platform has completed its processing and a reply is ready to be read from the agent, the platform will relinquish the channel to the agent by setting the CHANNEL_FREE bits in the related SMT area.
When this happens, though, the agent has still to effectively read back the reply message and any other concurrent request happened to have been issued in the meantime will have been to be hold back until the reply is processed or risk to be overwritten by the new request.
The base->mtx lock that currently guards the whole scmi_request() operation is released when sleeping waiting for a reply, so the above mentioned race can still happen or, in a slightly different scenario, the concurrent transmission could just fail, finding the channel busy, after having sneaked through the mutex.
Adding a new mechanism to let the agent explicitly acquire/release the channel paves the way, in the future, to remove such central commmon lock in favour of new dedicated per-transport locking mechanisms, since not all transports will necessarily need the same level of protection.
Add a flag, controlled by the agent, to mark when the channel has an inflight command transaction still pending to be completed and make the agent spin on it when queueing multiple concurrent messages on the same SMT channel.
Reviewed by: andrew Tested on: Arm Morello Board Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43043
show more ...
|
cbcfdff0 | 07-Dec-2023 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Fix SCMI mailbox polling mechanism
When the system is cold, the SCMI stack processes commands in polling mode with the current polling mechanism being a check of the status register in the mai
scmi: Fix SCMI mailbox polling mechanism
When the system is cold, the SCMI stack processes commands in polling mode with the current polling mechanism being a check of the status register in the mailbox controller to see if there is any pending doorbell request.
Anyway, the completion interrupt is optional by the SCMI specification and a system could have been simply designed without it: for this reason polling on the mailbox controller status registers is not going to work in all situations.
Moreover even alternative SCMI transports based on shared memory, like SMC, will not have at all a mailbox controller to poll for.
On the other side, the associated SCMI Shared Memory Transport defines dedicated channel flags and status bits that can be used by the agent to explicitly request a polling-based transaction, even if the completion interrupt was available, and to check afterwards when the platform has completed its processing on the outstanding command.
Use SCMI/SMT specific mechanism to process transactions in polling mode.
Reviewed by: andrew Tested on: Arm Morello Board Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43042
show more ...
|
d220b1cf | 06-Dec-2023 |
Cristian Marussi <cristian.marussi@arm.com> |
scmi: Extend and refactor SCMI shmem support
Add a few new common public scmi_shmem methods to be used to handle SCMI shared memory areas from multiple transports; while doing that review the shared
scmi: Extend and refactor SCMI shmem support
Add a few new common public scmi_shmem methods to be used to handle SCMI shared memory areas from multiple transports; while doing that review the shared memory accesses to read only the SMT header fields strictly relevant to the SCMI message processing.
Move all the SCMI shmem related code to the existing scmi_shmem.c file and add a new dedicated scmi_shmem.h header.
Introduce some commonly needed message header manipulation macros.
Reviewed by: andrew Tested on: Arm Morello Board Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43041
show more ...
|
d46f01fd | 04-Oct-2023 |
Andrew Turner <andrew@FreeBSD.org> |
scmi: Split out the SCMI mailbox to a new file
Add a new SCMI interface file to allow for multiple kind of transports and move the mailbox transport to its own file, using the new interface.
Sponso
scmi: Split out the SCMI mailbox to a new file
Add a new SCMI interface file to allow for multiple kind of transports and move the mailbox transport to its own file, using the new interface.
Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43039
show more ...
|