* @key: hash key
  * @hfunc: hash function to use
  *
- * Returns -EINVAL if the table specifies an inavlid queue id, otherwise
+ * Returns -EINVAL if the table specifies an invalid queue id, otherwise
  * returns 0 after programming the table.
  **/
 static int iavf_set_rxfh(struct net_device *netdev, const u32 *indir,
        struct iavf_adapter *adapter = netdev_priv(netdev);
        u16 i;
 
-       /* We do not allow change in unsupported parameters */
-       if (key ||
-           (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
+       /* Only support toeplitz hash function */
+       if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)
                return -EOPNOTSUPP;
-       if (!indir)
+
+       if (!key && !indir)
                return 0;
 
        if (key)
                memcpy(adapter->rss_key, key, adapter->rss_key_size);
 
-       /* Each 32 bits pointed by 'indir' is stored with a lut entry */
-       for (i = 0; i < adapter->rss_lut_size; i++)
-               adapter->rss_lut[i] = (u8)(indir[i]);
+       if (indir) {
+               /* Each 32 bits pointed by 'indir' is stored with a lut entry */
+               for (i = 0; i < adapter->rss_lut_size; i++)
+                       adapter->rss_lut[i] = (u8)(indir[i]);
+       }
 
        return iavf_config_rss(adapter);
 }