1. 14 Apr, 2021 7 commits
    • Badhri Jagan Sridharan's avatar
      usb: typec: tcpm: Allow slow charging loops to comply to pSnkStby · 1373fefc
      Badhri Jagan Sridharan authored
      When a PD charger advertising Rp-3.0 is connected to a sink port, the
      sink port current limit would 3A, during SNK_DISCOVERY, till power
      negotiation starts. Once the negotiation starts the power limit needs
      to drop down to pSnkStby(500mA @ 5V) and to negotiated current limit
      once the explicit contract is in place. Not all charging loops can ramp
      up to 3A and drop down to 500mA within tSnkStdby which is 15ms. The port
      partner might hard reset if tSnkStdby is not met.
      
      To solve this problem, this patch introduces slow-charger-loop which
      when set makes the port request PD_P_SNK_STDBY_MW upon entering
      SNK_DISCOVERY(instead of 3A or the 1.5A during SNK_DISCOVERY) and the
      actual currrent limit after RX of PD_CTRL_PSRDY for PD link or during
      SNK_READY for non-pd link.
      Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: default avatarBadhri Jagan Sridharan <badhri@google.com>
      Link: https://lore.kernel.org/r/20210414024000.4175263-2-badhri@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1373fefc
    • Badhri Jagan Sridharan's avatar
      usb: typec: tcpm: Honour pSnkStdby requirement during negotiation · 12308684
      Badhri Jagan Sridharan authored
      >From PD Spec:
      The Sink Shall transition to Sink Standby before a positive or
      negative voltage transition of VBUS. During Sink Standby
      the Sink Shall reduce its power draw to pSnkStdby. This allows
      the Source to manage the voltage transition as well as
      supply sufficient operating current to the Sink to maintain PD
      operation during the transition. The Sink Shall
      complete this transition to Sink Standby within tSnkStdby
      after evaluating the Accept Message from the Source. The
      transition when returning to Sink operation from Sink Standby
      Shall be completed within tSnkNewPower. The
      pSnkStdby requirement Shall only apply if the Sink power draw
      is higher than this level.
      
      The above requirement needs to be met to prevent hard resets
      from port partner.
      
      Without the patch: (5V/3A during SNK_DISCOVERY all the way through
      explicit contract)
      [   95.711984] CC1: 0 -> 0, CC2: 0 -> 5 [state TOGGLING, polarity 0, connected]
      [   95.712007] state change TOGGLING -> SNK_ATTACH_WAIT [rev3 NONE_AMS]
      [   95.712017] pending state change SNK_ATTACH_WAIT -> SNK_DEBOUNCED @ 170 ms [rev3 NONE_AMS]
      [   95.837190] VBUS on
      [   95.882075] state change SNK_ATTACH_WAIT -> SNK_DEBOUNCED [delayed 170 ms]
      [   95.882082] state change SNK_DEBOUNCED -> SNK_ATTACHED [rev3 NONE_AMS]
      [   95.882086] polarity 1
      [   95.883151] set_auto_vbus_discharge_threshold mode:0 pps_active:n vbus:5000 ret:0
      [   95.883441] enable vbus discharge ret:0
      [   95.883445] Requesting mux state 1, usb-role 2, orientation 2
      [   95.883776] state change SNK_ATTACHED -> SNK_STARTUP [rev3 NONE_AMS]
      [   95.883879] pending state change SNK_STARTUP -> SNK_DISCOVERY @ 500 ms [rev3 NONE_AMS]
      [   96.038960] VBUS on
      [   96.383939] state change SNK_STARTUP -> SNK_DISCOVERY [delayed 500 ms]
      [   96.383946] Setting voltage/current limit 5000 mV 3000 mA
      [   96.383961] vbus=0 charge:=1
      [   96.386044] state change SNK_DISCOVERY -> SNK_WAIT_CAPABILITIES [rev3 NONE_AMS]
      [   96.386309] pending state change SNK_WAIT_CAPABILITIES -> HARD_RESET_SEND @ 450 ms [rev3 NONE_AMS]
      [   96.394404] PD RX, header: 0x2161 [1]
      [   96.394408]  PDO 0: type 0, 5000 mV, 3000 mA [E]
      [   96.394410]  PDO 1: type 0, 9000 mV, 2000 mA []
      [   96.394412] state change SNK_WAIT_CAPABILITIES -> SNK_NEGOTIATE_CAPABILITIES [rev2 POWER_NEGOTIATION]
      [   96.394416] Setting usb_comm capable false
      [   96.395083] cc=0 cc1=0 cc2=5 vbus=0 vconn=sink polarity=1
      [   96.395089] Requesting PDO 1: 9000 mV, 2000 mA
      [   96.395093] PD TX, header: 0x1042
      [   96.397404] PD TX complete, status: 0
      [   96.397424] pending state change SNK_NEGOTIATE_CAPABILITIES -> HARD_RESET_SEND @ 60 ms [rev2 POWER_NEGOTIATION]
      [   96.400826] PD RX, header: 0x363 [1]
      [   96.400829] state change SNK_NEGOTIATE_CAPABILITIES -> SNK_TRANSITION_SINK [rev2 POWER_NEGOTIATION]
      [   96.400832] pending state change SNK_TRANSITION_SINK -> HARD_RESET_SEND @ 500 ms [rev2 POWER_NEGOTIATION]
      [   96.577315] PD RX, header: 0x566 [1]
      [   96.577321] Setting voltage/current limit 9000 mV 2000 mA
      [   96.578363] set_auto_vbus_discharge_threshold mode:3 pps_active:n vbus:9000 ret:0
      [   96.578370] state change SNK_TRANSITION_SINK -> SNK_READY [rev2 POWER_NEGOTIATION]
      
      With the patch:
      [  168.398573] CC1: 0 -> 0, CC2: 0 -> 5 [state TOGGLING, polarity 0, connected]
      [  168.398605] state change TOGGLING -> SNK_ATTACH_WAIT [rev3 NONE_AMS]
      [  168.398619] pending state change SNK_ATTACH_WAIT -> SNK_DEBOUNCED @ 170 ms [rev3 NONE_AMS]
      [  168.522348] VBUS on
      [  168.568676] state change SNK_ATTACH_WAIT -> SNK_DEBOUNCED [delayed 170 ms]
      [  168.568684] state change SNK_DEBOUNCED -> SNK_ATTACHED [rev3 NONE_AMS]
      [  168.568688] polarity 1
      [  168.569867] set_auto_vbus_discharge_threshold mode:0 pps_active:n vbus:5000 ret:0
      [  168.570158] enable vbus discharge ret:0
      [  168.570161] Requesting mux state 1, usb-role 2, orientation 2
      [  168.570504] state change SNK_ATTACHED -> SNK_STARTUP [rev3 NONE_AMS]
      [  168.570634] pending state change SNK_STARTUP -> SNK_DISCOVERY @ 500 ms [rev3 NONE_AMS]
      [  169.070689] state change SNK_STARTUP -> SNK_DISCOVERY [delayed 500 ms]
      [  169.070695] Setting voltage/current limit 5000 mV 3000 mA
      [  169.070702] vbus=0 charge:=1
      [  169.072719] state change SNK_DISCOVERY -> SNK_WAIT_CAPABILITIES [rev3 NONE_AMS]
      [  169.073145] pending state change SNK_WAIT_CAPABILITIES -> HARD_RESET_SEND @ 450 ms [rev3 NONE_AMS]
      [  169.077162] PD RX, header: 0x2161 [1]
      [  169.077172]  PDO 0: type 0, 5000 mV, 3000 mA [E]
      [  169.077178]  PDO 1: type 0, 9000 mV, 2000 mA []
      [  169.077183] state change SNK_WAIT_CAPABILITIES -> SNK_NEGOTIATE_CAPABILITIES [rev2 POWER_NEGOTIATION]
      [  169.077191] Setting usb_comm capable false
      [  169.077753] cc=0 cc1=0 cc2=5 vbus=0 vconn=sink polarity=1
      [  169.077759] Requesting PDO 1: 9000 mV, 2000 mA
      [  169.077762] PD TX, header: 0x1042
      [  169.079990] PD TX complete, status: 0
      [  169.080013] pending state change SNK_NEGOTIATE_CAPABILITIES -> HARD_RESET_SEND @ 60 ms [rev2 POWER_NEGOTIATION]
      [  169.083183] VBUS on
      [  169.084195] PD RX, header: 0x363 [1]
      [  169.084200] state change SNK_NEGOTIATE_CAPABILITIES -> SNK_TRANSITION_SINK [rev2 POWER_NEGOTIATION]
      [  169.084206] Setting standby current 5000 mV @ 500 mA
      [  169.084209] Setting voltage/current limit 5000 mV 500 mA
      [  169.084220] pending state change SNK_TRANSITION_SINK -> HARD_RESET_SEND @ 500 ms [rev2 POWER_NEGOTIATION]
      [  169.260222] PD RX, header: 0x566 [1]
      [  169.260227] Setting voltage/current limit 9000 mV 2000 mA
      [  169.261315] set_auto_vbus_discharge_threshold mode:3 pps_active:n vbus:9000 ret:0
      [  169.261321] state change SNK_TRANSITION_SINK -> SNK_READY [rev2 POWER_NEGOTIATION]
      [  169.261570] AMS POWER_NEGOTIATION finished
      
      Fixes: f0690a25 ("staging: typec: USB Type-C Port Manager (tcpm)")
      Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: default avatarBadhri Jagan Sridharan <badhri@google.com>
      Link: https://lore.kernel.org/r/20210414024000.4175263-1-badhri@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      12308684
    • Thinh Nguyen's avatar
      usb: dwc3: gadget: Check for disabled LPM quirk · 475e8be5
      Thinh Nguyen authored
      If the device doesn't support LPM, make sure to disable the LPM
      capability and don't advertise to the host that it supports it.
      Acked-by: default avatarFelipe Balbi <balbi@kernel.org>
      Signed-off-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
      Link: https://lore.kernel.org/r/9e68527ff932b1646f92a7593d4092a903754666.1618366071.git.Thinh.Nguyen@synopsys.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      475e8be5
    • Sandeep Maheswaram's avatar
      usb: dwc3: core: Add shutdown callback for dwc3 · 568262bf
      Sandeep Maheswaram authored
      This patch adds a shutdown callback to USB DWC core driver to ensure that
      it is properly shutdown in reboot/shutdown path. This is required
      where SMMU address translation is enabled like on SC7180
      SoC and few others. If the hardware is still accessing memory after
      SMMU translation is disabled as part of SMMU shutdown callback in
      system reboot or shutdown path, then IOVAs(I/O virtual address)
      which it was using will go on the bus as the physical addresses which
      might result in unknown crashes (NoC/interconnect errors).
      Acked-by: default avatarFelipe Balbi <balbi@kernel.org>
      Signed-off-by: default avatarSandeep Maheswaram <sanm@codeaurora.org>
      Link: https://lore.kernel.org/r/1618380209-20114-1-git-send-email-sanm@codeaurora.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      568262bf
    • Thinh Nguyen's avatar
      usb: dwc3: gadget: Ignore Packet Pending bit · e66bbfb0
      Thinh Nguyen authored
      Currently the controller handles single stream only. So, Ignore Packet
      Pending bit for stream selection and don't search for another stream if
      the host sends Data Packet with PP=0 (for OUT direction) or ACK with
      NumP=0 and PP=0 (for IN direction). This slightly improves the stream
      performance.
      Acked-by: default avatarFelipe Balbi <balbi@kernel.org>
      Signed-off-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
      Link: https://lore.kernel.org/r/097ba9e104c143f7ba0195ebff29390ec3043692.1618282705.git.Thinh.Nguyen@synopsys.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e66bbfb0
    • Kai-Heng Feng's avatar
      USB: Add LPM quirk for Lenovo ThinkPad USB-C Dock Gen2 Ethernet · 8f23fe35
      Kai-Heng Feng authored
      This is another branded 8153 device that doesn't work well with LPM
      enabled:
      [ 400.597506] r8152 5-1.1:1.0 enx482ae3a2a6f0: Tx status -71
      
      So disable LPM to resolve the issue.
      Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
      BugLink: https://bugs.launchpad.net/bugs/1922651
      Link: https://lore.kernel.org/r/20210412135455.791971-1-kai.heng.feng@canonical.com
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8f23fe35
    • Dan Carpenter's avatar
      usb: typec: silence a static checker warning · 434438d8
      Dan Carpenter authored
      Smatch complains about a potential missing error code:
      
          drivers/usb/typec/port-mapper.c:168 typec_link_port()
          warn: missing error code 'ret'
      
      This is a false positive and returning zero is intentional.  Let's
      re-arrange the code to silence the warning and make the intent more
      clear.
      Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Link: https://lore.kernel.org/r/YHadaACH8Mq/10F7@mwandaSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      434438d8
  2. 13 Apr, 2021 13 commits
  3. 12 Apr, 2021 14 commits
  4. 11 Apr, 2021 4 commits
  5. 10 Apr, 2021 2 commits