Re: [PATCH] pci: print out DMA mask info

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 09 Oct 2008 23:32:51 -0700
Yinghai Lu <yinghai@xxxxxxxxxx> wrote:

> in ehci_pci_setup() 
> 
>         switch (pdev->vendor) {
>         case PCI_VENDOR_ID_NVIDIA:
>                 /* NVidia reports that certain chips don't handle
>                  * QH, ITD, or SITD addresses above 2GB.  (But TD,
>                  * data buffer, and periodic schedule are normal.)
>                  */
>                 switch (pdev->device) {
>                 case 0x003c:    /* MCP04 */
>                 case 0x005b:    /* CK804 */
>                 case 0x00d8:    /* CK8 */
>                 case 0x00e8:    /* CK8S */
>                         if (pci_set_consistent_dma_mask(pdev,
>                                                 DMA_31BIT_MASK) < 0)
>                                 ehci_warn(ehci, "can't enable NVidia "
>                                         "workaround for >2GB RAM\n");
>                         break;
>                 }
>                 break;
>         }
> 
> so that is strange silicon bug for old ck804 and before. dma_mask could be 32bit. but consistent_dma_mask is 31bit
> mcp55 is ok.

Hmm, looks broken hardware...


> >> qlogic qla2xxx  and emulex lpfc dma mask and consistent_dma_mask is different...
> >> could have some story for them
> > 
> > Check out qla2xxx again. I think that it uses dma_set_mask() to set
> > dma_mask. qla2xxx uses the same value for both dma_mask and
> > consistent_dma_mask.
> > 
> > lpfc had better set 64bit to consistent_dma_mask but as I said in the
> > previous mail, not setting consistent_dma_mask doesn't cause any
> > problem. It means that some IOMMUs (uses consistent_dma_mask properly)
> > allocates an address < 4GB in alloc_coherent() and some IOMMUs alloc
> > address > 4GB. lpfc can handle both anyway.
> > 
> > 
> >> at least gart iommu is honoring the consistent dma mask.
> >> by calling dma_alloc_coherent_mask(dev, flag)
> > 
> > Well, that's because I wrote gart's alloc_coherent and introduced
> > dma_alloc_coherent_mask. ;)
> 
> oh. it is in tip

Yeah, it's in tip. But the current gart code uses coherent_dma_mask
properly (GART in tip works in the same way as the current
GART). IIRC, other X86 hardware IOMMUs (VT-d, Calgary, AMD) uses
dma_mask in dma_alloc_coherent (AMD in tip uses coherent_dma_mask).



> >> if device could use 64 bit coherent dma mask, that is driver problem...
> > 
> > Can you be more specific? As I wrote above, if 64bit-dma-capable
> > devices don't set consistent_dma_mask, we don't have any problem.
> 
> then can we remove consistent_dma_mask? just use dma_mask instead for all.

I don't think we can. One architecture needs it. The above usb
chip seems to need it.
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux