firmware: arm_scmi: Remove legacy transport-layer code
authorCristian Marussi <cristian.marussi@arm.com>
Mon, 12 Aug 2024 17:33:40 +0000 (18:33 +0100)
committerSudeep Holla <sudeep.holla@arm.com>
Fri, 16 Aug 2024 09:26:58 +0000 (10:26 +0100)
Since all SCMI transports have been made standalone drivers, remove all the
core SCMI stack legacy support that was needed to run transports as built
into the stack.

Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Message-Id: <20240812173340.3912830-10-cristian.marussi@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_scmi/common.h
drivers/firmware/arm_scmi/driver.c
drivers/firmware/arm_scmi/msg.c
drivers/firmware/arm_scmi/shmem.c

index 7a53412fc41c5771630c5d04dceca8dbd2f28e97..e44f7d1b44174d444aade9962f4e3c9b49de9544 100644 (file)
@@ -183,7 +183,6 @@ struct scmi_chan_info {
 /**
  * struct scmi_transport_ops - Structure representing a SCMI transport ops
  *
- * @link_supplier: Optional callback to add link to a supplier device
  * @chan_available: Callback to check if channel is available or not
  * @chan_setup: Callback to allocate and setup a channel
  * @chan_free: Callback to free a channel
@@ -198,7 +197,6 @@ struct scmi_chan_info {
  * @poll_done: Callback to poll transfer status
  */
 struct scmi_transport_ops {
-       int (*link_supplier)(struct device *dev);
        bool (*chan_available)(struct device_node *of_node, int idx);
        int (*chan_setup)(struct scmi_chan_info *cinfo, struct device *dev,
                          bool tx);
@@ -219,12 +217,6 @@ struct scmi_transport_ops {
 /**
  * struct scmi_desc - Description of SoC integration
  *
- * @transport_init: An optional function that a transport can provide to
- *                 initialize some transport-specific setup during SCMI core
- *                 initialization, so ahead of SCMI core probing.
- * @transport_exit: An optional function that a transport can provide to
- *                 de-initialize some transport-specific setup during SCMI core
- *                 de-initialization, so after SCMI core removal.
  * @ops: Pointer to the transport specific ops structure
  * @max_rx_timeout_ms: Timeout for communication with SoC (in Milliseconds)
  * @max_msg: Maximum number of messages for a channel type (tx or rx) that can
@@ -245,8 +237,6 @@ struct scmi_transport_ops {
  *                 when requested.
  */
 struct scmi_desc {
-       int (*transport_init)(void);
-       void (*transport_exit)(void);
        const struct scmi_transport_ops *ops;
        int max_rx_timeout_ms;
        int max_msg;
@@ -287,8 +277,6 @@ int scmi_xfer_raw_wait_for_message_response(struct scmi_chan_info *cinfo,
                                            struct scmi_xfer *xfer,
                                            unsigned int timeout_ms);
 
-void scmi_rx_callback(struct scmi_chan_info *cinfo, u32 msg_hdr, void *priv);
-
 enum debug_counters {
        SENT_OK,
        SENT_FAIL,
@@ -321,9 +309,6 @@ enum scmi_bad_msg {
        MSG_MBOX_SPURIOUS = -5,
 };
 
-void scmi_bad_message_trace(struct scmi_chan_info *cinfo, u32 msg_hdr,
-                           enum scmi_bad_msg err);
-
 /* shmem related declarations */
 struct scmi_shared_mem;
 
@@ -472,9 +457,6 @@ static struct platform_driver __drv = {                                            \
        .probe = __tag##_probe,                                                \
 }
 
-extern const struct scmi_shared_mem_operations scmi_shmem_ops;
-extern const struct scmi_message_operations scmi_msg_ops;
-
 void scmi_notification_instance_data_set(const struct scmi_handle *handle,
                                         void *priv);
 void *scmi_notification_instance_data_get(const struct scmi_handle *handle);
index 12643b4c0db31094a83af44b0f100ba9477b3387..119c9b6ae3c12ea4a500fff1b2568cbed52567ab 100644 (file)
@@ -11,7 +11,7 @@
  * various power domain DVFS including the core/cluster, certain system
  * clocks configuration, thermal sensors and many others.
  *
- * Copyright (C) 2018-2021 ARM Ltd.
+ * Copyright (C) 2018-2024 ARM Ltd.
  */
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@ -196,6 +196,11 @@ struct scmi_info {
 #define bus_nb_to_scmi_info(nb)        container_of(nb, struct scmi_info, bus_nb)
 #define req_nb_to_scmi_info(nb)        container_of(nb, struct scmi_info, dev_req_nb)
 
+static void scmi_rx_callback(struct scmi_chan_info *cinfo,
+                            u32 msg_hdr, void *priv);
+static void scmi_bad_message_trace(struct scmi_chan_info *cinfo,
+                                  u32 msg_hdr, enum scmi_bad_msg err);
+
 static struct scmi_transport_core_operations scmi_trans_core_ops = {
        .bad_message_trace = scmi_bad_message_trace,
        .rx_callback = scmi_rx_callback,
@@ -840,8 +845,8 @@ scmi_xfer_lookup_unlocked(struct scmi_xfers_info *minfo, u16 xfer_id)
  * timed-out message that arrives and as such, can be traced only referring to
  * the header content, since the payload is missing/unreliable.
  */
-void scmi_bad_message_trace(struct scmi_chan_info *cinfo, u32 msg_hdr,
-                           enum scmi_bad_msg err)
+static void scmi_bad_message_trace(struct scmi_chan_info *cinfo, u32 msg_hdr,
+                                  enum scmi_bad_msg err)
 {
        char *tag;
        struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
@@ -1174,7 +1179,8 @@ static void scmi_handle_response(struct scmi_chan_info *cinfo,
  * NOTE: This function will be invoked in IRQ context, hence should be
  * as optimal as possible.
  */
-void scmi_rx_callback(struct scmi_chan_info *cinfo, u32 msg_hdr, void *priv)
+static void scmi_rx_callback(struct scmi_chan_info *cinfo, u32 msg_hdr,
+                            void *priv)
 {
        u8 msg_type = MSG_XTRACT_TYPE(msg_hdr);
 
@@ -3055,14 +3061,11 @@ static int scmi_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        struct device_node *child, *np = dev->of_node;
 
-       desc = of_device_get_match_data(dev);
+       desc = scmi_transport_setup(dev);
        if (!desc) {
-               desc = scmi_transport_setup(dev);
-               if (!desc) {
-                       err_str = "transport invalid\n";
-                       ret = -EINVAL;
-                       goto out_err;
-               }
+               err_str = "transport invalid\n";
+               ret = -EINVAL;
+               goto out_err;
        }
 
        info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
@@ -3102,14 +3105,6 @@ static int scmi_probe(struct platform_device *pdev)
                         info->atomic_threshold);
        handle->is_transport_atomic = scmi_is_transport_atomic;
 
-       if (desc->ops->link_supplier) {
-               ret = desc->ops->link_supplier(dev);
-               if (ret) {
-                       err_str = "transport not ready\n";
-                       goto clear_ida;
-               }
-       }
-
        /* Setup all channels described in the DT at first */
        ret = scmi_channels_setup(info);
        if (ret) {
@@ -3316,72 +3311,16 @@ static struct attribute *versions_attrs[] = {
 };
 ATTRIBUTE_GROUPS(versions);
 
-/* Each compatible listed below must have descriptor associated with it */
-static const struct of_device_id scmi_of_match[] = {
-       { /* Sentinel */ },
-};
-
-MODULE_DEVICE_TABLE(of, scmi_of_match);
-
 static struct platform_driver scmi_driver = {
        .driver = {
                   .name = "arm-scmi",
                   .suppress_bind_attrs = true,
-                  .of_match_table = scmi_of_match,
                   .dev_groups = versions_groups,
                   },
        .probe = scmi_probe,
        .remove_new = scmi_remove,
 };
 
-/**
- * __scmi_transports_setup  - Common helper to call transport-specific
- * .init/.exit code if provided.
- *
- * @init: A flag to distinguish between init and exit.
- *
- * Note that, if provided, we invoke .init/.exit functions for all the
- * transports currently compiled in.
- *
- * Return: 0 on Success.
- */
-static inline int __scmi_transports_setup(bool init)
-{
-       int ret = 0;
-       const struct of_device_id *trans;
-
-       for (trans = scmi_of_match; trans->data; trans++) {
-               const struct scmi_desc *tdesc = trans->data;
-
-               if ((init && !tdesc->transport_init) ||
-                   (!init && !tdesc->transport_exit))
-                       continue;
-
-               if (init)
-                       ret = tdesc->transport_init();
-               else
-                       tdesc->transport_exit();
-
-               if (ret) {
-                       pr_err("SCMI transport %s FAILED initialization!\n",
-                              trans->compatible);
-                       break;
-               }
-       }
-
-       return ret;
-}
-
-static int __init scmi_transports_init(void)
-{
-       return __scmi_transports_setup(true);
-}
-
-static void __exit scmi_transports_exit(void)
-{
-       __scmi_transports_setup(false);
-}
-
 static struct dentry *scmi_debugfs_init(void)
 {
        struct dentry *d;
@@ -3397,17 +3336,10 @@ static struct dentry *scmi_debugfs_init(void)
 
 static int __init scmi_driver_init(void)
 {
-       int ret;
-
        /* Bail out if no SCMI transport was configured */
        if (WARN_ON(!IS_ENABLED(CONFIG_ARM_SCMI_HAVE_TRANSPORT)))
                return -EINVAL;
 
-       /* Initialize any compiled-in transport which provided an init/exit */
-       ret = scmi_transports_init();
-       if (ret)
-               return ret;
-
        if (IS_ENABLED(CONFIG_ARM_SCMI_HAVE_SHMEM))
                scmi_trans_core_ops.shmem = scmi_shared_mem_operations_get();
 
@@ -3447,8 +3379,6 @@ static void __exit scmi_driver_exit(void)
        scmi_powercap_unregister();
        scmi_pinctrl_unregister();
 
-       scmi_transports_exit();
-
        platform_driver_unregister(&scmi_driver);
 
        debugfs_remove_recursive(scmi_top_dentry);
index 18337f9191d0d7d3e2521873a9a650cebde8ae48..2cc74e6bbd723f08380ebc1226d419c808ef2ac1 100644 (file)
@@ -110,7 +110,7 @@ static void msg_fetch_notification(struct scmi_msg_payld *msg, size_t len,
        memcpy(xfer->rx.buf, msg->msg_payload, xfer->rx.len);
 }
 
-const struct scmi_message_operations scmi_msg_ops = {
+static const struct scmi_message_operations scmi_msg_ops = {
        .tx_prepare = msg_tx_prepare,
        .command_size = msg_command_size,
        .response_size = msg_response_size,
index 3fba05e1560cbb1a375ae2a5c781589ec9020b1c..01d8a9398fe8e059ae7043be7b90341d4fefa597 100644 (file)
@@ -176,7 +176,7 @@ static void __iomem *shmem_setup_iomap(struct scmi_chan_info *cinfo,
        return addr;
 }
 
-const struct scmi_shared_mem_operations scmi_shmem_ops = {
+static const struct scmi_shared_mem_operations scmi_shmem_ops = {
        .tx_prepare = shmem_tx_prepare,
        .read_header = shmem_read_header,
        .fetch_response = shmem_fetch_response,