DSA_NOTIFIER_FDB_DEL,
        DSA_NOTIFIER_HOST_FDB_ADD,
        DSA_NOTIFIER_HOST_FDB_DEL,
-       DSA_NOTIFIER_HSR_JOIN,
-       DSA_NOTIFIER_HSR_LEAVE,
        DSA_NOTIFIER_LAG_CHANGE,
        DSA_NOTIFIER_LAG_JOIN,
        DSA_NOTIFIER_LAG_LEAVE,
        bool host_addr;
 };
 
-/* DSA_NOTIFIER_HSR_* */
-struct dsa_notifier_hsr_info {
-       struct net_device *hsr;
-       int sw_index;
-       int port;
-};
-
 struct dsa_slave_priv {
        /* Copy of CPU port xmit for faster access in slave transmit hot path */
        struct sk_buff *        (*xmit)(struct sk_buff *skb,
 
 
 int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr)
 {
-       struct dsa_notifier_hsr_info info = {
-               .sw_index = dp->ds->index,
-               .port = dp->index,
-               .hsr = hsr,
-       };
+       struct dsa_switch *ds = dp->ds;
        int err;
 
+       if (!ds->ops->port_hsr_join)
+               return -EOPNOTSUPP;
+
        dp->hsr_dev = hsr;
 
-       err = dsa_port_notify(dp, DSA_NOTIFIER_HSR_JOIN, &info);
+       err = ds->ops->port_hsr_join(ds, dp->index, hsr);
        if (err)
                dp->hsr_dev = NULL;
 
 
 void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr)
 {
-       struct dsa_notifier_hsr_info info = {
-               .sw_index = dp->ds->index,
-               .port = dp->index,
-               .hsr = hsr,
-       };
+       struct dsa_switch *ds = dp->ds;
        int err;
 
        dp->hsr_dev = NULL;
 
-       err = dsa_port_notify(dp, DSA_NOTIFIER_HSR_LEAVE, &info);
-       if (err)
-               dev_err(dp->ds->dev,
-                       "port %d failed to notify DSA_NOTIFIER_HSR_LEAVE: %pe\n",
-                       dp->index, ERR_PTR(err));
+       if (ds->ops->port_hsr_leave) {
+               err = ds->ops->port_hsr_leave(ds, dp->index, hsr);
+               if (err)
+                       dev_err(dp->ds->dev,
+                               "port %d failed to leave HSR %s: %pe\n",
+                               dp->index, hsr->name, ERR_PTR(err));
+       }
 }
 
 int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast)
 
        return dsa_port_do_fdb_del(dp, info->addr, info->vid);
 }
 
-static int dsa_switch_hsr_join(struct dsa_switch *ds,
-                              struct dsa_notifier_hsr_info *info)
-{
-       if (ds->index == info->sw_index && ds->ops->port_hsr_join)
-               return ds->ops->port_hsr_join(ds, info->port, info->hsr);
-
-       return -EOPNOTSUPP;
-}
-
-static int dsa_switch_hsr_leave(struct dsa_switch *ds,
-                               struct dsa_notifier_hsr_info *info)
-{
-       if (ds->index == info->sw_index && ds->ops->port_hsr_leave)
-               return ds->ops->port_hsr_leave(ds, info->port, info->hsr);
-
-       return -EOPNOTSUPP;
-}
-
 static int dsa_switch_lag_change(struct dsa_switch *ds,
                                 struct dsa_notifier_lag_info *info)
 {
        case DSA_NOTIFIER_HOST_FDB_DEL:
                err = dsa_switch_host_fdb_del(ds, info);
                break;
-       case DSA_NOTIFIER_HSR_JOIN:
-               err = dsa_switch_hsr_join(ds, info);
-               break;
-       case DSA_NOTIFIER_HSR_LEAVE:
-               err = dsa_switch_hsr_leave(ds, info);
-               break;
        case DSA_NOTIFIER_LAG_CHANGE:
                err = dsa_switch_lag_change(ds, info);
                break;