+From 079bfe441b274a8c06474be82e4ccc88599a5e0e Mon Sep 17 00:00:00 2001
+From: Christian Marangi <ansuelsmth@gmail.com>
+Date: Tue, 16 Apr 2024 16:08:46 +0200
+Subject: [PATCH 2/6] nss_dp_switchdev: correctly unregister notifier on
+ dp_remove
+
+Correctly unregister notifier on dp_remove to fix kernel panic on system
+reboot.
+
+Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
+---
+ include/nss_dp_dev.h | 1 +
+ nss_dp_main.c | 4 ++++
+ nss_dp_switchdev.c | 13 +++++++++++++
+ 3 files changed, 18 insertions(+)
+
+--- a/include/nss_dp_dev.h
++++ b/include/nss_dp_dev.h
+@@ -312,6 +312,7 @@ void nss_dp_set_ethtool_ops(struct net_d
+ */
+ #ifdef CONFIG_NET_SWITCHDEV
+ void nss_dp_switchdev_setup(struct net_device *dev);
++void nss_dp_switchdev_remove(struct net_device *dev);
+ bool nss_dp_is_phy_dev(struct net_device *dev);
+ #endif
+
+--- a/nss_dp_main.c
++++ b/nss_dp_main.c
+@@ -913,6 +913,10 @@ static int nss_dp_remove(struct platform
+ if (!dp_priv)
+ continue;
+
++ #ifdef CONFIG_NET_SWITCHDEV
++ nss_dp_switchdev_remove(dp_priv->netdev);
++ #endif
++
+ dp_ops = dp_priv->data_plane_ops;
+ hal_ops = dp_priv->gmac_hal_ops;
+
+--- a/nss_dp_switchdev.c
++++ b/nss_dp_switchdev.c
+@@ -635,4 +635,17 @@ void nss_dp_switchdev_setup(struct net_d
+
+ switch_init_done = true;
+ }
++
++void nss_dp_switchdev_remove(struct net_device *dev)
++{
++ if (!switch_init_done)
++ return;
++
++ if (nss_dp_sw_ev_nb)
++ unregister_switchdev_notifier(nss_dp_sw_ev_nb);
++
++ unregister_switchdev_blocking_notifier(&nss_dp_switchdev_notifier);
++
++ switch_init_done = false;
++}
+ #endif