Bert Lange bert.lange@web.de at 2004-06-09 1612 +0200:
ich habe ein Asus P4S8X mit SiS-Chipsatz und ein Problem mit USB 2.0. Ich habe ohci-hcd, uhci-hcd und ehci-hcd fest in meinen 2.6.6er vanilla-Kernel einkompiliert und beim Booten sagt er
Kannst Du das nicht die Module dazu bauen? Dann kannst Du die Modulladereihenfolge verändern. Vielleicht bringt das was. Oder Du läßt ohci-hcd weg.
Das hatte ich auch schon probiert, hilft aber alles nichts. uhci-hcd hat ja eigentlich bei mir nichts zu suchen, da ich nur nen OHCI hab. Prinzipiell sollte es ja so laufen, dass der EHCI alle USB-1.1-Geräte an den OHCI oder UHCI übergibt, sofern einer da ist. Wenn ich z.B. nur ehci-hcd geladen habe, geht die Maus nicht. Das Problem ist, dass der EHCI auch die USB-2.0-HDD an den OHCI übergibt. Und da ist sie natürlich schlecht aufgehoben.
Wichtig ist die Zeile mit "cache line size of 128 is not supported ..."
Für mich klingt es nicht nach dem Grund, warum es nicht geht. Es sieht eher nach einer Feststellung und nicht nach einer Fehlermeldung aus.
Der entsprechende Code:
/* This can be overridden by arch code. */ u8 pci_cache_line_size = L1_CACHE_BYTES >> 2;
/** * pci_generic_prep_mwi - helper function for pci_set_mwi * @dev: the PCI device for which MWI is enabled * * Helper function for generic implementation of pcibios_prep_mwi * function. Originally copied from drivers/net/acenic.c. * Copyright 1998-2001 by Jes Sorensen, jes@trained-monkey.org. * * RETURNS: An appropriate -ERRNO error value on error, or zero for success. */ static int pci_generic_prep_mwi(struct pci_dev *dev) { u8 cacheline_size;
if (!pci_cache_line_size) return -EINVAL; /* The system doesn't support MWI. */
/* Validate current setting: the PCI_CACHE_LINE_SIZE must be equal to or multiple of the right value. */ pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size); if (cacheline_size >= pci_cache_line_size && (cacheline_size % pci_cache_line_size) == 0) return 0;
/* Write the correct value. */ pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, pci_cache_line_size); /* Read it back. */ pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size); if (cacheline_size == pci_cache_line_size) return 0;
printk(KERN_WARNING "PCI: cache line size of %d is not supported " "by device %s\n", pci_cache_line_size << 2, pci_name(dev));
return -EINVAL; }
Wenn die cache line size größer als L1-Cache/4 und ein vielfaches dessen ist und der Wert außerdem ordentlich geschrieben und gelesen werden kann, ist alles in Ordnung. Wenn nicht, returnt er -EINVAL, d.h. invalid argument. Das übergebene device ist also "invalid"- will er nicht. Und "not supported" klingt für mich schon ziemlich nach Fehlermeldung.
Andererseits taucht der EHCI ja im System auf, z.B. usbview zeigt ihn ja an. Das könnte heißen, dass ihn der Kernel doch zumindest ein bisschen mag und du Recht hast. Aber warum kann er dann die HDD nicht als USB-2.0 erkennen und gibt sie an den OHCI weiter?
Ich hab auch mal das mit Gerätetreibern reich bestückte Feindbetriebssystem versucht, da aber auch nur ~1MBps erhalten. Ein Zeichen dafür, dass der EHCI im Arsch ist? Die Platte macht definiv
1MBps, ein Test bei nem Kumpel hat ~17MBps ergeben.
MfG, Jonas