Re: MUSB regression in linux next at least for pandboard
Hi, On Friday 05 October 2012 07:09 AM, Tony Lindgren wrote: * Felipe Balbi [121004 11:04]: Hi, On Thu, Oct 04, 2012 at 10:31:08AM -0700, Tony Lindgren wrote: Hi Felipe & Kishon, Looks like musb is broken at least on pandaboard es in current linux next while it works with v3.6: [1.933074] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host) [1.939422] unable to find transceiver of type USB2 PHYrouping on. Total pages: 251648 [1.945190] HS USB OTG: no transceiver configured [1.950134] musb-hdrc musb-hdrc.0: musb_init_controller failed with status -19 [1.958160] couldn't find an available UDC I do have CONFIG_OMAP_USB2 set. Note that we won't be able to flip omap4 over to be device tree only probably until v3.9 because of the bindings we're still missing from usability point of view. So this regression should be fixed. I see. Kishon, can you cook a patch adding platform_data until we actually move to DT-only for OMAP4 ? Sure. Thanks Kishon -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: some question about xhci spec
hi alan: 2012/10/4 Alan Stern : > On Thu, 4 Oct 2012, loody wrote: > >> hi all: >> in xhci spec rev1.0 05/21/10 section 6.2.3.4, there is a line said >> "For SuperSpeed endpoints this field shall be set to the >> value defined in the bMaxBurst field of the >> SuperSpeed Endpoint Companion Descriptor. Refer to section 8.6.8 of >> the USB3 Specification." >> >> but I cannot find section 8.6.8 in usb3 spec I download from usb.org. >> >> Does anyone can tell me where I can find this section? > > Section 9.6.7. > is that a typo in xhci spec? I am just afraid I am not downloading the latest xhci spec. Thanks for your help ^^ -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: some question about xhci ep0 setting
hi Sarah: 2012/10/5 Sarah Sharp : > On Thu, Oct 04, 2012 at 01:47:44PM +0800, loody wrote: >> Hi all: >> from below out put slot context it shows ep0 consumer cycle bit is 1 >> but why when we enqueue control transfer we purposely leave setup >> status cycle bit as 0. >> (below I purpose dump control trb content and 0xcf01c80c should be >> 0x0841 instead of 0x0840, right?) >> >> [192016.504076] address trb: cf01c800: 01000680 0008 0008 0840 >> [192016.505593] address trb: cf01c810: 30e1fdc0 0008 00010c05 >> [192016.507129] address trb: cf01c820: 1021 > > We leave the setup status cycle bit as zero until we've written the > status phase to the ring. This is to prevent the host from executing > the control transfer until it's fully written to the ring. We do the > same thing for all transfer descriptors (TD) that have more than one > transfer request buffer (TRB). > > BTW, if you're asking questions about the xHCI driver, you really should > put me on Cc. Otherwise your mail might get lost in all the other > linux-usb mail I get. > > Why are you asking all these questions about the driver? What are you > trying to accomplish? Nice to meet U ~^^~ I am trying to port xhci driver on my platform based on linux driver. That is why I ask these questions. -- Thanks for your help, -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 14/24] USB: ohci: merge ohci_finish_controller_resume with ohci_resume
On Friday, October 05, 2012 12:18 AM Florian Fainelli wrote > > Merge ohci_finish_controller_resume with ohci_resume as suggested by Alan > Stern. Since ohci_finish_controller_resume no longer exists, update the > various OHCI drivers to call ohci_resume() instead. Some drivers used to set > themselves the bit HCD_FLAG_HW_ACCESSIBLE, which is now handled by > ohci_resume(). > > Signed-off-by: Florian Fainelli For drivers/usb/host/ohci-exynos.c, it looks good. Acked-by: Jingoo Han Best regards, Jingoo Han > --- > drivers/usb/host/ohci-at91.c |2 +- > drivers/usb/host/ohci-ep93xx.c |2 +- > drivers/usb/host/ohci-exynos.c |5 + > drivers/usb/host/ohci-hcd.c | 41 +++-- > drivers/usb/host/ohci-hub.c | 42 > -- > drivers/usb/host/ohci-omap.c |2 +- > drivers/usb/host/ohci-platform.c |2 +- > drivers/usb/host/ohci-pxa27x.c |2 +- > drivers/usb/host/ohci-s3c2410.c |3 +-- > drivers/usb/host/ohci-spear.c|2 +- > drivers/usb/host/ohci-tmio.c |2 +- > 11 files changed, 48 insertions(+), 57 deletions(-) > > diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c > index 0bf72f9..908d84a 100644 > --- a/drivers/usb/host/ohci-at91.c > +++ b/drivers/usb/host/ohci-at91.c > @@ -705,7 +705,7 @@ static int ohci_hcd_at91_drv_resume(struct > platform_device *pdev) > if (!clocked) > at91_start_clock(); > > - ohci_finish_controller_resume(hcd); > + ohci_resume(hcd, false); > return 0; > } > #else > diff --git a/drivers/usb/host/ohci-ep93xx.c b/drivers/usb/host/ohci-ep93xx.c > index dbfbd1d..a982f04 100644 > --- a/drivers/usb/host/ohci-ep93xx.c > +++ b/drivers/usb/host/ohci-ep93xx.c > @@ -194,7 +194,7 @@ static int ohci_hcd_ep93xx_drv_resume(struct > platform_device *pdev) > > ep93xx_start_hc(&pdev->dev); > > - ohci_finish_controller_resume(hcd); > + ohci_resume(hcd, false); > return 0; > } > #endif > diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c > index fc3091b..53c5a989 100644 > --- a/drivers/usb/host/ohci-exynos.c > +++ b/drivers/usb/host/ohci-exynos.c > @@ -252,10 +252,7 @@ static int exynos_ohci_resume(struct device *dev) > if (pdata && pdata->phy_init) > pdata->phy_init(pdev, S5P_USB_PHY_HOST); > > - /* Mark hardware accessible again as we are out of D3 state by now */ > - set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); > - > - ohci_finish_controller_resume(hcd); > + ohci_resume(hcd, false); > > return 0; > } > diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c > index 5d30992..568bdb3 100644 > --- a/drivers/usb/host/ohci-hcd.c > +++ b/drivers/usb/host/ohci-hcd.c > @@ -1003,13 +1003,50 @@ static int __maybe_unused ohci_suspend(struct usb_hcd > *hcd, bool do_wakeup) > > static int __maybe_unused ohci_resume(struct usb_hcd *hcd, bool hibernated) > { > + struct ohci_hcd *ohci = hcd_to_ohci(hcd); > + int port; > + boolneed_reinit = false; > + > set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); > > /* Make sure resume from hibernation re-enumerates everything */ > if (hibernated) > - ohci_usb_reset(hcd_to_ohci(hcd)); > + ohci_usb_reset(ohci); > + > + /* See if the controller is already running or has been reset */ > + ohci->hc_control = ohci_readl(ohci, &ohci->regs->control); > + if (ohci->hc_control & (OHCI_CTRL_IR | OHCI_SCHED_ENABLES)) { > + need_reinit = true; > + } else { > + switch (ohci->hc_control & OHCI_CTRL_HCFS) { > + case OHCI_USB_OPER: > + case OHCI_USB_RESET: > + need_reinit = true; > + } > + } > + > + /* If needed, reinitialize and suspend the root hub */ > + if (need_reinit) { > + spin_lock_irq(&ohci->lock); > + ohci_rh_resume(ohci); > + ohci_rh_suspend(ohci, 0); > + spin_unlock_irq(&ohci->lock); > + } > + > + /* Normally just turn on port power and enable interrupts */ > + else { > + ohci_dbg(ohci, "powerup ports\n"); > + for (port = 0; port < ohci->num_ports; port++) > + ohci_writel(ohci, RH_PS_PPS, > + &ohci->regs->roothub.portstatus[port]); > + > + ohci_writel(ohci, OHCI_INTR_MIE, &ohci->regs->intrenable); > + ohci_readl(ohci, &ohci->regs->intrenable); > + msleep(20); > + } > + > + usb_hcd_resume_root_hub(hcd); > > - ohci_finish_controller_resume(hcd); > return 0; > } > > diff --git a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c > index 2f3619e..db09dae 100644 > --- a/drivers/usb/host/ohci-hub.c > +++ b/drivers/usb/host/ohci-hub.c > @@ -316,48 +316,6 @@ static int ohci_b
Re: MUSB regression in linux next at least for pandboard
* Felipe Balbi [121004 11:04]: > Hi, > > On Thu, Oct 04, 2012 at 10:31:08AM -0700, Tony Lindgren wrote: > > Hi Felipe & Kishon, > > > > Looks like musb is broken at least on pandaboard es > > in current linux next while it works with v3.6: > > > > [1.933074] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host) > > [1.939422] unable to find transceiver of type USB2 PHYrouping on. > > Total pages: 251648 > > [1.945190] HS USB OTG: no transceiver configured > > [1.950134] musb-hdrc musb-hdrc.0: musb_init_controller failed with > > status -19 > > [1.958160] couldn't find an available UDC > > > > I do have CONFIG_OMAP_USB2 set. > > > > Note that we won't be able to flip omap4 over to be > > device tree only probably until v3.9 because of the > > bindings we're still missing from usability point of > > view. So this regression should be fixed. > > I see. Kishon, can you cook a patch adding platform_data until we > actually move to DT-only for OMAP4 ? > > > Also on the EHCI port, I've seen issues where unplugging > > the cable hangs kernel with an infinite loop. But that happens > > only occasionally, sorry does not seem to happen right > > now so no output to paste here. Or maybe this issue > > has already been fixed? > > Keshava, would you have time to look into this for this -rc cycle ? Also, can you guys also please do a patch to move plat/usb.h to include/linux/platform_data/usb-omap.h that only contains platform data? The init functions should be in local usb.h under arch/arm/*omap*/*. Then also please remove the cpu_is_omap usage from drivers/mfd/omap-usb-host.c if not done already. These are needed to make plat/cpu.h local to mach-omap* for the ARM common zImage support. Thanks, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: some question about xhci ep0 setting
On Thu, Oct 04, 2012 at 01:47:44PM +0800, loody wrote: > Hi all: > from below out put slot context it shows ep0 consumer cycle bit is 1 > but why when we enqueue control transfer we purposely leave setup > status cycle bit as 0. > (below I purpose dump control trb content and 0xcf01c80c should be > 0x0841 instead of 0x0840, right?) > > [192016.504076] address trb: cf01c800: 01000680 0008 0008 0840 > [192016.505593] address trb: cf01c810: 30e1fdc0 0008 00010c05 > [192016.507129] address trb: cf01c820: 1021 We leave the setup status cycle bit as zero until we've written the status phase to the ring. This is to prevent the host from executing the control transfer until it's fully written to the ring. We do the same thing for all transfer descriptors (TD) that have more than one transfer request buffer (TRB). BTW, if you're asking questions about the xHCI driver, you really should put me on Cc. Otherwise your mail might get lost in all the other linux-usb mail I get. Why are you asking all these questions about the driver? What are you trying to accomplish? Sarah Sharp -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] usb: gadget: ncm: correct endianess conversion
Signed-off-by: Dmytro Milinevskyy --- drivers/usb/gadget/f_ncm.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/f_ncm.c b/drivers/usb/gadget/f_ncm.c index b651b52..fce45ab 100644 --- a/drivers/usb/gadget/f_ncm.c +++ b/drivers/usb/gadget/f_ncm.c @@ -869,11 +869,11 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port, struct sk_buff *skb2; int ncb_len = 0; __le16 *tmp; - int div = ntb_parameters.wNdpInDivisor; - int rem = ntb_parameters.wNdpInPayloadRemainder; - int pad; - int ndp_align = ntb_parameters.wNdpInAlignment; - int ndp_pad; + int div = le16_to_cpu(ntb_parameters.wNdpInDivisor); + int rem = le16_to_cpu(ntb_parameters.wNdpInPayloadRemainder); + int pad; + int ndp_align = le16_to_cpu(ntb_parameters.wNdpInAlignment); + int ndp_pad; unsignedmax_size = ncm->port.fixed_in_len; struct ndp_parser_opts *opts = ncm->parser_opts; unsignedcrc_len = ncm->is_crc ? sizeof(uint32_t) : 0; -- 1.7.12 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Mouse and keyboard freeze on Ivy Bridge platform
On Thu, Oct 04, 2012 at 11:36:06PM +0200, Sébastien Dinot wrote: > Alan Stern a écrit : > > The log file shows lots and lots of low-level communication errors. > > They could be caused by bad cabling or by bad USB hardware in your > > computer. It's unlikely that they were caused by the mouse or > > keyboard, because the log shows errors for both of them starting at > > exactly the same times. > > In my humble opinion, this issue is not caused by a bad USB hardware > because I am encountering it with two different motherboards (MSI > Z77A-G43 and ASUS P8Z77-V LX), both with an uptodate BIOS. > > May be it is caused by a bad cabling but my mouse and my keyboard worked > fine with my previous PC. They are connected to USB2 ports in both > cases. But to clear up this point, I will try new mouse and keyboard. > > A last question: if it is a cable failure, why does it disappear > temporarily when I unload then reload the module? I do not have deep > experience and knowledge of hardware, may be there is a rational > explanation to it. > > > You could try getting a USB-2 hub and attaching your mouse and > > keyboard through the hub. That might help ... or it might not. > > Sorry, I do not understand the aim of this operation. Could you explain > me it? Sometimes USB 2.0 hubs can handle more electrical noise from the host controller, especially if they are externally powered by a wall-wort. So introducing a USB 2.0 hub may fix the transfer errors caused by the host. BTW, do these Ivy Bridge systems have any (blue) USB 3.0 ports? If so, does your mouse and keyboard work under those ports? Sarah Sharp -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: FTDI USB-to-UART converters and tcdrain()
On Tue, Oct 02, 2012 at 05:56:30PM +0200, Jarkko Huijts wrote: > Hello knowledgeable people, > > I have a question regarding tcdrain() and kernel driver > drivers/usb/serial/ftdi_sio.c (for a family of USB-to-UART converter > chips from FTDI). I'm using an FT232RL and kernel 2.6.38-16. (The driver > code does not seem to have changed much between that version and 3.6.) > > My goal is to make sure all TX data has been sent over the wire in > application code. This is what function tcdrain() is for according to > the manual page and serial programming guides. It doesn't seem to do > anything for the FT232RL chip, however. > > I found the following when digging around: > - tcdrain() is implemented in libc and translated into ioctl TCSBRK with > value 1. In Linux, this is apparently defined as "wait until drained" > without sending an actual break over the UART. > - I would expect this ioctl to arrive in function ftdi_ioctl() of the > driver, but it doesn't. (I included a printk showing every ioctl it > receives.) No, the break callback in the ftdi driver should be called instead (the ftdi_break_ctl() function). > - It seems like the hardware can return whether its TX buffer is empty. > This is stored in field transmit_empty of struct ftdi_private and can be > retrieved by application code by doing ioctl TIOCSERGETLSR. I found an > old thread in this mailing list ("support for TIOCSERGETLSR in > ftdi_sio", posted December 10, 2010), which seems to be the origin of > this addition. Several other drivers under drivers/usb/serial seem to > implement the same ioctl: io_edgeport.c, mos7720.c and mos7840.c. > > My questions are: > - Can anyone confirm that the state of the chip's TX buffer (at least > whether it is empty) can be retrieved from the chip? There is no > publicly available datasheet about this kind of hardware details. I don't have the datasheet, so I can't answer this for you, sorry. > - Is tcdrain() supposed to ensure that all TX data has been sent for any > serial device? If so, why is it not implemented for this device? No one has implemented it to do so. Other usb-serial drivers have implemented this functionality, just not this one. Perhaps because no one has noticed before, or maybe the chip really can't do it. Without the specs for the device itself, I can't really tell for sure. If you do get ahold of the specs, let me know, and I'll be glad to work to add this support to the driver, as I agree, it is something that would be useful to a lot of people. Sorry I can't be of more help, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] EHCI: Update qTD next pointer in QH overlay region during unlink
On Fri, 7 Sep 2012, Pavankumar Kondeti wrote: > There is a possibility of QH overlay region having reference to a stale > qTD pointer during unlink. > > Consider an endpoint having two pending qTD before unlink process begins. > The endpoint's QH queue looks like this. > > qTD1 --> qTD2 --> Dummy > > To unlink qTD2, QH is removed from asynchronous list and Asynchronous > Advance Doorbell is programmed. The qTD1's next qTD pointer is set to > qTD2'2 next qTD pointer and qTD2 is retired upon controller's doorbell > interrupt. If QH's current qTD pointer points to qTD1, transfer overlay > region still have reference to qTD2. But qtD2 is just unlinked and freed. > This may cause EHCI system error. Fix this by updating qTD next pointer > in QH overlay region with the qTD next pointer of the current qTD. Pavan: Your patch got me thinking. The test we use is this: if (cpu_to_hc32(ehci, qtd->qtd_dma) == qh->hw->hw_current) { But it's possible (although highly unlikely) that this test could succeed when it shouldn't. That is, it might happen purely by coincidence that the qTD at the start of the list had been reused, so it's really a new TD at the same old address, and the old address is still in the overlay region. (To make this happen, you'd have to unlink an URB while it is running, and the completion handler would have to submit a new URB and immediately unlink it. Then the next URB submitted might reuse the qTD that was running originally.) It would be better to keep track of whether or not the contents of the overlay area in an idle QH are active and valid, since that's what we really want to test here. Can you read through this patch and verify that it will do what it's supposed to do? Thanks, Alan Stern Index: usb-3.6/drivers/usb/host/ehci.h === --- usb-3.6.orig/drivers/usb/host/ehci.h +++ usb-3.6/drivers/usb/host/ehci.h @@ -401,6 +401,7 @@ struct ehci_qh { struct usb_device *dev; /* access to TT */ unsignedis_out:1; /* bulk or intr OUT */ unsignedclearing_tt:1; /* Clear-TT-Buf in progress */ + unsignedoverlay_active:1; /* no update needed */ }; /*-*/ Index: usb-3.6/drivers/usb/host/ehci-q.c === --- usb-3.6.orig/drivers/usb/host/ehci-q.c +++ usb-3.6/drivers/usb/host/ehci-q.c @@ -135,7 +135,7 @@ qh_refresh (struct ehci_hcd *ehci, struc * qtd is updated in qh_completions(). Update the QH * overlay here. */ - if (cpu_to_hc32(ehci, qtd->qtd_dma) == qh->hw->hw_current) { + if (qh->overlay_active) { qh->hw->hw_qtd_next = qtd->hw_next; qtd = NULL; } @@ -456,9 +456,7 @@ qh_completions (struct ehci_hcd *ehci, s continue; /* qh unlinked; token in overlay may be most current */ - if (state == QH_STATE_IDLE - && cpu_to_hc32(ehci, qtd->qtd_dma) - == hw->hw_current) { + if (state == QH_STATE_IDLE && qh->overlay_active) { token = hc32_to_cpu(ehci, hw->hw_token); /* An unlink may leave an incomplete @@ -513,6 +511,15 @@ qh_completions (struct ehci_hcd *ehci, s last->hw_next = qtd->hw_next; } + /* +* Conversely, if we're removing something at the head +* of the queue then the QH's overlay area can no longer +* be active and valid. +*/ + else { + qh->overlay_active = 0; + } + /* remove qtd; it's recycled after possible urb completion */ list_del (&qtd->qtd_list); last = qtd; @@ -1243,6 +1250,8 @@ static void end_unlink_async(struct ehci qh->unlink_next = NULL; qh->qh_state = QH_STATE_IDLE; + qh->overlay_active = !!(qh->hw->hw_token & + cpu_to_hc32(ehci, QTD_STS_ACTIVE)); qh->qh_next.qh = NULL; qh_completions(ehci, qh); Index: usb-3.6/drivers/usb/host/ehci-sched.c === --- usb-3.6.orig/drivers/usb/host/ehci-sched.c +++ usb-3.6/drivers/usb/host/ehci-sched.c @@ -670,6 +670,8 @@ static void end_unlink_intr(struct ehci_ int rc; qh->qh_state = QH_STATE_IDLE; + qh->overlay_active = !!(hw->hw_token & + cpu_to_hc32(ehci, QTD_STS_ACTIVE)); hw->hw_next = E
[PATCH 04/16] ARM: OMAP: Make plat/fpga.h local to arch/arm/plat-omap
There's no need to have this file in plat/fpga.h. We can make it local to plat-omap replacing fpga_read/write functions directly with readb/writeb as that's how they are already defined in fpga.h. Note that 2420 based H4 is also using the fpga, so let's keep the led support around in plat-omap until we flip over mach-omap2 to device tree. Cc: Tomi Valkeinen Cc: Florian Tobias Schandinat Cc: linux-fb...@vger.kernel.org Cc: Felipe Balbi Cc: linux-usb@vger.kernel.org Signed-off-by: Tony Lindgren --- arch/arm/mach-omap1/board-fsample.c |6 - arch/arm/mach-omap1/board-innovator.c | 26 ++-- arch/arm/mach-omap1/board-perseus2.c|6 - arch/arm/mach-omap1/common.h|1 arch/arm/mach-omap1/fpga.c |2 arch/arm/mach-omap1/include/mach/omap1510.h | 113 arch/arm/mach-omap1/serial.c|1 arch/arm/plat-omap/debug-leds.c |2 arch/arm/plat-omap/fpga.h | 74 ++ arch/arm/plat-omap/include/plat/fpga.h | 193 --- drivers/usb/host/ohci-omap.c|5 - drivers/video/omap/lcd_inn1510.c|7 + 12 files changed, 216 insertions(+), 220 deletions(-) create mode 100644 arch/arm/plat-omap/fpga.h delete mode 100644 arch/arm/plat-omap/include/plat/fpga.h diff --git a/arch/arm/mach-omap1/board-fsample.c b/arch/arm/mach-omap1/board-fsample.c index 4b6de70..6f496df 100644 --- a/arch/arm/mach-omap1/board-fsample.c +++ b/arch/arm/mach-omap1/board-fsample.c @@ -30,7 +30,7 @@ #include #include #include -#include +#include <../plat-omap/fpga.h> #include #include @@ -123,9 +123,9 @@ static struct resource smc91x_resources[] = { static void __init fsample_init_smc91x(void) { - fpga_write(1, H2P2_DBG_FPGA_LAN_RESET); + __raw_writeb(1, H2P2_DBG_FPGA_LAN_RESET); mdelay(50); - fpga_write(fpga_read(H2P2_DBG_FPGA_LAN_RESET) & ~1, + __raw_writeb(__raw_readb(H2P2_DBG_FPGA_LAN_RESET) & ~1, H2P2_DBG_FPGA_LAN_RESET); mdelay(50); } diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index db5f7d2..5804da7 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c @@ -33,7 +33,7 @@ #include #include -#include +#include <../plat-omap/fpga.h> #include #include #include @@ -215,7 +215,7 @@ static struct platform_device *innovator1510_devices[] __initdata = { static int innovator_get_pendown_state(void) { - return !(fpga_read(OMAP1510_FPGA_TOUCHSCREEN) & (1 << 5)); + return !(__raw_readb(OMAP1510_FPGA_TOUCHSCREEN) & (1 << 5)); } static const struct ads7846_platform_data innovator1510_ts_info = { @@ -279,7 +279,7 @@ static struct platform_device *innovator1610_devices[] __initdata = { static void __init innovator_init_smc91x(void) { if (cpu_is_omap1510()) { - fpga_write(fpga_read(OMAP1510_FPGA_RST) & ~1, + __raw_writeb(__raw_readb(OMAP1510_FPGA_RST) & ~1, OMAP1510_FPGA_RST); udelay(750); } else { @@ -335,10 +335,10 @@ static int mmc_set_power(struct device *dev, int slot, int power_on, int vdd) { if (power_on) - fpga_write(fpga_read(OMAP1510_FPGA_POWER) | (1 << 3), + __raw_writeb(__raw_readb(OMAP1510_FPGA_POWER) | (1 << 3), OMAP1510_FPGA_POWER); else - fpga_write(fpga_read(OMAP1510_FPGA_POWER) & ~(1 << 3), + __raw_writeb(__raw_readb(OMAP1510_FPGA_POWER) & ~(1 << 3), OMAP1510_FPGA_POWER); return 0; @@ -390,14 +390,14 @@ static void __init innovator_init(void) omap_cfg_reg(UART3_TX); omap_cfg_reg(UART3_RX); - reg = fpga_read(OMAP1510_FPGA_POWER); + reg = __raw_readb(OMAP1510_FPGA_POWER); reg |= OMAP1510_FPGA_PCR_COM1_EN; - fpga_write(reg, OMAP1510_FPGA_POWER); + __raw_writeb(reg, OMAP1510_FPGA_POWER); udelay(10); - reg = fpga_read(OMAP1510_FPGA_POWER); + reg = __raw_readb(OMAP1510_FPGA_POWER); reg |= OMAP1510_FPGA_PCR_COM2_EN; - fpga_write(reg, OMAP1510_FPGA_POWER); + __raw_writeb(reg, OMAP1510_FPGA_POWER); udelay(10); platform_add_devices(innovator1510_devices, ARRAY_SIZE(innovator1510_devices)); @@ -437,6 +437,7 @@ static void __init innovator_init(void) */ static void __init innovator_map_io(void) { +#ifdef CONFIG_ARCH_OMAP15XX omap15xx_map_io(); iotable_init(innovator1510_io_desc, ARRAY_SIZE(innovator1510_io_desc)); @@ -444,9 +445,10 @@ static void __init innovator_map_io(void) /* Dump the Innovator FPGA rev early - useful info for sup
Re: [PATCH 00/24 v2] USB: OHCI and EHCI platform driver conversions
Le 04/10/2012 21:36, Alan Stern a écrit : On Thu, 4 Oct 2012, Florian Fainelli wrote: Hi all, This patch series contains various EHCI and OHCI conversions as well as some cleanups in the existing OHCI HCD driver regarding suspend/resume as suggested by Alan Stern. Changes since previous version summed up are: - improved various commit messages - changed the logic regarding need_io_watchdog - fixed arch/ files not using {e,o}hci-platform despite their "conversion" - updated more defconfigs - cleaned up OHCI HCD driver - dropped Octeon conversion per David Daney's request Per-patch changes are detailed in the patches. This is great stuff! Thanks a lot for doing all this work. A couple of things still to be fixed (described in separate emails); nothing very big. Thanks a lot for reviewing! One more request: How'd you like to convert ehci-platform.c and ohci-platform.c to use devm_request_and_ioremap() for the memory resources (like in the IXP4xx and Loongson files you removed)? At the same time you could fix the spelling of "resource" in the error messages, and change all the pr_err() lines to dev_err(). Sounds good, I will fold these patches in the next series. -- Florian -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Mouse and keyboard freeze on Ivy Bridge platform
Alan Stern a écrit : > The log file shows lots and lots of low-level communication errors. > They could be caused by bad cabling or by bad USB hardware in your > computer. It's unlikely that they were caused by the mouse or > keyboard, because the log shows errors for both of them starting at > exactly the same times. In my humble opinion, this issue is not caused by a bad USB hardware because I am encountering it with two different motherboards (MSI Z77A-G43 and ASUS P8Z77-V LX), both with an uptodate BIOS. May be it is caused by a bad cabling but my mouse and my keyboard worked fine with my previous PC. They are connected to USB2 ports in both cases. But to clear up this point, I will try new mouse and keyboard. A last question: if it is a cable failure, why does it disappear temporarily when I unload then reload the module? I do not have deep experience and knowledge of hardware, may be there is a rational explanation to it. > You could try getting a USB-2 hub and attaching your mouse and > keyboard through the hub. That might help ... or it might not. Sorry, I do not understand the aim of this operation. Could you explain me it? Thanks for your help, Sébastien -- Sébastien Dinot, sebastien.di...@free.fr http://sebastien.dinot.free.fr/ Ne goûtez pas au logiciel libre, vous ne pourriez plus vous en passer ! -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Mouse and keyboard freeze on Ivy Bridge platform
On Thu, 4 Oct 2012, Sébastien Dinot wrote: > Hi, > > Alan Stern a écrit : > > Please build a kernel with CONFIG_USB_DEBUG enabled. > > Done (3.6.0+ kernel) > > > When a hang occurs, get a list of hang tasks (Alt-SysRq-w probably > > won't work, but "echo w >/proc/sysrq-trigger" from a network login > > should). Then send the dmesg output > > The mouse and the keyboard froze four times tonight in half an hour : > > - at 20:42:05 > - at 20:53:44 > - at 20:58:21 > - at 21:15:19 > > But the SysRq command (executed through a remote SSH connection) > displayed nothing. :( No tasks were hung. That's okay. > In attachment, you will find the kern.log file. The log file shows lots and lots of low-level communication errors. They could be caused by bad cabling or by bad USB hardware in your computer. It's unlikely that they were caused by the mouse or keyboard, because the log shows errors for both of them starting at exactly the same times. You could try getting a USB-2 hub and attaching your mouse and keyboard through the hub. That might help ... or it might not. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 00/24 v2] USB: OHCI and EHCI platform driver conversions
On Thu, 4 Oct 2012, Florian Fainelli wrote: > Hi all, > > This patch series contains various EHCI and OHCI conversions as well as > some cleanups in the existing OHCI HCD driver regarding suspend/resume > as suggested by Alan Stern. > > Changes since previous version summed up are: > - improved various commit messages > - changed the logic regarding need_io_watchdog > - fixed arch/ files not using {e,o}hci-platform despite their "conversion" > - updated more defconfigs > - cleaned up OHCI HCD driver > - dropped Octeon conversion per David Daney's request > > Per-patch changes are detailed in the patches. This is great stuff! Thanks a lot for doing all this work. A couple of things still to be fixed (described in separate emails); nothing very big. One more request: How'd you like to convert ehci-platform.c and ohci-platform.c to use devm_request_and_ioremap() for the memory resources (like in the IXP4xx and Loongson files you removed)? At the same time you could fix the spelling of "resource" in the error messages, and change all the pr_err() lines to dev_err(). Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 17/24 v2] ARM: cns3xxx: use OHCI platform driver
On Thu, 4 Oct 2012, Florian Fainelli wrote: > Since both the EHCI and OHCI platform drivers use the same power_{on,off} > callbacks, rename them to cns3xx_usb_power_{on,off} to show that they are > shared. This is an example of the sort of thing I complained about before. People who read only the patch description and not the title will wonder why this patch adds cns3xxx_usb_ohci_pdata and cns3xxx_usb_ohci_device. And people who read both will wonder why they talk about different things. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Mouse and keyboard freeze on Ivy Bridge platform
Hi, Jonathan Nieder a écrit : > Sebastien: for reference, here's a way to build a kernel with > CONFIG_USB_DEBUG enabled. Thank you for these useful instructions, I had not compiled a kernel for some years. Sébastien -- Sébastien Dinot, sebastien.di...@free.fr http://sebastien.dinot.free.fr/ Ne goûtez pas au logiciel libre, vous ne pourriez plus vous en passer ! -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 12/24] USB: ohci: move ohci_pci_{suspend,resume} to ohci-hcd.c
On Thu, 4 Oct 2012, Florian Fainelli wrote: > As suggested by Alan Stern, move the ohci-pci.c ohci_pci_{suspend,resume} > routines to ohci-hcd.c. Due to their move, also rename them to > ohci_{suspend,resume} to make it clear they operate on ohci_hcd. Since they > are not necessarily called, annotate them with __maybe_unused. > > Signed-off-by: Florian Fainelli > --- > drivers/usb/host/ohci-hcd.c | 39 +++ > drivers/usb/host/ohci-pci.c | 43 > ++- > 2 files changed, 41 insertions(+), 41 deletions(-) > > diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c > index 2b1e8d8..0cba8d6 100644 > --- a/drivers/usb/host/ohci-hcd.c > +++ b/drivers/usb/host/ohci-hcd.c > @@ -981,6 +981,45 @@ static int ohci_restart (struct ohci_hcd *ohci) > return 0; > } > > +static int __maybe_unused ohci_suspend(struct usb_hcd *hcd, bool do_wakeup) > +{ ... > + struct ohci_hcd *ohci = hcd_to_ohci (hcd); > +} > + > #endif How about putting these new routines _after_ this #endif? > --- a/drivers/usb/host/ohci-pci.c > +++ b/drivers/usb/host/ohci-pci.c > @@ -298,45 +298,6 @@ static int __devinit ohci_pci_start (struct usb_hcd *hcd) > > #ifdef CONFIG_PM > > -static int ohci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup) > -{ ... > -} > - > #endif /* CONFIG_PM */ And then moving these #ifdef and #endif lines along with them? The point is that one condition is #if defined(CONFIG_PM) || defined(CONFIG_PCI) whereas the other is just #ifdef CONFIG_PM so they aren't really the same. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 06/24 v2] USB: EHCI: add no_io_watchdog platform_data parameter to ehci-platform
On Thu, 4 Oct 2012, Florian Fainelli wrote: > Enhance the ehci-platform driver to also accept no_io_watchdog as a platform > data parameter. When no_io_watchdog is set to 1, the ehci controller will set > ehci->need_io_watchdog to 0. Since most EHCI controllers do need the I/O > watchdog to be on, only let those which need it to turn the watchdog off. > > Signed-off-by: Florian Fainelli > --- > Changes since v1: > - reworked patch to introduce "no_io_watchdog" instead of "need_io_watchdog" > - reworded commit message accordingly Very good except for one thing... > --- a/drivers/usb/host/ehci-platform.c > +++ b/drivers/usb/host/ehci-platform.c > @@ -32,6 +32,8 @@ static int ehci_platform_reset(struct usb_hcd *hcd) > ehci->has_synopsys_hc_bug = pdata->has_synopsys_hc_bug; > ehci->big_endian_desc = pdata->big_endian_desc; > ehci->big_endian_mmio = pdata->big_endian_mmio; > + if (pdata->no_io_watchdog) > + ehci->need_io_watchdog = 0; > > ehci->caps = hcd->regs + pdata->caps_offset; > retval = ehci_setup(hcd); ehci_setup calls ehci_init, which unconditionally sets need_io_watchdog. Your new "if" statement has to come after this call. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
fl1000 usb3 controller vanished
Hi all! Here's summary from bug 48331 (bugzilla.kernel.org) as requested. Hardware: Asus g74sx / i7-2, 3x USB2 ports, 1x USB3 port OS: openSUSE 11.4 with latest stable kernel (-> 3.6 atm) With the (old) distro kernel the USB3 port does not work at all. Started to work with 2.6.39 but now it seems broken and even does not show in lspci anymore. Some relevant sections from grepping /var/log/messages (sri for the line-wrapping!) https://bugzilla.kernel.org/show_bug.cgi?id=48331 We see some printouts about restoring the config space. Could something go wrong there? Kernel is a0d271cbfed1dd50278c6b06bead3d00ba0a88f9 / v3.6 . kernel config used for latest/running kernel build: https://bugzilla.kernel.org/attachment.cgi?id=82061 bzgrep xhci /var/log/messages*.bz2 (txt.gz) https://bugzilla.kernel.org/attachment.cgi?id=82071 dmesg from running system (kernel 3.6) https://bugzilla.kernel.org/attachment.cgi?id=82081 lspci -vv (kernel 3.6) https://bugzilla.kernel.org/attachment.cgi?id=82091 Best, Jan-Simon -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: MUSB regression in linux next at least for pandboard
Hi, On Thu, Oct 04, 2012 at 10:31:08AM -0700, Tony Lindgren wrote: > Hi Felipe & Kishon, > > Looks like musb is broken at least on pandaboard es > in current linux next while it works with v3.6: > > [1.933074] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host) > [1.939422] unable to find transceiver of type USB2 PHYrouping on. Total > pages: 251648 > [1.945190] HS USB OTG: no transceiver configured > [1.950134] musb-hdrc musb-hdrc.0: musb_init_controller failed with status > -19 > [1.958160] couldn't find an available UDC > > I do have CONFIG_OMAP_USB2 set. > > Note that we won't be able to flip omap4 over to be > device tree only probably until v3.9 because of the > bindings we're still missing from usability point of > view. So this regression should be fixed. I see. Kishon, can you cook a patch adding platform_data until we actually move to DT-only for OMAP4 ? > Also on the EHCI port, I've seen issues where unplugging > the cable hangs kernel with an infinite loop. But that happens > only occasionally, sorry does not seem to happen right > now so no output to paste here. Or maybe this issue > has already been fixed? Keshava, would you have time to look into this for this -rc cycle ? cheers -- balbi signature.asc Description: Digital signature
[PATCH] usb: dwc3: gadget: fix 'endpoint always busy' bug
If a USB transfer has already been started, meaning we have already issued StartTransfer command to that particular endpoint, DWC3_EP_BUSY flag has also already been set. When we try to cancel this transfer which is already in controller's cache, we will not receive XferComplete event and we must clear DWC3_EP_BUSY in order to allow subsequent requests to be properly started. The best place to clear that flag is right after issuing DWC3_DEPCMD_ENDTRANSFER. Cc: sta...@vger.kernel.org # v3.4 v3.5 v3.6 Reported-by: Moiz Sonasath Signed-off-by: Felipe Balbi --- If nobody has anything against this, I will line this up for v3.7-rc series once merge window is closed. cheers drivers/usb/dwc3/gadget.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index c9e729a..7b7dedd 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1904,7 +1904,7 @@ static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum) ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, ¶ms); WARN_ON_ONCE(ret); dep->resource_index = 0; - + dep->flags &= ~DWC3_EP_BUSY; udelay(100); } -- 1.8.0.rc0 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Dead lock in ehci hcd (3.5.3) with usb-serial adapters.
Alan and Greg, Appreciate your quick feedback. I guess even if I could fix dead lock with other APIs like spin_is_locked(), it will just make code convoluted. I don't think there is a solution either. Thanks lot for the help! On Thu, Oct 4, 2012 at 10:24 AM, Greg KH wrote: > On Thu, Oct 04, 2012 at 12:52:24PM -0400, Alan Stern wrote: >> On Thu, 4 Oct 2012, jx chang wrote: >> >> > Hi, all, >> > >> > Recently I get a dead lock in ehci_hcd and hope someone can look at my >> > analysis. >> > >> > The symptom is: >> > >> > When I set loglevel=8 in command line and set console=ttyUSB0, >> > 115200n8..., and connect a usb-serial adapter to my target device (a >> > tablet running kernel 3.5.3 with several other changes but I guess >> > ehci parts should be same as mainstream), the device is dead withing >> > several seconds after reboot. >> > >> > I wrote a small program in user space to dump to disk and enabled >> > several debug options in kernel configuration. >> > >> > The result is the dead lock caught in ehci_hcd as below backtrace >> > shows. My analysis is when a function driver submits a urb to ehci_hcd >> > in a process, it will finally grab the spin lock "ehci->lock" in >> > functions called by ehci_urb_enqueue() to do the job, but it seems >> > some lower layer will print out echi's debug information in the >> > further steps. If console is set to a usb-serial adapter and loglevel >> > is big enough to allow these debug messages out, the prink() just >> > output log to the user-serial module which should be a function driver >> > based on ehci_hcd stack. Then a new sequence of urb submitting starts >> > and calls the same ehci_urb_enqueue() again. The result is the same >> > process will try to get the ehci->lock it has held. >> > >> > Does my analysis make sense? any good solutions if it is so? >> >> Yep, that sounds right. >> >> The solution is: Don't do that! USB doesn't make for a very good >> console device (Greg KH is fond of pointing out that the original >> version was written late one night as the result of a drunken bet). >> >> The same deadlock will occur no matter which USB host controller driver >> you use, by the way. There's nothing special about ehci-hcd. > > Yes, I agree, never try to debug the USB subsystem, while using the USB > subsystem, doing that usually ends up in buffer overflows and endless > loops. > > greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
MUSB regression in linux next at least for pandboard
Hi Felipe & Kishon, Looks like musb is broken at least on pandaboard es in current linux next while it works with v3.6: [1.933074] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host) [1.939422] unable to find transceiver of type USB2 PHYrouping on. Total pages: 251648 [1.945190] HS USB OTG: no transceiver configured [1.950134] musb-hdrc musb-hdrc.0: musb_init_controller failed with status -19 [1.958160] couldn't find an available UDC I do have CONFIG_OMAP_USB2 set. Note that we won't be able to flip omap4 over to be device tree only probably until v3.9 because of the bindings we're still missing from usability point of view. So this regression should be fixed. Also on the EHCI port, I've seen issues where unplugging the cable hangs kernel with an infinite loop. But that happens only occasionally, sorry does not seem to happen right now so no output to paste here. Or maybe this issue has already been fixed? Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Dead lock in ehci hcd (3.5.3) with usb-serial adapters.
On Thu, Oct 04, 2012 at 12:52:24PM -0400, Alan Stern wrote: > On Thu, 4 Oct 2012, jx chang wrote: > > > Hi, all, > > > > Recently I get a dead lock in ehci_hcd and hope someone can look at my > > analysis. > > > > The symptom is: > > > > When I set loglevel=8 in command line and set console=ttyUSB0, > > 115200n8..., and connect a usb-serial adapter to my target device (a > > tablet running kernel 3.5.3 with several other changes but I guess > > ehci parts should be same as mainstream), the device is dead withing > > several seconds after reboot. > > > > I wrote a small program in user space to dump to disk and enabled > > several debug options in kernel configuration. > > > > The result is the dead lock caught in ehci_hcd as below backtrace > > shows. My analysis is when a function driver submits a urb to ehci_hcd > > in a process, it will finally grab the spin lock "ehci->lock" in > > functions called by ehci_urb_enqueue() to do the job, but it seems > > some lower layer will print out echi's debug information in the > > further steps. If console is set to a usb-serial adapter and loglevel > > is big enough to allow these debug messages out, the prink() just > > output log to the user-serial module which should be a function driver > > based on ehci_hcd stack. Then a new sequence of urb submitting starts > > and calls the same ehci_urb_enqueue() again. The result is the same > > process will try to get the ehci->lock it has held. > > > > Does my analysis make sense? any good solutions if it is so? > > Yep, that sounds right. > > The solution is: Don't do that! USB doesn't make for a very good > console device (Greg KH is fond of pointing out that the original > version was written late one night as the result of a drunken bet). > > The same deadlock will occur no matter which USB host controller driver > you use, by the way. There's nothing special about ehci-hcd. Yes, I agree, never try to debug the USB subsystem, while using the USB subsystem, doing that usually ends up in buffer overflows and endless loops. greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4] Enable USB peripheral on dm365 EVM
On Thu, Oct 04, 2012 at 06:22:33PM +0200, Constantine Shulyupin wrote: > From: Constantine Shulyupin > > Signed-off-by: Constantine Shulyupin > --- > > Note: > > USBPHY_CTL_PADDR and USBPHY_CLKFREQ_24MHZ are defined in board-dm365-evm.c > because davinci.h can't be included from drivers/usb/musb/. May be davinci.h > should be renamed and moved to arch/arm/mach-davinci/include/mach/usb.h like > arch/arm/plat-omap/include/plat/usb.h > > Tested with usb gadget g_zero. > > Changelog > > Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html: > - removed optional altering of pr_info > > Changes since v2 http://article.gmane.org/gmane.linux.kernel/1159868/ > - reordered code > - removed alternation of GPIO33, which is multiplexed with DRVVBUS, because > is not need for peripheral USB > > Changes since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2: > - removed optional code and reordered > > This patch is based on code from Arago, Angstom, and RidgeRun projects. > Original patch by miguel.agui...@ridgerun.com is three years ago: > - > http://www.mail-archive.com/davinci-linux-open-source@linux.davincidsp.com/msg14741.html Almost all of the information you put below the --- line here, should be above it, saying where the code originally came from, and most importantly, what exactly this patch does, and for what hardware. Your one-line Subject really isn't that descriptive at all. > --- a/drivers/usb/musb/musb_core.c > +++ b/drivers/usb/musb/musb_core.c > @@ -2051,9 +2051,17 @@ musb_init_controller(struct device *dev, int nIrq, > void __iomem *ctrl) > dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n", > ({char *s; >switch (musb->board_mode) { > - case MUSB_HOST:s = "Host"; break; > - case MUSB_PERIPHERAL: s = "Peripheral"; break; > - default: s = "OTG"; break; > + case MUSB_HOST: > + s = "Host"; > + break; > + case MUSB_PERIPHERAL: > + s = "Peripheral"; > + break; > + case MUSB_OTG: > + s = "OTG"; > + break; > + default: > + s = "Undefined"; Is this change really needed to get your hardware working? Shouldn't it be a separate patch? greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/1] musb : remove generic_interrupt and have all drivers define the isr on their own. Remove some unneeded CONFIG_SOC_OMAP_3430 instances
This patch is based on the discussion of a previous patch to fix an issue where the omap2430 musb driver is not working for N9/N950. Moving all the interrupt handling to the devices. Avoids inclusion of generic interrupt and breakage due to sometimes misleading CONFIG options. This makes sure usb always works if on of the subdrivers is chosen. Tested on Nokia N9/N950. Partially clean up CONFIG_SOC_OMAP3430 which is not necessary in the cases where I removed it. Also helps with the removal work of those options that Tony Lindgren predicted would happen at some point. Signed-off-by: Philippe De Swert --- drivers/usb/musb/musb_core.c | 31 ++- drivers/usb/musb/musbhsdma.h |4 drivers/usb/musb/omap2430.c | 22 ++ drivers/usb/musb/ux500.c | 22 ++ 4 files changed, 46 insertions(+), 33 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 26f1bef..37c770e 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -1498,33 +1498,6 @@ static int __devinit musb_core_init(u16 musb_type, struct musb *musb) /*-*/ -#if defined(CONFIG_SOC_OMAP2430) || defined(CONFIG_SOC_OMAP3430) || \ - defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_ARCH_U8500) - -static irqreturn_t generic_interrupt(int irq, void *__hci) -{ - unsigned long flags; - irqreturn_t retval = IRQ_NONE; - struct musb *musb = __hci; - - spin_lock_irqsave(&musb->lock, flags); - - musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); - musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); - musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); - - if (musb->int_usb || musb->int_tx || musb->int_rx) - retval = musb_interrupt(musb); - - spin_unlock_irqrestore(&musb->lock, flags); - - return retval; -} - -#else -#define generic_interrupt NULL -#endif - /* * handle all the irqs defined by the HDRC core. for now we expect: other * irq sources (phy, dma, etc) will be handled first, musb->int_* values @@ -1907,7 +1880,8 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) musb->ops = plat->platform_ops; /* The musb_platform_init() call: -* - adjusts musb->mregs and musb->isr if needed, +* - adjusts musb->mregs +* - sets the musb->isr * - may initialize an integrated tranceiver * - initializes musb->xceiv, usually by otg_get_phy() * - stops powering VBUS @@ -1917,7 +1891,6 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) * external/discrete ones in various flavors (twl4030 family, * isp1504, non-OTG, etc) mostly hooking up through ULPI. */ - musb->isr = generic_interrupt; status = musb_platform_init(musb); if (status < 0) goto fail1; diff --git a/drivers/usb/musb/musbhsdma.h b/drivers/usb/musb/musbhsdma.h index 320fd4a..f7b13fd2 100644 --- a/drivers/usb/musb/musbhsdma.h +++ b/drivers/usb/musb/musbhsdma.h @@ -31,10 +31,6 @@ * */ -#if defined(CONFIG_SOC_OMAP2430) || defined(CONFIG_SOC_OMAP3430) -#include "omap2430.h" -#endif - #ifndef CONFIG_BLACKFIN #define MUSB_HSDMA_BASE0x200 diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index 5fdb9da..c63aea8 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c @@ -306,6 +306,26 @@ static void omap_musb_mailbox_work(struct work_struct *mailbox_work) omap_musb_set_mailbox(glue); } +static irqreturn_t omap2430_musb_interrupt(int irq, void *__hci) +{ + unsigned long flags; + irqreturn_t retval = IRQ_NONE; + struct musb *musb = __hci; + + spin_lock_irqsave(&musb->lock, flags); + + musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); + musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); + musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); + + if (musb->int_usb || musb->int_tx || musb->int_rx) + retval = musb_interrupt(musb); + + spin_unlock_irqrestore(&musb->lock, flags); + + return retval; +} + static int omap2430_musb_init(struct musb *musb) { u32 l; @@ -325,6 +345,8 @@ static int omap2430_musb_init(struct musb *musb) return -ENODEV; } + musb->isr = omap2430_musb_interrupt; + status = pm_runtime_get_sync(dev); if (status < 0) { dev_err(dev, "pm_runtime_get_sync FAILED %d\n", status); diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c index a8c0fad..bce5574 100644 --- a/drivers/usb/musb/ux500.c +++ b/drivers/usb/musb/ux500.c @@ -36,6 +36,26 @@ struct ux500_glue { }; #define glue_to_musb(g)platform_get_drvdata(g->musb) +static irqreturn_t ux500_musb_interr
Re: Dead lock in ehci hcd (3.5.3) with usb-serial adapters.
On Thu, 4 Oct 2012, jx chang wrote: > Hi, all, > > Recently I get a dead lock in ehci_hcd and hope someone can look at my > analysis. > > The symptom is: > > When I set loglevel=8 in command line and set console=ttyUSB0, > 115200n8..., and connect a usb-serial adapter to my target device (a > tablet running kernel 3.5.3 with several other changes but I guess > ehci parts should be same as mainstream), the device is dead withing > several seconds after reboot. > > I wrote a small program in user space to dump to disk and enabled > several debug options in kernel configuration. > > The result is the dead lock caught in ehci_hcd as below backtrace > shows. My analysis is when a function driver submits a urb to ehci_hcd > in a process, it will finally grab the spin lock "ehci->lock" in > functions called by ehci_urb_enqueue() to do the job, but it seems > some lower layer will print out echi's debug information in the > further steps. If console is set to a usb-serial adapter and loglevel > is big enough to allow these debug messages out, the prink() just > output log to the user-serial module which should be a function driver > based on ehci_hcd stack. Then a new sequence of urb submitting starts > and calls the same ehci_urb_enqueue() again. The result is the same > process will try to get the ehci->lock it has held. > > Does my analysis make sense? any good solutions if it is so? Yep, that sounds right. The solution is: Don't do that! USB doesn't make for a very good console device (Greg KH is fond of pointing out that the original version was written late one night as the result of a drunken bet). The same deadlock will occur no matter which USB host controller driver you use, by the way. There's nothing special about ehci-hcd. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v4] Enable USB peripheral on dm365 EVM
From: Constantine Shulyupin Signed-off-by: Constantine Shulyupin --- Note: USBPHY_CTL_PADDR and USBPHY_CLKFREQ_24MHZ are defined in board-dm365-evm.c because davinci.h can't be included from drivers/usb/musb/. May be davinci.h should be renamed and moved to arch/arm/mach-davinci/include/mach/usb.h like arch/arm/plat-omap/include/plat/usb.h Tested with usb gadget g_zero. Changelog Changes since v3 http://www.spinics.net/lists/kernel/msg1412544.html: - removed optional altering of pr_info Changes since v2 http://article.gmane.org/gmane.linux.kernel/1159868/ - reordered code - removed alternation of GPIO33, which is multiplexed with DRVVBUS, because is not need for peripheral USB Changes since v1 http://marc.info/?l=linux-kernel&m=130894150803661&w=2: - removed optional code and reordered This patch is based on code from Arago, Angstom, and RidgeRun projects. Original patch by miguel.agui...@ridgerun.com is three years ago: - http://www.mail-archive.com/davinci-linux-open-source@linux.davincidsp.com/msg14741.html --- arch/arm/mach-davinci/board-dm365-evm.c |8 arch/arm/mach-davinci/usb.c |2 ++ drivers/usb/musb/davinci.h |1 + drivers/usb/musb/musb_core.c| 20 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index 3a4743b..dfcb67f 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c @@ -38,6 +38,8 @@ #include #include #include +#include +#include #include @@ -92,6 +94,9 @@ static inline int have_tvp7002(void) #define CPLD_CCD_DIR3 CPLD_OFFSET(0x3f,0) #define CPLD_CCD_IO3 CPLD_OFFSET(0x3f,1) +#define USBPHY_CTL_PADDR 0x01c40034 +#define USBPHY_CLKFREQ_24MHZ BIT(13) + static void __iomem *cpld; @@ -613,6 +618,9 @@ static __init void dm365_evm_init(void) dm365_init_spi0(BIT(0), dm365_evm_spi_info, ARRAY_SIZE(dm365_evm_spi_info)); + writel(readl(IO_ADDRESS(USBPHY_CTL_PADDR)) | USBPHY_CLKFREQ_24MHZ, + IO_ADDRESS(USBPHY_CTL_PADDR)); + davinci_setup_usb(500, 8); } MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM") diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c index 23d2b6d..664c689 100644 --- a/arch/arm/mach-davinci/usb.c +++ b/arch/arm/mach-davinci/usb.c @@ -49,6 +49,8 @@ static struct musb_hdrc_platform_data usb_data = { .mode = MUSB_PERIPHERAL, #elif defined(CONFIG_USB_MUSB_HOST) .mode = MUSB_HOST, +#else + .mode = MUSB_OTG, #endif .clock = "usb", .config = &musb_config, diff --git a/drivers/usb/musb/davinci.h b/drivers/usb/musb/davinci.h index 371baa0..e737d97 100644 --- a/drivers/usb/musb/davinci.h +++ b/drivers/usb/musb/davinci.h @@ -16,6 +16,7 @@ /* Integrated highspeed/otg PHY */ #define USBPHY_CTL_PADDR 0x01c40034 +#define USBPHY_CLKFREQ_24MHZ BIT(13) #define USBPHY_DATAPOL BIT(11) /* (dm355) switch D+/D- */ #define USBPHY_PHYCLKGDBIT(8) #define USBPHY_SESNDEN BIT(7) /* v(sess_end) comparator */ diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 26f1bef..277fe65 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -2051,9 +2051,17 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) dev_info(dev, "USB %s mode controller at %p using %s, IRQ %d\n", ({char *s; switch (musb->board_mode) { -case MUSB_HOST:s = "Host"; break; -case MUSB_PERIPHERAL: s = "Peripheral"; break; -default: s = "OTG"; break; +case MUSB_HOST: + s = "Host"; +break; +case MUSB_PERIPHERAL: + s = "Peripheral"; +break; +case MUSB_OTG: + s = "OTG"; +break; +default: + s = "Undefined"; }; s; }), ctrl, (is_dma_capable() && musb->dma_controller) -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 03/24 v2] USB: EHCI: remove Loongson 1B EHCI driver.
The platform code registering the Loongson 1B EHCI driver has now been converted to register the ehci-platform driver instead, thus obsoleting the ehci-ls1x driver, which can be removed. Signed-off-by: Florian Fainelli --- Changes since v1: - reworded commit message drivers/usb/host/ehci-hcd.c |5 -- drivers/usb/host/ehci-ls1x.c | 147 -- 2 files changed, 152 deletions(-) delete mode 100644 drivers/usb/host/ehci-ls1x.c diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 442f774..2f517d9 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -1319,11 +1319,6 @@ MODULE_LICENSE ("GPL"); #definePLATFORM_DRIVER ehci_mv_driver #endif -#ifdef CONFIG_MACH_LOONGSON1 -#include "ehci-ls1x.c" -#define PLATFORM_DRIVERehci_ls1x_driver -#endif - #ifdef CONFIG_MIPS_SEAD3 #include "ehci-sead3.c" #definePLATFORM_DRIVER ehci_hcd_sead3_driver diff --git a/drivers/usb/host/ehci-ls1x.c b/drivers/usb/host/ehci-ls1x.c deleted file mode 100644 index ca75965..000 --- a/drivers/usb/host/ehci-ls1x.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Bus Glue for Loongson LS1X built-in EHCI controller. - * - * Copyright (c) 2012 Zhang, Keguang - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - - -#include - -static int ehci_ls1x_reset(struct usb_hcd *hcd) -{ - struct ehci_hcd *ehci = hcd_to_ehci(hcd); - int ret; - - ehci->caps = hcd->regs; - - ret = ehci_setup(hcd); - if (ret) - return ret; - - ehci_port_power(ehci, 0); - - return 0; -} - -static const struct hc_driver ehci_ls1x_hc_driver = { - .description= hcd_name, - .product_desc = "LOONGSON1 EHCI", - .hcd_priv_size = sizeof(struct ehci_hcd), - - /* -* generic hardware linkage -*/ - .irq= ehci_irq, - .flags = HCD_MEMORY | HCD_USB2, - - /* -* basic lifecycle operations -*/ - .reset = ehci_ls1x_reset, - .start = ehci_run, - .stop = ehci_stop, - .shutdown = ehci_shutdown, - - /* -* managing i/o requests and associated device resources -*/ - .urb_enqueue= ehci_urb_enqueue, - .urb_dequeue= ehci_urb_dequeue, - .endpoint_disable = ehci_endpoint_disable, - .endpoint_reset = ehci_endpoint_reset, - - /* -* scheduling support -*/ - .get_frame_number = ehci_get_frame, - - /* -* root hub support -*/ - .hub_status_data= ehci_hub_status_data, - .hub_control= ehci_hub_control, - .relinquish_port= ehci_relinquish_port, - .port_handed_over = ehci_port_handed_over, - - .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, -}; - -static int ehci_hcd_ls1x_probe(struct platform_device *pdev) -{ - struct usb_hcd *hcd; - struct resource *res; - int irq; - int ret; - - pr_debug("initializing loongson1 ehci USB Controller\n"); - - if (usb_disabled()) - return -ENODEV; - - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!res) { - dev_err(&pdev->dev, - "Found HC with no IRQ. Check %s setup!\n", - dev_name(&pdev->dev)); - return -ENODEV; - } - irq = res->start; - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(&pdev->dev, - "Found HC with no register addr. Check %s setup!\n", - dev_name(&pdev->dev)); - return -ENODEV; - } - - hcd = usb_create_hcd(&ehci_ls1x_hc_driver, &pdev->dev, - dev_name(&pdev->dev)); - if (!hcd) - return -ENOMEM; - hcd->rsrc_start = res->start; - hcd->rsrc_len = resource_size(res); - - hcd->regs = devm_request_and_ioremap(&pdev->dev, res); - if (hcd->regs == NULL) { - dev_dbg(&pdev->dev, "error mapping memory\n"); - ret = -EFAULT; - goto err_put_hcd; - } - - ret = usb_add_hcd(hcd, irq, IRQF_SHARED); - if (ret) - goto err_put_hcd; - - return ret; - -err_put_hcd: - usb_put_hcd(hcd); - return ret; -} - -static int ehci_hcd_ls1x_remove(struct platform_device *pdev) -{ - struct usb_hcd *hcd = platform_get_drvdata(pdev); - - usb_remove_hcd(hcd); - usb_put_hcd(hcd); - - return 0; -} - -static struct platform_driver ehci_ls1x_driver =
[PATCH 06/24 v2] USB: EHCI: add no_io_watchdog platform_data parameter to ehci-platform
Enhance the ehci-platform driver to also accept no_io_watchdog as a platform data parameter. When no_io_watchdog is set to 1, the ehci controller will set ehci->need_io_watchdog to 0. Since most EHCI controllers do need the I/O watchdog to be on, only let those which need it to turn the watchdog off. Signed-off-by: Florian Fainelli --- Changes since v1: - reworked patch to introduce "no_io_watchdog" instead of "need_io_watchdog" - reworded commit message accordingly drivers/usb/host/ehci-platform.c |2 ++ include/linux/usb/ehci_pdriver.h |3 +++ 2 files changed, 5 insertions(+) diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c index 764e010..83b486e 100644 --- a/drivers/usb/host/ehci-platform.c +++ b/drivers/usb/host/ehci-platform.c @@ -32,6 +32,8 @@ static int ehci_platform_reset(struct usb_hcd *hcd) ehci->has_synopsys_hc_bug = pdata->has_synopsys_hc_bug; ehci->big_endian_desc = pdata->big_endian_desc; ehci->big_endian_mmio = pdata->big_endian_mmio; + if (pdata->no_io_watchdog) + ehci->need_io_watchdog = 0; ehci->caps = hcd->regs + pdata->caps_offset; retval = ehci_setup(hcd); diff --git a/include/linux/usb/ehci_pdriver.h b/include/linux/usb/ehci_pdriver.h index c9d09f8..67ac74b 100644 --- a/include/linux/usb/ehci_pdriver.h +++ b/include/linux/usb/ehci_pdriver.h @@ -29,6 +29,8 @@ * initialization. * @port_power_off:set to 1 if the controller needs to be powered down * after initialization. + * @no_io_watchdog:set to 1 if the controller does not need the I/O + * watchdog to run. * * These are general configuration options for the EHCI controller. All of * these options are activating more or less workarounds for some hardware. @@ -41,6 +43,7 @@ struct usb_ehci_pdata { unsignedbig_endian_mmio:1; unsignedport_power_on:1; unsignedport_power_off:1; + unsignedno_io_watchdog:1; /* Turn on all power and clocks */ int (*power_on)(struct platform_device *pdev); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 09/24 v2] ARM: cns3xxx: use ehci platform driver
Signed-off-by: Florian Fainelli --- No change since v1 arch/arm/mach-cns3xxx/cns3420vb.c | 44 - 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-cns3xxx/cns3420vb.c b/arch/arm/mach-cns3xxx/cns3420vb.c index 2c5fb4c..906094c 100644 --- a/arch/arm/mach-cns3xxx/cns3420vb.c +++ b/arch/arm/mach-cns3xxx/cns3420vb.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -32,6 +33,7 @@ #include #include #include +#include #include "core.h" #include "devices.h" @@ -125,13 +127,53 @@ static struct resource cns3xxx_usb_ehci_resources[] = { static u64 cns3xxx_usb_ehci_dma_mask = DMA_BIT_MASK(32); +static int csn3xxx_usb_ehci_power_on(struct platform_device *pdev) +{ + /* +* EHCI and OHCI share the same clock and power, +* resetting twice would cause the 1st controller been reset. +* Therefore only do power up at the first up device, and +* power down at the last down device. +* +* Set USB AHB INCR length to 16 +*/ + if (atomic_inc_return(&usb_pwr_ref) == 1) { + cns3xxx_pwr_power_up(1 << PM_PLL_HM_PD_CTRL_REG_OFFSET_PLL_USB); + cns3xxx_pwr_clk_en(1 << PM_CLK_GATE_REG_OFFSET_USB_HOST); + cns3xxx_pwr_soft_rst(1 << PM_SOFT_RST_REG_OFFST_USB_HOST); + __raw_writel((__raw_readl(MISC_CHIP_CONFIG_REG) | (0X2 << 24)), + MISC_CHIP_CONFIG_REG); + } + + return 0; +} + +static void csn3xxx_usb_ehci_power_off(struct platform_device *pdev) +{ + /* +* EHCI and OHCI share the same clock and power, +* resetting twice would cause the 1st controller been reset. +* Therefore only do power up at the first up device, and +* power down at the last down device. +*/ + if (atomic_dec_return(&usb_pwr_ref) == 0) + cns3xxx_pwr_clk_dis(1 << PM_CLK_GATE_REG_OFFSET_USB_HOST); +} + +static struct usb_ehci_pdata cns3xxx_usb_ehci_pdata = { + .port_power_off = 1, + .power_on = csn3xxx_usb_ehci_power_on, + .power_off = csn3xxx_usb_ehci_power_off, +}; + static struct platform_device cns3xxx_usb_ehci_device = { - .name = "cns3xxx-ehci", + .name = "ehci-platform", .num_resources = ARRAY_SIZE(cns3xxx_usb_ehci_resources), .resource = cns3xxx_usb_ehci_resources, .dev = { .dma_mask = &cns3xxx_usb_ehci_dma_mask, .coherent_dma_mask = DMA_BIT_MASK(32), + .platform_data = &cns3xxx_usb_ehci_pdata, }, }; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 13/24] USB: ohci: remove check for RH already suspended in ohci_suspend
As suggested by Alan Stern, the code checking for the OHCI Root Hub already suspended is no longer required since the bug it fixes has not been seen in ages, remove that check making ohci_suspend much simpler. Signed-off-by: Florian Fainelli --- drivers/usb/host/ohci-hcd.c | 11 ++- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 0cba8d6..5d30992 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -985,26 +985,19 @@ static int __maybe_unused ohci_suspend(struct usb_hcd *hcd, bool do_wakeup) { struct ohci_hcd *ohci = hcd_to_ohci (hcd); unsigned long flags; - int rc = 0; - /* Root hub was already suspended. Disable irq emission and -* mark HW unaccessible, bail out if RH has been resumed. Use + /* Disable irq emission and mark HW unaccessible. Use * the spinlock to properly synchronize with possible pending * RH suspend or resume activity. */ spin_lock_irqsave (&ohci->lock, flags); - if (ohci->rh_state != OHCI_RH_SUSPENDED) { - rc = -EINVAL; - goto bail; - } ohci_writel(ohci, OHCI_INTR_MIE, &ohci->regs->intrdisable); (void)ohci_readl(ohci, &ohci->regs->intrdisable); clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); - bail: spin_unlock_irqrestore (&ohci->lock, flags); - return rc; + return 0; } -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 12/24] USB: ohci: move ohci_pci_{suspend,resume} to ohci-hcd.c
As suggested by Alan Stern, move the ohci-pci.c ohci_pci_{suspend,resume} routines to ohci-hcd.c. Due to their move, also rename them to ohci_{suspend,resume} to make it clear they operate on ohci_hcd. Since they are not necessarily called, annotate them with __maybe_unused. Signed-off-by: Florian Fainelli --- drivers/usb/host/ohci-hcd.c | 39 +++ drivers/usb/host/ohci-pci.c | 43 ++- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 2b1e8d8..0cba8d6 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -981,6 +981,45 @@ static int ohci_restart (struct ohci_hcd *ohci) return 0; } +static int __maybe_unused ohci_suspend(struct usb_hcd *hcd, bool do_wakeup) +{ + struct ohci_hcd *ohci = hcd_to_ohci (hcd); + unsigned long flags; + int rc = 0; + + /* Root hub was already suspended. Disable irq emission and +* mark HW unaccessible, bail out if RH has been resumed. Use +* the spinlock to properly synchronize with possible pending +* RH suspend or resume activity. +*/ + spin_lock_irqsave (&ohci->lock, flags); + if (ohci->rh_state != OHCI_RH_SUSPENDED) { + rc = -EINVAL; + goto bail; + } + ohci_writel(ohci, OHCI_INTR_MIE, &ohci->regs->intrdisable); + (void)ohci_readl(ohci, &ohci->regs->intrdisable); + + clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); + bail: + spin_unlock_irqrestore (&ohci->lock, flags); + + return rc; +} + + +static int __maybe_unused ohci_resume(struct usb_hcd *hcd, bool hibernated) +{ + set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); + + /* Make sure resume from hibernation re-enumerates everything */ + if (hibernated) + ohci_usb_reset(hcd_to_ohci(hcd)); + + ohci_finish_controller_resume(hcd); + return 0; +} + #endif /*-*/ diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c index 1843bb6..926f08b 100644 --- a/drivers/usb/host/ohci-pci.c +++ b/drivers/usb/host/ohci-pci.c @@ -298,45 +298,6 @@ static int __devinit ohci_pci_start (struct usb_hcd *hcd) #ifdef CONFIG_PM -static int ohci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup) -{ - struct ohci_hcd *ohci = hcd_to_ohci (hcd); - unsigned long flags; - int rc = 0; - - /* Root hub was already suspended. Disable irq emission and -* mark HW unaccessible, bail out if RH has been resumed. Use -* the spinlock to properly synchronize with possible pending -* RH suspend or resume activity. -*/ - spin_lock_irqsave (&ohci->lock, flags); - if (ohci->rh_state != OHCI_RH_SUSPENDED) { - rc = -EINVAL; - goto bail; - } - ohci_writel(ohci, OHCI_INTR_MIE, &ohci->regs->intrdisable); - (void)ohci_readl(ohci, &ohci->regs->intrdisable); - - clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); - bail: - spin_unlock_irqrestore (&ohci->lock, flags); - - return rc; -} - - -static int ohci_pci_resume(struct usb_hcd *hcd, bool hibernated) -{ - set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); - - /* Make sure resume from hibernation re-enumerates everything */ - if (hibernated) - ohci_usb_reset(hcd_to_ohci(hcd)); - - ohci_finish_controller_resume(hcd); - return 0; -} - #endif /* CONFIG_PM */ @@ -362,8 +323,8 @@ static const struct hc_driver ohci_pci_hc_driver = { .shutdown = ohci_shutdown, #ifdef CONFIG_PM - .pci_suspend = ohci_pci_suspend, - .pci_resume = ohci_pci_resume, + .pci_suspend = ohci_suspend, + .pci_resume = ohci_resume, #endif /* -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 15/24 v2] MIPS: PNX8550: use OHCI platform driver
Signed-off-by: Florian Fainelli --- No changes since v1 arch/mips/pnx8550/common/platform.c | 31 ++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/arch/mips/pnx8550/common/platform.c b/arch/mips/pnx8550/common/platform.c index 5264cc0..0a8faea 100644 --- a/arch/mips/pnx8550/common/platform.c +++ b/arch/mips/pnx8550/common/platform.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -96,12 +97,40 @@ static u64 ohci_dmamask = DMA_BIT_MASK(32); static u64 uart_dmamask = DMA_BIT_MASK(32); +static int pnx8550_usb_ohci_power_on(struct platform_device *pdev) +{ + /* +* Set register CLK48CTL to enable and 48MHz +*/ + outl(0x0003, PCI_BASE | 0x0004770c); + + /* +* Set register CLK12CTL to enable and 48MHz +*/ + outl(0x0003, PCI_BASE | 0x00047710); + + udelay(100); + + return 0; +} + +static void pnx8550_usb_ohci_power_off(struct platform_device *pdev) +{ + udelay(10); +} + +static struct usb_ohci_pdata pnx8550_usb_ohci_pdata = { + .power_on = pnx8550_usb_ohci_power_on, + .power_off = pnx8550_usb_ohci_power_off, +}; + static struct platform_device pnx8550_usb_ohci_device = { - .name = "pnx8550-ohci", + .name = "ohci-platform", .id = -1, .dev = { .dma_mask = &ohci_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), + .platform_data = &pnx8550_usb_ohci_pdata, }, .num_resources = ARRAY_SIZE(pnx8550_usb_ohci_resources), .resource = pnx8550_usb_ohci_resources, -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 07/24 v2] MIPS: Alchemy: use the ehci platform driver
Use the ehci platform driver power_{on,suspend,off} callbacks to perform the USB block gate enabling/disabling as what the ehci-au1xxx.c driver does. Update the db1200 and db1300 defconfigs to now select the EHCI platform driver. Signed-off-by: Florian Fainelli --- Changes since v1: - update impacted alchemy defconfigs accordingly arch/mips/alchemy/common/platform.c | 23 ++- arch/mips/configs/db1200_defconfig |1 + arch/mips/configs/db1300_defconfig |1 + 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/arch/mips/alchemy/common/platform.c b/arch/mips/alchemy/common/platform.c index c0f3ce6..b9a5f6d 100644 --- a/arch/mips/alchemy/common/platform.c +++ b/arch/mips/alchemy/common/platform.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -122,6 +123,25 @@ static void __init alchemy_setup_uarts(int ctype) static u64 alchemy_ohci_dmamask = DMA_BIT_MASK(32); static u64 __maybe_unused alchemy_ehci_dmamask = DMA_BIT_MASK(32); +/* Power on callback for the ehci platform driver */ +static int alchemy_ehci_power_on(struct platform_device *pdev) +{ + return alchemy_usb_control(ALCHEMY_USB_EHCI0, 1); +} + +/* Power off/suspend callback for the ehci platform driver */ +static void alchemy_ehci_power_off(struct platform_device *pdev) +{ + alchemy_usb_control(ALCHEMY_USB_EHCI0, 0); +} + +static struct usb_ehci_pdata alchemy_ehci_pdata = { + .no_io_watchdog = 1, + .power_on = alchemy_ehci_power_on, + .power_off = alchemy_ehci_power_off, + .power_suspend = alchemy_ehci_power_off, +}; + static unsigned long alchemy_ohci_data[][2] __initdata = { [ALCHEMY_CPU_AU1000] = { AU1000_USB_OHCI_PHYS_ADDR, AU1000_USB_HOST_INT }, [ALCHEMY_CPU_AU1500] = { AU1000_USB_OHCI_PHYS_ADDR, AU1500_USB_HOST_INT }, @@ -188,9 +208,10 @@ static void __init alchemy_setup_usb(int ctype) res[1].start = alchemy_ehci_data[ctype][1]; res[1].end = res[1].start; res[1].flags = IORESOURCE_IRQ; - pdev->name = "au1xxx-ehci"; + pdev->name = "ehci-platform"; pdev->id = 0; pdev->dev.dma_mask = &alchemy_ehci_dmamask; + pdev->dev.platform_data = &alchemy_ehci_pdata; if (platform_device_register(pdev)) printk(KERN_INFO "Alchemy USB: cannot add EHCI0\n"); diff --git a/arch/mips/configs/db1200_defconfig b/arch/mips/configs/db1200_defconfig index 1f69249..d31ac85 100644 --- a/arch/mips/configs/db1200_defconfig +++ b/arch/mips/configs/db1200_defconfig @@ -117,6 +117,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # CONFIG_USB_DEVICE_CLASS is not set CONFIG_USB_DYNAMIC_MINORS=y CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_OHCI_HCD=y CONFIG_MMC=y diff --git a/arch/mips/configs/db1300_defconfig b/arch/mips/configs/db1300_defconfig index 3590ab5..717e7b2 100644 --- a/arch/mips/configs/db1300_defconfig +++ b/arch/mips/configs/db1300_defconfig @@ -288,6 +288,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y CONFIG_USB=y CONFIG_USB_DYNAMIC_MINORS=y CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y CONFIG_USB_OHCI_HCD=y -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 05/24 v2] USB: EHCI: remove Netlogic XLS EHCI driver
The platform code has been migrated to register the ehci-platform driver, thus obsoleting the ehci-xls driver, which can be removed. Signed-off-by: Florian Fainelli --- Changes since v1: - reworded commit message drivers/usb/host/ehci-hcd.c |5 -- drivers/usb/host/ehci-xls.c | 142 --- 2 files changed, 147 deletions(-) delete mode 100644 drivers/usb/host/ehci-xls.c diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 2f517d9..f2a9982 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -1309,11 +1309,6 @@ MODULE_LICENSE ("GPL"); #define PLATFORM_DRIVERehci_grlib_driver #endif -#ifdef CONFIG_CPU_XLR -#include "ehci-xls.c" -#define PLATFORM_DRIVERehci_xls_driver -#endif - #ifdef CONFIG_USB_EHCI_MV #include "ehci-mv.c" #definePLATFORM_DRIVER ehci_mv_driver diff --git a/drivers/usb/host/ehci-xls.c b/drivers/usb/host/ehci-xls.c deleted file mode 100644 index 8dc6a22..000 --- a/drivers/usb/host/ehci-xls.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * EHCI HCD for Netlogic XLS processors. - * - * (C) Copyright 2011 Netlogic Microsystems Inc. - * - * Based on various ehci-*.c drivers - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include - -static int ehci_xls_setup(struct usb_hcd *hcd) -{ - struct ehci_hcd *ehci = hcd_to_ehci(hcd); - - ehci->caps = hcd->regs; - - return ehci_setup(hcd); -} - -int ehci_xls_probe_internal(const struct hc_driver *driver, - struct platform_device *pdev) -{ - struct usb_hcd *hcd; - struct resource *res; - int retval, irq; - - /* Get our IRQ from an earlier registered Platform Resource */ - irq = platform_get_irq(pdev, 0); - if (irq < 0) { - dev_err(&pdev->dev, "Found HC with no IRQ. Check %s setup!\n", - dev_name(&pdev->dev)); - return -ENODEV; - } - - /* Get our Memory Handle */ - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(&pdev->dev, "Error: MMIO Handle %s setup!\n", - dev_name(&pdev->dev)); - return -ENODEV; - } - hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev)); - if (!hcd) { - retval = -ENOMEM; - goto err1; - } - - hcd->rsrc_start = res->start; - hcd->rsrc_len = resource_size(res); - - if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, - driver->description)) { - dev_dbg(&pdev->dev, "controller already in use\n"); - retval = -EBUSY; - goto err2; - } - hcd->regs = ioremap_nocache(hcd->rsrc_start, hcd->rsrc_len); - - if (hcd->regs == NULL) { - dev_dbg(&pdev->dev, "error mapping memory\n"); - retval = -EFAULT; - goto err3; - } - - retval = usb_add_hcd(hcd, irq, IRQF_SHARED); - if (retval != 0) - goto err4; - return retval; - -err4: - iounmap(hcd->regs); -err3: - release_mem_region(hcd->rsrc_start, hcd->rsrc_len); -err2: - usb_put_hcd(hcd); -err1: - dev_err(&pdev->dev, "init %s fail, %d\n", dev_name(&pdev->dev), - retval); - return retval; -} - -static struct hc_driver ehci_xls_hc_driver = { - .description= hcd_name, - .product_desc = "XLS EHCI Host Controller", - .hcd_priv_size = sizeof(struct ehci_hcd), - .irq= ehci_irq, - .flags = HCD_USB2 | HCD_MEMORY, - .reset = ehci_xls_setup, - .start = ehci_run, - .stop = ehci_stop, - .shutdown = ehci_shutdown, - - .urb_enqueue= ehci_urb_enqueue, - .urb_dequeue= ehci_urb_dequeue, - .endpoint_disable = ehci_endpoint_disable, - .endpoint_reset = ehci_endpoint_reset, - - .get_frame_number = ehci_get_frame, - - .hub_status_data = ehci_hub_status_data, - .hub_control= ehci_hub_control, - .bus_suspend= ehci_bus_suspend, - .bus_resume = ehci_bus_resume, - .relinquish_port = ehci_relinquish_port, - .port_handed_over = ehci_port_handed_over, - - .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, -}; - -static int ehci_xls_probe(struct platform_device *pdev) -{ - if (usb_disabled()) - return -ENODEV; - - return ehci_xls_probe_internal(&ehci_xls_hc_driver, pdev); -} - -static int ehci_xls_remove(struct platform_device *pdev) -{ - struct usb_hcd *hcd = platform_get_drvdata(pdev); - - usb_remove_hcd(hcd); - iounmap(hcd->regs); - release_mem_region(hcd->rsrc_start, hcd-
[PATCH 02/24 v2] MIPS: Loongson 1B: use ehci-platform instead of ehci-ls1x.
The Loongson 1B EHCI driver does nothing more than what the EHCI platform driver already does, so use the generic implementation. Signed-off-by: Florian Fainelli --- No changes since v1 arch/mips/configs/ls1b_defconfig |1 + arch/mips/loongson1/common/platform.c |8 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/mips/configs/ls1b_defconfig b/arch/mips/configs/ls1b_defconfig index 80cff8b..7eb7554 100644 --- a/arch/mips/configs/ls1b_defconfig +++ b/arch/mips/configs/ls1b_defconfig @@ -76,6 +76,7 @@ CONFIG_HID_GENERIC=m CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y # CONFIG_USB_EHCI_TT_NEWSCHED is not set CONFIG_USB_STORAGE=m CONFIG_USB_SERIAL=m diff --git a/arch/mips/loongson1/common/platform.c b/arch/mips/loongson1/common/platform.c index e92d59c..2874bf2 100644 --- a/arch/mips/loongson1/common/platform.c +++ b/arch/mips/loongson1/common/platform.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -107,13 +108,18 @@ static struct resource ls1x_ehci_resources[] = { }, }; +static struct usb_ehci_pdata ls1x_ehci_pdata = { + .port_power_off = 1, +}; + struct platform_device ls1x_ehci_device = { - .name = "ls1x-ehci", + .name = "ehci-platform", .id = -1, .num_resources = ARRAY_SIZE(ls1x_ehci_resources), .resource = ls1x_ehci_resources, .dev= { .dma_mask = &ls1x_ehci_dmamask, + .platform_data = &ls1x_ehci_pdata, }, }; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 01/24 v2] USB: EHCI: remove IXP4xx EHCI driver
This driver is not registered by any in-tree user. If needed it the EHCI driver can be reinstatied using the ehci-platform driver with caps_offset to 0x100. Signed-off-by: Florian Fainelli --- Changes since v1: - slightly reworded commit message drivers/usb/host/ehci-hcd.c|5 -- drivers/usb/host/ehci-ixp4xx.c | 139 2 files changed, 144 deletions(-) delete mode 100644 drivers/usb/host/ehci-ixp4xx.c diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 6bf6c42..442f774 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -1249,11 +1249,6 @@ MODULE_LICENSE ("GPL"); #definePLATFORM_DRIVER ehci_orion_driver #endif -#ifdef CONFIG_ARCH_IXP4XX -#include "ehci-ixp4xx.c" -#definePLATFORM_DRIVER ixp4xx_ehci_driver -#endif - #ifdef CONFIG_USB_W90X900_EHCI #include "ehci-w90x900.c" #definePLATFORM_DRIVER ehci_hcd_w90x900_driver diff --git a/drivers/usb/host/ehci-ixp4xx.c b/drivers/usb/host/ehci-ixp4xx.c deleted file mode 100644 index f224c0a..000 --- a/drivers/usb/host/ehci-ixp4xx.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * IXP4XX EHCI Host Controller Driver - * - * Author: Vladimir Barinov - * - * Based on "ehci-fsl.c" by Randy Vinson - * - * 2007 (c) MontaVista Software, Inc. This file is licensed under - * the terms of the GNU General Public License version 2. This program - * is licensed "as is" without any warranty of any kind, whether express - * or implied. - */ - -#include - -static int ixp4xx_ehci_init(struct usb_hcd *hcd) -{ - struct ehci_hcd *ehci = hcd_to_ehci(hcd); - int retval = 0; - - ehci->big_endian_desc = 1; - ehci->big_endian_mmio = 1; - - ehci->caps = hcd->regs + 0x100; - - hcd->has_tt = 1; - - retval = ehci_setup(hcd); - if (retval) - return retval; - - ehci_port_power(ehci, 0); - - return retval; -} - -static const struct hc_driver ixp4xx_ehci_hc_driver = { - .description= hcd_name, - .product_desc = "IXP4XX EHCI Host Controller", - .hcd_priv_size = sizeof(struct ehci_hcd), - .irq= ehci_irq, - .flags = HCD_MEMORY | HCD_USB2, - .reset = ixp4xx_ehci_init, - .start = ehci_run, - .stop = ehci_stop, - .shutdown = ehci_shutdown, - .urb_enqueue= ehci_urb_enqueue, - .urb_dequeue= ehci_urb_dequeue, - .endpoint_disable = ehci_endpoint_disable, - .endpoint_reset = ehci_endpoint_reset, - .get_frame_number = ehci_get_frame, - .hub_status_data= ehci_hub_status_data, - .hub_control= ehci_hub_control, -#if defined(CONFIG_PM) - .bus_suspend= ehci_bus_suspend, - .bus_resume = ehci_bus_resume, -#endif - .relinquish_port= ehci_relinquish_port, - .port_handed_over = ehci_port_handed_over, - - .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, -}; - -static int ixp4xx_ehci_probe(struct platform_device *pdev) -{ - struct usb_hcd *hcd; - const struct hc_driver *driver = &ixp4xx_ehci_hc_driver; - struct resource *res; - int irq; - int retval; - - if (usb_disabled()) - return -ENODEV; - - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!res) { - dev_err(&pdev->dev, - "Found HC with no IRQ. Check %s setup!\n", - dev_name(&pdev->dev)); - return -ENODEV; - } - irq = res->start; - - hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev)); - if (!hcd) { - retval = -ENOMEM; - goto fail_create_hcd; - } - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(&pdev->dev, - "Found HC with no register addr. Check %s setup!\n", - dev_name(&pdev->dev)); - retval = -ENODEV; - goto fail_request_resource; - } - hcd->rsrc_start = res->start; - hcd->rsrc_len = resource_size(res); - - hcd->regs = devm_request_and_ioremap(&pdev->dev, res); - if (hcd->regs == NULL) { - dev_dbg(&pdev->dev, "error mapping memory\n"); - retval = -EFAULT; - goto fail_request_resource; - } - - retval = usb_add_hcd(hcd, irq, IRQF_SHARED); - if (retval) - goto fail_request_resource; - - return retval; - -fail_request_resource: - usb_put_hcd(hcd); -fail_create_hcd: - dev_err(&pdev->dev, "init %s fail, %d\n", dev_name(&pdev->dev), retval); - return retval; -} - -static int ixp4xx_ehci_remove(struct platform_devi
[PATCH 11/24 v2] USB: ohci: allow platform driver to specify the number of ports
Signed-off-by: Florian Fainelli --- No changes since v1 drivers/usb/host/ohci-platform.c |4 include/linux/usb/ohci_pdriver.h |2 ++ 2 files changed, 6 insertions(+) diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c index e24ec9f..1caaf65 100644 --- a/drivers/usb/host/ohci-platform.c +++ b/drivers/usb/host/ohci-platform.c @@ -31,6 +31,10 @@ static int ohci_platform_reset(struct usb_hcd *hcd) ohci->flags |= OHCI_QUIRK_FRAME_NO; ohci_hcd_init(ohci); + + if (pdata->num_ports) + ohci->num_ports = pdata->num_ports; + err = ohci_init(ohci); return err; diff --git a/include/linux/usb/ohci_pdriver.h b/include/linux/usb/ohci_pdriver.h index 74e7755..012f2b7 100644 --- a/include/linux/usb/ohci_pdriver.h +++ b/include/linux/usb/ohci_pdriver.h @@ -25,6 +25,7 @@ * @big_endian_desc: BE descriptors * @big_endian_mmio: BE registers * @no_big_frame_no: no big endian frame_no shift + * @num_ports: number of ports * * These are general configuration options for the OHCI controller. All of * these options are activating more or less workarounds for some hardware. @@ -33,6 +34,7 @@ struct usb_ohci_pdata { unsignedbig_endian_desc:1; unsignedbig_endian_mmio:1; unsignedno_big_frame_no:1; + unsigned intnum_ports; /* Turn on all power and clocks */ int (*power_on)(struct platform_device *pdev); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 17/24 v2] ARM: cns3xxx: use OHCI platform driver
Since both the EHCI and OHCI platform drivers use the same power_{on,off} callbacks, rename them to cns3xx_usb_power_{on,off} to show that they are shared. Signed-off-by: Florian Fainelli --- No changes since v1 arch/arm/mach-cns3xxx/cns3420vb.c | 18 +- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-cns3xxx/cns3420vb.c b/arch/arm/mach-cns3xxx/cns3420vb.c index 906094c..8a00cee8 100644 --- a/arch/arm/mach-cns3xxx/cns3420vb.c +++ b/arch/arm/mach-cns3xxx/cns3420vb.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -127,7 +128,7 @@ static struct resource cns3xxx_usb_ehci_resources[] = { static u64 cns3xxx_usb_ehci_dma_mask = DMA_BIT_MASK(32); -static int csn3xxx_usb_ehci_power_on(struct platform_device *pdev) +static int csn3xxx_usb_power_on(struct platform_device *pdev) { /* * EHCI and OHCI share the same clock and power, @@ -148,7 +149,7 @@ static int csn3xxx_usb_ehci_power_on(struct platform_device *pdev) return 0; } -static void csn3xxx_usb_ehci_power_off(struct platform_device *pdev) +static void csn3xxx_usb_power_off(struct platform_device *pdev) { /* * EHCI and OHCI share the same clock and power, @@ -162,8 +163,8 @@ static void csn3xxx_usb_ehci_power_off(struct platform_device *pdev) static struct usb_ehci_pdata cns3xxx_usb_ehci_pdata = { .port_power_off = 1, - .power_on = csn3xxx_usb_ehci_power_on, - .power_off = csn3xxx_usb_ehci_power_off, + .power_on = csn3xxx_usb_power_on, + .power_off = csn3xxx_usb_power_off, }; static struct platform_device cns3xxx_usb_ehci_device = { @@ -191,13 +192,20 @@ static struct resource cns3xxx_usb_ohci_resources[] = { static u64 cns3xxx_usb_ohci_dma_mask = DMA_BIT_MASK(32); +static struct usb_ohci_pdata cns3xxx_usb_ohci_pdata = { + .num_ports = 1, + .power_on = csn3xxx_usb_power_on, + .power_off = csn3xxx_usb_power_off, +}; + static struct platform_device cns3xxx_usb_ohci_device = { - .name = "cns3xxx-ohci", + .name = "ohci-platform", .num_resources = ARRAY_SIZE(cns3xxx_usb_ohci_resources), .resource = cns3xxx_usb_ohci_resources, .dev = { .dma_mask = &cns3xxx_usb_ohci_dma_mask, .coherent_dma_mask = DMA_BIT_MASK(32), + .platform_data = &cns3xxx_usb_ohci_pdata, }, }; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 16/24 v2] USB: OHCI: remove PNX8550 OHCI driver
The users have been converted to use the platform OHCI driver instead, thus making the ohci-pnx8550 driver obsolete, so remove it. Signed-off-by: Florian Fainelli --- No changes since v1 drivers/usb/host/ohci-hcd.c |5 - drivers/usb/host/ohci-pnx8550.c | 243 --- 2 files changed, 248 deletions(-) delete mode 100644 drivers/usb/host/ohci-pnx8550.c diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 568bdb3..9453eea 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -1103,11 +1103,6 @@ MODULE_LICENSE ("GPL"); #define PLATFORM_DRIVERohci_hcd_au1xxx_driver #endif -#ifdef CONFIG_PNX8550 -#include "ohci-pnx8550.c" -#define PLATFORM_DRIVERohci_hcd_pnx8550_driver -#endif - #ifdef CONFIG_USB_OHCI_HCD_PPC_SOC #include "ohci-ppc-soc.c" #define PLATFORM_DRIVERohci_hcd_ppc_soc_driver diff --git a/drivers/usb/host/ohci-pnx8550.c b/drivers/usb/host/ohci-pnx8550.c deleted file mode 100644 index 148d27d..000 --- a/drivers/usb/host/ohci-pnx8550.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - * OHCI HCD (Host Controller Driver) for USB. - * - * (C) Copyright 1999 Roman Weissgaerber - * (C) Copyright 2000-2002 David Brownell - * (C) Copyright 2002 Hewlett-Packard Company - * (C) Copyright 2005 Embedded Alley Solutions, Inc. - * - * Bus Glue for PNX8550 - * - * Written by Christopher Hoover - * Based on fragments of previous driver by Russell King et al. - * - * Modified for LH7A404 from ohci-sa.c - * by Durgesh Pattamatta - * - * Modified for PNX8550 from ohci-sa.c and sa-omap.c - * by Vitaly Wool - * - * This file is licenced under the GPL. - */ - -#include -#include -#include -#include -#include - -#ifndef CONFIG_PNX8550 -#error "This file is PNX8550 bus glue. CONFIG_PNX8550 must be defined." -#endif - -extern int usb_disabled(void); - -/*-*/ - -static void pnx8550_start_hc(struct platform_device *dev) -{ - /* -* Set register CLK48CTL to enable and 48MHz -*/ - outl(0x0003, PCI_BASE | 0x0004770c); - - /* -* Set register CLK12CTL to enable and 48MHz -*/ - outl(0x0003, PCI_BASE | 0x00047710); - - udelay(100); -} - -static void pnx8550_stop_hc(struct platform_device *dev) -{ - udelay(10); -} - - -/*-*/ - -/* configure so an HC device and id are always provided */ -/* always called with process context; sleeping is OK */ - - -/** - * usb_hcd_pnx8550_probe - initialize pnx8550-based HCDs - * Context: !in_interrupt() - * - * Allocates basic resources for this USB host controller, and - * then invokes the start() method for the HCD associated with it - * through the hotplug entry's driver_data. - * - */ -int usb_hcd_pnx8550_probe (const struct hc_driver *driver, - struct platform_device *dev) -{ - int retval; - struct usb_hcd *hcd; - - if (dev->resource[0].flags != IORESOURCE_MEM || - dev->resource[1].flags != IORESOURCE_IRQ) { - dev_err (&dev->dev,"invalid resource type\n"); - return -ENOMEM; - } - - hcd = usb_create_hcd (driver, &dev->dev, "pnx8550"); - if (!hcd) - return -ENOMEM; - hcd->rsrc_start = dev->resource[0].start; - hcd->rsrc_len = dev->resource[0].end - dev->resource[0].start + 1; - - if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { - dev_err(&dev->dev, "request_mem_region [0x%08llx, 0x%08llx] " - "failed\n", hcd->rsrc_start, hcd->rsrc_len); - retval = -EBUSY; - goto err1; - } - - hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); - if (!hcd->regs) { - dev_err(&dev->dev, "ioremap [[0x%08llx, 0x%08llx] failed\n", - hcd->rsrc_start, hcd->rsrc_len); - retval = -ENOMEM; - goto err2; - } - - pnx8550_start_hc(dev); - - ohci_hcd_init(hcd_to_ohci(hcd)); - - retval = usb_add_hcd(hcd, dev->resource[1].start, 0); - if (retval == 0) - return retval; - - pnx8550_stop_hc(dev); - iounmap(hcd->regs); - err2: - release_mem_region(hcd->rsrc_start, hcd->rsrc_len); - err1: - usb_put_hcd(hcd); - return retval; -} - - -/* may be called without controller electrically present */ -/* may be called with controller, bus, and devices active */ - -/** - * usb_hcd_pnx8550_remove - shutdown processing for pnx8550-based HCDs - * @dev: USB Host Controller being removed - * Context: !in_interrupt() - * - * Reverses the effect of usb_hcd_pnx8550_probe(), first invoking - * the HCD's stop() method. It is always called from a thread - * context, normally "rmmod", "apmd", or
[PATCH 14/24] USB: ohci: merge ohci_finish_controller_resume with ohci_resume
Merge ohci_finish_controller_resume with ohci_resume as suggested by Alan Stern. Since ohci_finish_controller_resume no longer exists, update the various OHCI drivers to call ohci_resume() instead. Some drivers used to set themselves the bit HCD_FLAG_HW_ACCESSIBLE, which is now handled by ohci_resume(). Signed-off-by: Florian Fainelli --- drivers/usb/host/ohci-at91.c |2 +- drivers/usb/host/ohci-ep93xx.c |2 +- drivers/usb/host/ohci-exynos.c |5 + drivers/usb/host/ohci-hcd.c | 41 +++-- drivers/usb/host/ohci-hub.c | 42 -- drivers/usb/host/ohci-omap.c |2 +- drivers/usb/host/ohci-platform.c |2 +- drivers/usb/host/ohci-pxa27x.c |2 +- drivers/usb/host/ohci-s3c2410.c |3 +-- drivers/usb/host/ohci-spear.c|2 +- drivers/usb/host/ohci-tmio.c |2 +- 11 files changed, 48 insertions(+), 57 deletions(-) diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index 0bf72f9..908d84a 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -705,7 +705,7 @@ static int ohci_hcd_at91_drv_resume(struct platform_device *pdev) if (!clocked) at91_start_clock(); - ohci_finish_controller_resume(hcd); + ohci_resume(hcd, false); return 0; } #else diff --git a/drivers/usb/host/ohci-ep93xx.c b/drivers/usb/host/ohci-ep93xx.c index dbfbd1d..a982f04 100644 --- a/drivers/usb/host/ohci-ep93xx.c +++ b/drivers/usb/host/ohci-ep93xx.c @@ -194,7 +194,7 @@ static int ohci_hcd_ep93xx_drv_resume(struct platform_device *pdev) ep93xx_start_hc(&pdev->dev); - ohci_finish_controller_resume(hcd); + ohci_resume(hcd, false); return 0; } #endif diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c index fc3091b..53c5a989 100644 --- a/drivers/usb/host/ohci-exynos.c +++ b/drivers/usb/host/ohci-exynos.c @@ -252,10 +252,7 @@ static int exynos_ohci_resume(struct device *dev) if (pdata && pdata->phy_init) pdata->phy_init(pdev, S5P_USB_PHY_HOST); - /* Mark hardware accessible again as we are out of D3 state by now */ - set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); - - ohci_finish_controller_resume(hcd); + ohci_resume(hcd, false); return 0; } diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 5d30992..568bdb3 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -1003,13 +1003,50 @@ static int __maybe_unused ohci_suspend(struct usb_hcd *hcd, bool do_wakeup) static int __maybe_unused ohci_resume(struct usb_hcd *hcd, bool hibernated) { + struct ohci_hcd *ohci = hcd_to_ohci(hcd); + int port; + boolneed_reinit = false; + set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); /* Make sure resume from hibernation re-enumerates everything */ if (hibernated) - ohci_usb_reset(hcd_to_ohci(hcd)); + ohci_usb_reset(ohci); + + /* See if the controller is already running or has been reset */ + ohci->hc_control = ohci_readl(ohci, &ohci->regs->control); + if (ohci->hc_control & (OHCI_CTRL_IR | OHCI_SCHED_ENABLES)) { + need_reinit = true; + } else { + switch (ohci->hc_control & OHCI_CTRL_HCFS) { + case OHCI_USB_OPER: + case OHCI_USB_RESET: + need_reinit = true; + } + } + + /* If needed, reinitialize and suspend the root hub */ + if (need_reinit) { + spin_lock_irq(&ohci->lock); + ohci_rh_resume(ohci); + ohci_rh_suspend(ohci, 0); + spin_unlock_irq(&ohci->lock); + } + + /* Normally just turn on port power and enable interrupts */ + else { + ohci_dbg(ohci, "powerup ports\n"); + for (port = 0; port < ohci->num_ports; port++) + ohci_writel(ohci, RH_PS_PPS, + &ohci->regs->roothub.portstatus[port]); + + ohci_writel(ohci, OHCI_INTR_MIE, &ohci->regs->intrenable); + ohci_readl(ohci, &ohci->regs->intrenable); + msleep(20); + } + + usb_hcd_resume_root_hub(hcd); - ohci_finish_controller_resume(hcd); return 0; } diff --git a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c index 2f3619e..db09dae 100644 --- a/drivers/usb/host/ohci-hub.c +++ b/drivers/usb/host/ohci-hub.c @@ -316,48 +316,6 @@ static int ohci_bus_resume (struct usb_hcd *hcd) return rc; } -/* Carry out the final steps of resuming the controller device */ -static void __maybe_unused ohci_finish_controller_resume(struct usb_hcd *hcd) -{ - struct ohci_hcd *ohci = hcd_to_ohci(hcd); - int port; -
[PATCH 19/24 v2] MIPS: Netlogic: convert to use OHCI platform driver
The OHCI platform driver is suitable for use by the Netlogic XLR platform so use this driver instead of the OHCI XLS platform driver. Signed-off-by: Florian Fainelli --- Changes since v1: - really make the code register the "ohci-platform" driver instead of "ohci-xls" arch/mips/netlogic/xlr/platform.c |9 +++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/mips/netlogic/xlr/platform.c b/arch/mips/netlogic/xlr/platform.c index 144c5c6..507230e 100644 --- a/arch/mips/netlogic/xlr/platform.c +++ b/arch/mips/netlogic/xlr/platform.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -128,12 +129,14 @@ static struct usb_ehci_pdata xls_usb_ehci_pdata = { .caps_offset= 0, }; +static struct usb_ohci_pdata xls_usb_ohci_pdata; + static struct platform_device xls_usb_ehci_device = USB_PLATFORM_DEV("ehci-platform", 0, PIC_USB_IRQ); static struct platform_device xls_usb_ohci_device_0 = -USB_PLATFORM_DEV("ohci-xls-0", 1, PIC_USB_IRQ); +USB_PLATFORM_DEV("ohci-platform", 1, PIC_USB_IRQ); static struct platform_device xls_usb_ohci_device_1 = -USB_PLATFORM_DEV("ohci-xls-1", 2, PIC_USB_IRQ); +USB_PLATFORM_DEV("ohci-platform", 2, PIC_USB_IRQ); static struct platform_device *xls_platform_devices[] = { &xls_usb_ehci_device, @@ -182,10 +185,12 @@ int xls_platform_usb_init(void) memres += 0x400; xls_usb_ohci_device_0.resource[0].start = memres; xls_usb_ohci_device_0.resource[0].end = memres + 0x400 - 1; + xls_usb_ohci_device_0.dev.platform_data = &xls_usb_ohci_pdata; memres += 0x400; xls_usb_ohci_device_1.resource[0].start = memres; xls_usb_ohci_device_1.resource[0].end = memres + 0x400 - 1; + xls_usb_ohci_device_1.dev.platform_data = &xls_usb_ohci_pdata; return platform_add_devices(xls_platform_devices, ARRAY_SIZE(xls_platform_devices)); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 22/24 v2] USB: OHCI: remove OHCI SH platform driver
All users have been converted to use the OHCI platform driver instead, thus making ohci-sh obsolete, so remove it. Signed-off-by: Florian Fainelli --- No changes since v1 drivers/usb/host/Kconfig|6 +- drivers/usb/host/ohci-hcd.c |5 -- drivers/usb/host/ohci-sh.c | 141 --- 3 files changed, 5 insertions(+), 147 deletions(-) delete mode 100644 drivers/usb/host/ohci-sh.c diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 86a7995..b05b6aa 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -397,9 +397,13 @@ config USB_OHCI_HCD_SSB If unsure, say N. config USB_OHCI_SH - bool "OHCI support for SuperH USB controller" + bool "OHCI support for SuperH USB controller (DEPRECATED)" depends on USB_OHCI_HCD && SUPERH + select USB_OHCI_HCD_PLATFORM ---help--- + This option is deprecated now and the driver was removed, use + USB_OHCI_HCD_PLATFORM instead. + Enables support for the on-chip OHCI controller on the SuperH. If you use the PCI OHCI controller, this option is not necessary. diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index b0fc042..2204759 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -1123,11 +1123,6 @@ MODULE_LICENSE ("GPL"); #define PLATFORM_DRIVERohci_hcd_da8xx_driver #endif -#ifdef CONFIG_USB_OHCI_SH -#include "ohci-sh.c" -#define PLATFORM_DRIVERohci_hcd_sh_driver -#endif - #ifdef CONFIG_USB_OHCI_HCD_PPC_OF #include "ohci-ppc-of.c" diff --git a/drivers/usb/host/ohci-sh.c b/drivers/usb/host/ohci-sh.c deleted file mode 100644 index 76a20c2..000 --- a/drivers/usb/host/ohci-sh.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * OHCI HCD (Host Controller Driver) for USB. - * - * Copyright (C) 2008 Renesas Solutions Corp. - * - * Author : Yoshihiro Shimoda - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#include - -static int ohci_sh_start(struct usb_hcd *hcd) -{ - struct ohci_hcd *ohci = hcd_to_ohci(hcd); - - ohci_hcd_init(ohci); - ohci_init(ohci); - ohci_run(ohci); - return 0; -} - -static const struct hc_driver ohci_sh_hc_driver = { - .description = hcd_name, - .product_desc = "SuperH OHCI", - .hcd_priv_size =sizeof(struct ohci_hcd), - - /* -* generic hardware linkage -*/ - .irq = ohci_irq, - .flags =HCD_USB11 | HCD_MEMORY, - - /* -* basic lifecycle operations -*/ - .start =ohci_sh_start, - .stop = ohci_stop, - .shutdown = ohci_shutdown, - - /* -* managing i/o requests and associated device resources -*/ - .urb_enqueue = ohci_urb_enqueue, - .urb_dequeue = ohci_urb_dequeue, - .endpoint_disable = ohci_endpoint_disable, - - /* -* scheduling support -*/ - .get_frame_number = ohci_get_frame, - - /* -* root hub support -*/ - .hub_status_data = ohci_hub_status_data, - .hub_control = ohci_hub_control, -#ifdef CONFIG_PM - .bus_suspend = ohci_bus_suspend, - .bus_resume = ohci_bus_resume, -#endif - .start_port_reset = ohci_start_port_reset, -}; - -/*-*/ - -static int ohci_hcd_sh_probe(struct platform_device *pdev) -{ - struct resource *res = NULL; - struct usb_hcd *hcd = NULL; - int irq = -1; - int ret; - - if (usb_disabled()) - return -ENODEV; - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(&pdev->dev, "platform_get_resource error.\n"); - return -ENODEV; - } - - irq = platform_get_irq(pdev, 0); - if (irq < 0) { - dev_err(&pdev->dev, "platform_get_irq error.\n"); - return -ENODEV; - } - - /* initialize hcd */ - hcd = usb_create_hcd(&ohci_sh_hc_driver, &pdev->dev, (char *)hcd_name); - if (!hcd) { - dev_err(&pdev->dev, "Failed to create hcd\n"); -
[PATCH 24/24 v2] USB: OHCI: remove Alchemy OHCI platform driver.
All users have been converted to use the OHCI platform driver instead, thus making ohci-au1xxx obsolete, remove it. Signed-off-by: Florian Fainelli --- Changes since v1: - rebased on top of the latest OHCI HCD changes drivers/usb/host/ohci-au1xxx.c | 234 drivers/usb/host/ohci-hcd.c|5 - 2 files changed, 239 deletions(-) delete mode 100644 drivers/usb/host/ohci-au1xxx.c diff --git a/drivers/usb/host/ohci-au1xxx.c b/drivers/usb/host/ohci-au1xxx.c deleted file mode 100644 index c611699..000 --- a/drivers/usb/host/ohci-au1xxx.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * OHCI HCD (Host Controller Driver) for USB. - * - * (C) Copyright 1999 Roman Weissgaerber - * (C) Copyright 2000-2002 David Brownell - * (C) Copyright 2002 Hewlett-Packard Company - * - * Bus Glue for AMD Alchemy Au1xxx - * - * Written by Christopher Hoover - * Based on fragments of previous driver by Russell King et al. - * - * Modified for LH7A404 from ohci-sa.c - * by Durgesh Pattamatta - * Modified for AMD Alchemy Au1xxx - * by Matt Porter - * - * This file is licenced under the GPL. - */ - -#include -#include - -#include - - -extern int usb_disabled(void); - -static int __devinit ohci_au1xxx_start(struct usb_hcd *hcd) -{ - struct ohci_hcd *ohci = hcd_to_ohci(hcd); - int ret; - - ohci_dbg(ohci, "ohci_au1xxx_start, ohci:%p", ohci); - - if ((ret = ohci_init(ohci)) < 0) - return ret; - - if ((ret = ohci_run(ohci)) < 0) { - dev_err(hcd->self.controller, "can't start %s", - hcd->self.bus_name); - ohci_stop(hcd); - return ret; - } - - return 0; -} - -static const struct hc_driver ohci_au1xxx_hc_driver = { - .description = hcd_name, - .product_desc = "Au1xxx OHCI", - .hcd_priv_size =sizeof(struct ohci_hcd), - - /* -* generic hardware linkage -*/ - .irq = ohci_irq, - .flags =HCD_USB11 | HCD_MEMORY, - - /* -* basic lifecycle operations -*/ - .start =ohci_au1xxx_start, - .stop = ohci_stop, - .shutdown = ohci_shutdown, - - /* -* managing i/o requests and associated device resources -*/ - .urb_enqueue = ohci_urb_enqueue, - .urb_dequeue = ohci_urb_dequeue, - .endpoint_disable = ohci_endpoint_disable, - - /* -* scheduling support -*/ - .get_frame_number = ohci_get_frame, - - /* -* root hub support -*/ - .hub_status_data = ohci_hub_status_data, - .hub_control = ohci_hub_control, -#ifdef CONFIG_PM - .bus_suspend = ohci_bus_suspend, - .bus_resume = ohci_bus_resume, -#endif - .start_port_reset = ohci_start_port_reset, -}; - -static int ohci_hcd_au1xxx_drv_probe(struct platform_device *pdev) -{ - int ret, unit; - struct usb_hcd *hcd; - - if (usb_disabled()) - return -ENODEV; - - if (pdev->resource[1].flags != IORESOURCE_IRQ) { - pr_debug("resource[1] is not IORESOURCE_IRQ\n"); - return -ENOMEM; - } - - hcd = usb_create_hcd(&ohci_au1xxx_hc_driver, &pdev->dev, "au1xxx"); - if (!hcd) - return -ENOMEM; - - hcd->rsrc_start = pdev->resource[0].start; - hcd->rsrc_len = pdev->resource[0].end - pdev->resource[0].start + 1; - - if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { - pr_debug("request_mem_region failed\n"); - ret = -EBUSY; - goto err1; - } - - hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); - if (!hcd->regs) { - pr_debug("ioremap failed\n"); - ret = -ENOMEM; - goto err2; - } - - unit = (hcd->rsrc_start == AU1300_USB_OHCI1_PHYS_ADDR) ? - ALCHEMY_USB_OHCI1 : ALCHEMY_USB_OHCI0; - if (alchemy_usb_control(unit, 1)) { - printk(KERN_INFO "%s: controller init failed!\n", pdev->name); - ret = -ENODEV; - goto err3; - } - - ohci_hcd_init(hcd_to_ohci(hcd)); - - ret = usb_add_hcd(hcd, pdev->resource[1].start, - IRQF_SHARED); - if (ret == 0) { - platform_set_drvdata(pdev, hcd); - return ret; - } - - alchemy_usb_control(unit, 0); -err3: - iounmap(hcd->regs); -err2: - release_mem_region(hcd->rsrc_start, hcd->rsrc_len); -err1: - usb_put_hcd(hcd); - return ret; -} - -static int ohci_hcd_au1xxx_drv_remove(struct platform_device *pdev) -{ - struct usb_hcd *hcd = platform_get_drvdata(pdev); - int unit; - - unit = (hcd->rsrc_start == AU1300_USB_OHCI1_PHYS_ADDR) ? -
[PATCH 23/24 v2] MIPS: Alchemy: use the OHCI platform driver
Convert the Alchemy platform to register the ohci-platform driver, now that the ohci-platform driver properly handles the specific ohci-au1xxx resume from suspend case. This also greatly simplifies the power_{on,off} callbacks and make them work on platform device id instead of checking the OHCI controller base address like what was done in ohci-au1xxx.c. Impacted defconfigs are also updated accordingly to select the OHCI platform driver. Signed-off-by: Florian Fainelli --- Changes since v1: - updated defconfigs accordingly - really instantiate "ohci-platform" instead of "ohci-au1xxx" - rebased on top of the latest OHCI HCD changes arch/mips/alchemy/common/platform.c | 35 +-- arch/mips/configs/db1000_defconfig |1 + arch/mips/configs/db1200_defconfig |1 + arch/mips/configs/db1300_defconfig |1 + arch/mips/configs/db1550_defconfig |1 + arch/mips/configs/gpr_defconfig |1 + arch/mips/configs/mtx1_defconfig|1 + arch/mips/configs/pb1100_defconfig |1 + arch/mips/configs/pb1500_defconfig |1 + arch/mips/configs/pb1550_defconfig |1 + 10 files changed, 42 insertions(+), 2 deletions(-) diff --git a/arch/mips/alchemy/common/platform.c b/arch/mips/alchemy/common/platform.c index b9a5f6d..7af941d 100644 --- a/arch/mips/alchemy/common/platform.c +++ b/arch/mips/alchemy/common/platform.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -142,6 +143,34 @@ static struct usb_ehci_pdata alchemy_ehci_pdata = { .power_suspend = alchemy_ehci_power_off, }; +/* Power on callback for the ohci platform driver */ +static int alchemy_ohci_power_on(struct platform_device *pdev) +{ + int unit; + + unit = (pdev->id == 1) ? + ALCHEMY_USB_OHCI1 : ALCHEMY_USB_OHCI0; + + return alchemy_usb_control(unit, 1); +} + +/* Power off/suspend callback for the ohci platform driver */ +static void alchemy_ohci_power_off(struct platform_device *pdev) +{ + int unit; + + unit = (pdev->id == 1) ? + ALCHEMY_USB_OHCI1 : ALCHEMY_USB_OHCI0; + + alchemy_usb_control(unit, 0); +} + +static struct usb_ohci_pdata alchemy_ohci_pdata = { + .power_on = alchemy_ohci_power_on, + .power_off = alchemy_ohci_power_off, + .power_suspend = alchemy_ohci_power_off, +}; + static unsigned long alchemy_ohci_data[][2] __initdata = { [ALCHEMY_CPU_AU1000] = { AU1000_USB_OHCI_PHYS_ADDR, AU1000_USB_HOST_INT }, [ALCHEMY_CPU_AU1500] = { AU1000_USB_OHCI_PHYS_ADDR, AU1500_USB_HOST_INT }, @@ -189,9 +218,10 @@ static void __init alchemy_setup_usb(int ctype) res[1].start = alchemy_ohci_data[ctype][1]; res[1].end = res[1].start; res[1].flags = IORESOURCE_IRQ; - pdev->name = "au1xxx-ohci"; + pdev->name = "ohci-platform"; pdev->id = 0; pdev->dev.dma_mask = &alchemy_ohci_dmamask; + pdev->dev.platform_data = &alchemy_ohci_pdata; if (platform_device_register(pdev)) printk(KERN_INFO "Alchemy USB: cannot add OHCI0\n"); @@ -228,9 +258,10 @@ static void __init alchemy_setup_usb(int ctype) res[1].start = AU1300_USB_INT; res[1].end = res[1].start; res[1].flags = IORESOURCE_IRQ; - pdev->name = "au1xxx-ohci"; + pdev->name = "ohci-platform"; pdev->id = 1; pdev->dev.dma_mask = &alchemy_ohci_dmamask; + pdev->dev.platform_data = &alchemy_ohci_pdata; if (platform_device_register(pdev)) printk(KERN_INFO "Alchemy USB: cannot add OHCI1\n"); diff --git a/arch/mips/configs/db1000_defconfig b/arch/mips/configs/db1000_defconfig index 17a36c1..face9d2 100644 --- a/arch/mips/configs/db1000_defconfig +++ b/arch/mips/configs/db1000_defconfig @@ -233,6 +233,7 @@ CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y CONFIG_USB_UHCI_HCD=y CONFIG_USB_STORAGE=y CONFIG_NEW_LEDS=y diff --git a/arch/mips/configs/db1200_defconfig b/arch/mips/configs/db1200_defconfig index d31ac85..e36f44a 100644 --- a/arch/mips/configs/db1200_defconfig +++ b/arch/mips/configs/db1200_defconfig @@ -120,6 +120,7 @@ CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_HCD_PLATFORM=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y CONFIG_MMC=y # CONFIG_MMC_BLOCK_BOUNCE is not set CONFIG_MMC_AU1X=y diff --git a/arch/mips/configs/db1300_defconfig b/arch/mips/configs/db1300_defconfig index 717e7b2..6873443 100644 --- a/arch/mips/configs/db1300_defconfig +++ b/arch/mips/configs/db1300_defconfig @@ -292,6 +292,7 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_RTC_LIB=y CON
[PATCH 21/24 v2] sh: convert boards to use the OHCI platform driver
Signed-off-by: Florian Fainelli --- No changes since v1 arch/sh/kernel/cpu/sh3/setup-sh7720.c |6 +- arch/sh/kernel/cpu/sh4a/setup-sh7757.c |6 +- arch/sh/kernel/cpu/sh4a/setup-sh7763.c |6 +- arch/sh/kernel/cpu/sh4a/setup-sh7786.c |6 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7720.c b/arch/sh/kernel/cpu/sh3/setup-sh7720.c index 0c2f1b2..42d991f 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7720.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7720.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -103,12 +104,15 @@ static struct resource usb_ohci_resources[] = { static u64 usb_ohci_dma_mask = 0xUL; +static struct usb_ohci_pdata usb_ohci_pdata; + static struct platform_device usb_ohci_device = { - .name = "sh_ohci", + .name = "ohci-platform", .id = -1, .dev = { .dma_mask = &usb_ohci_dma_mask, .coherent_dma_mask = 0x, + .platform_data = &usb_ohci_pdata, }, .num_resources = ARRAY_SIZE(usb_ohci_resources), .resource = usb_ohci_resources, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c index 4a2f357..9079a0f 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -750,12 +751,15 @@ static struct resource usb_ohci_resources[] = { }, }; +static struct usb_ohci_pdata usb_ohci_pdata; + static struct platform_device usb_ohci_device = { - .name = "sh_ohci", + .name = "ohci-platform", .id = -1, .dev = { .dma_mask = &usb_ohci_device.dev.coherent_dma_mask, .coherent_dma_mask = DMA_BIT_MASK(32), + .platform_data = &usb_ohci_pdata, }, .num_resources = ARRAY_SIZE(usb_ohci_resources), .resource = usb_ohci_resources, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7763.c b/arch/sh/kernel/cpu/sh4a/setup-sh7763.c index bd0a8fb..1686aca 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7763.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7763.c @@ -16,6 +16,7 @@ #include #include #include +#include static struct plat_sci_port scif0_platform_data = { .mapbase= 0xffe0, @@ -106,12 +107,15 @@ static struct resource usb_ohci_resources[] = { static u64 usb_ohci_dma_mask = 0xUL; +static struct usb_ohci_pdata usb_ohci_pdata; + static struct platform_device usb_ohci_device = { - .name = "sh_ohci", + .name = "ohci-platform", .id = -1, .dev = { .dma_mask = &usb_ohci_dma_mask, .coherent_dma_mask = 0x, + .platform_data = &usb_ohci_pdata, }, .num_resources = ARRAY_SIZE(usb_ohci_resources), .resource = usb_ohci_resources, diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 2e6952f..ab52d4d 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -583,12 +584,15 @@ static struct resource usb_ohci_resources[] = { }, }; +static struct usb_ohci_pdata usb_ohci_pdata; + static struct platform_device usb_ohci_device = { - .name = "sh_ohci", + .name = "ohci-platform", .id = -1, .dev = { .dma_mask = &usb_ohci_device.dev.coherent_dma_mask, .coherent_dma_mask = DMA_BIT_MASK(32), + .platform_data = &usb_ohci_pdata, }, .num_resources = ARRAY_SIZE(usb_ohci_resources), .resource = usb_ohci_resources, -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 20/24 v2] USB: OHCI: remove Netlogic XLS OHCI platform driver
All users have been converted to use the OHCI platform driver instead, thus making ohci-xls obsolete, remove it. Signed-off-by: Florian Fainelli --- Changes since v1: - reworded commit message drivers/usb/host/ohci-hcd.c |5 -- drivers/usb/host/ohci-xls.c | 152 --- 2 files changed, 157 deletions(-) delete mode 100644 drivers/usb/host/ohci-xls.c diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index a6ed6c0..b0fc042 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -1169,11 +1169,6 @@ MODULE_LICENSE ("GPL"); #define PLATFORM_DRIVERohci_hcd_tilegx_driver #endif -#ifdef CONFIG_CPU_XLR -#include "ohci-xls.c" -#define PLATFORM_DRIVERohci_xls_driver -#endif - #ifdef CONFIG_USB_OHCI_HCD_PLATFORM #include "ohci-platform.c" #define PLATFORM_DRIVERohci_platform_driver diff --git a/drivers/usb/host/ohci-xls.c b/drivers/usb/host/ohci-xls.c deleted file mode 100644 index 84201cd..000 --- a/drivers/usb/host/ohci-xls.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * OHCI HCD for Netlogic XLS processors. - * - * (C) Copyright 2011 Netlogic Microsystems Inc. - * - * Based on ohci-au1xxx.c, and other Linux OHCI drivers. - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for - * more details. - */ - -#include -#include - -static int ohci_xls_probe_internal(const struct hc_driver *driver, - struct platform_device *dev) -{ - struct resource *res; - struct usb_hcd *hcd; - int retval, irq; - - /* Get our IRQ from an earlier registered Platform Resource */ - irq = platform_get_irq(dev, 0); - if (irq < 0) { - dev_err(&dev->dev, "Found HC with no IRQ\n"); - return -ENODEV; - } - - /* Get our Memory Handle */ - res = platform_get_resource(dev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(&dev->dev, "MMIO Handle incorrect!\n"); - return -ENODEV; - } - - hcd = usb_create_hcd(driver, &dev->dev, "XLS"); - if (!hcd) { - retval = -ENOMEM; - goto err1; - } - hcd->rsrc_start = res->start; - hcd->rsrc_len = resource_size(res); - - if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, - driver->description)) { - dev_dbg(&dev->dev, "Controller already in use\n"); - retval = -EBUSY; - goto err2; - } - - hcd->regs = ioremap_nocache(hcd->rsrc_start, hcd->rsrc_len); - if (hcd->regs == NULL) { - dev_dbg(&dev->dev, "error mapping memory\n"); - retval = -EFAULT; - goto err3; - } - - retval = usb_add_hcd(hcd, irq, IRQF_SHARED); - if (retval != 0) - goto err4; - return retval; - -err4: - iounmap(hcd->regs); -err3: - release_mem_region(hcd->rsrc_start, hcd->rsrc_len); -err2: - usb_put_hcd(hcd); -err1: - dev_err(&dev->dev, "init fail, %d\n", retval); - return retval; -} - -static int ohci_xls_reset(struct usb_hcd *hcd) -{ - struct ohci_hcd *ohci = hcd_to_ohci(hcd); - - ohci_hcd_init(ohci); - return ohci_init(ohci); -} - -static int __devinit ohci_xls_start(struct usb_hcd *hcd) -{ - struct ohci_hcd *ohci; - int ret; - - ohci = hcd_to_ohci(hcd); - ret = ohci_run(ohci); - if (ret < 0) { - dev_err(hcd->self.controller, "can't start %s\n", - hcd->self.bus_name); - ohci_stop(hcd); - return ret; - } - return 0; -} - -static struct hc_driver ohci_xls_hc_driver = { - .description= hcd_name, - .product_desc = "XLS OHCI Host Controller", - .hcd_priv_size = sizeof(struct ohci_hcd), - .irq= ohci_irq, - .flags = HCD_MEMORY | HCD_USB11, - .reset = ohci_xls_reset, - .start = ohci_xls_start, - .stop = ohci_stop, - .shutdown = ohci_shutdown, - .urb_enqueue= ohci_urb_enqueue, - .urb_dequeue= ohci_urb_dequeue, - .endpoint_disable = ohci_endpoint_disable, - .get_frame_number = ohci_get_frame, - .hub_status_data = ohci_hub_status_data, - .hub_control= ohci_hub_control, -#ifdef CONFIG_PM - .bus_suspend= ohci_bus_suspend, - .bus_resume = ohci_bus_resume, -#endif - .start_port_reset = ohci_start_port_reset, -}; - -static int ohci_xls_probe(struct platform_device *dev) -{ - int ret; - - pr_debug("In ohci_xls_probe"); - if (usb_disabled()) - return -ENODEV; - ret = ohci_xls_probe_internal(&ohci_xls_hc_driver, dev); - return ret; -} - -static int ohci_xls_remove(struct platform_dev
[PATCH 18/24 v2] USB: OHCI: remove CNS3xxx OHCI platform driver
All users have been converted to use the OHCI platform driver instead, thus making ohci-cns3xxx, so remove it. Signed-off-by: Florian Fainelli --- Changes since v1: - reworded commit message drivers/usb/host/Kconfig|6 +- drivers/usb/host/ohci-cns3xxx.c | 166 --- drivers/usb/host/ohci-hcd.c |5 -- 3 files changed, 5 insertions(+), 172 deletions(-) delete mode 100644 drivers/usb/host/ohci-cns3xxx.c diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 15304e7..86a7995 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -410,9 +410,13 @@ config USB_OHCI_EXYNOS Enable support for the Samsung Exynos SOC's on-chip OHCI controller. config USB_CNS3XXX_OHCI - bool "Cavium CNS3XXX OHCI Module" + bool "Cavium CNS3XXX OHCI Module (DEPRECATED)" depends on USB_OHCI_HCD && ARCH_CNS3XXX + select USB_OHCI_HCD_PLATFORM ---help--- + This option is deprecated now and the driver was removed, use + USB_OHCI_HCD_PLATFORM instead. + Enable support for the CNS3XXX SOC's on-chip OHCI controller. It is needed for low-speed USB 1.0 device support. diff --git a/drivers/usb/host/ohci-cns3xxx.c b/drivers/usb/host/ohci-cns3xxx.c deleted file mode 100644 index 2c9f233..000 --- a/drivers/usb/host/ohci-cns3xxx.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright 2008 Cavium Networks - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License, Version 2, as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include - -static int __devinit -cns3xxx_ohci_start(struct usb_hcd *hcd) -{ - struct ohci_hcd *ohci = hcd_to_ohci(hcd); - int ret; - - /* -* EHCI and OHCI share the same clock and power, -* resetting twice would cause the 1st controller been reset. -* Therefore only do power up at the first up device, and -* power down at the last down device. -* -* Set USB AHB INCR length to 16 -*/ - if (atomic_inc_return(&usb_pwr_ref) == 1) { - cns3xxx_pwr_power_up(1 << PM_PLL_HM_PD_CTRL_REG_OFFSET_PLL_USB); - cns3xxx_pwr_clk_en(1 << PM_CLK_GATE_REG_OFFSET_USB_HOST); - cns3xxx_pwr_soft_rst(1 << PM_SOFT_RST_REG_OFFST_USB_HOST); - __raw_writel((__raw_readl(MISC_CHIP_CONFIG_REG) | (0X2 << 24)), - MISC_CHIP_CONFIG_REG); - } - - ret = ohci_init(ohci); - if (ret < 0) - return ret; - - ohci->num_ports = 1; - - ret = ohci_run(ohci); - if (ret < 0) { - dev_err(hcd->self.controller, "can't start %s\n", - hcd->self.bus_name); - ohci_stop(hcd); - return ret; - } - return 0; -} - -static const struct hc_driver cns3xxx_ohci_hc_driver = { - .description= hcd_name, - .product_desc = "CNS3XXX OHCI Host controller", - .hcd_priv_size = sizeof(struct ohci_hcd), - .irq= ohci_irq, - .flags = HCD_USB11 | HCD_MEMORY, - .start = cns3xxx_ohci_start, - .stop = ohci_stop, - .shutdown = ohci_shutdown, - .urb_enqueue= ohci_urb_enqueue, - .urb_dequeue= ohci_urb_dequeue, - .endpoint_disable = ohci_endpoint_disable, - .get_frame_number = ohci_get_frame, - .hub_status_data= ohci_hub_status_data, - .hub_control= ohci_hub_control, -#ifdef CONFIG_PM - .bus_suspend= ohci_bus_suspend, - .bus_resume = ohci_bus_resume, -#endif - .start_port_reset = ohci_start_port_reset, -}; - -static int cns3xxx_ohci_probe(struct platform_device *pdev) -{ - struct device *dev = &pdev->dev; - struct usb_hcd *hcd; - const struct hc_driver *driver = &cns3xxx_ohci_hc_driver; - struct resource *res; - int irq; - int retval; - - if (usb_disabled()) - return -ENODEV; - - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!res) { - dev_err(dev, "Found HC with no IRQ.\n"); - return -ENODEV; - } - irq = res->start; - - hcd = usb_create_hcd(driver, dev, dev_name(dev)); - if (!hcd) - return -ENOMEM; - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(dev, "Found HC with no register addr.\n"); - retval = -ENODEV; - goto err1; - } - hcd->rsrc_start = res->start; - hcd->rsrc_len = resource_size(res); - - if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, - driver->description)) {
[PATCH 10/24 v2] USB: EHCI: remove CNS3xxx EHCI platform driver
The users have been converted to use the ehci platform driver instead, thus making the ehci-cns3xxx driver obsolete, so remove it. Signed-off-by: Florian Fainelli --- Changes since v1: - only remove the corresponding chunk from ehci-hcd drivers/usb/host/Kconfig|6 +- drivers/usb/host/ehci-cns3xxx.c | 155 --- drivers/usb/host/ehci-hcd.c |5 -- 3 files changed, 5 insertions(+), 161 deletions(-) delete mode 100644 drivers/usb/host/ehci-cns3xxx.c diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index b1deb0f..15304e7 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -215,9 +215,13 @@ config USB_W90X900_EHCI Enables support for the W90X900 USB controller config USB_CNS3XXX_EHCI - bool "Cavium CNS3XXX EHCI Module" + bool "Cavium CNS3XXX EHCI Module (DEPRECATED)" depends on USB_EHCI_HCD && ARCH_CNS3XXX + select USB_EHCI_HCD_PLATFORM ---help--- + This option is deprecated now and the driver was removed, use + USB_EHCI_HCD_PLATFORM instead. + Enable support for the CNS3XXX SOC's on-chip EHCI controller. It is needed for high-speed (480Mbit/sec) USB 2.0 device support. diff --git a/drivers/usb/host/ehci-cns3xxx.c b/drivers/usb/host/ehci-cns3xxx.c deleted file mode 100644 index d91708d..000 --- a/drivers/usb/host/ehci-cns3xxx.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2008 Cavium Networks - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License, Version 2, as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include - -static int cns3xxx_ehci_init(struct usb_hcd *hcd) -{ - struct ehci_hcd *ehci = hcd_to_ehci(hcd); - int retval; - - /* -* EHCI and OHCI share the same clock and power, -* resetting twice would cause the 1st controller been reset. -* Therefore only do power up at the first up device, and -* power down at the last down device. -* -* Set USB AHB INCR length to 16 -*/ - if (atomic_inc_return(&usb_pwr_ref) == 1) { - cns3xxx_pwr_power_up(1 << PM_PLL_HM_PD_CTRL_REG_OFFSET_PLL_USB); - cns3xxx_pwr_clk_en(1 << PM_CLK_GATE_REG_OFFSET_USB_HOST); - cns3xxx_pwr_soft_rst(1 << PM_SOFT_RST_REG_OFFST_USB_HOST); - __raw_writel((__raw_readl(MISC_CHIP_CONFIG_REG) | (0X2 << 24)), - MISC_CHIP_CONFIG_REG); - } - - ehci->caps = hcd->regs; - - hcd->has_tt = 0; - - retval = ehci_setup(hcd); - if (retval) - return retval; - - ehci_port_power(ehci, 0); - - return retval; -} - -static const struct hc_driver cns3xxx_ehci_hc_driver = { - .description= hcd_name, - .product_desc = "CNS3XXX EHCI Host Controller", - .hcd_priv_size = sizeof(struct ehci_hcd), - .irq= ehci_irq, - .flags = HCD_MEMORY | HCD_USB2, - .reset = cns3xxx_ehci_init, - .start = ehci_run, - .stop = ehci_stop, - .shutdown = ehci_shutdown, - .urb_enqueue= ehci_urb_enqueue, - .urb_dequeue= ehci_urb_dequeue, - .endpoint_disable = ehci_endpoint_disable, - .endpoint_reset = ehci_endpoint_reset, - .get_frame_number = ehci_get_frame, - .hub_status_data= ehci_hub_status_data, - .hub_control= ehci_hub_control, -#ifdef CONFIG_PM - .bus_suspend= ehci_bus_suspend, - .bus_resume = ehci_bus_resume, -#endif - .relinquish_port= ehci_relinquish_port, - .port_handed_over = ehci_port_handed_over, - - .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, -}; - -static int cns3xxx_ehci_probe(struct platform_device *pdev) -{ - struct device *dev = &pdev->dev; - struct usb_hcd *hcd; - const struct hc_driver *driver = &cns3xxx_ehci_hc_driver; - struct resource *res; - int irq; - int retval; - - if (usb_disabled()) - return -ENODEV; - - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!res) { - dev_err(dev, "Found HC with no IRQ.\n"); - return -ENODEV; - } - irq = res->start; - - hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev)); - if (!hcd) - return -ENOMEM; - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(dev, "Found HC with no register addr.\n"); - retval = -ENODEV; - goto err1; - } - - hcd->rsrc_start = res->start; - hcd->rsrc_len = r
[PATCH 08/24 v2] USB: EHCI: remove Alchemy EHCI driver
The platform code has been converted to use the ehci-platform driver instead thus obsoleting the ehci-au1xxx driver, which can be removed. Signed-off-by: Florian Fainelli --- Changes since v1: - reworded commit message drivers/usb/host/ehci-au1xxx.c | 184 drivers/usb/host/ehci-hcd.c|5 -- 2 files changed, 189 deletions(-) delete mode 100644 drivers/usb/host/ehci-au1xxx.c diff --git a/drivers/usb/host/ehci-au1xxx.c b/drivers/usb/host/ehci-au1xxx.c deleted file mode 100644 index 65c945e..000 --- a/drivers/usb/host/ehci-au1xxx.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * EHCI HCD (Host Controller Driver) for USB. - * - * Bus Glue for AMD Alchemy Au1xxx - * - * Based on "ohci-au1xxx.c" by Matt Porter - * - * Modified for AMD Alchemy Au1200 EHC - * by K.Boge - * - * This file is licenced under the GPL. - */ - -#include -#include - - -extern int usb_disabled(void); - -static int au1xxx_ehci_setup(struct usb_hcd *hcd) -{ - struct ehci_hcd *ehci = hcd_to_ehci(hcd); - int ret; - - ehci->caps = hcd->regs; - ret = ehci_setup(hcd); - - ehci->need_io_watchdog = 0; - return ret; -} - -static const struct hc_driver ehci_au1xxx_hc_driver = { - .description= hcd_name, - .product_desc = "Au1xxx EHCI", - .hcd_priv_size = sizeof(struct ehci_hcd), - - /* -* generic hardware linkage -*/ - .irq= ehci_irq, - .flags = HCD_MEMORY | HCD_USB2, - - /* -* basic lifecycle operations -* -* FIXME -- ehci_init() doesn't do enough here. -* See ehci-ppc-soc for a complete implementation. -*/ - .reset = au1xxx_ehci_setup, - .start = ehci_run, - .stop = ehci_stop, - .shutdown = ehci_shutdown, - - /* -* managing i/o requests and associated device resources -*/ - .urb_enqueue= ehci_urb_enqueue, - .urb_dequeue= ehci_urb_dequeue, - .endpoint_disable = ehci_endpoint_disable, - .endpoint_reset = ehci_endpoint_reset, - - /* -* scheduling support -*/ - .get_frame_number = ehci_get_frame, - - /* -* root hub support -*/ - .hub_status_data= ehci_hub_status_data, - .hub_control= ehci_hub_control, - .bus_suspend= ehci_bus_suspend, - .bus_resume = ehci_bus_resume, - .relinquish_port= ehci_relinquish_port, - .port_handed_over = ehci_port_handed_over, - - .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, -}; - -static int ehci_hcd_au1xxx_drv_probe(struct platform_device *pdev) -{ - struct usb_hcd *hcd; - struct resource *res; - int ret; - - if (usb_disabled()) - return -ENODEV; - - if (pdev->resource[1].flags != IORESOURCE_IRQ) { - pr_debug("resource[1] is not IORESOURCE_IRQ"); - return -ENOMEM; - } - hcd = usb_create_hcd(&ehci_au1xxx_hc_driver, &pdev->dev, "Au1xxx"); - if (!hcd) - return -ENOMEM; - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - hcd->rsrc_start = res->start; - hcd->rsrc_len = resource_size(res); - - hcd->regs = devm_request_and_ioremap(&pdev->dev, res); - if (!hcd->regs) { - pr_debug("devm_request_and_ioremap failed"); - ret = -ENOMEM; - goto err1; - } - - if (alchemy_usb_control(ALCHEMY_USB_EHCI0, 1)) { - printk(KERN_INFO "%s: controller init failed!\n", pdev->name); - ret = -ENODEV; - goto err1; - } - - ret = usb_add_hcd(hcd, pdev->resource[1].start, - IRQF_SHARED); - if (ret == 0) { - platform_set_drvdata(pdev, hcd); - return ret; - } - - alchemy_usb_control(ALCHEMY_USB_EHCI0, 0); -err1: - usb_put_hcd(hcd); - return ret; -} - -static int ehci_hcd_au1xxx_drv_remove(struct platform_device *pdev) -{ - struct usb_hcd *hcd = platform_get_drvdata(pdev); - - usb_remove_hcd(hcd); - alchemy_usb_control(ALCHEMY_USB_EHCI0, 0); - usb_put_hcd(hcd); - platform_set_drvdata(pdev, NULL); - - return 0; -} - -#ifdef CONFIG_PM -static int ehci_hcd_au1xxx_drv_suspend(struct device *dev) -{ - struct usb_hcd *hcd = dev_get_drvdata(dev); - bool do_wakeup = device_may_wakeup(dev); - int rc; - - rc = ehci_suspend(hcd, do_wakeup); - alchemy_usb_control(ALCHEMY_USB_EHCI0, 0); - - return rc; -} - -static int ehci_hcd_au1xxx_drv_resume(struct device *dev) -{ - struct usb_hcd *hcd = dev_get_drvdata(dev); - - alchemy_usb_control(ALCHEMY_USB_EHCI0, 1); - eh
[PATCH 04/24 v2] MIPS: Netlogic: use ehci-platform driver
The EHCI platform driver is suitable for use by the Netlogic XLR platform since there is nothing specific that the EHCI XLR platform driver does. Signed-off-by: Florian Fainelli --- Changes since v1: - really change driver name to "ehci-platform" - slightly reworded commit message arch/mips/netlogic/xlr/platform.c |8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/mips/netlogic/xlr/platform.c b/arch/mips/netlogic/xlr/platform.c index 71b44d8..144c5c6 100644 --- a/arch/mips/netlogic/xlr/platform.c +++ b/arch/mips/netlogic/xlr/platform.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -123,8 +124,12 @@ static u64 xls_usb_dmamask = ~(u32)0; }, \ } +static struct usb_ehci_pdata xls_usb_ehci_pdata = { + .caps_offset= 0, +}; + static struct platform_device xls_usb_ehci_device = -USB_PLATFORM_DEV("ehci-xls", 0, PIC_USB_IRQ); +USB_PLATFORM_DEV("ehci-platform", 0, PIC_USB_IRQ); static struct platform_device xls_usb_ohci_device_0 = USB_PLATFORM_DEV("ohci-xls-0", 1, PIC_USB_IRQ); static struct platform_device xls_usb_ohci_device_1 = @@ -172,6 +177,7 @@ int xls_platform_usb_init(void) memres = CPHYSADDR((unsigned long)usb_mmio); xls_usb_ehci_device.resource[0].start = memres; xls_usb_ehci_device.resource[0].end = memres + 0x400 - 1; + xls_usb_ehci_device.dev.platform_data = &xls_usb_ehci_pdata; memres += 0x400; xls_usb_ohci_device_0.resource[0].start = memres; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 00/24 v2] USB: OHCI and EHCI platform driver conversions
Hi all, This patch series contains various EHCI and OHCI conversions as well as some cleanups in the existing OHCI HCD driver regarding suspend/resume as suggested by Alan Stern. Changes since previous version summed up are: - improved various commit messages - changed the logic regarding need_io_watchdog - fixed arch/ files not using {e,o}hci-platform despite their "conversion" - updated more defconfigs - cleaned up OHCI HCD driver - dropped Octeon conversion per David Daney's request Per-patch changes are detailed in the patches. Thanks! Florian Fainelli (24): USB: EHCI: remove IXP4xx EHCI driver MIPS: Loongson 1B: use ehci-platform instead of ehci-ls1x. USB: EHCI: remove Loongson 1B EHCI driver. MIPS: Netlogic: use ehci-platform driver USB: EHCI: remove Netlogic XLS EHCI driver USB: EHCI: add no_io_watchdog platform_data parameter to ehci-platform MIPS: Alchemy: use the ehci platform driver USB: EHCI: remove Alchemy EHCI driver ARM: cns3xxx: use ehci platform driver USB: EHCI: remove CNS3xxx EHCI platform driver USB: ohci: allow platform driver to specify the number of ports USB: ohci: move ohci_pci_{suspend,resume} to ohci-hcd.c USB: ohci: remove check for RH already suspended in ohci_suspend USB: ohci: merge ohci_finish_controller_resume with ohci_resume MIPS: PNX8550: use OHCI platform driver USB: OHCI: remove PNX8550 OHCI driver ARM: cns3xxx: use OHCI platform driver USB: OHCI: remove CNS3xxx OHCI platform driver MIPS: Netlogic: convert to use OHCI platform driver USB: OHCI: remove Netlogic XLS OHCI platform driver sh: convert boards to use the OHCI platform driver USB: OHCI: remove OHCI SH platform driver MIPS: Alchemy: use the OHCI platform driver USB: OHCI: remove Alchemy OHCI platform driver. arch/arm/mach-cns3xxx/cns3420vb.c | 54 ++- arch/mips/alchemy/common/platform.c| 58 +++- arch/mips/configs/db1000_defconfig |1 + arch/mips/configs/db1200_defconfig |2 + arch/mips/configs/db1300_defconfig |2 + arch/mips/configs/db1550_defconfig |1 + arch/mips/configs/gpr_defconfig|1 + arch/mips/configs/ls1b_defconfig |1 + arch/mips/configs/mtx1_defconfig |1 + arch/mips/configs/pb1100_defconfig |1 + arch/mips/configs/pb1500_defconfig |1 + arch/mips/configs/pb1550_defconfig |1 + arch/mips/loongson1/common/platform.c |8 +- arch/mips/netlogic/xlr/platform.c | 17 ++- arch/mips/pnx8550/common/platform.c| 31 +++- arch/sh/kernel/cpu/sh3/setup-sh7720.c |6 +- arch/sh/kernel/cpu/sh4a/setup-sh7757.c |6 +- arch/sh/kernel/cpu/sh4a/setup-sh7763.c |6 +- arch/sh/kernel/cpu/sh4a/setup-sh7786.c |6 +- drivers/usb/host/Kconfig | 18 ++- drivers/usb/host/ehci-au1xxx.c | 184 drivers/usb/host/ehci-cns3xxx.c| 155 drivers/usb/host/ehci-hcd.c| 25 drivers/usb/host/ehci-ixp4xx.c | 139 -- drivers/usb/host/ehci-ls1x.c | 147 --- drivers/usb/host/ehci-platform.c |2 + drivers/usb/host/ehci-xls.c| 142 --- drivers/usb/host/ohci-at91.c |2 +- drivers/usb/host/ohci-au1xxx.c | 234 -- drivers/usb/host/ohci-cns3xxx.c| 166 -- drivers/usb/host/ohci-ep93xx.c |2 +- drivers/usb/host/ohci-exynos.c |5 +- drivers/usb/host/ohci-hcd.c| 94 drivers/usb/host/ohci-hub.c| 42 -- drivers/usb/host/ohci-omap.c |2 +- drivers/usb/host/ohci-pci.c| 43 +- drivers/usb/host/ohci-platform.c |6 +- drivers/usb/host/ohci-pnx8550.c| 243 drivers/usb/host/ohci-pxa27x.c |2 +- drivers/usb/host/ohci-s3c2410.c|3 +- drivers/usb/host/ohci-sh.c | 141 -- drivers/usb/host/ohci-spear.c |2 +- drivers/usb/host/ohci-tmio.c |2 +- drivers/usb/host/ohci-xls.c| 152 include/linux/usb/ehci_pdriver.h |3 + include/linux/usb/ohci_pdriver.h |2 + 46 files changed, 296 insertions(+), 1866 deletions(-) delete mode 100644 drivers/usb/host/ehci-au1xxx.c delete mode 100644 drivers/usb/host/ehci-cns3xxx.c delete mode 100644 drivers/usb/host/ehci-ixp4xx.c delete mode 100644 drivers/usb/host/ehci-ls1x.c delete mode 100644 drivers/usb/host/ehci-xls.c delete mode 100644 drivers/usb/host/ohci-au1xxx.c delete mode 100644 drivers/usb/host/ohci-cns3xxx.c delete mode 100644 drivers/usb/host/ohci-pnx8550.c delete mode 100644 drivers/usb/host/ohci-sh.c delete mode 100644 drivers/usb/host/ohci-xls.c -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vge
Re: [PATCH 04/25] MIPS: Netlogic: use ehci-platform driver
On Wednesday 03 October 2012 12:47:58 Alan Stern wrote: > On Wed, 3 Oct 2012, Florian Fainelli wrote: > > > Signed-off-by: Florian Fainelli > > IMO, patches should always have a non-empty changelog. Even if it is > relatively trivial. The same comment applies to several other patches > in this series. > > > --- > > arch/mips/netlogic/xlr/platform.c |6 ++ > > 1 file changed, 6 insertions(+) > > Does this need to enable CONFIG_USB_EHCI_HCD_PLATFORM is some > defconfig file, like you did with the MIPS Loongson 1B? Netlogic platforms have USB disabled by default in their defconfig, so I'd say no, but only for them. > > And likewise for quite a few of the other patches in this series. > > > diff --git a/arch/mips/netlogic/xlr/platform.c b/arch/mips/netlogic/xlr/platform.c > > index 71b44d8..1731dfd 100644 > > --- a/arch/mips/netlogic/xlr/platform.c > > +++ b/arch/mips/netlogic/xlr/platform.c > > @@ -15,6 +15,7 @@ > > #include > > #include > > #include > > +#include > > > > #include > > #include > > @@ -123,6 +124,10 @@ static u64 xls_usb_dmamask = ~(u32)0; > > }, \ > > } > > > > +static struct usb_ehci_pdata xls_usb_ehci_pdata = { > > + .caps_offset= 0, > > +}; > > + > > static struct platform_device xls_usb_ehci_device = > > USB_PLATFORM_DEV("ehci-xls", 0, PIC_USB_IRQ); > > static struct platform_device xls_usb_ohci_device_0 = > > @@ -172,6 +177,7 @@ int xls_platform_usb_init(void) > > memres = CPHYSADDR((unsigned long)usb_mmio); > > xls_usb_ehci_device.resource[0].start = memres; > > xls_usb_ehci_device.resource[0].end = memres + 0x400 - 1; > > + xls_usb_ehci_device.dev.platform_data = &xls_usb_ehci_pdata; > > > > memres += 0x400; > > xls_usb_ohci_device_0.resource[0].start = memres; > > Don't you need to change/set the pdev name also? Likewise for patch > 20/25 and 24/25. > > Alan Stern > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: some question about xhci spec
On Thu, 4 Oct 2012, loody wrote: > hi all: > in xhci spec rev1.0 05/21/10 section 6.2.3.4, there is a line said > "For SuperSpeed endpoints this field shall be set to the > value defined in the bMaxBurst field of the > SuperSpeed Endpoint Companion Descriptor. Refer to section 8.6.8 of > the USB3 Specification." > > but I cannot find section 8.6.8 in usb3 spec I download from usb.org. > > Does anyone can tell me where I can find this section? Section 9.6.7. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] usb: musb: am35xx: drop spurious unplugging a device
On AM3517, tx and rx interrupt are detected together with the disconnect event. This generates a kernel panic in musb_interrupt, because rx / tx are handled after disconnect. This issue was seen with Technexion's TAM3517 SOM. Unplugging a device, tx / rx interrupts togetehr with disconnect are detected. This brings to kernel panic like this: [ 68.526153] Unable to handle kernel NULL pointer dereference at virtual address 0011 [ 68.534698] pgd = c0004000 [ 68.537536] [0011] *pgd= [ 68.541351] Internal error: Oops: 17 [#1] ARM [ 68.545928] Modules linked in: [ 68.549163] CPU: 0Not tainted (3.6.0-rc5-00020-g9e05905 #178) [ 68.555694] PC is at rxstate+0x8/0xdc [ 68.559539] LR is at musb_interrupt+0x98/0x858 [ 68.564239] pc : []lr : []psr: 4193 [ 68.564239] sp : ce83fb40 ip : d0906410 fp : [ 68.576293] r10: r9 : cf3b0e40 r8 : 0002 [ 68.581817] r7 : 0019 r6 : 0001 r5 : 0001 r4 : 00d4 [ 68.588684] r3 : r2 : r1 : ffcc r0 : cf23c108 [ 68.595550] Flags: nZcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment ke Note: this behavior is not seen with a USB hub, while it is easy to reproduce connectict a USB-poen directly to the USB-A of the board. Drop tx / rx interrupts if disconnect is detected. Signed-off-by: Stefano Babic CC: Felipe Balbi --- drivers/usb/musb/am35x.c |6 ++ 1 file changed, 6 insertions(+) diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c index b9b165b..b5c813a 100644 --- a/drivers/usb/musb/am35x.c +++ b/drivers/usb/musb/am35x.c @@ -312,6 +312,12 @@ static irqreturn_t am35x_musb_interrupt(int irq, void *hci) ret = IRQ_HANDLED; } + /* Drop spurious RX and TX if device is disconnected */ + if (musb->int_usb & MUSB_INTR_DISCONNECT) { + musb->int_tx = 0; + musb->int_rx = 0; + } + if (musb->int_tx || musb->int_rx || musb->int_usb) ret |= musb_interrupt(musb); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 20/25] MIPS: Netlogic: convert to use OHCI platform driver
On 3 October 2012 17:03, Florian Fainelli wrote: > Signed-off-by: Florian Fainelli > --- > arch/mips/netlogic/xlr/platform.c |5 + > 1 file changed, 5 insertions(+) > > diff --git a/arch/mips/netlogic/xlr/platform.c > b/arch/mips/netlogic/xlr/platform.c > index 320b7ef..755ddcc 100644 > --- a/arch/mips/netlogic/xlr/platform.c > +++ b/arch/mips/netlogic/xlr/platform.c > @@ -16,6 +16,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -129,6 +130,8 @@ static struct usb_ehci_pdata xls_usb_ehci_pdata = { > .need_io_watchdog = 1, > }; > > +static struct usb_ohci_pdata xls_usb_ohci_pdata; > + > static struct platform_device xls_usb_ehci_device = > USB_PLATFORM_DEV("ehci-xls", 0, PIC_USB_IRQ); > static struct platform_device xls_usb_ohci_device_0 = And change after the device names of the ohci devices to "ohci-platform"? > @@ -183,10 +186,12 @@ int xls_platform_usb_init(void) > memres += 0x400; > xls_usb_ohci_device_0.resource[0].start = memres; > xls_usb_ohci_device_0.resource[0].end = memres + 0x400 - 1; > + xls_usb_ohci_device_0.dev.platform_data = &xls_usb_ohci_pdata; > > memres += 0x400; > xls_usb_ohci_device_1.resource[0].start = memres; > xls_usb_ohci_device_1.resource[0].end = memres + 0x400 - 1; > + xls_usb_ohci_device_1.dev.platform_data = &xls_usb_ohci_pdata; > > return platform_add_devices(xls_platform_devices, > ARRAY_SIZE(xls_platform_devices)); > -- > 1.7.9.5 Jonas -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 04/25] MIPS: Netlogic: use ehci-platform driver
On 3 October 2012 17:02, Florian Fainelli wrote: > Signed-off-by: Florian Fainelli > --- > arch/mips/netlogic/xlr/platform.c |6 ++ > 1 file changed, 6 insertions(+) > > diff --git a/arch/mips/netlogic/xlr/platform.c > b/arch/mips/netlogic/xlr/platform.c > index 71b44d8..1731dfd 100644 > --- a/arch/mips/netlogic/xlr/platform.c > +++ b/arch/mips/netlogic/xlr/platform.c > @@ -15,6 +15,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -123,6 +124,10 @@ static u64 xls_usb_dmamask = ~(u32)0; > }, \ > } > > +static struct usb_ehci_pdata xls_usb_ehci_pdata = { > + .caps_offset= 0, > +}; > + > static struct platform_device xls_usb_ehci_device = > USB_PLATFORM_DEV("ehci-xls", 0, PIC_USB_IRQ); Don't you also need to change this to "ehci-platform"? > static struct platform_device xls_usb_ohci_device_0 = > @@ -172,6 +177,7 @@ int xls_platform_usb_init(void) > memres = CPHYSADDR((unsigned long)usb_mmio); > xls_usb_ehci_device.resource[0].start = memres; > xls_usb_ehci_device.resource[0].end = memres + 0x400 - 1; > + xls_usb_ehci_device.dev.platform_data = &xls_usb_ehci_pdata; > > memres += 0x400; > xls_usb_ohci_device_0.resource[0].start = memres; > -- > 1.7.9.5 Jonas -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] USB: ohci-exynos: use devm_clk_get()
The devm_ functions allocate memory that is released when a driver detaches. This patch uses devm_clk_get() for these functions. Signed-off-by: Jingoo Han --- drivers/usb/host/ohci-exynos.c |7 ++- 1 files changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c index 7bca600..1b394ed 100644 --- a/drivers/usb/host/ohci-exynos.c +++ b/drivers/usb/host/ohci-exynos.c @@ -115,7 +115,7 @@ static int __devinit exynos_ohci_probe(struct platform_device *pdev) } exynos_ohci->hcd = hcd; - exynos_ohci->clk = clk_get(&pdev->dev, "usbhost"); + exynos_ohci->clk = devm_clk_get(&pdev->dev, "usbhost"); if (IS_ERR(exynos_ohci->clk)) { dev_err(&pdev->dev, "Failed to get usbhost clock\n"); @@ -125,7 +125,7 @@ static int __devinit exynos_ohci_probe(struct platform_device *pdev) err = clk_prepare_enable(exynos_ohci->clk); if (err) - goto fail_clken; + goto fail_clk; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { @@ -168,8 +168,6 @@ static int __devinit exynos_ohci_probe(struct platform_device *pdev) fail_io: clk_disable_unprepare(exynos_ohci->clk); -fail_clken: - clk_put(exynos_ohci->clk); fail_clk: usb_put_hcd(hcd); return err; @@ -187,7 +185,6 @@ static int __devexit exynos_ohci_remove(struct platform_device *pdev) pdata->phy_exit(pdev, S5P_USB_PHY_HOST); clk_disable_unprepare(exynos_ohci->clk); - clk_put(exynos_ohci->clk); usb_put_hcd(hcd); -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html