From: Jun Zhang <[email protected]>

This reverts commit 9363cece406bdf2231444ca06074efb7f2a65f9e.

Signed-off-by: Wenlin Kang <[email protected]>
---
 drivers/net/can/llce/llce_can.c         | 281 ++----------------------
 drivers/net/can/llce/llce_can_common.c  |  37 +---
 include/linux/can/dev/llce_can_common.h |   2 -
 3 files changed, 27 insertions(+), 293 deletions(-)

diff --git a/drivers/net/can/llce/llce_can.c b/drivers/net/can/llce/llce_can.c
index 468fa37b366d..92cf166807d0 100644
--- a/drivers/net/can/llce/llce_can.c
+++ b/drivers/net/can/llce/llce_can.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
-/* Copyright 2020-2022 NXP */
+/* Copyright 2020-2021 NXP */
 #include <linux/can/dev.h>
 #include <linux/can/dev/llce_can_common.h>
 #include <linux/clk.h>
@@ -28,8 +28,6 @@
 
 #define LLCE_CAN_MAX_TX_MB             16U
 
-#define LLCE_CAN_MAX_IF                        16U
-
 struct llce_can {
        struct llce_can_dev common; /* Must be the first member */
 
@@ -39,17 +37,10 @@ struct llce_can {
        struct mbox_chan *config, *tx;
 
        struct clk *clk;
-
-       int basic_filter_addr;
-       int advanced_filter_addr;
-
-       bool filter_setup_done;
-       bool logger_iface_up;
 };
 
-/* Used to protect access to llce_can_interfaces[i] */
-static DEFINE_MUTEX(llce_can_interfaces_lock);
-static struct llce_can *llce_can_interfaces[LLCE_CAN_MAX_IF];
+static bool logging;
+module_param(logging, bool, 0660);
 
 static const struct can_bittiming_const llce_can_bittiming = {
        .name = LLCE_CAN_DRV_NAME,
@@ -75,8 +66,6 @@ static const struct can_bittiming_const 
llce_can_data_bittiming = {
        .brp_inc = 1,
 };
 
-static bool is_canfd_dev(struct can_priv *can);
-
 static void config_rx_callback(struct mbox_client *cl, void *msg)
 {
        struct llce_can *llce = container_of(cl, struct llce_can,
@@ -167,114 +156,6 @@ static int llce_can_deinit(struct llce_can *llce)
        return 0;
 }
 
-static int llce_can_interfaces_set(struct llce_can *llce)
-{
-       int id = llce->common.id;
-
-       if (id >= LLCE_CAN_MAX_IF)
-               return -EINVAL;
-
-       mutex_lock(&llce_can_interfaces_lock);
-       llce_can_interfaces[id] = llce;
-       mutex_unlock(&llce_can_interfaces_lock);
-
-       return 0;
-}
-
-static struct llce_can *llce_can_interfaces_get_unsafe(int id)
-{
-       struct llce_can *llce;
-
-       if (id >= LLCE_CAN_MAX_IF)
-               return NULL;
-
-       llce = llce_can_interfaces[id];
-
-       return llce;
-}
-
-static void llce_can_interfaces_cleanup(struct llce_can *llce)
-{
-       int id = llce->common.id;
-
-       if (id >= LLCE_CAN_MAX_IF)
-               return;
-
-       mutex_lock(&llce_can_interfaces_lock);
-       llce_can_interfaces[id] = NULL;
-       mutex_unlock(&llce_can_interfaces_lock);
-}
-
-static int llce_can_remove_filter(struct llce_can *llce, int filter)
-{
-       struct device *dev = llce->config_client.dev;
-       struct mbox_chan *conf_chan = llce->config;
-       struct llce_can_command cmd;
-       int ret;
-
-       if (filter == -EINVAL)
-               return 0;
-
-       cmd = (struct llce_can_command) {
-               .cmd_id = LLCE_CAN_CMD_REMOVE_FILTER,
-               .cmd_list.change_filter.filter_addr = filter,
-       };
-
-       ret = send_cmd_msg(conf_chan, &cmd);
-       if (ret)
-               dev_err(dev, "Failed to remove filter %d\n", filter);
-
-       return ret;
-}
-
-static void llce_can_filters_cleaup(struct llce_can *llce)
-{
-       if (!llce->filter_setup_done)
-               return;
-
-       /* The return value is ignored on purpose.
-        * We should try to remove all the filters.
-        */
-       llce_can_remove_filter(llce, llce->basic_filter_addr);
-       llce_can_remove_filter(llce, llce->advanced_filter_addr);
-}
-
-static int llce_can_set_filter_status(struct llce_can *llce, int filter,
-                                     bool enabled)
-{
-       struct device *dev = llce->config_client.dev;
-       struct mbox_chan *conf_chan = llce->config;
-       struct llce_can_command cmd;
-       int ret;
-
-       if (filter == -EINVAL)
-               return 0;
-
-       cmd = (struct llce_can_command) {
-               .cmd_id = LLCE_CAN_CMD_SETFILTERENABLESTATUS,
-               .cmd_list.change_filter.filter_addr = filter,
-               .cmd_list.change_filter.filter_enabled = !!enabled,
-       };
-
-       ret = send_cmd_msg(conf_chan, &cmd);
-       if (ret)
-               dev_err(dev, "Failed to set filter status\n");
-
-       return ret;
-}
-
-static int llce_can_configure_filter(struct llce_can *llce, bool ifup)
-{
-       if (llce->logger_iface_up)
-               return llce_can_set_filter_status(llce,
-                                                llce->advanced_filter_addr,
-                                                ifup);
-       else
-               return llce_can_set_filter_status(llce,
-                                                llce->basic_filter_addr,
-                                                ifup);
-}
-
 static void set_rx_filter(struct llce_can_rx_filter *rx_filter, u8 intf,
                          bool canfd)
 {
@@ -329,62 +210,31 @@ static void set_advanced_filter(struct llce_can_command 
*cmd, u8 intf,
                .host_receive = LLCE_AF_HOSTRECEIVE_ENABLED,
                .can2can_routing_table_idx = (u8)0x0U,
                .can2eth_routing_table_idx = (u8)0x0U,
+
        };
 
        set_rx_filter(&afilt->llce_can_Rx_filter, intf, canfd);
 }
 
-static int can_add_open_filter(struct net_device *dev)
+static int can_add_open_filter(struct mbox_chan *conf_chan, bool canfd)
 {
-       struct llce_can *llce = netdev_priv(dev);
-       struct mbox_chan *conf_chan = llce->config;
+       struct device *dev = llce_can_chan_dev(conf_chan);
        struct llce_chan_priv *priv = conf_chan->con_priv;
-       struct llce_can_advanced_filter *afilt;
-       struct llce_can_rx_filter *filt;
        struct llce_can_command cmd;
-       bool canfd = is_canfd_dev(&llce->common.can);
        int ret;
 
-       if (llce->filter_setup_done)
-               return llce_can_configure_filter(llce, true);
-
-       set_basic_filter(&cmd, priv->index, canfd);
+       if (logging)
+               set_advanced_filter(&cmd, priv->index, canfd);
+       else
+               set_basic_filter(&cmd, priv->index, canfd);
 
        ret = send_cmd_msg(conf_chan, &cmd);
        if (ret) {
-               netdev_err(dev, "Failed to set basic RX filter\n");
+               dev_err(dev, "Failed to set RX filter\n");
                return ret;
        }
-       filt = &cmd.cmd_list.set_filter.rx_filters[0];
-       llce->basic_filter_addr = filt->filter_addr;
 
-       set_advanced_filter(&cmd, priv->index, canfd);
-       ret = send_cmd_msg(conf_chan, &cmd);
-       if (ret) {
-               netdev_err(dev, "Failed to set advanced RX filter\n");
-               llce->advanced_filter_addr = -EINVAL;
-               llce->filter_setup_done = true;
-               /* Return 0 on purpose.
-                * Adding an advanced filter with logging enabled will fail if
-                * the firmware does not support logging or if the firmware does
-                * not have enough filters assigned to the current interface,
-                * which is not the case.
-                */
-               return 0;
-       }
-       afilt = &cmd.cmd_list.set_advanced_filter.advanced_filters[0];
-       llce->advanced_filter_addr = afilt->llce_can_Rx_filter.filter_addr;
-
-       llce->filter_setup_done = true;
-
-       if (llce->logger_iface_up)
-               return llce_can_set_filter_status(llce,
-                                                 llce->basic_filter_addr,
-                                                 false);
-       else
-               return llce_can_set_filter_status(llce,
-                                                 llce->advanced_filter_addr,
-                                                 false);
+       return 0;
 }
 
 static bool state_transition(struct mbox_chan *conf_chan,
@@ -542,76 +392,6 @@ static int llce_set_data_bittiming(struct net_device *dev)
        return 0;
 }
 
-static int llce_can_device_event(struct notifier_block *nb,
-                                unsigned long action, void *data)
-{
-       struct net_device *dev = netdev_notifier_info_to_dev(data);
-       struct llce_can_dev *common = netdev_priv(dev);
-       bool adv_filter_en, base_filter_en;
-       struct net_device *llce_can_netdev;
-       struct llce_can *llce;
-       int ret;
-
-       if (!strstr(dev->name, "llcelogger"))
-               goto llce_can_event_out;
-
-       if (common->id >= LLCE_CAN_MAX_IF)
-               goto llce_can_event_out;
-
-       mutex_lock(&llce_can_interfaces_lock);
-       llce = llce_can_interfaces_get_unsafe(common->id);
-
-       if (!llce)
-               goto llce_can_event_out_unlock;
-
-       switch (action) {
-       case NETDEV_DOWN:
-               llce->logger_iface_up = false;
-               break;
-       case NETDEV_UP:
-               llce->logger_iface_up = true;
-               break;
-       }
-
-       if (!llce->filter_setup_done)
-               goto llce_can_event_out_unlock;
-
-       if (!(common->can.dev->flags & IFF_UP))
-               goto llce_can_event_out_unlock;
-
-       if (llce->logger_iface_up) {
-               adv_filter_en = true;
-               base_filter_en = false;
-       } else {
-               adv_filter_en = false;
-               base_filter_en = true;
-       }
-
-       llce_can_netdev = llce->common.can.dev;
-
-       ret = llce_can_set_filter_status(llce, llce->basic_filter_addr,
-                                        base_filter_en);
-       if (ret)
-               netdev_err(llce_can_netdev,
-                          "Failed to set basic filter status when %s goes 
%s\n",
-                          dev->name, llce->logger_iface_up ? "up" : "down");
-       ret = llce_can_set_filter_status(llce, llce->advanced_filter_addr,
-                                        adv_filter_en);
-       if (ret)
-               netdev_err(llce_can_netdev,
-                          "Failed to set advanced filter status when %s goes 
%s\n",
-                          dev->name, llce->logger_iface_up ? "up" : "down");
-
-llce_can_event_out_unlock:
-       mutex_unlock(&llce_can_interfaces_lock);
-llce_can_event_out:
-       return NOTIFY_DONE;
-}
-
-static struct notifier_block llce_can_notifier = {
-       .notifier_call = llce_can_device_event,
-};
-
 static int llce_can_open(struct net_device *dev)
 {
        struct llce_can *llce = netdev_priv(dev);
@@ -630,7 +410,7 @@ static int llce_can_open(struct net_device *dev)
        if (ret)
                goto close_dev;
 
-       ret = can_add_open_filter(dev);
+       ret = can_add_open_filter(llce->config, is_canfd_dev(can));
        if (ret)
                goto can_deinit;
 
@@ -691,8 +471,6 @@ static int llce_can_close(struct net_device *dev)
        struct llce_can_dev *common = &llce->common;
        int ret, ret1;
 
-       llce_can_configure_filter(llce, false);
-
        netif_stop_queue(dev);
 
        ret = stop_llce_can(llce);
@@ -893,23 +671,12 @@ static int llce_can_probe(struct platform_device *pdev)
 
        enable_llce_napi(common);
 
-       llce->filter_setup_done = false;
-       ret = llce_can_interfaces_set(llce);
-       if (ret) {
-               dev_err(dev, "LLCE interface ID %d equal or greather than %d\n",
-                       LLCE_CAN_MAX_IF, common->id);
-               goto free_conf_chan;
-       }
-
        ret = register_candev(netdev);
        if (ret) {
                dev_err(dev, "Failed to register %s\n", netdev->name);
-               goto free_conf_chan;
+               mbox_free_channel(llce->config);
        }
 
-free_conf_chan:
-       if (ret)
-               mbox_free_channel(llce->config);
 free_mem:
        if (ret)
                free_llce_netdev(common);
@@ -923,9 +690,6 @@ static int llce_can_remove(struct platform_device *pdev)
        struct llce_can *llce = netdev_priv(netdev);
        struct llce_can_dev *common = &llce->common;
 
-       llce_can_interfaces_cleanup(llce);
-       llce_can_filters_cleaup(llce);
-
        unregister_candev(netdev);
        netif_napi_del(&common->napi);
 
@@ -989,22 +753,7 @@ static struct platform_driver llce_can_driver = {
                .pm = &llce_can_pm_ops,
        },
 };
-
-static __init int llce_can_drv_init(void)
-{
-       register_netdevice_notifier(&llce_can_notifier);
-
-       return platform_driver_register(&llce_can_driver);
-}
-
-static void __exit llce_can_drv_exit(void)
-{
-       unregister_netdevice_notifier(&llce_can_notifier);
-       platform_driver_unregister(&llce_can_driver);
-}
-
-module_init(llce_can_drv_init);
-module_exit(llce_can_drv_exit);
+module_platform_driver(llce_can_driver)
 
 MODULE_AUTHOR("Ghennadi Procopciuc <[email protected]>");
 MODULE_DESCRIPTION("NXP LLCE CAN");
diff --git a/drivers/net/can/llce/llce_can_common.c 
b/drivers/net/can/llce/llce_can_common.c
index 9a92fb62bbbe..06d8a5f44020 100644
--- a/drivers/net/can/llce/llce_can_common.c
+++ b/drivers/net/can/llce/llce_can_common.c
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
-/* Copyright 2021-2022 NXP */
+/* Copyright 2021 NXP */
 #include <linux/can/dev.h>
 #include <linux/can/dev/llce_can_common.h>
 #include <linux/ctype.h>
@@ -128,42 +128,36 @@ static const struct llce_error llce_errors[] = {
        LLCE_CAN_ERROR_ENTRY(LLCE_NOTIF_BUSOFF_DONE),
 };
 
-static int get_llce_can_id(const char *node_name, int *id)
+static int get_llce_can_id(const char *node_name, unsigned long *id)
 {
        const char *p = node_name + strlen(node_name) - 1;
 
        while (isdigit(*p))
                p--;
 
-       return kstrtoint(p + 1, 10, id);
+       return kstrtoul(p + 1, 10, id);
 }
 
-static int get_netdev_id(struct device *dev)
+static void *get_netdev_name(struct device *dev, const char *basename)
 {
+       unsigned long id;
+       char *dev_name;
        const char *node_name;
-       int id;
+       size_t name_len;
 
        node_name = dev->of_node->name;
        if (get_llce_can_id(node_name, &id)) {
                dev_err(dev, "Failed to detect node id for: %s\n", node_name);
-               return -EIO;
+               return ERR_PTR(-EIO);
        }
 
-       return id;
-}
-
-static void *get_netdev_name(struct device *dev, const char *basename, int id)
-{
-       char *dev_name;
-       size_t name_len;
-
        /* 0-99 device ids + \0 */
        name_len = strlen(basename) + 3;
        dev_name = devm_kmalloc(dev, name_len, GFP_KERNEL);
        if (!dev_name)
                return ERR_PTR(-ENOMEM);
 
-       snprintf(dev_name, name_len, "%s%d", basename, id);
+       snprintf(dev_name, name_len, "%s%lu", basename, id);
 
        return dev_name;
 }
@@ -556,19 +550,13 @@ struct llce_can_dev *init_llce_can_dev(struct device 
*dev, size_t priv_size,
        char *dev_name;
        struct llce_can_dev *llce;
        struct net_device *netdev;
-       int id, ret = 0;
+       int ret = 0;
 
        netdev = alloc_candev(priv_size, 1);
        if (!netdev)
                return ERR_PTR(-ENOMEM);
 
-       id = get_netdev_id(dev);
-       if (id < 0) {
-               ret = id;
-               goto free_mem;
-       }
-
-       dev_name = get_netdev_name(dev, basename, id);
+       dev_name = get_netdev_name(dev, basename);
        if (IS_ERR_VALUE(dev_name)) {
                ret = PTR_ERR(dev_name);
                goto free_mem;
@@ -578,7 +566,7 @@ struct llce_can_dev *init_llce_can_dev(struct device *dev, 
size_t priv_size,
        SET_NETDEV_DEV(netdev, dev);
 
        llce = netdev_priv(netdev);
-       llce->id = id;
+
        llce->stats = devm_kcalloc(dev, ARRAY_SIZE(llce_errors),
                                   sizeof(*llce->stats), GFP_KERNEL);
        if (!llce->stats) {
@@ -589,7 +577,6 @@ struct llce_can_dev *init_llce_can_dev(struct device *dev, 
size_t priv_size,
        init_llce_rx_client(llce, dev);
 
        netdev->ethtool_ops = &llce_can_ethtool_ops;
-
 free_mem:
        if (ret) {
                free_candev(netdev);
diff --git a/include/linux/can/dev/llce_can_common.h 
b/include/linux/can/dev/llce_can_common.h
index 9565c73f6263..9bb85df7f2f2 100644
--- a/include/linux/can/dev/llce_can_common.h
+++ b/include/linux/can/dev/llce_can_common.h
@@ -22,8 +22,6 @@ struct llce_can_dev {
        struct mbox_chan *config, *rx;
        u64 *stats;
        atomic_t rx_processing;
-
-       int id;
 };
 
 static inline bool is_llce_rx_busy(struct llce_can_dev *dev)
-- 
2.25.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#13659): 
https://lists.yoctoproject.org/g/linux-yocto/message/13659
Mute This Topic: https://lists.yoctoproject.org/mt/104804619/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to