struct bnxt_rx_ring_info *rxr,
                                   int numa_node)
 {
+       const unsigned int agg_size_fac = PAGE_SIZE / BNXT_RX_PAGE_SIZE;
+       const unsigned int rx_size_fac = PAGE_SIZE / SZ_4K;
        struct page_pool_params pp = { 0 };
        struct page_pool *pool;
 
-       pp.pool_size = bp->rx_agg_ring_size;
+       pp.pool_size = bp->rx_agg_ring_size / agg_size_fac;
        if (BNXT_RX_PAGE_MODE(bp))
-               pp.pool_size += bp->rx_ring_size;
+               pp.pool_size += bp->rx_ring_size / rx_size_fac;
        pp.nid = numa_node;
        pp.napi = &rxr->bnapi->napi;
        pp.netdev = bp->dev;
 
        rxr->need_head_pool = page_pool_is_unreadable(pool);
        if (bnxt_separate_head_pool(rxr)) {
-               pp.pool_size = max(bp->rx_ring_size, 1024);
+               pp.pool_size = min(bp->rx_ring_size / rx_size_fac, 1024);
                pp.flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV;
                pool = page_pool_create(&pp);
                if (IS_ERR(pool))