diff mbox series

usb: typec: ucsi: Add DATA_RESET option of Connector Reset command

Message ID 20240808231443.1772374-1-venkat.jayaraman@intel.com
State New
Headers show
Series usb: typec: ucsi: Add DATA_RESET option of Connector Reset command | expand

Commit Message

Venkat Jayaraman Aug. 8, 2024, 11:14 p.m. UTC
Modify CONNECTOR_RESET command implementation to accommodate
DATA_RESET reset type as defined in UCSI spec v2.0 and later.

Hard Reset bit field was defined with value 1 in UCSI spec version 1.0.
Starting with spec version 1.1, Hard Reset bit field was removed from the
CONNECTOR_RESET command, until spec 2.0 reintroduced it with value 0, so, 
the value to pass in to the command for a Hard Reset is different depending
on the UCSI version supported by the LPM.

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Venkat Jayaraman <venkat.jayaraman@intel.com>
---

 drivers/usb/typec/ucsi/ucsi.c | 16 +++++++++++++++-
 drivers/usb/typec/ucsi/ucsi.h |  5 ++++-
 2 files changed, 19 insertions(+), 2 deletions(-)

Comments

kernel test robot Aug. 9, 2024, 1 p.m. UTC | #1
Hi Venkat,

kernel test robot noticed the following build warnings:

[auto build test WARNING on usb/usb-testing]
[also build test WARNING on usb/usb-next usb/usb-linus westeri-thunderbolt/next linus/master v6.11-rc2 next-20240809]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Venkat-Jayaraman/usb-typec-ucsi-Add-DATA_RESET-option-of-Connector-Reset-command/20240809-122908
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
patch link:    https://lore.kernel.org/r/20240808231443.1772374-1-venkat.jayaraman%40intel.com
patch subject: [PATCH] usb: typec: ucsi: Add DATA_RESET option of Connector Reset command
config: i386-buildonly-randconfig-005-20240809 (https://download.01.org/0day-ci/archive/20240809/202408092049.X5fsVaNn-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240809/202408092049.X5fsVaNn-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408092049.X5fsVaNn-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/usb/typec/ucsi/ucsi.c:1347: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * Hard Reset bit field was defined with value 1 in UCSI spec version 1.0.


vim +1347 drivers/usb/typec/ucsi/ucsi.c

  1345	
  1346	/**
> 1347	 * Hard Reset bit field was defined with value 1 in UCSI spec version 1.0.
  1348	 * Starting with spec version 1.1, Hard Reset bit field was removed from the
  1349	 * CONNECTOR_RESET command, until spec 2.0 reintroduced it with value 0, so, in effect,
  1350	 * the value to pass in to the command for a Hard Reset is different depending
  1351	 * on the supported UCSI version by the LPM.
  1352	 *
  1353	 * For performing a Data Reset on LPMs supporting version 2.0 and greater,
  1354	 * this function needs to be called with the second argument set to 0.
  1355	 */
  1356	static int ucsi_reset_connector(struct ucsi_connector *con, bool hard)
  1357	{
  1358		u64 command;
  1359	
  1360		command = UCSI_CONNECTOR_RESET | UCSI_CONNECTOR_NUMBER(con->num);
  1361	
  1362		if (con->ucsi->version < UCSI_VERSION_1_1)
  1363			command |= hard ? UCSI_CONNECTOR_RESET_HARD_VER_1_0 : 0;
  1364		else if (con->ucsi->version >= UCSI_VERSION_2_0)
  1365			command |= hard ? 0 : UCSI_CONNECTOR_RESET_DATA_VER_2_0;
  1366	
  1367		return ucsi_send_command(con->ucsi, command, NULL, 0);
  1368	}
  1369
diff mbox series

Patch

diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index dcd3765cc1f5..7482baec36f8 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -1343,12 +1343,26 @@  EXPORT_SYMBOL_GPL(ucsi_connector_change);
 
 /* -------------------------------------------------------------------------- */
 
+/**
+ * Hard Reset bit field was defined with value 1 in UCSI spec version 1.0.
+ * Starting with spec version 1.1, Hard Reset bit field was removed from the
+ * CONNECTOR_RESET command, until spec 2.0 reintroduced it with value 0, so, in effect,
+ * the value to pass in to the command for a Hard Reset is different depending
+ * on the supported UCSI version by the LPM.
+ *
+ * For performing a Data Reset on LPMs supporting version 2.0 and greater,
+ * this function needs to be called with the second argument set to 0.
+ */
 static int ucsi_reset_connector(struct ucsi_connector *con, bool hard)
 {
 	u64 command;
 
 	command = UCSI_CONNECTOR_RESET | UCSI_CONNECTOR_NUMBER(con->num);
-	command |= hard ? UCSI_CONNECTOR_RESET_HARD : 0;
+
+	if (con->ucsi->version < UCSI_VERSION_1_1)
+		command |= hard ? UCSI_CONNECTOR_RESET_HARD_VER_1_0 : 0;
+	else if (con->ucsi->version >= UCSI_VERSION_2_0)
+		command |= hard ? 0 : UCSI_CONNECTOR_RESET_DATA_VER_2_0;
 
 	return ucsi_send_command(con->ucsi, command, NULL, 0);
 }
diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
index 57129f3c0814..06c642e2838f 100644
--- a/drivers/usb/typec/ucsi/ucsi.h
+++ b/drivers/usb/typec/ucsi/ucsi.h
@@ -29,6 +29,7 @@  struct dentry;
 #define UCSIv2_MESSAGE_OUT		272
 
 /* UCSI versions */
+#define UCSI_VERSION_1_1	0x0110
 #define UCSI_VERSION_1_2	0x0120
 #define UCSI_VERSION_2_0	0x0200
 #define UCSI_VERSION_2_1	0x0210
@@ -122,7 +123,9 @@  void ucsi_connector_change(struct ucsi *ucsi, u8 num);
 #define UCSI_DEFAULT_GET_CONNECTOR_NUMBER(_cmd_)	(((_cmd_) >> 16) & GENMASK(6, 0))
 
 /* CONNECTOR_RESET command bits */
-#define UCSI_CONNECTOR_RESET_HARD		BIT(23) /* Deprecated in v1.1 */
+#define UCSI_CONNECTOR_RESET_HARD_VER_1_0	BIT(23) /* Deprecated in v1.1 */
+#define UCSI_CONNECTOR_RESET_DATA_VER_2_0	BIT(23) /* Redefined in v2.0 */
+
 
 /* ACK_CC_CI bits */
 #define UCSI_ACK_CONNECTOR_CHANGE		BIT(16)