Support 440EP On-Chip OHCI USB Host Controller (v3)
Subsystems (2)
PATCH 1/1 Support 440EP On-Chip OHCI USB Host Controller (v3)
This updated patch adds support for the AMCC 440EP on-chip OHCI USB host controller. I tested it on the Bamboo board using the 2.6.13-rc6 kernel.
I'm cross posting this to linux-usb-devel. Let me know if that's a mistake.
This patch depends on my "fix invalid function name usb_hcd_put in ohci-ppc-soc.c" patch from 2005-07-20:
http://patchwork.ozlabs.org/linuxppc/patch?id=1803
It also depends on Dale Farnsworth's "2.6.12-3 header <asm/usb.h> missing" patch on 2005-08-10 to remove usb.h:
http://patchwork.ozlabs.org/linuxppc/patch?id=1969
Thanks to Wade Farnsworth for a bug fix.
This patch supersedes my previous versions released on 2005-07-25, 2005-07-27, and 2005-08-09:
http://patchwork.ozlabs.org/linuxppc/patch?id=1841
http://patchwork.ozlabs.org/linuxppc/patch?id=1855
http://patchwork.ozlabs.org/linuxppc/patch?id=1965
Comments are welcome.
arch/ppc/platforms/4xx/ibm440ep.c +0 -0
@@ -194,8 +194,32 @@ static struct resource usb_gadget_resour
}, };
+static struct resource ohci_usb_resources[] = {
+ [0] = {
+ .start = 0x0EF601000,
+ .end = 0x0EF60107F,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+ .start = 40,
+ .end = 40,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
static u64 dma_mask = 0xffffffffULL;
+static struct platform_device ohci_usb_device = {
+ .name = "ppc-soc-ohci",
+ .id = 0,
+ .num_resources = ARRAY_SIZE(ohci_usb_resources),
+ .resource = ohci_usb_resources,
+ .dev = {
+ .dma_mask = &dma_mask,
+ .coherent_dma_mask = 0xffffffffULL,
+ }
+};
+
static struct platform_device usb_gadget_device = {
.name = "musbhsfc",
.id = 0,@@ -208,6 +232,7 @@ static struct platform_device usb_gadget };
static struct platform_device *ibm440ep_devs[] __initdata = {
+ &ohci_usb_device,
&usb_gadget_device,
};
drivers/usb/host/Kconfig +0 -0
@@ -81,12 +81,12 @@ config USB_OHCI_HCD
config USB_OHCI_HCD_PPC_SOC
bool "OHCI support for on-chip PPC USB controller"
- depends on USB_OHCI_HCD && (STB03xxx || PPC_MPC52xx) + depends on USB_OHCI_HCD && (STB03xxx || PPC_MPC52xx || 440EP) default y select USB_OHCI_BIG_ENDIAN ---help--- - Enables support for the USB controller on the MPC52xx or - STB03xxx processor chip. If unsure, say Y. + Enables support for the USB controller on the MPC52xx, + STB03xxx, or 440EP processor chip. If unsure, say Y.
config USB_OHCI_HCD_PCI
bool "OHCI support for PCI-bus USB controllers"
@@ -105,7 +105,7 @@ config USB_OHCI_BIG_ENDIAN config USB_OHCI_LITTLE_ENDIAN
bool
depends on USB_OHCI_HCD
- default n if STB03xxx || PPC_MPC52xx + default n if STB03xxx || PPC_MPC52xx || 440EP
default y
config USB_UHCI_HCD
drivers/usb/host/ohci.h +1 -1
@@ -560,7 +560,7 @@ static inline u32 hc32_to_cpup (const st* some big-endian SOC implementations. Same thing happens with PSW access. */ -#ifdef CONFIG_STB03xxx +#if defined(CONFIG_STB03xxx) || defined(CONFIG_440EP )
#define OHCI_BE_FRAME_NO_SHIFT 16
#else
#define OHCI_BE_FRAME_NO_SHIFT 0
drivers/usb/Kconfig +0 -0
@@ -25,6 +25,7 @@ config USB_ARCH_HAS_OHCI
# PPC:
default y if STB03xxx
default y if PPC_MPC52xx
+ default y if 440EP
# MIPS: default y if SOC_AU1X00 # more: