aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
Commit message (Collapse)AuthorAge
...
* ENGR00292408-1 usb: chipidea: add query_available_role interfacePeter Chen2014-04-16
| | | | | | | The glue layer may need to know current available role, add ci_hdrc_query_available_role for that. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00291282-6 usb: phy-nop: add the implementation of .set_suspendPeter Chen2014-04-16
| | | | | | | | Add clock enable/disable at .set_suspend if the PHY has suspend requirement, it can be benefit of power saving for phy and the whole system (parent clock may also be disabled). Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00291282-5 usb: phy-nop: defer clock prepare until PHY initPeter Chen2014-04-16
| | | | | | | | | | | It can avoid the problem that the prepare count is non-zero even nop PHY is un-used. In fact, the same operation is already at the lastest mainline code: https://git.kernel.org/cgit/linux/kernel/git/gregkh/usb.git/commit/drivers /usb/phy/phy-generic.c?h=usb-next&id=4d175f340c9c055482688d2205038413dc7b6f1e Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00291282-4 usb: chipidea: imx: add HSIC supportPeter Chen2014-04-16
| | | | | | Add imx6 HSIC support Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00291876 usb: phy-mxs: add delay before set phyctrl.clkgatePeter Chen2014-04-16
| | | | | | | | | | There is a request from IC engineer that if we doesn't set phypwd as 0xffffffff, we need to delay about five 32Khz cycles before set phypwd, otherwise, the wakeup signal may can't wake up controller. Signed-off-by: Peter Chen <peter.chen@freescale.com> (cherry picked from commit a7a99b979db9d0bf7277533a3a39ba09755768f0)
* ENGR00289855 usb: chipidea: udc: pull down dp before the charger detectionPeter Chen2014-04-16
| | | | | | | If rom code or bootloader has used usb before loading kernel, the dp may still be pulled up, it will cause USB charger detection fail. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00290297 usb: imx6-usb-charger: disable charger if it has not configuratedPeter Chen2014-04-16
| | | | | | | | | | If the user set imx6-usb-charger-detection at dts, but not enable CONFIG_IMX6_USB_CHARGER, the imx6_usb_create_charger will return -ENODEV, and the controlller probe will fail, it is not we want, what we expect is the charger detection has disabled, but controller function should not be affected. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00289645 usb: chipidea: udc: don't do hardware access if gadget has stoppedPeter Chen2014-04-16
| | | | | | | | | | | | | | | | | | | | | After _gadget_stop_activity is executed, we can consider the hardware operation for gadget has finished, and the udc can be stopped and enter low power mode. So, any later hardware operations (from usb_ep_ops APIs or usb_gadget_ops APIs) should be considered invalid, any deinitializatons has been covered at _gadget_stop_activity. I meet this problem when I plug out usb cable from PC (using g_mass_storage), my callstack like: vbus interrupt->.vbus_session->composite_disconnect ->pm_runtime_put_sync(&_gadget->dev), the composite_disconnect will call fsg_disable, but fsg_disable calls usb_ep_disable using async way, there are register accesses for usb_ep_disable. So sometimes, I get system hang due to visit register without clock, sometimes not. The Linux Kernel USB maintainer Alan Stern suggests this kinds of solution. See: http://marc.info/?l=linux-usb&m=138541769810983&w=2. Signed-off-by: Peter Chen <peter.chen@freescale.com> (cherry picked from commit ac760d29366f19eb1a4d4c37899b33019570a447)
* ENGR00288578-8 usb: phy-mxs: do not set PWD.RXPWD1PT1 for low speed connectionPeter Chen2014-04-16
| | | | | | | | At very rare cases, the SoF will not send out after resume with low speed connection. The workaround is do not power down PWD.RXPWD1PT1 bit during the suspend. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00288578-7 usb: phy-mxs: add controller idPeter Chen2014-04-16
| | | | | | | Meanwhile, we fix the problem that we only use controller-1's related registers at mxs_phy_disconnect_line. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00288578-5 usb: chipidea: change some output messagePeter Chen2014-04-16
| | | | | | To reduce the message output when unload the module Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00288578-4 usb: chipidea: using timer to delay decreasing power.usage_countPeter Chen2014-04-16
| | | | | | | | We need to keep controller as active until the udc or host driver requests its power.usage_count, otherwise, the system will hang due to access register at low power mode. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00288578-3 usb: chipidea: only update ci->vbus_active at peripheral modePeter Chen2014-04-16
| | | | | | | | | If we connect between otg-host and host pc with Male-A-To-Male-A cable, the ci->vbus_active will be error, and cause the controller run when we load gadget module (ci_udc_start will be run), it causes the kernel panic since no one will handle irq at that mode. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00288578-2 usb: phy-mxs: Add sync time after controller clear phcdPeter Chen2014-04-16
| | | | | | | After clear portsc.phcd, PHY needs 200us time from switch 32K clock to AHB clock. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00288578-1 usb: chipidea: using correct low power timingPeter Chen2014-04-16
| | | | | | | After PHY leaves low power mode, the controller needs 2ms to reflect PHY's status correctly. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* usb: phy: phy-mxs-usb: set the correct platform drvdataJisheng Zhang2014-04-16
| | | | | | | | | We need to set mxs_phy rather as the platform drvdata so that we can get the correct mxs_phy in mxs_phy_remove(). Acked-by: Peter Chen <peter.chen@freescale.com> Acked-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
* ENGR00255359 usb: core: notify disconnection when core detects disconnectPeter Chen2014-04-16
| | | | | | | | | | | | | | | | | It is safe to call notify disconnect when the usb core thinks the device is disconnected. This commit also fixes one bug found at below situation: we have not enabled usb wakeup, we do suspend when there is an usb device at the port, after suspend, we plug out the usb device, then plug in device again. At that time, the nofity disconnect was not called at former code, as the controller doesn't know the usb device was disconnected during the suspend, but USB core knows, so to fix this problem, let the usb core call notify disconnect. Signed-off-by: Peter Chen <peter.chen@freescale.com> (cherry picked from commit 54d314b320e8adee0593d1bed045197f134cd9cc)
* ENGR00287992-6 usb: chipidea: imx: add usb charger detection for imx6Peter Chen2014-04-16
| | | | | | | | The usb controller driver creates usb charger, and notify the charger connect and disconnect using vbus connect and disconnect event. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00287992-5 usb: chipidea: msm: change the return value for msm notify_eventPeter Chen2014-04-16
| | | | | | The return value of .notify_event has changed. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00287992-4 usb: chipidea: Add usb charger detect notifyPeter Chen2014-04-16
| | | | | | | | | | | | | - Change .notify's return value from void to int. - Add CI_HDRC_CONTROLLER_CHARGER_EVENT and CI_HDRC_CONTROLLER_CHARGER_POST_EVENT to finish the USB charger detection flow. - Add usb_gadget_vbus_connect for only notify udc when vbus is on, the main reason we add it is we don't want the first notification when the vbus is off, it causes the dev->power.usage_count equals -1 when do charger detection. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286962-2 usb: chipidea: fix the system will be deadlock with ID wakeupPeter Chen2014-04-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we plug in Micro B-TO-A cable at OTG port with u-disk connected, and enable USB ID wakeup, then, suspend the system, the system will be deadlock during the resume. See below Sysrq dump. If the flush_work at block layer is called after system resume has completed, this problem has fixed (using pm_mutex at ci_otg_work). It seems if the task is rescheduled before the system resume has completed (after thaw_processes), it will cause the system dead lock. Unless the task has been freezed explicitly before system suspend. The fixes uses wait_event_freezable to wait event, it should call try_to_freeze during the freeze_processes, and task will not be scheduled until thaw_processes has called (for frozen process, it will call wake_up_process explicitly). --------------------------------------Sysrq dump------------------------------------------ sh D 80600860 0 1016 1014 0x00000000 [<80600860>] (__schedule+0x1e0/0x5d8) from [<80601274>] (schedule_preempt_disabled+0xc/0x10) [<80601274>] (schedule_preempt_disabled+0xc/0x10) from [<805ffe00>] (__mutex_lock_slowpath+0x154/0x1f4) [<805ffe00>] (__mutex_lock_slowpath+0x154/0x1f4) from [<805ffef0>] (mutex_lock+0x50/0x54) [<805ffef0>] (mutex_lock+0x50/0x54) from [<802f7f84>] (dpm_complete+0xac/0x1ac) [<802f7f84>] (dpm_complete+0xac/0x1ac) from [<80057a34>] (suspend_devices_and_enter+0x1bc/0x330) [<80057a34>] (suspend_devices_and_enter+0x1bc/0x330) from [<80057d50>] (pm_suspend+0x1a8/0x240) [<80057d50>] (pm_suspend+0x1a8/0x240) from [<80056a8c>] (state_store+0x6c/0xbc) [<80056a8c>] (state_store+0x6c/0xbc) from [<802586c0>] (kobj_attr_store+0x14/0x20) [<802586c0>] (kobj_attr_store+0x14/0x20) from [<80117374>] (sysfs_write_file+0xfc/0x17c) [<80117374>] (sysfs_write_file+0xfc/0x17c) from [<800bdcc0>] (vfs_write+0xbc/0x184) [<800bdcc0>] (vfs_write+0xbc/0x184) from [<800be058>] (SyS_write+0x40/0x68) [<800be058>] (SyS_write+0x40/0x68) from [<8000e040>] (ret_fast_syscall+0x0/0x30) kworker/u8:2 D 80600860 0 16146 2 0x00000000 Workqueue: ci_otg ci_otg_work [<80600860>] (__schedule+0x1e0/0x5d8) from [<805ff374>] (schedule_timeout+0x14c/0x198) [<805ff374>] (schedule_timeout+0x14c/0x198) from [<80600db8>] (wait_for_common+0xc4/0x17c) [<80600db8>] (wait_for_common+0xc4/0x17c) from [<8003bbd0>] (flush_work+0xc0/0x160) [<8003bbd0>] (flush_work+0xc0/0x160) from [<8009d02c>] (bdi_unregister+0x108/0x148) [<8009d02c>] (bdi_unregister+0x108/0x148) from [<8024b5b4>] (del_gendisk+0xf8/0x1c4) [<8024b5b4>] (del_gendisk+0xf8/0x1c4) from [<8031e8e8>] (sd_remove+0x64/0x98) [<8031e8e8>] (sd_remove+0x64/0x98) from [<802f0678>] (__device_release_driver+0x70/0xcc) [<802f0678>] (__device_release_driver+0x70/0xcc) from [<802f06f0>] (device_release_driver+0x1c/0x28) [<802f06f0>] (device_release_driver+0x1c/0x28) from [<802f01e4>] (bus_remove_device+0xd8/0xf8) [<802f01e4>] (bus_remove_device+0xd8/0xf8) from [<802edef8>] (device_del+0xf4/0x178) [<802edef8>] (device_del+0xf4/0x178) from [<8031abbc>] (__scsi_remove_device+0x48/0xa0) [<8031abbc>] (__scsi_remove_device+0x48/0xa0) from [<80319bb8>] (scsi_forget_host+0x5c/0x60) [<80319bb8>] (scsi_forget_host+0x5c/0x60) from [<8031072c>] (scsi_remove_host+0x64/0xf0) [<8031072c>] (scsi_remove_host+0x64/0xf0) from [<803be150>] (usb_stor_disconnect+0x50/0xc8) [<803be150>] (usb_stor_disconnect+0x50/0xc8) from [<803ac020>] (usb_unbind_interface+0x58/0x188) [<803ac020>] (usb_unbind_interface+0x58/0x188) from [<802f0678>] (__device_release_driver+0x70/0xcc) [<802f0678>] (__device_release_driver+0x70/0xcc) from [<802f06f0>] (device_release_driver+0x1c/0x28) [<802f06f0>] (device_release_driver+0x1c/0x28) from [<802f01e4>] (bus_remove_device+0xd8/0xf8) [<802f01e4>] (bus_remove_device+0xd8/0xf8) from [<802edef8>] (device_del+0xf4/0x178) [<802edef8>] (device_del+0xf4/0x178) from [<803a9e8c>] (usb_disable_device+0xa0/0x1c8) [<803a9e8c>] (usb_disable_device+0xa0/0x1c8) from [<803a25fc>] (usb_disconnect+0x88/0x1a0) [<803a25fc>] (usb_disconnect+0x88/0x1a0) from [<803a25e4>] (usb_disconnect+0x70/0x1a0) [<803a25e4>] (usb_disconnect+0x70/0x1a0) from [<803a5940>] (usb_remove_hcd+0xac/0x15c) [<803a5940>] (usb_remove_hcd+0xac/0x15c) from [<803c487c>] (host_stop+0x1c/0x3c) [<803c487c>] (host_stop+0x1c/0x3c) from [<803c1880>] (ci_otg_work+0xc8/0x118) [<803c1880>] (ci_otg_work+0xc8/0x118) from [<8003c62c>] (process_one_work+0x110/0x360) [<8003c62c>] (process_one_work+0x110/0x360) from [<8003d180>] (worker_thread+0x144/0x3ac) [<8003d180>] (worker_thread+0x144/0x3ac) from [<8004272c>] (kthread+0xa4/0xb0) [<8004272c>] (kthread+0xa4/0xb0) from [<8000e0d8>] (ret_from_fork+0x14/0x3c) Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286926 usb: chipidea: imx: add release_bus_freq at failure pathPeter Chen2014-04-16
| | | | | | | If not, the request{release}_bus_freq will be mismatch if fail occurs. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286459 usb: chipidea: imx: add request{release}_bus_freqPeter Chen2014-04-16
| | | | | | | When the usb in idle, it calls release_bus_req. When the usb is going to use, it calls request_bus_req. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-22 usb: chipidea: imx: Enable CI_HDRC_IMX_EHCI_QUIRKPeter Chen2014-04-16
| | | | | | Enable CI_HDRC_IMX_EHCI_QUIRK for controllers who use mxs-phy. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-21 usb: chipidea: host: add ehci quirk for imx controllerPeter Chen2014-04-16
| | | | | | | | When the port goes to suspend or finishes resme, it needs to notify PHY, it is not a standard EHCI operation, so we add a quirk for it. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-20 usb: chipidea: host: add quirk for ehci operationPeter Chen2014-04-16
| | | | | | | | | | | | | | | | | | For chipidea controller, it does not follow ehci spec strictly. Taking resume signal as an example, it will stop resume signal about 20-21ms later automatically, but standard ehci spec says, the resume signal is controlled by software (clear portsc.PORT_RESUME). This operation causes some remote wakeup problems for high speed devices due to host controller does not send SOF in time since software can't guarantee set run/stop bit in time (run/stop bit was cleared at the ehci suspend routine). When software sets run/stop bit, it needs 1 SoF time to make it effect. If we close the PHY clock just after setting run/stop bit, it does not be set in practice, so a software delay is needed. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-19 usb: chipidea: imx: Enable runtime pm support for imx6Peter Chen2014-04-16
| | | | | | | Currently, only imx6 SoC series add wakeup logic, so only enable runtime pm for imx6. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-18 usb: chipidea: imx: call set_wakeup when necessaryPeter Chen2014-04-16
| | | | | | | | - Disable wakeup after probe - Enable wakeup during the suspend - Disable wakeup after controller is active Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-17 usb: chipidea: usbmisc_imx: add set_wakup APIPeter Chen2014-04-16
| | | | | | | It is used to enable USB wakeup, currently only imx6 SoC series usb's wakeup is enabled. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-16 usb: chipidea: usbmisc_imx: remove the controller's clock infoPeter Chen2014-04-16
| | | | | | | | | | | Currently, the usbmisc is just an API supplier for controller driver, the controller calls related APIs to handle different things among the SoCs, before calling it, the clock must be on. So the clock operation is useless for usbmisc, it also increases the difficulties to manage the clock, especially at runtime power management situation. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-15 usb: chipidea: add wakeup interrupt handlerPeter Chen2014-04-16
| | | | | | | | | | When the controller is at suspend mode, it can be waken up by external events (like vbus, dp/dm or id change). Once we receive the wakeup interrupt, we need to resume the controller first, eg open clocks, disable some wakeup settings, etc. After that, the controller can receive the normal USB interrupts. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-14 usb: chipidea: imx: add power management supportPeter Chen2014-04-16
| | | | | | Add system and runtime power management support for imx gluy layer. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-13 usb: chipidea: Add power management supportPeter Chen2014-04-16
| | | | | | | | This commit adds runtime and system power management support for chipidea core. The runtime pm support is controlled by glue layer, it can be enabled by flag CI_HDRC_SUPPORTS_RUNTIME_PM. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-12 usb: phy-mxs: Add system suspend/resume APIPeter Chen2014-04-16
| | | | | | | | | We need this to keep PHY's power on or off during the system suspend mode. If we need to enable USB wakeup, then we must keep PHY's power being on during the system suspend mode. Otherwise, we need to keep PHY's power being off to save power. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-11 usb: phy-mxs: Add implementation of set_wakeupPeter Chen2014-04-16
| | | | | | | | | | | When we need the PHY can be waken up by external signals, we can call this API. Besides, we call mxs_phy_disconnect_line at this API to close the connection between USB PHY and controller, after that, the line state from controller is SE0. Once the PHY is out of power, without calling mxs_phy_disconnect_line, there are unknown wakeups due to dp/dm floating at device mode. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-9 usb: phy-mxs: Enable IC fixes for related SoCsPeter Chen2014-04-16
| | | | | | | Some PHY bugs are fixed by IC logic, but these bits are not enabled by default, so we enable them at driver. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-8 usb: phy-mxs: Add implementation of nofity_suspend{resume}Peter Chen2014-04-16
| | | | | | | Implementation of notify_suspend and notify_resume will be different according to mxs_phy_data->flags. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-6 usb: phy-mxs: Add anatop regmapPeter Chen2014-04-16
| | | | | | It is needed by imx6 SoC series, but not for imx23 and imx28. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-3 usb: phy-mxs: Add auto clock and power settingPeter Chen2014-04-16
| | | | | | | With the auto setting, the PHY's clock and power can be recovered correctly from low power mode, it is ganranteed by IC logic. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286426-2 usb: phy-mxs: Add platform judgement codePeter Chen2014-04-16
| | | | | | | The mxs-phy has several bugs and features at different versions, the driver code can get it through of_device_id.data. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* USB: EHCI: export ehci_handshake for ehci-hcd sub-driversManjunath Goudar2014-04-16
| | | | | | | | | | | | | | | In order to split ehci-hcd.c into separate modules, handshake() must be exported. Rename the symbol to add an ehci_ prefix, to avoid any naming clashes. Signed-off-by: Manjunath Goudar <manjunath.goudar@linaro.org> [swarren, split Manjunath's patches more logically, limit this change to export just handshake()] Signed-off-by: Stephen Warren <swarren@nvidia.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Acked-by: Arnd Bergmann <arnd@arndb.de> Tested-by: Thierry Reding <thierry.reding@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
* ENGR00286418 usb: chipidea: host: fix below build errorPeter Chen2014-04-16
| | | | | | | | /drivers/usb/chipidea/host.c: In function 'host_start': /drivers/usb/chipidea/host.c:67:6: error: 'struct ehci_hcd' has no member named 'has_tdi_phy_lpm' Signed-off-by: Peter Chen <peter.chen@freescale.com>
* usb: phy: phy-mxs-usb: Check the return value from stmp_reset_block()Fabio Estevam2014-04-16
| | | | | | | | | stmp_reset_block() may fail, so let's check its return value and propagate it in the case of error. Acked-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
* ENGR00286159-3 Revert "ENGR00278097-1"Peter Chen2014-04-16
| | | | | | | This reverts commit 5748c4f997399584691559332997cfc5177ad232. Signed-off-by: Peter Chen <peter.chen@freescale.com> Acked-by: Shawn Guo <shawn.guo@linaro.org>
* usb: hcd: move controller wakeup setting initialization to individual driverPeter Chen2014-04-16
| | | | | | | | | | | | | | Individual controller driver has different requirement for wakeup setting, so move it from core to itself. In order to align with current etting the default wakeup setting is enabled (except for chipidea host). Since too many differences between upstream with our internal tree, I only pick the hcd change. Acked-by: Shawn Guo <shawn.guo@linaro.org> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Peter Chen <peter.chen@freescale.com> Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286159-2 usb: chipidea: imx: set CI_HDRC_IMX28_WRITE_FIX for imx28Peter Chen2014-04-16
| | | | | | | Due to imx28 needs ARM swp instruction for writing, we set CI_HDRC_IMX28_WRITE_FIX for imx28. Signed-off-by: Peter Chen <peter.chen@freescale.com>
* ENGR00286159-1 usb: chipidea: add freescale imx28 special write register methodPeter Chen2014-04-16
| | | | | | | | | | | | According to Freescale imx28 Errata, "ENGR119653 USB: ARM to USB register error issue", All USB register write operations must use the ARM SWP instruction. So, we implement special hw_write and hw_test_and_clear for imx28. Discussion for it at below: http://marc.info/?l=linux-usb&m=137996395529294&w=2 Signed-off-by: Peter Chen <peter.chen@freescale.com>
* usb: chipidea: only get vbus regulator for non-peripheral modePeter Chen2014-04-16
| | | | | | | | | | If the user chooses peripheral mode for this controller, the vbus regulator doesn't need to get, since the host will supply the vbus, it can save one vbus pin for other usage. Signed-off-by: Peter Chen <peter.chen@freescale.com> Tested-by: Frank Li <frank.li@freescale.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
* usb: chipidea: host: more enhancement when ci->hcd is NULLPeter Chen2014-04-16
| | | | | | | | | | | | | Like http://marc.info/?l=linux-usb&m=138200449428874&w=2 said: two more things are needed to be done: - If host_start fails, the host_stop should not be called, so we add check that ci->hcd is not NULL. - if the host_start fails at the beginning, we need to consider regulator mismatch issue. Signed-off-by: Peter Chen <peter.chen@freescale.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
* usb/chipidea: fix oops on memory allocation failureRussell King - ARM Linux2014-04-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When CMA fails to initialize in v3.12-rc4, the chipidea driver oopses the kernel while trying to remove and put the HCD which doesn't exist: WARNING: CPU: 0 PID: 6 at /home/rmk/git/linux-rmk/arch/arm/mm/dma-mapping.c:511 __dma_alloc+0x200/0x240() coherent pool not initialised! Modules linked in: CPU: 0 PID: 6 Comm: kworker/u2:0 Tainted: G W 3.12.0-rc4+ #56 Workqueue: deferwq deferred_probe_work_func Backtrace: [<c001218c>] (dump_backtrace+0x0/0x10c) from [<c0012328>] (show_stack+0x18/0x1c) r6:c05fd9cc r5:000001ff r4:00000000 r3:df86ad00 [<c0012310>] (show_stack+0x0/0x1c) from [<c05f3a4c>] (dump_stack+0x70/0x8c) [<c05f39dc>] (dump_stack+0x0/0x8c) from [<c00230a8>] (warn_slowpath_common+0x6c/0x8c) r4:df883a60 r3:df86ad00 [<c002303c>] (warn_slowpath_common+0x0/0x8c) from [<c002316c>] (warn_slowpath_fmt+0x38/0x40) r8:ffffffff r7:00001000 r6:c083b808 r5:00000000 r4:df2efe80 [<c0023134>] (warn_slowpath_fmt+0x0/0x40) from [<c00196bc>] (__dma_alloc+0x200/0x240) r3:00000000 r2:c05fda00 [<c00194bc>] (__dma_alloc+0x0/0x240) from [<c001982c>] (arm_dma_alloc+0x88/0xa0) [<c00197a4>] (arm_dma_alloc+0x0/0xa0) from [<c03e2904>] (ehci_setup+0x1f4/0x438) [<c03e2710>] (ehci_setup+0x0/0x438) from [<c03cbd60>] (usb_add_hcd+0x18c/0x664) [<c03cbbd4>] (usb_add_hcd+0x0/0x664) from [<c03e89f4>] (host_start+0xf0/0x180) [<c03e8904>] (host_start+0x0/0x180) from [<c03e7c34>] (ci_hdrc_probe+0x360/0x670 ) r6:df2ef410 r5:00000000 r4:df2c3010 r3:c03e8904 [<c03e78d4>] (ci_hdrc_probe+0x0/0x670) from [<c0311044>] (platform_drv_probe+0x20/0x24) [<c0311024>] (platform_drv_probe+0x0/0x24) from [<c030fcac>] (driver_probe_device+0x9c/0x234) ... ---[ end trace c88ccaf3969e8422 ]--- Unable to handle kernel NULL pointer dereference at virtual address 00000028 pgd = c0004000 [00000028] *pgd=00000000 Internal error: Oops: 17 [#1] SMP ARM Modules linked in: CPU: 0 PID: 6 Comm: kworker/u2:0 Tainted: G W 3.12.0-rc4+ #56 Workqueue: deferwq deferred_probe_work_func task: df86ad00 ti: df882000 task.ti: df882000 PC is at usb_remove_hcd+0x10/0x150 LR is at host_stop+0x1c/0x3c pc : [<c03cacec>] lr : [<c03e88e4>] psr: 60000013 sp : df883b50 ip : df883b78 fp : df883b74 r10: c11f4c54 r9 : c0836450 r8 : df30c400 r7 : fffffff4 r6 : df2ef410 r5 : 00000000 r4 : df2c3010 r3 : 00000000 r2 : 00000000 r1 : df86b0a0 r0 : 00000000 Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel Control: 10c53c7d Table: 2f29404a DAC: 00000015 Process kworker/u2:0 (pid: 6, stack limit = 0xdf882240) Stack: (0xdf883b50 to 0xdf884000) ... Backtrace: [<c03cacdc>] (usb_remove_hcd+0x0/0x150) from [<c03e88e4>] (host_stop+0x1c/0x3c) r6:df2ef410 r5:00000000 r4:df2c3010 [<c03e88c8>] (host_stop+0x0/0x3c) from [<c03e8aa0>] (ci_hdrc_host_destroy+0x1c/0x20) r5:00000000 r4:df2c3010 [<c03e8a84>] (ci_hdrc_host_destroy+0x0/0x20) from [<c03e7c80>] (ci_hdrc_probe+0x3ac/0x670) [<c03e78d4>] (ci_hdrc_probe+0x0/0x670) from [<c0311044>] (platform_drv_probe+0x20/0x24) [<c0311024>] (platform_drv_probe+0x0/0x24) from [<c030fcac>] (driver_probe_device+0x9c/0x234) [<c030fc10>] (driver_probe_device+0x0/0x234) from [<c030ff28>] (__device_attach+0x44/0x48) ... ---[ end trace c88ccaf3969e8423 ]--- Fix this so at least we can continue booting and get to a shell prompt. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Tested-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>