u8 *data)
 {
        if (sset == ETH_SS_STATS) {
+               struct mvneta_port *pp = netdev_priv(netdev);
                int i;
 
                for (i = 0; i < ARRAY_SIZE(mvneta_statistics); i++)
                        memcpy(data + i * ETH_GSTRING_LEN,
                               mvneta_statistics[i].name, ETH_GSTRING_LEN);
 
-               data += ETH_GSTRING_LEN * ARRAY_SIZE(mvneta_statistics);
-               page_pool_ethtool_stats_get_strings(data);
+               if (!pp->bm_priv) {
+                       data += ETH_GSTRING_LEN * ARRAY_SIZE(mvneta_statistics);
+                       page_pool_ethtool_stats_get_strings(data);
+               }
        }
 }
 
        struct page_pool_stats stats = {};
        int i;
 
-       for (i = 0; i < rxq_number; i++)
-               page_pool_get_stats(pp->rxqs[i].page_pool, &stats);
+       for (i = 0; i < rxq_number; i++) {
+               if (pp->rxqs[i].page_pool)
+                       page_pool_get_stats(pp->rxqs[i].page_pool, &stats);
+       }
 
        page_pool_ethtool_stats_get(data, &stats);
 }
        for (i = 0; i < ARRAY_SIZE(mvneta_statistics); i++)
                *data++ = pp->ethtool_stats[i];
 
-       mvneta_ethtool_pp_stats(pp, data);
+       if (!pp->bm_priv)
+               mvneta_ethtool_pp_stats(pp, data);
 }
 
 static int mvneta_ethtool_get_sset_count(struct net_device *dev, int sset)
 {
-       if (sset == ETH_SS_STATS)
-               return ARRAY_SIZE(mvneta_statistics) +
-                      page_pool_ethtool_stats_get_count();
+       if (sset == ETH_SS_STATS) {
+               int count = ARRAY_SIZE(mvneta_statistics);
+               struct mvneta_port *pp = netdev_priv(dev);
+
+               if (!pp->bm_priv)
+                       count += page_pool_ethtool_stats_get_count();
+
+               return count;
+       }
 
        return -EOPNOTSUPP;
 }