HILO_64_REGPAIR(tstats.mftag_filter_discard);
        p_stats->common.mac_filter_discards +=
            HILO_64_REGPAIR(tstats.eth_mac_filter_discard);
+       p_stats->common.gft_filter_drop +=
+               HILO_64_REGPAIR(tstats.eth_gft_drop_pkt);
 }
 
 static void __qed_get_vport_ustats_addrlen(struct qed_hwfn *p_hwfn,
        u8 abs_vport_id = 0;
        int rc = -EINVAL;
 
-       rc = qed_fw_vport(p_hwfn, p_params->vport_id, &abs_vport_id);
-       if (rc)
-               return rc;
-
-       if (p_params->qid != QED_RFS_NTUPLE_QID_RSS) {
-               rc = qed_fw_l2_queue(p_hwfn, p_params->qid, &abs_rx_q_id);
-               if (rc)
-                       return rc;
-       }
-
        /* Get SPQ entry */
        memset(&init_data, 0, sizeof(init_data));
        init_data.cid = qed_spq_get_cid(p_hwfn);
        DMA_REGPAIR_LE(p_ramrod->pkt_hdr_addr, p_params->addr);
        p_ramrod->pkt_hdr_length = cpu_to_le16(p_params->length);
 
-       if (p_params->qid != QED_RFS_NTUPLE_QID_RSS) {
-               p_ramrod->rx_qid_valid = 1;
-               p_ramrod->rx_qid = cpu_to_le16(abs_rx_q_id);
+       if (p_params->b_is_drop) {
+               p_ramrod->vport_id = cpu_to_le16(ETH_GFT_TRASHCAN_VPORT);
+       } else {
+               rc = qed_fw_vport(p_hwfn, p_params->vport_id, &abs_vport_id);
+               if (rc)
+                       return rc;
+
+               if (p_params->qid != QED_RFS_NTUPLE_QID_RSS) {
+                       rc = qed_fw_l2_queue(p_hwfn, p_params->qid,
+                                            &abs_rx_q_id);
+                       if (rc)
+                               return rc;
+
+                       p_ramrod->rx_qid_valid = 1;
+                       p_ramrod->rx_qid = cpu_to_le16(abs_rx_q_id);
+               }
+
+               p_ramrod->vport_id = cpu_to_le16((u16)abs_vport_id);
        }
 
        p_ramrod->flow_id_valid = 0;
        p_ramrod->flow_id = 0;
-
-       p_ramrod->vport_id = cpu_to_le16((u16)abs_vport_id);
        p_ramrod->filter_action = p_params->b_is_add ? GFT_ADD_FILTER
            : GFT_DELETE_FILTER;
 
 
        QEDE_STAT(no_buff_discards),
        QEDE_PF_STAT(mftag_filter_discards),
        QEDE_PF_STAT(mac_filter_discards),
+       QEDE_PF_STAT(gft_filter_drop),
        QEDE_STAT(tx_err_drop_pkts),
        QEDE_STAT(ttl0_discard),
        QEDE_STAT(packet_too_big_discard),
 
        bool filter_op;
        bool used;
        u8 fw_rc;
+       bool b_is_drop;
        struct hlist_node node;
 };
 
        params.length = n->buf_len;
        params.qid = rxq_id;
        params.b_is_add = add_fltr;
+       params.b_is_drop = n->b_is_drop;
 
        if (n->vfid) {
                params.b_is_vf = true;
                fsp->ring_cookie |= ((u64)fltr->vfid) <<
                                        ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
        }
+
+       if (fltr->b_is_drop)
+               fsp->ring_cookie = RX_CLS_FLOW_DISC;
 unlock:
        __qede_unlock(edev);
        return rc;
                return -EINVAL;
        }
 
+       /* If drop requested then no need to validate other data */
+       if (fs->ring_cookie == RX_CLS_FLOW_DISC)
+               return 0;
+
        if (ethtool_get_flow_spec_ring_vf(fs->ring_cookie))
                return 0;
 
                                      struct qede_arfs_fltr_node *n,
                                      struct ethtool_rx_flow_spec *fs)
 {
+       if (fs->ring_cookie == RX_CLS_FLOW_DISC) {
+               n->b_is_drop = true;
+               return;
+       }
+
        n->vfid = ethtool_get_flow_spec_ring_vf(fs->ring_cookie);
        n->rxq_id = ethtool_get_flow_spec_ring(fs->ring_cookie);
        n->next_rxq_id = n->rxq_id;
 
        p_common->rx_bcast_pkts = stats.common.rx_bcast_pkts;
        p_common->mftag_filter_discards = stats.common.mftag_filter_discards;
        p_common->mac_filter_discards = stats.common.mac_filter_discards;
+       p_common->gft_filter_drop = stats.common.gft_filter_drop;
 
        p_common->tx_ucast_bytes = stats.common.tx_ucast_bytes;
        p_common->tx_mcast_bytes = stats.common.tx_mcast_bytes;