| Commit message (Collapse) | Author | Age |
|
|
|
| |
Change-Id: I126075a330f305c85f8fe1b8c9d408f368be95d1
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add support for retrying core reset and re-initialization in host
mode if the PHY PLL lock failure is seen. Also, increase the lock
timeout to 50 msec.
Change-Id: I8c8db60dcd73b7cf05598538d0c519b1b1e2417f
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|\ \ |
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
With ID clear notification i.e. USB host mode disconnect, current
code is using PM runtime autosuspend functionality to put USB into
LPM having autosuspend delay of 1sec. With USB host mode cable
disconnect/connect having delay of less than 1 second, USB doesn't
go into LPM in between USB host mode disconnect and USB host mode
cable connect. This results into XHCI controller not being reset as
expected causing USB low speed and high speed device enumeration
issue with connect-debounce failure condition. Fix this issue by
replacing autosuspend functionality by pm_runtime_put_sync_suspend()
to put USB into LPM with USB host cable disconnect immediately.
While at it, also move queueing of sm_work function to dedicated
sm_usb_wq from system workqueue to avoid parallel runs.
Change-Id: I0db6ea7e63b853e419ccfd51808b8955e874db76
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|/
|
|
|
|
|
|
|
| |
Disable HSPHY autosuspend capability before going for core
initialization so as to avoid frivolous phy PLL lock warnings on
PHY initialization.
Change-Id: I1bdb7a21c3a2fabd3f44f7088d265fa29da3f7a5
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| | |
dwc3_drd_state_string() will return null for undefined state and
fix it by adding undefined name to state_names.
Change-Id: I40be0b14c098fe2e9d77df3ff1108c3d4d55a30f
Signed-off-by: Vamsi Krishna Samavedam <vskrishn@codeaurora.org>
|
|\| |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Introduce additional WAIT_FOR_LPM input flag to ensure USB
enters low power mode after stop_peripheral or stop_host.
This makes sure that USB hardware is reset after LPM for
cases where quick transition to host mode happens while
its child was still preventing dwc3 to enter low power mode.
In the absence of h/w reset after stop_peripheral, host mode
doesn't work.
Change-Id: I67e4fcdc11a3337e3e90b4ca8f461e328a6e8ecf
Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
|
|\| |
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
otg_state enum defines states for USB OTG devices. Since, driver
supports only role change (DRD) and no OTG support, hence, instead
of using otg_states create separate drd_state enums.
Change-Id: Ifda1fac712e751c980ce51b60b473e5921f2001d
Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
| |
Chargers on some platforms do not support FLOAT charger
detection. On these platforms, the float charger can be
detected depending on the state of the DP and DM lines as
detected by the PHY.
So, on these platforms check for the DP DM line state
and if found floating, do not start the peripheral mode
and notify PMIC -ETIMEDOUT implying the connected
charger is of type float.
Change-Id: I6bf54b0d5c143a849ce9ea7bc515d62204ed2f33
Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
usb3 phy is needed when core is operating at super speed or
higher. Do not turn on usb3 phy clocks even when core is
programmed to work at high speed only mode. While at it,
remove redundant module parameter to control max speed. Speed
can be controlled using existing sysfs entry.
Example: To set High speed only:
echo "high" > /sys/devices/platform/soc/<devname>/speed
To set super speed:
echo "super" > /sys/devices/platform/soc/<devname>/speed
Change-Id: I24a9a869d97e6efc3ebc0d7a1374805139c65648
Signed-off-by: Vamsi Krishna Samavedam <vskrishn@codeaurora.org>
Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Current code checks IN_P3 status (i.e. USB is into U3 or not) with
dwc3_prepare_suspend() API using in_host_mode or vbus_active flag.
With data role swap transition (e.g. dfp -> ufp case), in_host_mode
flag sets to false and vbus_active flag sets to true due to quick
calling of stop host and start peripheral mode from policy engine.
This results into USB doesn't go into LPM with stop host mode (i.e.
USB LPM is aborted due to vbus_active flag seen as true) which
results into no USB enumeration in start peripheral mode. Current
code doesn't perform block reset while stopping USB host mode
functionality. Hence to invoke USB core and PHYs related reset and
init functionality allow USB LPM by replacing vbus_active check with
in_device_mode flag which provides status of USB controller's data
role while going into USB LPM. Start peripheral mode brings USB
out of LPM which performs POR functionality.
Change-Id: I2bbb804bce5f910826ba30a3dda4317bbdb2e1f1
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently as a part of dwc3_msm_pm_suspend, driver calls suspend
routine which schedules bus_vote_w to remove bus votes from USB.
But it could be possible that the system freezes before the work
function could get called or completed. This will keep the USB
votes enabled and block XO shutdown.
Fix this by flushing the bus_vote_w at the end of pm_suspend to
ensure that bus votes are removed.
Change-Id: I578e3c4434eb04740f07f4dd0640a945a86fde8b
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
USB IN/INT endpoint stalls when performing TX FIFO resize functionality
when IN/INT endpoint is already active i.e. usb endpoint is enabled and
usb request is pending with it. Fix this issue by making sure that TX
FIFO resize is performed before enabling endpoint which shall happen
after set_alt(1) and before any function queues request with its allocated
USB endpoint.
CRs-Fixed: 2039310
Change-Id: I13a590f87ab8492f7c95a15b2da9f00c9c63c4f9
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|/
|
|
|
|
|
|
|
|
|
|
| |
Currently the driver releases PM wakelock in host mode. This
causes pm_suspend to get triggered. Although pm_suspend bails out
but xhci_bus_suspend transitions the bus to a bad state leading
to host mode failure.
Fix this by releasing wakelock only for targets on which we allow
PM suspend in host mode irrespective of runtimePM.
Change-Id: I6648991272c0f22b032b526bce3a76864fec63a5
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It is required to notify device as selfpowered and bmaxpower as zero
even for non PD capable devices based on Type C current. Hence notify
as selfpowerer in bMattributes of configuation descriptor in case of
medium or high Type C current.
Change-Id: Ie552560d93a8195f4c69fdaf6086ef3a52b31d39
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently on pm_resume, the driver queues resume_work only if
vbus_active is true or id_state is false. So when the system is
suspended with host mode cable connected and the cable is
disconnected, the port still remains in host mode. Fix this by
unconditionally queueing resume_work from pm_resume and adding
required pm_relax in B_IDLE branch of sm_work.
Also create a freezable workqueue for sm_work so that the work
items do not race with pm_resume of child devices.
Change-Id: I9b79ddcc44c87111fc85086038361d9140be2af5
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Add boot marker for booting KPI measurement.
Change-Id: Idf57bed89437d85abc419f7774e0c2d975d214c9
Signed-off-by: Zhiqiang Tu <ztu@codeaurora.org>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| | |
On automotive targets, we do not want the system to wakeup if the
connected peripheral is issuing remote wakeup when the system is
PM suspended. Do not enable the system wakeup capability of the
PHY IRQs if the target is automotive.
Change-Id: I0bd986fdfab8f978692b605a44301086de3d0a87
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add support for hibernation of USB in host mode and
cable disconnected mode by adding proper pm operations
freeze and restore.
Change-Id: Ie1761a8afb0bb44a37d6ed4d046e8a09e1f53c5c
Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently as a part of host cable connection, we are notifying
cable connect to phy driver first and then resuming the PHY. This
leads to bus resume case running instead of the cable connect
case resume, hence the phy driver does not vote for the LDOs. As
a result, PHY goes into bad state. Fix this by first resuming PHY
so that cable connect case resume runs.
Change-Id: Ica5b16e420c38b920688b86a24af396644487a6b
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently driver is not suspending USB Super Speed PHY (here USB QMP
PHY) with below usecases.
a. USB super speed HUB is connected and going into bus suspend
b. USB super speed HUB is connected and having USB super speed device
connected on HUB's downstream port
This results into no USB super speed device connect or removal being
detected as autonomous mode is not being enabled with USB QMP PHY.
Fix these issues by suspending USB SS PHY in host mode with device
connect (i.e. HUB or HUB with USB SS device connected) case.
Change-Id: I469b02f0845228f55d9253e7683ea3c133fd9542
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently usb stack is teared down if no activity is detected for
10 seconds when floating charger is connected. USB 3.1 compliance
equipment usually reported as floating charger. Introduce sysfs
parameter to indicate if usb compliance in progress and do not
tear down the stack based on this parameter.
Change-Id: I26013c281827f35eac7f21ed68b3880e541d82b9
Signed-off-by: Vamsi Krishna Samavedam <vskrishn@codeaurora.org>
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently our driver is notifying ETIMEDOUT to PMIC
incase of floating charger. Consider if we are inserting
an SDP charger slowly that time also we will detect
it as floating charger then also we are notifying
ETIMEDOUT irrespective of current that is notified from
gadget driver. Hence notify charging current properly
if enumeration happens even in case of
floating charger so that PMIC can update real charger
type to SDP
Signed-off-by: Sai Krishna Juturi <jsaikrishna@codeaurora.org>
Change-Id: Ibeeeafac0834c9df7099a3f0bad274ddb393de47
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Cuurently as a part of start host, after the block reset we
are performing core init and gadget restart of the dwc3
controller. This causes crash for host only controller where
ep0 and ep1 have not been initialised but are being
dereferenced. Also, HW reinitialisation is not required for
start or restart host routine.
Change-Id: Ie2b781ecb03a1d0a02c5f4305d518adc18dc6ade
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Charger driver expects USB driver notify -ETIMEDOUT always on
POWER_SUPPLY_PROP_CURRENT_MAXCURRENT on enumeration failure in case
of floating charger. This is to set ICL to value based on Rp in case of
floating charger. But currently driver is not notifying this, when floating
charger is disconnected and connected back. Due to this, device is charging
only with 100mA instead of current based on Rp value. Fix this by having
proper check and allow to notify in case of floating charger type.
Change-Id: Iee0c4d8faa7e25c8445b83784a782751e7148421
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
|
|\ \ \ |
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
DWC3 driver uses wakeup_source and allows pm_suspend only after
entering low power mode as part of runtime suspend. This prevents
PM suspend in host mode if connected device's driver doesn't
support runtime or selective suspend.
Add support in driver where user can specify using dtsi attribute
to not use wakeup source in host mode. It will allow system to enter
deep sleep or pm_suspend irrespective of runtime PM state of XHCI.
On high level below are the changes in default behavior:
-Do not use wakeup_source for DWC3 when operating in host mode.
-For host mode, devices will suspend upon PM suspend and resumed
after PM resume.
Change-Id: Ia1d450e6dd99e094e48caf9723a355b7870b54dd
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently driver is enabling hsphy_irq and ssphy_irq at the end
of dwc3_msm_suspend() without any spinlock/mutex protection. But
if it happens that hsphy_irq or ssphy_irq gets fired right after
enablement of irqs, there is a chance that we might see warnings
related to unbalanced irq enable. This could happen due to flag
is not yet set to indicate phy irqs enabled in suspend(). This
might cause phy irq left enabled after resume and could cause
crash due to unclocked access in host mode. Fix the unbalance irq
enable by having mutex protection and also extend mutex protection
for dwc3_msm_suspend() and dwc3_msm_resume().
Change-Id: I8c2d26f82feb235add64305c1d0e5b686993e9e9
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Add some delay between two consecutive register reads in while loop
so that to avoid traffic congestion on NOCs.
Change-Id: I6efb8c91e0d07160ccce593a23898b2259cb1ebf
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
|
|\ \ \ |
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
lfps_rxterm interrupt is not seen on attaching USB super speed device when
USB is into LPM with USB host mode without device attach case. This change
fixes below issues to get lfps_rxterm interrupt to resume USB.
1. Correct polarity of lfps rxterm interrupt from edge trigger to level
trigger
2. Notify USB SS PHY driver about USB host cable status to allow required
configuration while USB SS PHY is being suspended.
3. Also it is required to clear ALFPS_DTCT_EN and set ARCVR_DTCT_EVENT_SEL
when USB SS PHY is being suspended with host cable connected case to detect
next super speed device attach condition using lfps_rxterm interrupt.
Change-Id: Ia763ec6b742ca681e71454d29f866009add56c52
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
|
|\ \ \ |
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
CURRENT_MAX and VOLTAGE_MAX should be used to show the current values
for the charger. The driver currently uses them to communicate with
the USB and PD drivers.
Update the code such that USB uses SDP_CURRENT_MAX to set 500mA/900mA
current limits after enumeration and PD uses PD_VOLTAGE_MIN/MAX to set
the adapter voltage limits.
CURRENT_MAX now shows the max current that can be drawn from the charger
and VOLTAGE_MAX shows the max voltage that the charger can negotiate up
to.
CURRENT_MAX and VOLTAGE_MAX can no longer be set.
Change-Id: I660e39effc1862051cff8b9babc885d8de3f9c84
Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In dwc3_msm_probe, when need to defer probe, driver should clear
resource has been allocated and de-attach the children device.
of_platform_depopulate is the complement of of_platform_populate to
remove devices created here. And driver also needs to destroy
workqueue in error case.
Change-Id: I234198eba45842f86c736dd459096ebc4fced807
Signed-off-by: Ziqi Chen <ziqic@codeaurora.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When floating charger is detected, driver first notifies -ETIMEDOUT to
PMI after 10 sec and then stops peripheral by simulating cable disconnect.
As part of disconnect it notifies PMI to draw 0ma which PMI re-interprets
as a SDP in bus suspend state and reconfigures PMI for SDP. Hence send
charger current notification only as part of cable disconnect simulation
by checking charger type.
Change-Id: Ibafe8d52fa14ff32b6cb11e9f6e15a4f3f147d7a
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
xHCI specs revision 1.1 mentions that if Compliance Transition
Capability (CTC) flag is set, then xHC supports software control
of the transition to Compliance mode. For this, we need to write
a value of 10 to Port Link State(PLS) field of PORTSC register
during dwc3_otg_start_host time after the xhci platform device
has been added. Then the link transitions to compliance state
on detection of first LFPS timeout.
Steps to enable compliance transition:
1. Do not connect host cable
2. echo y > /sys/devices/soc/a800000.ssusb/xhci_link_compliance
3. Connect host cable with breakout fixture and start testing
Steps to disable compliance transition:
1. Disconnect the host cable
2. echo n > /sys/devices/soc/a800000.ssusb/xhci_link_compliance
3. Connect host cable
Change-Id: I73225ccad105414d3ebd60f95138b9ecf65005d4
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There is a possibility of PMI detecting SDP as a floating charger
when connected to a PC. Workaround this issue by starting peripheral
stack for floating charger as well. After 10 sec check for USB device
enumeration using gadget USB state. If device is indeed connected to
SDP gadget usb state will be USB_STATE_DEFAULT or higher. This change
also helps to start peripheral stack in super speed usb compliance mode
when D+ and D- lines are floating.
Change-Id: Ia6dc668c549dca35e3273ece9a43be52c25d40ad
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Extcon is required by the USB controller to switch between
host and peripheral modes using BSV and ID events. If the
DT node of a particular controller does not have 'extcon'
property set but the mode is set to host only using
dr_mode = "host", then we do not fail the probe and
bring up the controller in host mode.
Add another case to the probe that when extcon prop is not
set and the controller mode is set to DRD, then bring up
the device in host mode. User can always change the mode
using sysfs.
Change-Id: Iad44748b99a944fab93ff86a34787bd93dcb4ed6
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
|
|\ \ |
|