mbox series

[00/22] SCMIv3.1 Miscellaneous changes

Message ID 20220330150551.2573938-1-cristian.marussi@arm.com (mailing list archive)
Headers show
Series SCMIv3.1 Miscellaneous changes | expand

Message

Cristian Marussi March 30, 2022, 3:05 p.m. UTC
Hi all,

this series introduces a bunch of SCMIv3.1 miscellaneous changes to support
basically all the SCMIv3.1 specification [1] addition with the exclusion of
the Powercap protocol and driver which will be introduced later on in
another series.

Most notably the series adds:

 - supports across all protocols for long resources naming using *_NAME_GET
   dedicated new commands
 - Clock protocol Rate change pre and post notifications
 - Voltage protocol asynchronous voltage level set command
   (VOLTAGE_LEVEL_SET_COMPLETE delayed response)
 - Perf protocol power-cost in micro-watts (only internal support)
 - Perf protocol PERFORMANCE_LIMITS_SET	new checks

Beside this, the series starts with a few general fixes (01-08/22) and a
couple of refactoring:

 - one (09/22) simply to split out of common.h into a new protocols.h all
   the  structures needed only by protocol code, so that the protocol
   implementation can include such reduced header instead of the whole
   common.h which was growing insanely

 - another around the handling of multi-part commands.
   SCMI already allowed to issue some commands using a multi-message scheme
   through which a particularly big response, which could possibly not fit
   the underlying transport max payload size, could have been split into
   multiple chunks.
   Such logic, though, was scattered all across various protocols, leading
   to a lot of code duplication, so, before adding even more duplication
   with SCMIv3.1, I split out the common logic to a couple of helpers to
   handle such mechanism in a common way through some abstract iterators
   (13/22) and then ported all the protocols users of such mechanism to the
   common iterators (14,16-18/22).

SCMIv3.1 new features have been tested with an emulated backend server,
while refactoring has been chekced against a standard SCMI stack running
on a JUNO.

The series is based on sudeep/for-next/scmi/updates [2] on top of

commit 38a0e5b735d6 ("clk: scmi: Support atomic clock enable/disable API")

Any feedback very welcome,

Thanks,
Cristian


[1]: https://developer.arm.com/documentation/den0056/d/?lang=en
[2]: https://git.kernel.org/pub/scm/linux/kernel/git/sudeep.holla/linux.git/log/?h=for-next/scmi/updates
---

Cristian Marussi (22):
  firmware: arm_scmi: Fix sorting of retrieved clock rates
  firmware: arm_scmi: Make protocols init fail on basic errors
  firmware: arm_scmi: Fix Base list protocols enumeration
  firmware: arm_scmi: Validate BASE_DISCOVER_LIST_PROTOCOLS reply
  firmware: arm_scmi: Dynamically allocate protocols array
  firmware: arm_scmi: Make name_get operations return a const
  firmware: arm_scmi: Check CLOCK_RATE_SET_COMPLETE async reply
  firmware: arm_scmi: Remove unneeded NULL termination of clk name
  firmware: arm_scmi: Split protocol specific definitions in a dedicated
    header
  firmware: arm_scmi: Introduce a common SCMIv3.1 .extended_name_get
    helper
  firmware: arm_scmi: Add SCMIv3.1 extended names protocols support
  firmware: arm_scmi: Parse clock_enable_latency conditionally
  firmware: arm_scmi: Add iterators for multi-part commands
  firmware: arm_scmi: Use common iterators in Sensor protocol
  firmware: arm_scmi: Add SCMIv3.1 SENSOR_AXIS_NAME_GET support
  firmware: arm_scmi: Use common iterators in Clock protocol
  firmware: arm_scmi: Use common iterators in Voltage protocol
  firmware: arm_scmi: Use common iterators in Perf protocol
  firmware: arm_scmi: Add SCMIv3.1 Clock notifications
  firmware: arm_scmi: Add SCMIv3.1 VOLTAGE_LEVEL_SET_COMPLETE
  firmware: arm_scmi: Add SCMI v3.1 Perf power-cost in microwatts
  firmware: arm_scmi: Add SCMIv3.1 PERFORMANCE_LIMITS_SET checks

 drivers/firmware/arm_scmi/base.c      |  43 +-
 drivers/firmware/arm_scmi/clock.c     | 337 +++++++++++---
 drivers/firmware/arm_scmi/common.h    | 225 +--------
 drivers/firmware/arm_scmi/driver.c    | 165 ++++++-
 drivers/firmware/arm_scmi/perf.c      | 162 ++++---
 drivers/firmware/arm_scmi/power.c     |  44 +-
 drivers/firmware/arm_scmi/protocols.h | 318 +++++++++++++
 drivers/firmware/arm_scmi/reset.c     |  40 +-
 drivers/firmware/arm_scmi/sensors.c   | 645 +++++++++++++++-----------
 drivers/firmware/arm_scmi/system.c    |   9 +-
 drivers/firmware/arm_scmi/voltage.c   | 218 ++++++---
 include/linux/scmi_protocol.h         |  31 +-
 12 files changed, 1495 insertions(+), 742 deletions(-)
 create mode 100644 drivers/firmware/arm_scmi/protocols.h

