static netmem_ref __bnxt_alloc_rx_netmem(struct bnxt *bp, dma_addr_t *mapping,
                                         struct bnxt_rx_ring_info *rxr,
+                                        unsigned int *offset,
                                         gfp_t gfp)
 {
        netmem_ref netmem;
 
-       netmem = page_pool_alloc_netmems(rxr->page_pool, gfp);
+       if (PAGE_SIZE > BNXT_RX_PAGE_SIZE) {
+               netmem = page_pool_alloc_frag_netmem(rxr->page_pool, offset, BNXT_RX_PAGE_SIZE, gfp);
+       } else {
+               netmem = page_pool_alloc_netmems(rxr->page_pool, gfp);
+               *offset = 0;
+       }
        if (!netmem)
                return 0;
 
-       *mapping = page_pool_get_dma_addr_netmem(netmem);
+       *mapping = page_pool_get_dma_addr_netmem(netmem) + *offset;
        return netmem;
 }
 
        dma_addr_t mapping;
        netmem_ref netmem;
 
-       netmem = __bnxt_alloc_rx_netmem(bp, &mapping, rxr, gfp);
+       netmem = __bnxt_alloc_rx_netmem(bp, &mapping, rxr, &offset, gfp);
        if (!netmem)
                return -ENOMEM;