return 0;
 }
 
-int mvpp2_ethtool_rxfh_set(struct mvpp2_port *port, struct ethtool_rxnfc *info)
+int mvpp2_ethtool_rxfh_set(struct mvpp2_port *port,
+                          const struct ethtool_rxfh_fields *info)
 {
        u16 hash_opts = 0;
        u32 flow_type;
        return mvpp2_port_rss_hash_opts_set(port, flow_type, hash_opts);
 }
 
-int mvpp2_ethtool_rxfh_get(struct mvpp2_port *port, struct ethtool_rxnfc *info)
+int mvpp2_ethtool_rxfh_get(struct mvpp2_port *port,
+                          struct ethtool_rxfh_fields *info)
 {
        unsigned long hash_opts;
        u32 flow_type;
 
 int mvpp22_port_rss_ctx_indir_get(struct mvpp2_port *port, u32 rss_ctx,
                                  u32 *indir);
 
-int mvpp2_ethtool_rxfh_get(struct mvpp2_port *port, struct ethtool_rxnfc *info);
-int mvpp2_ethtool_rxfh_set(struct mvpp2_port *port, struct ethtool_rxnfc *info);
+int mvpp2_ethtool_rxfh_get(struct mvpp2_port *port,
+                          struct ethtool_rxfh_fields *info);
+int mvpp2_ethtool_rxfh_set(struct mvpp2_port *port,
+                          const struct ethtool_rxfh_fields *info);
 
 void mvpp2_cls_init(struct mvpp2 *priv);
 
 
                return -EOPNOTSUPP;
 
        switch (info->cmd) {
-       case ETHTOOL_GRXFH:
-               ret = mvpp2_ethtool_rxfh_get(port, info);
-               break;
        case ETHTOOL_GRXRINGS:
                info->data = port->nrxqs;
                break;
                return -EOPNOTSUPP;
 
        switch (info->cmd) {
-       case ETHTOOL_SRXFH:
-               ret = mvpp2_ethtool_rxfh_set(port, info);
-               break;
        case ETHTOOL_SRXCLSRLINS:
                ret = mvpp2_ethtool_cls_rule_ins(port, info);
                break;
        return mvpp2_modify_rxfh_context(dev, NULL, rxfh, extack);
 }
 
+static int mvpp2_ethtool_get_rxfh_fields(struct net_device *dev,
+                                        struct ethtool_rxfh_fields *info)
+{
+       struct mvpp2_port *port = netdev_priv(dev);
+
+       if (!mvpp22_rss_is_supported(port))
+               return -EOPNOTSUPP;
+
+       return mvpp2_ethtool_rxfh_get(port, info);
+}
+
+static int mvpp2_ethtool_set_rxfh_fields(struct net_device *dev,
+                                        const struct ethtool_rxfh_fields *info,
+                                        struct netlink_ext_ack *extack)
+{
+       struct mvpp2_port *port = netdev_priv(dev);
+
+       if (!mvpp22_rss_is_supported(port))
+               return -EOPNOTSUPP;
+
+       return mvpp2_ethtool_rxfh_set(port, info);
+}
+
 static int mvpp2_ethtool_get_eee(struct net_device *dev,
                                 struct ethtool_keee *eee)
 {
        .get_rxfh_indir_size    = mvpp2_ethtool_get_rxfh_indir_size,
        .get_rxfh               = mvpp2_ethtool_get_rxfh,
        .set_rxfh               = mvpp2_ethtool_set_rxfh,
+       .get_rxfh_fields        = mvpp2_ethtool_get_rxfh_fields,
+       .set_rxfh_fields        = mvpp2_ethtool_set_rxfh_fields,
        .create_rxfh_context    = mvpp2_create_rxfh_context,
        .modify_rxfh_context    = mvpp2_modify_rxfh_context,
        .remove_rxfh_context    = mvpp2_remove_rxfh_context,