]> Git Repo - linux.git/commitdiff
firmware: arm_scmi: Add internal platform/channel identifiers
authorCristian Marussi <[email protected]>
Wed, 18 Jan 2023 12:14:16 +0000 (12:14 +0000)
committerSudeep Holla <[email protected]>
Fri, 20 Jan 2023 11:40:53 +0000 (11:40 +0000)
Add a couple of unique identifiers to channel and platform instance
descriptors in order to emit more descriptive message dump traces.

Signed-off-by: Cristian Marussi <[email protected]>
Tested-by: Florian Fainelli <[email protected]>
Tested-by: Vincent Guittot <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Sudeep Holla <[email protected]>
drivers/firmware/arm_scmi/common.h
drivers/firmware/arm_scmi/driver.c

index 049607280ea5b9c091880d2d93f693ff3454e71c..bf3883f169e310840659c2310b9edabb889e5094 100644 (file)
@@ -157,6 +157,8 @@ void scmi_protocol_release(const struct scmi_handle *handle, u8 protocol_id);
 /**
  * struct scmi_chan_info - Structure representing a SCMI channel information
  *
+ * @id: An identifier for this channel: this matches the protocol number
+ *      used to initialize this channel
  * @dev: Reference to device in the SCMI hierarchy corresponding to this
  *      channel
  * @rx_timeout_ms: The configured RX timeout in milliseconds.
@@ -168,6 +170,7 @@ void scmi_protocol_release(const struct scmi_handle *handle, u8 protocol_id);
  * @transport_info: Transport layer related information
  */
 struct scmi_chan_info {
+       int id;
        struct device *dev;
        unsigned int rx_timeout_ms;
        struct scmi_handle *handle;
index fefa01dbf9eed2536f88f4ec221b98219c543b81..af34324e923bc98d9aafae07695e882bbefcd816 100644 (file)
@@ -39,6 +39,8 @@
 #define CREATE_TRACE_POINTS
 #include <trace/events/scmi.h>
 
+static DEFINE_IDA(scmi_id);
+
 static DEFINE_IDR(scmi_protocols);
 static DEFINE_SPINLOCK(protocol_lock);
 
@@ -98,6 +100,7 @@ struct scmi_protocol_instance {
 /**
  * struct scmi_info - Structure representing a SCMI instance
  *
+ * @id: A sequence number starting from zero identifying this instance
  * @dev: Device pointer
  * @desc: SoC description for this instance
  * @version: SCMI revision information containing protocol version,
@@ -131,6 +134,7 @@ struct scmi_protocol_instance {
  * @devreq_mtx: A mutex to serialize device creation for this SCMI instance
  */
 struct scmi_info {
+       int id;
        struct device *dev;
        const struct scmi_desc *desc;
        struct scmi_revision_info version;
@@ -2270,6 +2274,7 @@ static int scmi_chan_setup(struct scmi_info *info, struct device_node *of_node,
        }
        of_node_get(of_node);
 
+       cinfo->id = prot_id;
        cinfo->dev = &tdev->dev;
        ret = info->desc->ops->chan_setup(cinfo, info->dev, tx);
        if (ret) {
@@ -2486,6 +2491,10 @@ static int scmi_probe(struct platform_device *pdev)
        if (!info)
                return -ENOMEM;
 
+       info->id = ida_alloc_min(&scmi_id, 0, GFP_KERNEL);
+       if (info->id < 0)
+               return info->id;
+
        info->dev = dev;
        info->desc = desc;
        info->bus_nb.notifier_call = scmi_bus_notifier;
@@ -2518,13 +2527,13 @@ static int scmi_probe(struct platform_device *pdev)
        if (desc->ops->link_supplier) {
                ret = desc->ops->link_supplier(dev);
                if (ret)
-                       return ret;
+                       goto clear_ida;
        }
 
        /* Setup all channels described in the DT at first */
        ret = scmi_channels_setup(info);
        if (ret)
-               return ret;
+               goto clear_ida;
 
        ret = bus_register_notifier(&scmi_bus_type, &info->bus_nb);
        if (ret)
@@ -2604,6 +2613,8 @@ clear_bus_notifier:
        bus_unregister_notifier(&scmi_bus_type, &info->bus_nb);
 clear_txrx_setup:
        scmi_cleanup_txrx_channels(info);
+clear_ida:
+       ida_free(&scmi_id, info->id);
        return ret;
 }
 
@@ -2637,6 +2648,8 @@ static int scmi_remove(struct platform_device *pdev)
        /* Safe to free channels since no more users */
        scmi_cleanup_txrx_channels(info);
 
+       ida_free(&scmi_id, info->id);
+
        return 0;
 }
 
This page took 0.073279 seconds and 4 git commands to generate.