On Saturday 03 June 2006 12:17 am, Paul Serice wrote:
> The workaround in commit f7201c3dcd7799f2aa3d6ec427b194225360ecee
> broke.  The work around requires memory for DMA transfers for some
> NVidia EHCI controllers to be below 2GB, but recent changes have
> caused the DMA memory to be allocated before the DMA mask is set.
> 
> Signed-off-by: Paul Serice <[EMAIL PROTECTED]>

Signed-off-by: David Brownell <[EMAIL PROTECTED]>

... Greg, this might be a good candidate for 2.6.17 still ...

> ---
> 
>  drivers/usb/host/ehci-pci.c |   51 
> ++++++++++++++++++++-----------------------
>  1 files changed, 24 insertions(+), 27 deletions(-)
> 
> d844399ebad91e3b0415b3de479be17687d2544a
> diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
> index a1bd2be..82bea65 100644
> --- a/drivers/usb/host/ehci-pci.c
> +++ b/drivers/usb/host/ehci-pci.c
> @@ -76,6 +76,30 @@ static int ehci_pci_setup(struct usb_hcd
>       dbg_hcs_params(ehci, "reset");
>       dbg_hcc_params(ehci, "reset");
>  
> +        /* ehci_init() causes memory for DMA transfers to be
> +         * allocated.  Thus, any vendor-specific workarounds based on
> +         * limiting the type of memory used for DMA transfers must
> +         * happen before ehci_init() is called. */
> +     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;
> +     }
> +
>       /* cache this readonly data; minimize chip reads */
>       ehci->hcs_params = readl(&ehci->caps->hcs_params);
>  
> @@ -88,8 +112,6 @@ static int ehci_pci_setup(struct usb_hcd
>       if (retval)
>               return retval;
>  
> -     /* NOTE:  only the parts below this line are PCI-specific */
> -
>       switch (pdev->vendor) {
>       case PCI_VENDOR_ID_TDI:
>               if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) {
> @@ -105,31 +127,6 @@ static int ehci_pci_setup(struct usb_hcd
>                       goto done;
>               }
>               break;
> -     case PCI_VENDOR_ID_NVIDIA:
> -             switch (pdev->device) {
> -             /* NVidia reports that certain chips don't handle
> -              * QH, ITD, or SITD addresses above 2GB.  (But TD,
> -              * data buffer, and periodic schedule are normal.)
> -              */
> -             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;
> -             /* Some NForce2 chips have problems with selective suspend;
> -              * fixed in newer silicon.
> -              */
> -             case 0x0068:
> -                     pci_read_config_dword(pdev, PCI_REVISION_ID, &temp);
> -                     if ((temp & 0xff) < 0xa4)
> -                             ehci->no_selective_suspend = 1;
> -                     break;
> -             }
> -             break;
>       }
>  
>       if (ehci_is_TDI(ehci))
> -- 
> 1.3.2
> 
> 
> 
> _______________________________________________
> linux-usb-devel@lists.sourceforge.net
> To unsubscribe, use the last form field at:
> https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
> 


_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to