diff options
author | Jan Andersson <jan@gaisler.com> | 2011-05-03 14:11:57 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-03 14:43:21 -0400 |
commit | c430131a02d677aa708f56342c1565edfdacb3c0 (patch) | |
tree | 15e9930a2512e4b05b7cfd4684f36dd26b0b990f /drivers/usb/early | |
parent | 2ce2c3ac8852cfc8f74f4b7b9a2c4cdff007f96a (diff) |
USB: EHCI: Support controllers with big endian capability regs
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@gaisler.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/early')
-rw-r--r-- | drivers/usb/early/ehci-dbgp.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/early/ehci-dbgp.c b/drivers/usb/early/ehci-dbgp.c index a6a350f5827b..1fc8f1249806 100644 --- a/drivers/usb/early/ehci-dbgp.c +++ b/drivers/usb/early/ehci-dbgp.c | |||
@@ -102,6 +102,9 @@ static struct kgdb_io kgdbdbgp_io_ops; | |||
102 | #define dbgp_kgdb_mode (0) | 102 | #define dbgp_kgdb_mode (0) |
103 | #endif | 103 | #endif |
104 | 104 | ||
105 | /* Local version of HC_LENGTH macro as ehci struct is not available here */ | ||
106 | #define EARLY_HC_LENGTH(p) (0x00ff & (p)) /* bits 7 : 0 */ | ||
107 | |||
105 | /* | 108 | /* |
106 | * USB Packet IDs (PIDs) | 109 | * USB Packet IDs (PIDs) |
107 | */ | 110 | */ |
@@ -892,7 +895,7 @@ int __init early_dbgp_init(char *s) | |||
892 | dbgp_printk("ehci_bar: %p\n", ehci_bar); | 895 | dbgp_printk("ehci_bar: %p\n", ehci_bar); |
893 | 896 | ||
894 | ehci_caps = ehci_bar; | 897 | ehci_caps = ehci_bar; |
895 | ehci_regs = ehci_bar + HC_LENGTH(readl(&ehci_caps->hc_capbase)); | 898 | ehci_regs = ehci_bar + EARLY_HC_LENGTH(readl(&ehci_caps->hc_capbase)); |
896 | ehci_debug = ehci_bar + offset; | 899 | ehci_debug = ehci_bar + offset; |
897 | ehci_dev.bus = bus; | 900 | ehci_dev.bus = bus; |
898 | ehci_dev.slot = slot; | 901 | ehci_dev.slot = slot; |