Thanks. We were just working on that too. Pete --- Herbert Valerio Riedel <hvr@xxxxxxxxxxxxxxxxx> wrote: > > below just a patch to have usb working again for > 2.6.10-rc1 and some minor cleanups... > (alas usb still doesn't work on big endian...) > > Index: ohci-au1xxx.c > =================================================================== > RCS file: > /home/cvs/linux/drivers/usb/host/ohci-au1xxx.c,v > retrieving revision 1.1 > diff -u -r1.1 ohci-au1xxx.c > --- ohci-au1xxx.c 10 Oct 2004 17:56:25 -0000 1.1 > +++ ohci-au1xxx.c 5 Nov 2004 08:15:05 -0000 > @@ -20,6 +20,21 @@ > > #include <asm/mach-au1x00/au1000.h> > > +#define USBH_ENABLE_BE (1<<0) > +#define USBH_ENABLE_C (1<<1) > +#define USBH_ENABLE_E (1<<2) > +#define USBH_ENABLE_CE (1<<3) > +#define USBH_ENABLE_RD (1<<4) > + > +// shall we set USBH_ENABLE_C depending on > !CONFIG_NONCOHERENT? > +#ifdef __LITTLE_ENDIAN > +# define USBH_ENABLE_INIT (USBH_ENABLE_CE | > USBH_ENABLE_E | USBH_ENABLE_C) > +#elif __BIG_ENDIAN > +# define USBH_ENABLE_INIT (USBH_ENABLE_CE | > USBH_ENABLE_E | USBH_ENABLE_C | USBH_ENABLE_BE) > +#else > +# error not byte order defined > +#endif > + > extern int usb_disabled(void); > > > /*-------------------------------------------------------------------------*/ > @@ -30,18 +45,17 @@ > ": starting Au1xxx OHCI USB Controller\n"); > > /* enable host controller */ > - au_writel(0x00000008, USB_HOST_CONFIG); > + au_writel(USBH_ENABLE_CE, USB_HOST_CONFIG); > udelay(1000); > - au_writel(0x0000000e, USB_HOST_CONFIG); > + au_writel(USBH_ENABLE_INIT, USB_HOST_CONFIG); > udelay(1000); > > - /* wait for reset complete */ > - au_readl(USB_HOST_CONFIG); /* throw away first > read */ > - while (!(au_readl(USB_HOST_CONFIG) & 0x10)) > - au_readl(USB_HOST_CONFIG); > + /* wait for reset complete (read register twice; > see to au1500 errata) */ > + while (au_readl(USB_HOST_CONFIG), > !(au_readl(USB_HOST_CONFIG) & USBH_ENABLE_RD)) > + udelay(1000); > > printk(KERN_DEBUG __FILE__ > - ": Clock to USB host has been enabled \n"); > + ": Clock to USB host has been enabled \n"); > } > > static void au1xxx_stop_hc(struct platform_device > *dev) > @@ -49,9 +63,8 @@ > printk(KERN_DEBUG __FILE__ > ": stopping Au1xxx OHCI USB Controller\n"); > > - > /* Disable clock */ > - au_writel(readl(USB_HOST_CONFIG) & 0xffffff7, > USB_HOST_CONFIG); > + au_writel(readl(USB_HOST_CONFIG) & > ~(USBH_ENABLE_RD | USBH_ENABLE_CE), > USB_HOST_CONFIG); > } > > > @@ -234,37 +247,15 @@ > > ohci_dbg (ohci, "ohci_au1xxx_start, ohci:%p", > ohci); > > - ohci->hcca = dma_alloc_noncoherent > (hcd->self.controller, > - sizeof *ohci->hcca, &ohci->hcca_dma, 0); > - if (!ohci->hcca) > - return -ENOMEM; > - > - ohci_dbg (ohci, "ohci_au1xxx_start, > ohci->hcca:%p", > - ohci->hcca); > - > - memset (ohci->hcca, 0, sizeof (struct ohci_hcca)); > - > - if ((ret = ohci_mem_init (ohci)) < 0) { > - ohci_stop (hcd); > + if ((ret = ohci_init (ohci)) < 0) > return ret; > - } > - ohci->regs = hcd->regs; > > - if (hc_reset (ohci) < 0) { > - ohci_stop (hcd); > - return -ENODEV; > - } > - > - if (hc_start (ohci) < 0) { > + if ((ret = ohci_run (ohci)) < 0) { > err ("can't start %s", ohci->hcd.self.bus_name); > ohci_stop (hcd); > - return -EBUSY; > + return ret; > } > - create_debug_files (ohci); > > -#ifdef DEBUG > - ohci_dump (ohci, 1); > -#endif /*DEBUG*/ > return 0; > } > > > > > -- > Herbert Valerio Riedel <hvr@xxxxxxxxxxxxxxxxx> > > >