aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb/musb
AgeCommit message (Collapse)AuthorFilesLines
2015-04-27usb: musb: fix inefficient copy of unaligned buffersJohan Hovold1-2/+7
Make sure only to copy any actual data rather than the whole buffer, when releasing the temporary buffer used for unaligned non-isochronous transfers. Signed-off-by: Johan Hovold <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-04-10Merge tag 'usb-for-v4.1-part2' of ↵Greg Kroah-Hartman2-4/+5
git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-testing Felipe writes: usb: generic resume timeout for v4.1 This part 2 pull request contains only the patches which make sure everybody on linux uses the same resume timeout value. Signed-off-by: Felipe Balbi <[email protected]>
2015-04-07usb: musb: use new USB_RESUME_TIMEOUTFelipe Balbi2-4/+5
Make sure we're using the new macro, so our resume signaling will always pass certification. Based on original work by Bin Liu <Bin Liu <[email protected]>> Cc: Bin Liu <[email protected]> Cc: <[email protected]> # v3.10+ Signed-off-by: Felipe Balbi <[email protected]>
2015-04-03usb: musb: dsps: fix build on i386 when COMPILE_TEST is setTony Lindgren1-1/+1
Commit 3e457371f436 ("usb: musb: Fix fifo reads for dm816x with musb_dsps") fixed a USB error on dm816x, but introduced a new build error on i386 when COMPILE_TEST is set: drivers/usb/musb/musb_dsps.c: In function ‘dsps_read_fifo32’: drivers/usb/musb/musb_dsps.c:624:3: error: implicit declaration of function ‘readsl’ [-Werror=implicit-function-declaration] readsl(fifo, dst, len >> 2); Let's fix this by using ioread32_rep() instead of readsl() as that's more portable. Fixes: 3e457371f436 ("usb: musb: Fix fifo reads for dm816x with musb_dsps") Reported-by: Fengguang Wu <[email protected]> Cc: Bin Liu <[email protected]> Cc: Brian Hutchinson <[email protected]> Cc: George Cherian <[email protected]> Cc: Sergei Shtylyov <[email protected]> Signed-off-by: Tony Lindgren <[email protected]> Signed-off-by: Felipe Balbi <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2015-04-03musb_virthub: use USB_DT_HUBSergei Shtylyov1-1/+1
Fix using the bare number to set the 'bDescriptorType' field of the Hub Descriptor while the value is #define'd in <linux/usb/ch11.h>. Signed-off-by: Sergei Shtylyov <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2015-03-24Merge tag 'usb-for-v4.1' of ↵Greg Kroah-Hartman5-256/+201
git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next Felipe writes: usb: patches for v4.1 merge window As usual, a big pile of commits. This time a total of 111 non-merge commits. Other than the usual set of cleanups and non-critical fixes, we have some interesting work for AM335x's MUSB babble recovery. Now that takes a lot less time and we don't have to Reset MUSB all the time. The printer gadget has been converted to configfs interface and the atmel udc has learned suspend/resume with wakeup. Signed-off-by: Felipe Balbi <[email protected]>
2015-03-24usb: musb: Fix fifo reads for dm816x with musb_dspsTony Lindgren1-1/+24
Looks like dm81xx can only do 32-bit fifo reads like am35x. Let's set up musb-dsps with a custom read_fifo function based on the compatible flag. Otherwise we can get the following errors when starting dhclient on a asix USB Ethernet adapter: asix 2-1:1.0 eth2: asix_rx_fixup() Bad Header Length 0xffff003c, offset 4 While at it, let's also remove pointless cast of the driver data. Cc: Bin Liu <[email protected]> Cc: Brian Hutchinson <[email protected]> Cc: George Cherian <[email protected]> Cc: Sergei Shtylyov <[email protected]> Signed-off-by: Tony Lindgren <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-11usb: musb: cppi41: fix condition to call cppi41_trans_done().Takeyoshi Kikuchi1-2/+4
connect AR9271(USB wifi) to AM335x, and send a flood ping from Mac OSX, AR9271 is stopped. on USB bus, the following occurs. - OUT transaction is ACKed (NYET). - IN transaction is ACKed (512bytes). - PING-NAK transaction is continued for about 2 seconds (AR9271 timeout?). In current imprementation, IN-transaction is not completed because it checks the empty of TX-FIFO in cppi41_dma_callback(). As a result, communication to AR9271 stops. This patch modified to check the empty of TX-FIFO only when OUT-transaction. Signed-off-by: Takeyoshi Kikuchi <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-11usb: musb: dsps: don't fake of_node to musb coreFelipe Balbi1-1/+0
If we pass our own of_node to musb_core, at least pinctrl settings will be duplicated, meaning that pinctrl framework will try to select default pin state for musb_core when they were already requested by musb-dsps. A Warning will be printed however things will still work. Reported-by: Tony Lindgren <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-11usb: musb: dsps: request phy using our device pointerFelipe Balbi1-1/+1
musb shouldn't have of_node and phy phandle is passed to dsps device, not musb's. Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: dsps: just start polling alreadyFelipe Balbi1-3/+2
there's no need to fake an IRQ, just check if VBUS is valid already. Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: dsps: use msecs_to_jiffies insteadFelipe Balbi1-7/+10
when polling, we were using n * HZ (where n is an integer in seconds), however HZ isn't always correct if we're using cpufreq. A better way is to use msecs_to_jiffies(n) (where n is now an integer in miliseconds). while at that, also rename poll_seconds to poll_timeout and change its type to unsigned int. Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: cppi41: do not call udelay()Felipe Balbi1-1/+1
according to comment in code, HS completion will happen pretty fast, instead of using udelay(), let's just busy loop and drop a cpu_relax() where udelay() was. Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: cppi41: exit early when tx fifo is emptyFelipe Balbi1-8/+4
as soon as we find out tx fifo is empty, there's no need to break out of the loop just to have another branch to complete the transfer. We can just complete transfer and exit early. Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: cppi41: decrease indentation levelFelipe Balbi1-43/+45
no functional changes, clean up only. Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: always try to recover from babbleFelipe Balbi1-16/+6
we can also have babble conditions with LS/FS and we also want to recover in that case. Because of that we will drop the check of HSMODE and always try to run babble recovery. Suggested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: disable irqs inside babble recoveryFelipe Balbi1-4/+3
There's no point is splitting those anymore. We're now also able to drop another forward declaration. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: remove unnecessary forward declarationFelipe Balbi1-1/+0
no functional changes, cleanup only. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: drop recover_workFelipe Balbi2-9/+9
that's not needed anymore. Everything that we call is irq-safe, so we might as well not have a delayed work for babble recovery. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: rename ->reset() to ->recover()Felipe Balbi3-9/+10
recover is a much better name than reset, considering we don't really reset the IP, just run platform-specific babble recovery algorithm. while at that, also fix a typo in comment and add kdoc for recover memeber of platform_ops. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: simplify musb_recover_work()Felipe Balbi1-9/+12
we're not resetting musb at all, just restarting the session. This means we don't need to touch PHYs or VBUS or anything like that. Just make sure session bit is reenabled after MUSB dropped it. while at that, make sure to tell usbcore that we're dropping the session and, thus, disconnecting the device. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: dsps: do not reset musb on babbleFelipe Balbi1-21/+2
All we have to do is, really, drop session bit and let the session restart. Big thanks goes to Bin Liu <[email protected]> for inspiring this work. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: decrease delayed_work timeFelipe Balbi1-1/+1
When babble IRQ happens, we need to wait only 5.3us (320 cycles of 60MHz clock), we will give it some slack and schedule our work a 10 usecs into the future. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: don't touch devctl from babble recoveryFelipe Balbi1-2/+4
We do *not* want to touch devctl at all when trying to recover from babble. All we want to do is mask IRQs until we're done without our babble recovery, at which point we will unmask IRQs. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: refactor IRQ enable/disable to separate functionsFelipe Balbi1-11/+26
sometimes we want to just mask/unmask interrupts without touching devctl register. For those cases, let's introduce musb_enable_interrupts and musb_disable_interrupts() Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: dsps: add dsps_ prefix to sw_babble_controlFelipe Balbi1-2/+2
this makes it easier to filter function traces. No functional changes. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: controller drops session automaticallyFelipe Balbi1-1/+0
Whenever babble happens, MUSB controller will drop session automatically. The only case where it won't drop the session, is when we're running on AM335x and SW_SESSION_CTRL bit has been set. In that case, controller will not touch session bit so SW has a chance to recover from babble condition. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: dsps: check for the single bitFelipe Balbi1-1/+1
We want to check if that particular bit is set. It could very well be that bootloader (or romcode) has fiddled with MUSB before us which could leave other bits set in this register. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: dsps: remove babble check from dsps irq handlerFelipe Balbi2-23/+1
musb->int_usb already contains the correct information for musb-core to handle babble. In fact, this very check was just causing a nonsensical babble interrupt storm. With this I can get test.sh to run and, even though all tests fail with timeout, that's still better than locking up the system due to IRQ storm. Also, if I remove g_zero and load g_mass_storage, then everything works fine again. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: there is no connect interrupt in peripheral modeFelipe Balbi1-4/+0
MUSB does not generate a connect IRQ when working in peripheral mode. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: remove unnecessary reg access from resume IRQFelipe Balbi1-15/+0
when musb is operating as host and a remote wakeup fires up, a resume interrupt will be raised. At that point SUSPENDM bit is automatically cleared and RESUME bit is automatically set. Remove those two from IRQ handler. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: break long lineFelipe Balbi1-1/+2
no functional changes, clean up only. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: move babble recovery inside babble checkFelipe Balbi1-7/+6
There was already a proper place where we were checking for babble interrupts, move babble recovery there. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: dsps: return error code if reset failsFelipe Balbi1-1/+1
if reset fails, we should return a *negative* error code, not a positive value. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: fix highspeed checkFelipe Balbi1-7/+14
FSDEV is set for both HIGH and FULL speeds, the correct HIGHSPEED check is done through power register's HSMODE bit. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: add missing curly bracesFelipe Balbi1-2/+2
no functional changes, clean up only. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-10usb: musb: core: remove unnecessary logical comparisonFelipe Balbi1-1/+1
devctl & MUSB_DEVCTL_HM represents a single bit, just check for the bit, there's really no need to compare the result against 0. Tested-by: Bin Liu <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-09usb: musb: fix Kconfig regressionArnd Bergmann1-1/+2
A recent bug fix I did that was marked for stable backports introduced a slightly wrong dependency on CONFIG_OMAP_CONTROL_PHY. I was missing the fact that the PHY driver already stubs out the omap_control_usb_set_mode, and we only need to add a dependency to prevent the musb-omap2430 driver from being built-in when the phy driver is a loadable module, but we should not prevent it from being built altogether when the phy driver is disabled. Signed-off-by: Arnd Bergmann <[email protected]> Fixes: ca784be36cc725 ("usb: start using the control module driver") Cc: <[email protected]> # v3.9+ Acked-by: Acked-by: Pavel Machek <[email protected]> Tested-by: Aaro Koskinen <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-09usb: musb: core: improve musb_interrupt() a bitFelipe Balbi1-28/+24
instead of using manually spelled out bit-shits and iterate over each of the 16-bits (one for each endpoint) on each direction, we can make use of for_each_set_bit() which internally uses find_first_bit(). This makes the code slightly more readable while also making we only iterate over bits which are actually set. Signed-off-by: Felipe Balbi <[email protected]>
2015-03-09usb: musb: core: fix TX/RX endpoint orderFelipe Balbi1-18/+26
As per Mentor Graphics' documentation, we should always handle TX endpoints before RX endpoints. This patch fixes that error while also updating some hard-to-read comments which were scattered around musb_interrupt(). This patch should be backported as far back as possible since this error has been in the driver since it's conception. Cc: <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-03-09usb: musb: gadget: get rid of stop_activity()Felipe Balbi1-39/+1
that function is pretty close to a no-op by now, all we need is a call to musb_stop(). Signed-off-by: Felipe Balbi <[email protected]>
2015-02-23usb: musb: Fix getting a generic phy for musb_dspsTony Lindgren1-1/+24
We still have a combination of legacy phys and generic phys in use so we need to support both types of phy for musb_dsps.c. Cc: Brian Hutchinson <[email protected]> Signed-off-by: Tony Lindgren <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-02-23usb: musb: Fix use for of_property_read_bool for disabled multipointTony Lindgren2-4/+10
The value for the multipoint dts property is ignored when parsing with of_property_read_bool, so we currently have multipoint always set as 1 even if value 0 is specified in the dts file. Let's fix this to read the value too instead of just the property like the binding documentation says as otherwise MUSB will fail to work on devices with Mentor configuration that does not support multipoint. Cc: Brian Hutchinson <[email protected]> Signed-off-by: Tony Lindgren <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-02-23usb: musb: core: add pm_runtime_irq_safe()Felipe Balbi1-4/+6
We need a pm_runtime_get_sync() call from within musb_gadget_pullup() to make sure registers are accessible at that time. The problem is that musb_gadget_pullup() is called with IRQs disabled and, because of that, we need to tell pm_runtime that this pm_runtime_get_sync() is IRQ safe. We can simply add pm_runtime_irq_safe(), however, because we need to make our read/write accessor function pointers have been initialized before trying to use them. This means that all pm_runtime initialization for musb_core needs to be moved down so that when we call pm_runtime_irq_safe(), the pm_runtime_get_sync() that it calls on the parent, won't cause a crash due to NULL musb_read/write accessors. Reported-by: Pali Rohár <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-02-23usb: musb: musb_host: Enable HCD_BH flag to handle urb return in bottom halfGeorge Cherian1-1/+1
Enable HCD_BH flag for musb host controller driver. This improves the MSC/UVC through put. With this enabled even 640x480@30fps webcam streaming is also supported. Signed-off-by: George Cherian <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-02-04usb: musb: fix device hotplug behind hubBin Liu2-1/+7
The commit 889ad3b "usb: musb: try a race-free wakeup" breaks device hotplug enumeraitonn when the device is connected behind a hub while usb autosuspend is enabled. Adding finish_resume_work into runtime resume callback fixes the issue. Also resume root hub is required to resume the bus from runtime suspend, so move musb_host_resume_root_hub() back to its original location, where handles RESUME interrupt. Signed-off-by: Bin Liu <[email protected]> Tested-by: Tony Lindgren <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-02-02usb: musb: blackfin: remove incorrect __exit_p()Dmitry Torokhov1-1/+1
bfin_remove() is not (nor should it be) marked as __exit, so we should not be using __exit_p() wrapper with it, otherwise unbinding through sysfs does not work properly. Signed-off-by: Dmitry Torokhov <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-01-29usb: musb: add omap-control dependencyArnd Bergmann1-1/+1
The omap musb front-end calls into the phy driver directly instead of using a generic phy interface, which causes a link error when the specific driver is not built-in: drivers/built-in.o: In function `omap2430_musb_disable': usb/musb/omap2430.c:480: undefined reference to `omap_control_usb_set_mode' drivers/built-in.o: In function `omap2430_musb_enable': usb/musb/omap2430.c:466: undefined reference to `omap_control_usb_set_mode' usb/musb/omap2430.c:447: undefined reference to `omap_control_usb_set_mode' drivers/built-in.o: In function `omap_musb_set_mailbox': usb/musb/omap2430.c:273: undefined reference to `omap_control_usb_set_mode' usb/musb/omap2430.c:304: undefined reference to `omap_control_usb_set_mode' drivers/built-in.o:(.debug_addr+0xbd9e0): more undefined references to `omap_control_usb_set_mode' follow This adds an explicit dependency. Signed-off-by: Arnd Bergmann <[email protected]> Fixes: ca784be36cc725 ("usb: start using the control module driver") Cc: <[email protected]> # v3.9+ Signed-off-by: Felipe Balbi <[email protected]>
2015-01-29usb: musb: add generic usb phy dependenciesArnd Bergmann1-0/+5
Multiple musb glue drivers depend on the generic usb phy support, but fail to list it as a dependency in Kconfig. This results in build erros like: drivers/built-in.o: In function `am35x_remove': :(.text+0xadacc): undefined reference to `usb_phy_generic_unregister' drivers/built-in.o: In function `am35x_probe': :(.text+0xae1c8): undefined reference to `usb_phy_generic_register' :(.text+0xae244): undefined reference to `usb_phy_generic_unregister' drivers/built-in.o: In function `jz4740_remove': :(.text+0xaf648): undefined reference to `usb_phy_generic_unregister' drivers/built-in.o: In function `jz4740_musb_init': :(.text+0xaf694): undefined reference to `usb_phy_generic_register' This adds the ones that are missing. Signed-off-by: Arnd Bergmann <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2015-01-29usb: musb: gadget: use common is_selfpoweredPeter Chen2-4/+2
Delete private selfpowered variable, and use common one. Signed-off-by: Peter Chen <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>