}
 
 int ena_com_get_hash_function(struct ena_com_dev *ena_dev,
-                             enum ena_admin_hash_functions *func,
-                             u8 *key)
+                             enum ena_admin_hash_functions *func)
 {
        struct ena_rss *rss = &ena_dev->rss;
        struct ena_admin_get_feat_resp get_resp;
-       struct ena_admin_feature_rss_flow_hash_control *hash_key =
-               rss->hash_key;
        int rc;
 
        if (unlikely(!func))
 
        *func = rss->hash_func;
 
+       return 0;
+}
+
+int ena_com_get_hash_key(struct ena_com_dev *ena_dev, u8 *key)
+{
+       struct ena_admin_feature_rss_flow_hash_control *hash_key =
+               ena_dev->rss.hash_key;
+
        if (key)
                memcpy(key, hash_key->key, (size_t)(hash_key->keys_num) << 2);
 
 
  */
 int ena_com_set_hash_function(struct ena_com_dev *ena_dev);
 
-/* ena_com_get_hash_function - Retrieve the hash function and the hash key
- * from the device.
+/* ena_com_get_hash_function - Retrieve the hash function from the device.
  * @ena_dev: ENA communication layer struct
  * @func: hash function
- * @key: hash key
  *
- * Retrieve the hash function and the hash key from the device.
+ * Retrieve the hash function from the device.
  *
  * @note: If the caller called ena_com_fill_hash_function but didn't flash
  * it to the device, the new configuration will be lost.
  * @return: 0 on Success and negative value otherwise.
  */
 int ena_com_get_hash_function(struct ena_com_dev *ena_dev,
-                             enum ena_admin_hash_functions *func,
-                             u8 *key);
+                             enum ena_admin_hash_functions *func);
 
+/* ena_com_get_hash_key - Retrieve the hash key
+ * @ena_dev: ENA communication layer struct
+ * @key: hash key
+ *
+ * Retrieve the hash key.
+ *
+ * @note: If the caller called ena_com_fill_hash_key but didn't flash
+ * it to the device, the new configuration will be lost.
+ *
+ * @return: 0 on Success and negative value otherwise.
+ */
+int ena_com_get_hash_key(struct ena_com_dev *ena_dev, u8 *key);
 /* ena_com_fill_hash_ctrl - Fill RSS hash control
  * @ena_dev: ENA communication layer struct.
  * @proto: The protocol to configure.
 
        /* We call this function in order to check if the device
         * supports getting/setting the hash function.
         */
-       rc = ena_com_get_hash_function(adapter->ena_dev, &ena_func, key);
+       rc = ena_com_get_hash_function(adapter->ena_dev, &ena_func);
        if (rc) {
                if (rc == -EOPNOTSUPP) {
                        key = NULL;
                return rc;
        }
 
+       rc = ena_com_get_hash_key(adapter->ena_dev, key);
+       if (rc)
+               return rc;
+
        switch (ena_func) {
        case ENA_ADMIN_TOEPLITZ:
                func = ETH_RSS_HASH_TOP;
        if (hfunc)
                *hfunc = func;
 
-       return rc;
+       return 0;
 }
 
 static int ena_set_rxfh(struct net_device *netdev, const u32 *indir,
 {
        struct ena_adapter *adapter = netdev_priv(netdev);
        struct ena_com_dev *ena_dev = adapter->ena_dev;
-       enum ena_admin_hash_functions func;
+       enum ena_admin_hash_functions func = 0;
        int rc, i;
 
        if (indir) {
                return -EOPNOTSUPP;
        }
 
-       if (key) {
+       if (key || func) {
                rc = ena_com_fill_hash_function(ena_dev, func, key,
                                                ENA_HASH_KEY_SIZE,
                                                0xFFFFFFFF);