firmware: arm_scmi: Add support for clock_enable_latency
authorCristian Marussi <cristian.marussi@arm.com>
Thu, 17 Feb 2022 13:12:33 +0000 (13:12 +0000)
committerSudeep Holla <sudeep.holla@arm.com>
Mon, 21 Feb 2022 10:36:48 +0000 (10:36 +0000)
An SCMI platform can optionally advertise an enable latency typically
associated with a specific clock resource: add support for parsing such
optional message field and export such information in the usual publicly
accessible clock descriptor.

Link: https://lore.kernel.org/r/20220217131234.50328-8-cristian.marussi@arm.com
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_scmi/clock.c
include/linux/scmi_protocol.h

index 72f930c..cf6fed6 100644 (file)
@@ -27,7 +27,8 @@ struct scmi_msg_resp_clock_protocol_attributes {
 struct scmi_msg_resp_clock_attributes {
        __le32 attributes;
 #define        CLOCK_ENABLE    BIT(0)
-           u8 name[SCMI_MAX_STR_SIZE];
+       u8 name[SCMI_MAX_STR_SIZE];
+       __le32 clock_enable_latency;
 };
 
 struct scmi_clock_set_config {
@@ -116,10 +117,15 @@ static int scmi_clock_attributes_get(const struct scmi_protocol_handle *ph,
        attr = t->rx.buf;
 
        ret = ph->xops->do_xfer(ph, t);
-       if (!ret)
+       if (!ret) {
                strlcpy(clk->name, attr->name, SCMI_MAX_STR_SIZE);
-       else
+               /* Is optional field clock_enable_latency provided ? */
+               if (t->rx.len == sizeof(*attr))
+                       clk->enable_latency =
+                               le32_to_cpu(attr->clock_enable_latency);
+       } else {
                clk->name[0] = '\0';
+       }
 
        ph->xops->xfer_put(ph, t);
        return ret;
index 306e576..b87551f 100644 (file)
@@ -42,6 +42,7 @@ struct scmi_revision_info {
 
 struct scmi_clock_info {
        char name[SCMI_MAX_STR_SIZE];
+       unsigned int enable_latency;
        bool rate_discrete;
        union {
                struct {