
Hi Markus,
On Thursday 11 January 2007 15:11, Markus Klotzbücher wrote:
IIRC same problem with the 440EP and MPC5200, thats what the extra #ifdef in drivers/usb_ohci.c:103 is for.
These are different issues! usb_ohci.c uses readl and writel to access the controller's registers from the CPU (e.g. ohci.regs). The original code never swaps here. But a PCI OHCI controller on a PowerPC needs it. The mXX_swap macros are used to swap data fields in structures that are passed to the host controller indirectly.
I get it. So in the end we have four cases: byte swapping register access or not _and_ byte swapping data or not. Right? Doesn't sound too complicated.
What about taking some code / macros from the linux kernel (usb/host/ohci.h)? It seems that all we need is the CONFIG_USB_OHCI_BIG_ENDIAN define.
Seems reasonable. So we'll use these for register accesses, and the rest stays as is doing CPU dependant byteswapping based on the LITTLEENDIAN define (include/usb.h). Ok?
Sounds reasonable to me. We still need a more pretty way to handle the +/- CFG_PCIRAM_BASE. What about some cpu_to_bus/bus_to_cpu macros?
Matthias