static inline bool csum_passed(struct be_eth_rx_compl *rxcp)
 {
-       u8 l4_cksm, ipv6, ipcksm;
+       u8 l4_cksm, ipv6, ipcksm, tcpf, udpf;
 
        l4_cksm = AMAP_GET_BITS(struct amap_eth_rx_compl, l4_cksm, rxcp);
        ipcksm = AMAP_GET_BITS(struct amap_eth_rx_compl, ipcksm, rxcp);
        ipv6 = AMAP_GET_BITS(struct amap_eth_rx_compl, ip_version, rxcp);
+       tcpf = AMAP_GET_BITS(struct amap_eth_rx_compl, tcpf, rxcp);
+       udpf = AMAP_GET_BITS(struct amap_eth_rx_compl, udpf, rxcp);
 
-       /* Ignore ipcksm for ipv6 pkts */
-       return l4_cksm && (ipcksm || ipv6);
+       /* L4 checksum is not reliable for non TCP/UDP packets.
+        * Also ignore ipcksm for ipv6 pkts */
+       return (tcpf || udpf) && l4_cksm && (ipcksm || ipv6);
 }
 
 static struct be_rx_page_info *