>On Tue, Feb 24, 2004 at 10:38:41PM +0800, song sam wrote: > > > > Hi, > > > > Wolfgang Denk wrote: > > > We tested a Adaptec AUA-200LP USB 2.0 card in some PPC sytems. It > > > worked fine when the devices were already connected at power-on or > > > at least when booting Linux, while hot-plug would reliably crash the > > > kernel. As far as I understand such behaviour is typical of some of > > > the alignment/cache bugs in the Linux kernel's USB code. > > > > I also met this USB problem on LITE_DW board when > > using USB keyboard and mouse.Has it solved or not? > >I use the following hack locally to work around some of the 2.4 USB >stack DMA problems. > >-Matt > >===== arch/ppc/mm/cachemap.c 1.12 vs edited ===== >--- 1.12/arch/ppc/mm/cachemap.c Tue Dec 10 18:09:59 2002 >+++ edited/arch/ppc/mm/cachemap.c Tue Dec 12 09:43:06 2002 >@@ -152,7 +152,26 @@ > case PCI_DMA_NONE: > BUG(); > case PCI_DMA_FROMDEVICE: /* invalidate only */ >+#if (defined(CONFIG_4xx) && (defined(CONFIG_USB)) || >defined(CONFIG_USB_MODULE)) >+ /* >+ * USB code does DMA off the stack, so when a driver >+ * uses the stock pci DMA routines, they end up calling >+ * invalidate_dcache_range(). >+ * The cache invalidate code in the 405 port invalidates >+ * an entire cache line, regardless of what addresses are >+ * passed in - it 'rounds out' to the surrounding cache line. >+ * While other ports will notice if part of the cache line >+ * is NOT part of the range being invalidated and 'do >+ * the right thing', the 405 code will invalidate the >+ * entire line, potentially trashing the stack, causing a >+ * panic. >+ * Until all the USB drivers are fixed, we flush the data >+ * buffer, a much safer operation. >+ */ >+ flush_dcache_range(start, end); >+#else > invalidate_dcache_range(start, end); >+#endif > break; > case PCI_DMA_TODEVICE: /* writeback only */ > clean_dcache_range(start, end);
Hi Matt, we experienced similar problems and, after applying your patch, everything works fine (even hot-plug)! Well done! Our configuration is: - PPChameleonEVB board (405EP-based) - Linux 2.4.20 from Denx's kernel tree - CiUSB USB controller by Conceptronic, based on 82C861 (it is OHCI-compatible and not UHCI as documentation claims) We performed some tests with the following devices: - Logitech 4-port hub - Logitech Scroll USB mouse - Manhattan USB keyboard For Wolfgang: are you going to include this patch in your kernel tree? Thanks again for your patch and best regards, llandre ** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
