On Sat, Apr 30, 2011 at 11:56:25AM +0200, Jan Andersson wrote: > The two first HC capability registers (CAPLENGTH and HCIVERSION) > are defined as one 8-bit and one 16-bit register. Most HC > implementations have selected to treat these registers as part > of a 32-bit register, giving the same layout for both big and > small endian systems. > > This patch adds a new quirk, big_endian_capbase, to support > controllers with big endian register interfaces that treat > HCIVERSION and CAPLENGTH as individual registers. > > Signed-off-by: Jan Andersson <jan@xxxxxxxxxxx> > Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > --- > This solution has previously been discussed on linux-usb [1] where > Alan Stern described the problem better: > > As an example for the sake of argument, let's suppose that CAPLENGTH is > 0x03 and HCIVERSION is 0x67. If the controller is in little-endian mode, > this means that the memory-mapped registers will contain the following > bytes (starting from offset 0): 0x03 0x00 0x07 0x06. Any CPU, whether > little-endian or big-endian, using ehci_readl() would obtain 0x06070003, > and the macros would then yield the correct values. > > Now suppose the controller is in big-endian mode. The memory-mapped > registers will contain the bytes: 0x03 0x00 0x06 0x07. Any CPU, whether > little-endian or big-endian, using ehci_readl() would obtain 0x03000607, > which of course doesn't work with the HC_LENGTH and HC_VERSION macros > > [1] http://marc.info/?l=linux-usb&m=126421978732228&w=2 > > Changes for V2: > * Add acked-by AS > * Fixup prefixes in patch description > * Fix build error in early/ehci-dbgp.c after comment from Greg KH Nope, I still get the following build error: CC drivers/usb/early/ehci-dbgp.o drivers/usb/early/ehci-dbgp.c: In function âearly_dbgp_initâ: drivers/usb/early/ehci-dbgp.c:895:2: error: implicit declaration of function âehci_big_endian_capbaseâ drivers/usb/early/ehci-dbgp.c:895:26: error: âehciâ undeclared (first use in this function) drivers/usb/early/ehci-dbgp.c:895:26: note: each undeclared identifier is reported only once for each function it appears in make[3]: *** [drivers/usb/early/ehci-dbgp.o] Error 1 Care to try again? thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html