AMAP_GET_BITS(struct amap_eth_rx_compl_v1, numfrags, compl);
        rxcp->pkt_type =
                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, cast_enc, compl);
-       rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vtm, compl);
-       rxcp->vid = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vlan_tag, compl);
+       if (rxcp->vlanf) {
+               rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vtm,
+                               compl);
+               rxcp->vid = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vlan_tag,
+                               compl);
+       }
 }
 
 static void be_parse_rx_compl_v0(struct be_adapter *adapter,
                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, numfrags, compl);
        rxcp->pkt_type =
                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, cast_enc, compl);
-       rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vtm, compl);
-       rxcp->vid = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vlan_tag, compl);
+       if (rxcp->vlanf) {
+               rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vtm,
+                               compl);
+               rxcp->vid = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vlan_tag,
+                               compl);
+       }
 }
 
 static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo)
        else
                be_parse_rx_compl_v0(adapter, compl, rxcp);
 
-       /* vlanf could be wrongly set in some cards. ignore if vtm is not set */
-       if ((adapter->function_mode & 0x400) && !rxcp->vtm)
-               rxcp->vlanf = 0;
+       if (rxcp->vlanf) {
+               /* vlanf could be wrongly set in some cards.
+                * ignore if vtm is not set */
+               if ((adapter->function_mode & 0x400) && !rxcp->vtm)
+                       rxcp->vlanf = 0;
 
-       if (!lancer_chip(adapter))
-               rxcp->vid = swab16(rxcp->vid);
+               if (!lancer_chip(adapter))
+                       rxcp->vid = swab16(rxcp->vid);
 
-       if ((adapter->pvid == rxcp->vid) && !adapter->vlan_tag[rxcp->vid])
-               rxcp->vlanf = 0;
+               if ((adapter->pvid == rxcp->vid) &&
+                       !adapter->vlan_tag[rxcp->vid])
+                       rxcp->vlanf = 0;
+       }
 
        /* As the compl has been parsed, reset it; we wont touch it again */
        compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] = 0;