Index | Thread | Search

From:
Mark Kettenis <mark.kettenis@xs4all.nl>
Subject:
Re: igc 64 bit dma
To:
Alexander Bluhm <bluhm@openbsd.org>
Cc:
tech@openbsd.org
Date:
Tue, 24 Feb 2026 23:20:38 +0100

Download raw body.

Thread
  • Alexander Bluhm:

    igc 64 bit dma

    • Mark Kettenis:

      igc 64 bit dma

> Date: Tue, 24 Feb 2026 22:59:08 +0100
> From: Alexander Bluhm <bluhm@openbsd.org>
> 
> Hi,
> 
> igc(4) also works for me with 64 bit DMA.  Tested with
> 
> igc1 at pci16 dev 0 function 0 "Intel I225-LM" rev 0x03, msix, 4 queues, address 24:5e:be:8f:0f:1d
> 
> ok?

ok kettenis@

> bluhm
> 
> Index: dev/pci/if_igc.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/dev/pci/if_igc.c,v
> diff -u -p -r1.30 if_igc.c
> --- dev/pci/if_igc.c	17 Dec 2025 01:14:42 -0000	1.30
> +++ dev/pci/if_igc.c	24 Feb 2026 21:54:13 -0000
> @@ -737,11 +737,11 @@ igc_dma_malloc(struct igc_softc *sc, bus
>  
>  	dma->dma_tag = os->os_pa.pa_dmat;
>  
> -	if (bus_dmamap_create(dma->dma_tag, size, 1, size, 0, BUS_DMA_NOWAIT,
> -	    &dma->dma_map))
> +	if (bus_dmamap_create(dma->dma_tag, size, 1, size, 0,
> +	    BUS_DMA_NOWAIT | BUS_DMA_64BIT, &dma->dma_map))
>  		return 1;
>  	if (bus_dmamem_alloc(dma->dma_tag, size, PAGE_SIZE, 0, &dma->dma_seg,
> -	    1, &dma->dma_nseg, BUS_DMA_NOWAIT))
> +	    1, &dma->dma_nseg, BUS_DMA_NOWAIT | BUS_DMA_64BIT))
>  		goto destroy;
>  	if (bus_dmamem_map(dma->dma_tag, &dma->dma_seg, dma->dma_nseg, size,
>  	    &dma->dma_vaddr, BUS_DMA_NOWAIT | BUS_DMA_COHERENT))
> @@ -1855,10 +1855,11 @@ igc_allocate_transmit_buffers(struct igc
>  	for (i = 0; i < sc->num_tx_desc; i++) {
>  		txbuf = &txr->tx_buffers[i];
>  		error = bus_dmamap_create(txr->txdma.dma_tag, IGC_TSO_SIZE,
> -		    IGC_MAX_SCATTER, PAGE_SIZE, 0, BUS_DMA_NOWAIT, &txbuf->map);
> +		    IGC_MAX_SCATTER, PAGE_SIZE, 0,
> +		    BUS_DMA_NOWAIT | BUS_DMA_64BIT, &txbuf->map);
>  		if (error != 0) {
> -			printf("%s: Unable to create TX DMA map\n",
> -			    DEVNAME(sc));
> +			printf("%s: Unable to create TX DMA map, error %d\n",
> +			    DEVNAME(sc), error);
>  			goto fail;
>  		}
>  	}
> @@ -2161,10 +2162,10 @@ igc_allocate_receive_buffers(struct igc_
>  	for (i = 0; i < sc->num_rx_desc; i++, rxbuf++) {
>  		error = bus_dmamap_create(rxr->rxdma.dma_tag,
>  		    sc->rx_mbuf_sz, 1, sc->rx_mbuf_sz, 0,
> -		    BUS_DMA_NOWAIT, &rxbuf->map);
> +		    BUS_DMA_NOWAIT | BUS_DMA_64BIT, &rxbuf->map);
>  		if (error) {
> -			printf("%s: Unable to create RX DMA map\n",
> -			    DEVNAME(sc));
> +			printf("%s: Unable to create RX DMA map, error %d\n",
> +			    DEVNAME(sc), error);
>  			goto fail;
>  		}
>  	}
> 
>