lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1475529000-45367-1-git-send-email-groeck@chromium.org>
Date:   Mon,  3 Oct 2016 14:09:58 -0700
From:   Guenter Roeck <groeck@...omium.org>
To:     Felipe Balbi <felipe.balbi@...ux.intel.com>
Cc:     Bruce Ashfield <bruce.ashfield@...driver.com>,
        Bin Gao <bin.gao@...el.com>,
        Pranav Tipnis <pranav.tipnis@...el.com>,
        Heikki Krogerus <heikki.krogerus@...ux.intel.com>,
        Jun Li <jun.li@....com>, linux-usb@...r.kernel.org,
        linux-kernel@...r.kernel.org, Guenter Roeck <groeck@...omium.org>
Subject: [RFC v4 0/2] USB Type-C Port Manager

The following series of patches implements a USB Type-C Port Manager
using the pending USB Type-C class code as basis. The code is still WIP,
but I think it is important to get feedback from the community at this point.

There are two patches in the series. The first patch implements the Type-C
Port Manager state machine. The second patch is an interface between the
Type-C Port Manager and a TCPCI (Type-C Port Controller Interface) compliant
USB Type-C Port Controller.

Patch 2/2 (the interface to a TCPCI compliant chip) is currently untested
since I don't have the necessary hardware available. The port manager code
was tested connecting to an Embedded Controller on a Chromebook, bypassing
the Port Manager implementation in the EC.

Both Source and Sink operation was tested with various Type-C chargers, docks,
and connectors. Alternate mode support is partially implemented (Alternate mode
support is requested from the partner), but alternate modes are not actually
selected. Implementing this will require more thought, since the actual
alternate mode support has to be implemented elsewhere, such as in a dedicated
Phy driver. It should be possible to implement the interface between phy driver
and Type-C Port Controller driver using extcon, but I have not further explored
the possibilities, and other options might be possible and/or better.

TODO:
- Separation of PD, VDM, and TCPM code
- Full alternate mode support

v4:
- tcpm: Source and sink capabilities can now change on the fly
- tcpm: Introduced several new macros to identify CC states
- tcpm: Determine RP value to set based on maximum current supported
  by a port configured as source
- tcpm: Support for DRP toggling implemented in hardware (by Type-C port controller)
- tcpm: Added MODULE_ macros
- tcpci: Fix RP value set for ports supporting 3A current
- tcpci: Implement support for DRP toggling in hardware
- tcpci: When setting VBUS, disable both source and sink before enabling anything
- tcpci: Set correct byte count in tcpci_pd_transmit()
- tcpci: Disable chip interrupts before registering interrupt handler
- tcpci: Request IRQF_ONESHOT | IRQF_TRIGGER_LOW instead of IRQF_TRIGGER_FALLING
- Applies on top of v10 of "USB Type-C Connector class" patch series.

v3:
- Improve TCPM state machine resiliency if there are spurious CC line changes
  while the state machine is in a transient change (waiting for a timeout)
- Update current limit after CC voltage level changes on a port which is not
  PD capable.
- Applies on top of v6 of "USB Type-C Connector class" patch series.

v2:
- Class code no longer uses locking, so the patch to remove it is no longer
  necessary.
- tcpm: Only update polarity if setting it was successful
  If setting the CC line polarity in the driver was not successful,
  don't update the internal polarity state.
- tcpm: All PD messages are little endian; convert to and from CPU endianness.
- tcpm: Avoid comparisons against NULL.
- tcpm: Use u8/u16/u32 instead of uint8_t/uint16_t/uint32_t consistently.
- tcpm/tcpc: Callbacks into tcpm need to be lockless to avoid timing problems
  in low level drivers.
- tcpm/tcpc: Simplify callbacks; tcpm can request the current state of cc/vbus
  when it is ready to use it.
- Applies on top of v5 of "USB Type-C Connector class" patch series.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