Comments

Sudeep Holla April 28, 2022, 1:46 p.m. UTC | #1
On Wed, Mar 30, 2022 at 04:05:29PM +0100, Cristian Marussi wrote:
> Hi all,
> 
> this series introduces a bunch of SCMIv3.1 miscellaneous changes to support
> basically all the SCMIv3.1 specification [1] addition with the exclusion of
> the Powercap protocol and driver which will be introduced later on in
> another series.
> 
> Most notably the series adds:
> 
>  - supports across all protocols for long resources naming using *_NAME_GET
>    dedicated new commands
>  - Clock protocol Rate change pre and post notifications
>  - Voltage protocol asynchronous voltage level set command
>    (VOLTAGE_LEVEL_SET_COMPLETE delayed response)
>  - Perf protocol power-cost in micro-watts (only internal support)
>  - Perf protocol PERFORMANCE_LIMITS_SET	new checks
> 

Apart from minor comments I have, this looks good and I have queued it
provisionally with the changes I have mentioned in the thread.
Sudeep Holla May 3, 2022, 8:03 a.m. UTC | #2
On Wed, 30 Mar 2022 16:05:29 +0100, Cristian Marussi wrote:
> this series introduces a bunch of SCMIv3.1 miscellaneous changes to support
> basically all the SCMIv3.1 specification [1] addition with the exclusion of
> the Powercap protocol and driver which will be introduced later on in
> another series.
> 
> Most notably the series adds:
> 
> [...]

Applied to sudeep.holla/linux (for-next/scmi), thanks!

[02/22] firmware: arm_scmi: Make protocols init fail on basic errors
        https://git.kernel.org/sudeep.holla/c/4de1b36fae
[03/22] firmware: arm_scmi: Fix Base list protocols enumeration
        https://git.kernel.org/sudeep.holla/c/8009120e03
[04/22] firmware: arm_scmi: Validate BASE_DISCOVER_LIST_PROTOCOLS reply
        https://git.kernel.org/sudeep.holla/c/3b0041f6e1
[05/22] firmware: arm_scmi: Dynamically allocate protocols array
        https://git.kernel.org/sudeep.holla/c/776b6c8a25
[06/22] firmware: arm_scmi: Make name_get operations return a const
        https://git.kernel.org/sudeep.holla/c/992be5d3c8
[07/22] firmware: arm_scmi: Check CLOCK_RATE_SET_COMPLETE async reply
        https://git.kernel.org/sudeep.holla/c/c7e223f5c7
[08/22] firmware: arm_scmi: Remove unneeded NULL termination of clk name
        https://git.kernel.org/sudeep.holla/c/91ebc56cbc
[09/22] firmware: arm_scmi: Split protocol specific definitions in a dedicated header
        https://git.kernel.org/sudeep.holla/c/23136bff80
[10/22] firmware: arm_scmi: Introduce a common SCMIv3.1 .extended_name_get helper
        https://git.kernel.org/sudeep.holla/c/5c873d120d
[11/22] firmware: arm_scmi: Add SCMIv3.1 extended names protocols support
        https://git.kernel.org/sudeep.holla/c/b260fccaeb
[12/22] firmware: arm_scmi: Parse clock_enable_latency conditionally
        https://git.kernel.org/sudeep.holla/c/df3576d14a
[13/22] firmware: arm_scmi: Add iterators for multi-part commands
        https://git.kernel.org/sudeep.holla/c/36b6ea0fc6
[14/22] firmware: arm_scmi: Use common iterators in Sensor protocol
        https://git.kernel.org/sudeep.holla/c/7cab537704
[15/22] firmware: arm_scmi: Add SCMIv3.1 SENSOR_AXIS_NAME_GET support
        https://git.kernel.org/sudeep.holla/c/802b0bed01
[16/22] firmware: arm_scmi: Use common iterators in Clock protocol
        https://git.kernel.org/sudeep.holla/c/7bc7caafe6
[17/22] firmware: arm_scmi: Use common iterators in Voltage protocol
        https://git.kernel.org/sudeep.holla/c/d8d7e91316
[18/22] firmware: arm_scmi: Use common iterators in Perf protocol
        https://git.kernel.org/sudeep.holla/c/79d2ea9244
[19/22] firmware: arm_scmi: Add SCMIv3.1 Clock notifications
        https://git.kernel.org/sudeep.holla/c/7aa75496ea
[20/22] firmware: arm_scmi: Add SCMIv3.1 VOLTAGE_LEVEL_SET_COMPLETE
        https://git.kernel.org/sudeep.holla/c/4c74701b1e
[21/22] firmware: arm_scmi: Add SCMI v3.1 Perf power-cost in microwatts
        https://git.kernel.org/sudeep.holla/c/3630cd8130
[22/22] firmware: arm_scmi: Add SCMIv3.1 PERFORMANCE_LIMITS_SET checks
        https://git.kernel.org/sudeep.holla/c/71bea05797

--
Regards,
Sudeep