All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0
@ 2024-01-23 22:30 Abhishek Pandit-Subedi
  2024-01-23 22:30 ` [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2 Abhishek Pandit-Subedi
                   ` (3 more replies)
  0 siblings, 4 replies; 18+ messages in thread
From: Abhishek Pandit-Subedi @ 2024-01-23 22:30 UTC (permalink / raw)
  To: Heikki Krogerus, linux-usb
  Cc: pmalani, jthies, Abhishek Pandit-Subedi, Andy Shevchenko,
	Bjorn Andersson, Dmitry Baryshkov, Fabrice Gasnier,
	Greg Kroah-Hartman, Hans de Goede, Neil Armstrong, Saranya Gopal,
	linux-kernel

From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>


Hi Heikki,

This series starts the work adding UCSI 3.0 support to the UCSI driver.

There's a couple of pieces to start here:
* Add version checks and limit read size on 1.2.
* Update Connector Status and Connector Capability structures.
* Expose Partner PD revision from Capability data.

These were tested against on a 6.6 kernel running a usermode PPM against
a Realtek Evaluation board.

One additional note: there are a lot more unaligned fields in UCSI now
and the struct definitions are getting a bit out of hand. We can discuss
alternate mechanisms for defining these structs in the patch that
changes these structures.

Thanks,
Abhishek


Abhishek Pandit-Subedi (3):
  usb: typec: ucsi: Limit read size on v1.2
  usb: typec: ucsi: Update connector cap and status
  usb: typec: ucsi: Get PD revision for partner

 drivers/usb/typec/ucsi/ucsi.c | 51 ++++++++++++++++++++++++++--
 drivers/usb/typec/ucsi/ucsi.h | 64 ++++++++++++++++++++++++++++++++---
 2 files changed, 109 insertions(+), 6 deletions(-)

-- 
2.43.0.429.g432eaa2c6b-goog


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2
  2024-01-23 22:30 [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Abhishek Pandit-Subedi
@ 2024-01-23 22:30 ` Abhishek Pandit-Subedi
  2024-01-24  8:12   ` Prashant Malani
  2024-01-23 22:30 ` [PATCH v1 2/3] usb: typec: ucsi: Update connector cap and status Abhishek Pandit-Subedi
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 18+ messages in thread
From: Abhishek Pandit-Subedi @ 2024-01-23 22:30 UTC (permalink / raw)
  To: Heikki Krogerus, linux-usb
  Cc: pmalani, jthies, Abhishek Pandit-Subedi, Bjorn Andersson,
	Dmitry Baryshkov, Fabrice Gasnier, Greg Kroah-Hartman,
	Hans de Goede, Neil Armstrong, Saranya Gopal, linux-kernel

From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>

Between UCSI 1.2 and UCSI 2.0, the size of the MESSAGE_IN region was
increased from 16 to 256. In order to avoid overflowing reads for older
systems, add a mechanism to use the read UCSI version to truncate read
sizes on UCSI v1.2.

Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
---
Tested on 6.6 kernel. Dmesg output from this change:
[  105.058162] ucsi_um_test ucsi_um_test_device.0: Registered UCSI
interface with version 3.0.0


 drivers/usb/typec/ucsi/ucsi.c | 26 ++++++++++++++++++++++++--
 drivers/usb/typec/ucsi/ucsi.h | 11 +++++++++++
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index 5392ec698959..4edf785d203b 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -36,6 +36,19 @@
  */
 #define UCSI_SWAP_TIMEOUT_MS	5000
 
+static int ucsi_read_message_in(struct ucsi *ucsi, void *buf,
+					  size_t buf_size)
+{
+	/*
+	 * Below UCSI 2.0, MESSAGE_IN was limited to 16 bytes. Truncate the
+	 * reads here.
+	 */
+	if (ucsi->version <= UCSI_VERSION_1_2)
+		buf_size = min_t(size_t, 16, buf_size);
+
+	return ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, buf, buf_size);
+}
+
 static int ucsi_acknowledge_command(struct ucsi *ucsi)
 {
 	u64 ctrl;
@@ -72,7 +85,7 @@ static int ucsi_read_error(struct ucsi *ucsi)
 	if (ret < 0)
 		return ret;
 
-	ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, &error, sizeof(error));
+	ret = ucsi_read_message_in(ucsi, &error, sizeof(error));
 	if (ret)
 		return ret;
 
@@ -170,7 +183,7 @@ int ucsi_send_command(struct ucsi *ucsi, u64 command,
 	length = ret;
 
 	if (data) {
-		ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, data, size);
+		ret = ucsi_read_message_in(ucsi, data, size);
 		if (ret)
 			goto out;
 	}
@@ -1556,6 +1569,15 @@ int ucsi_register(struct ucsi *ucsi)
 	if (!ucsi->version)
 		return -ENODEV;
 
+	/*
+	 * Version format is JJ.M.N (JJ = Major version, M = Minor version,
+	 * N = sub-minor version).
+	 */
+	dev_info(ucsi->dev, "Registered UCSI interface with version %x.%x.%x",
+		 UCSI_BCD_GET_MAJOR(ucsi->version),
+		 UCSI_BCD_GET_MINOR(ucsi->version),
+		 UCSI_BCD_GET_SUBMINOR(ucsi->version));
+
 	queue_delayed_work(system_long_wq, &ucsi->work, 0);
 
 	ucsi_debugfs_register(ucsi);
diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
index 6478016d5cb8..bec920fa6b8a 100644
--- a/drivers/usb/typec/ucsi/ucsi.h
+++ b/drivers/usb/typec/ucsi/ucsi.h
@@ -23,6 +23,17 @@ struct dentry;
 #define UCSI_CONTROL			8
 #define UCSI_MESSAGE_IN			16
 #define UCSI_MESSAGE_OUT		32
+#define UCSIv2_MESSAGE_OUT		272
+
+/* UCSI versions */
+#define UCSI_VERSION_1_2	0x0120
+#define UCSI_VERSION_2_0	0x0200
+#define UCSI_VERSION_2_1	0x0210
+#define UCSI_VERSION_3_0	0x0300
+
+#define UCSI_BCD_GET_MAJOR(_v_)		(((_v_) >> 8) & 0xFF)
+#define UCSI_BCD_GET_MINOR(_v_)		(((_v_) >> 4) & 0x0F)
+#define UCSI_BCD_GET_SUBMINOR(_v_)	((_v_) & 0x0F)
 
 /* Command Status and Connector Change Indication (CCI) bits */
 #define UCSI_CCI_CONNECTOR(_c_)		(((_c_) & GENMASK(7, 1)) >> 1)
-- 
2.43.0.429.g432eaa2c6b-goog


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v1 2/3] usb: typec: ucsi: Update connector cap and status
  2024-01-23 22:30 [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Abhishek Pandit-Subedi
  2024-01-23 22:30 ` [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2 Abhishek Pandit-Subedi
@ 2024-01-23 22:30 ` Abhishek Pandit-Subedi
  2024-01-24 14:14   ` Heikki Krogerus
  2024-01-24 18:50   ` Prashant Malani
  2024-01-23 22:30 ` [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner Abhishek Pandit-Subedi
  2024-01-24 12:44 ` [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Neil Armstrong
  3 siblings, 2 replies; 18+ messages in thread
From: Abhishek Pandit-Subedi @ 2024-01-23 22:30 UTC (permalink / raw)
  To: Heikki Krogerus, linux-usb
  Cc: pmalani, jthies, Abhishek Pandit-Subedi, Bjorn Andersson,
	Dmitry Baryshkov, Greg Kroah-Hartman, Saranya Gopal,
	linux-kernel

From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>

Update the data structures for ucsi_connector_capability and
ucsi_connector_status to UCSIv3.

Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
---
Connector status has several unaligned bitfields (16-bit) that result in
difficult to maintain macros. It may be better if we simply re-define
these structs as u8[] and add bit range macros to access and cast these
values.

i.e.
struct ucsi_connector_status {
  u8 raw_data[18];

...
\#define UCSI_CONSTAT_CONNECTOR_STATUS          FIELD(u16, 15, 0)
\#define UCSI_CONSTAT_BCD_PD_VER_OPER_MODE      FIELD(u16, 85, 70)
}

GET_UCSI_FIELD(con->status, UCSI_CONSTAT_CONNECTOR_STATUS);
SET_UCSI_FIELD(con->status, UCSI_CONSTAT_CONNECTOR_STATUS, 0);

I didn't find a clear example of an existing mechanism to do this. Would
love some pointers here if it already exists and some feedback from the
maintainer if this is a direction you want to go.


 drivers/usb/typec/ucsi/ucsi.h | 50 ++++++++++++++++++++++++++++++++---
 1 file changed, 46 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
index bec920fa6b8a..94b373378f63 100644
--- a/drivers/usb/typec/ucsi/ucsi.h
+++ b/drivers/usb/typec/ucsi/ucsi.h
@@ -3,6 +3,7 @@
 #ifndef __DRIVER_USB_TYPEC_UCSI_H
 #define __DRIVER_USB_TYPEC_UCSI_H
 
+#include <asm-generic/unaligned.h>
 #include <linux/bitops.h>
 #include <linux/device.h>
 #include <linux/power_supply.h>
@@ -214,9 +215,29 @@ struct ucsi_connector_capability {
 #define UCSI_CONCAP_OPMODE_USB2			BIT(5)
 #define UCSI_CONCAP_OPMODE_USB3			BIT(6)
 #define UCSI_CONCAP_OPMODE_ALT_MODE		BIT(7)
-	u8 flags;
+	u32 flags;
 #define UCSI_CONCAP_FLAG_PROVIDER		BIT(0)
 #define UCSI_CONCAP_FLAG_CONSUMER		BIT(1)
+#define UCSI_CONCAP_FLAG_SWAP_TO_DFP		BIT(2)
+#define UCSI_CONCAP_FLAG_SWAP_TO_UFP		BIT(3)
+#define UCSI_CONCAP_FLAG_SWAP_TO_SRC		BIT(4)
+#define UCSI_CONCAP_FLAG_SWAP_TO_SINK		BIT(5)
+#define UCSI_CONCAP_FLAG_EX_OP_MODE(_f_) \
+	(((_f_) & GENMASK(13, 6)) >> 6)
+#define   UCSI_CONCAP_EX_OP_MODE_USB4_GEN2	BIT(0)
+#define   UCSI_CONCAP_EX_OP_MODE_EPR_SRC	BIT(1)
+#define   UCSI_CONCAP_EX_OP_MODE_EPR_SINK	BIT(2)
+#define   UCSI_CONCAP_EX_OP_MODE_USB4_GEN3	BIT(3)
+#define   UCSI_CONCAP_EX_OP_MODE_USB4_GEN4	BIT(4)
+#define UCSI_CONCAP_FLAG_MISC_CAPS(_f_) \
+	(((_f_) & GENMASK(17, 14)) >> 14)
+#define   UCSI_CONCAP_MISC_CAP_FW_UPDATE	BIT(0)
+#define   UCSI_CONCAP_MISC_CAP_SECURITY		BIT(1)
+#define UCSI_CONCAP_FLAG_REV_CURR_PROT_SUPPORT	BIT(18)
+#define UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV(_f_) \
+	(((_f_) & GENMASK(20, 19)) >> 19)
+#define UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(_f_) \
+	(UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV(_f_) << 8)
 } __packed;
 
 struct ucsi_altmode {
@@ -276,15 +297,36 @@ struct ucsi_connector_status {
 #define   UCSI_CONSTAT_PARTNER_TYPE_DEBUG	5
 #define   UCSI_CONSTAT_PARTNER_TYPE_AUDIO	6
 	u32 request_data_obj;
-	u8 pwr_status;
-#define UCSI_CONSTAT_BC_STATUS(_p_)		((_p_) & GENMASK(2, 0))
+
+	u8 pwr_status[3];
+#define UCSI_CONSTAT_BC_STATUS(_p_)		((_p_[0]) & GENMASK(1, 0))
 #define   UCSI_CONSTAT_BC_NOT_CHARGING		0
 #define   UCSI_CONSTAT_BC_NOMINAL_CHARGING	1
 #define   UCSI_CONSTAT_BC_SLOW_CHARGING		2
 #define   UCSI_CONSTAT_BC_TRICKLE_CHARGING	3
-#define UCSI_CONSTAT_PROVIDER_CAP_LIMIT(_p_)	(((_p_) & GENMASK(6, 3)) >> 3)
+#define UCSI_CONSTAT_PROVIDER_CAP_LIMIT(_p_)	(((_p_[0]) & GENMASK(5, 2)) >> 2)
 #define   UCSI_CONSTAT_CAP_PWR_LOWERED		0
 #define   UCSI_CONSTAT_CAP_PWR_BUDGET_LIMIT	1
+#define UCSI_CONSTAT_PROVIDER_PD_VERSION_OPER_MODE(_p_)	\
+	((get_unaligned_le32(_p_) & GENMASK(21, 6)) >> 6)
+#define UCSI_CONSTAT_ORIENTATION(_p_)		(((_p_[2]) & GENMASK(6, 6)) >> 6)
+#define   UCSI_CONSTAT_ORIENTATION_DIRECT	0
+#define   UCSI_CONSTAT_ORIENTATION_FLIPPED	1
+#define UCSI_CONSTAT_SINK_PATH_STATUS(_p_)	(((_p_[2]) & GENMASK(7, 7)) >> 7)
+#define   UCSI_CONSTAT_SINK_PATH_DISABLED	0
+#define   UCSI_CONSTAT_SINK_PATH_ENABLED	1
+	u8 pwr_readings[9];
+#define UCSI_CONSTAT_REV_CURR_PROT_STATUS(_p_)	((_p_[0]) & 0x1)
+#define UCSI_CONSTAT_PWR_READING_VALID(_p_)	(((_p_[0]) & GENMASK(1, 1)) >> 1)
+#define UCSI_CONSTAT_CURRENT_SCALE(_p_)		(((_p_[0]) & GENMASK(4, 2)) >> 2)
+#define UCSI_CONSTAT_PEAK_CURRENT(_p_) \
+	((get_unaligned_le32(_p_) & GENMASK(20, 5)) >> 5)
+#define UCSI_CONSTAT_AVG_CURRENT(_p_) \
+	((get_unaligned_le32(&(_p_)[2]) & GENMASK(20, 5)) >> 5)
+#define UCSI_CONSTAT_VOLTAGE_SCALE(_p_) \
+	((get_unaligned_le16(&(_p_)[4]) & GENMASK(8, 5)) >> 5)
+#define UCSI_CONSTAT_VOLTAGE_READING(_p_) \
+	((get_unaligned_le32(&(_p_)[5]) & GENMASK(16, 1)) >> 1)
 } __packed;
 
 /* -------------------------------------------------------------------------- */
-- 
2.43.0.429.g432eaa2c6b-goog


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner
  2024-01-23 22:30 [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Abhishek Pandit-Subedi
  2024-01-23 22:30 ` [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2 Abhishek Pandit-Subedi
  2024-01-23 22:30 ` [PATCH v1 2/3] usb: typec: ucsi: Update connector cap and status Abhishek Pandit-Subedi
@ 2024-01-23 22:30 ` Abhishek Pandit-Subedi
  2024-01-24 14:30   ` Heikki Krogerus
  2024-01-24 18:48   ` Prashant Malani
  2024-01-24 12:44 ` [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Neil Armstrong
  3 siblings, 2 replies; 18+ messages in thread
From: Abhishek Pandit-Subedi @ 2024-01-23 22:30 UTC (permalink / raw)
  To: Heikki Krogerus, linux-usb
  Cc: pmalani, jthies, Abhishek Pandit-Subedi, Andy Shevchenko,
	Bjorn Andersson, Dmitry Baryshkov, Fabrice Gasnier,
	Greg Kroah-Hartman, Hans de Goede, Neil Armstrong, Saranya Gopal,
	linux-kernel

From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>

PD major revision for the port partner is described in
GET_CONNECTOR_CAPABILITY and is only valid on UCSI 2.0 and newer. Update
the pd_revision on the partner if the UCSI version is 2.0 or newer.

Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
---
$ cat /sys/class/typec/port2-partner/usb_power_delivery_revision
3.0

 drivers/usb/typec/ucsi/ucsi.c | 25 +++++++++++++++++++++++++
 drivers/usb/typec/ucsi/ucsi.h |  3 +++
 2 files changed, 28 insertions(+)

diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index 4edf785d203b..8e0a512853ba 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -782,6 +782,8 @@ static int ucsi_register_partner(struct ucsi_connector *con)
 	}
 
 	desc.usb_pd = pwr_opmode == UCSI_CONSTAT_PWR_OPMODE_PD;
+	desc.pd_revision =
+		UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags);
 
 	partner = typec_register_partner(con->port, &desc);
 	if (IS_ERR(partner)) {
@@ -856,6 +858,28 @@ static void ucsi_partner_change(struct ucsi_connector *con)
 			con->num, u_role);
 }
 
+static int ucsi_check_connector_capability(struct ucsi_connector *con)
+{
+	u64 command;
+	int ret;
+
+	if (!con->partner && !IS_MIN_VERSION_2_0(con->ucsi))
+		return 0;
+
+	command = UCSI_GET_CONNECTOR_CAPABILITY | UCSI_CONNECTOR_NUMBER(con->num);
+	ret = ucsi_send_command(con->ucsi, command, &con->cap, sizeof(con->cap));
+	if (ret < 0) {
+		dev_err(con->ucsi->dev, "GET_CONNECTOR_CAPABILITY failed (%d)\n", ret);
+		return ret;
+	}
+
+	typec_partner_set_pd_revision(
+		con->partner,
+		UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags));
+
+	return ret;
+}
+
 static int ucsi_check_connection(struct ucsi_connector *con)
 {
 	u8 prev_flags = con->status.flags;
@@ -925,6 +949,7 @@ static void ucsi_handle_connector_change(struct work_struct *work)
 		if (con->status.flags & UCSI_CONSTAT_CONNECTED) {
 			ucsi_register_partner(con);
 			ucsi_partner_task(con, ucsi_check_connection, 1, HZ);
+			ucsi_partner_task(con, ucsi_check_connector_capability, 1, HZ);
 
 			if (UCSI_CONSTAT_PWR_OPMODE(con->status.flags) ==
 			    UCSI_CONSTAT_PWR_OPMODE_PD)
diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
index 94b373378f63..5e60328f398e 100644
--- a/drivers/usb/typec/ucsi/ucsi.h
+++ b/drivers/usb/typec/ucsi/ucsi.h
@@ -36,6 +36,9 @@ struct dentry;
 #define UCSI_BCD_GET_MINOR(_v_)		(((_v_) >> 4) & 0x0F)
 #define UCSI_BCD_GET_SUBMINOR(_v_)	((_v_) & 0x0F)
 
+#define IS_MIN_VERSION(ucsi, min_ver)	((ucsi)->version >= min_ver)
+#define IS_MIN_VERSION_2_0(ucsi)	IS_MIN_VERSION(ucsi, UCSI_VERSION_2_0)
+
 /* Command Status and Connector Change Indication (CCI) bits */
 #define UCSI_CCI_CONNECTOR(_c_)		(((_c_) & GENMASK(7, 1)) >> 1)
 #define UCSI_CCI_LENGTH(_c_)		(((_c_) & GENMASK(15, 8)) >> 8)
-- 
2.43.0.429.g432eaa2c6b-goog


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2
  2024-01-23 22:30 ` [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2 Abhishek Pandit-Subedi
@ 2024-01-24  8:12   ` Prashant Malani
  2024-01-24 13:51     ` Heikki Krogerus
  0 siblings, 1 reply; 18+ messages in thread
From: Prashant Malani @ 2024-01-24  8:12 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi
  Cc: Heikki Krogerus, linux-usb, jthies, Abhishek Pandit-Subedi,
	Bjorn Andersson, Dmitry Baryshkov, Fabrice Gasnier,
	Greg Kroah-Hartman, Hans de Goede, Neil Armstrong, Saranya Gopal,
	linux-kernel

Hi Abhishek,

On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
<abhishekpandit@google.com> wrote:
>
> From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
>
> Between UCSI 1.2 and UCSI 2.0, the size of the MESSAGE_IN region was
> increased from 16 to 256. In order to avoid overflowing reads for older
> systems, add a mechanism to use the read UCSI version to truncate read
> sizes on UCSI v1.2.
>
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
I have one nit (mentioned in side-band but reproducing here for consistency),
but will defer to the maintainer on that.

The above notwithstanding, FWIW:
Reviewed-by: Prashant Malani<pmalani@chromium.org>

> @@ -1556,6 +1569,15 @@ int ucsi_register(struct ucsi *ucsi)
>         if (!ucsi->version)
>                 return -ENODEV;
>
> +       /*
> +        * Version format is JJ.M.N (JJ = Major version, M = Minor version,
> +        * N = sub-minor version).
> +        */
> +       dev_info(ucsi->dev, "Registered UCSI interface with version %x.%x.%x",
> +                UCSI_BCD_GET_MAJOR(ucsi->version),
> +                UCSI_BCD_GET_MINOR(ucsi->version),
> +                UCSI_BCD_GET_SUBMINOR(ucsi->version));

nit: I think this doesn't need to be dev_info() and can be just
dev_dbg(), but will
defer to the maintainer.

Thanks,

-Prashant

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0
  2024-01-23 22:30 [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Abhishek Pandit-Subedi
                   ` (2 preceding siblings ...)
  2024-01-23 22:30 ` [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner Abhishek Pandit-Subedi
@ 2024-01-24 12:44 ` Neil Armstrong
  3 siblings, 0 replies; 18+ messages in thread
From: Neil Armstrong @ 2024-01-24 12:44 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi, Heikki Krogerus, linux-usb
  Cc: pmalani, jthies, Abhishek Pandit-Subedi, Andy Shevchenko,
	Bjorn Andersson, Dmitry Baryshkov, Fabrice Gasnier,
	Greg Kroah-Hartman, Hans de Goede, Saranya Gopal, linux-kernel,
	linux-arm-msm

On 23/01/2024 23:30, Abhishek Pandit-Subedi wrote:
> From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> 
> 
> Hi Heikki,
> 
> This series starts the work adding UCSI 3.0 support to the UCSI driver.
> 
> There's a couple of pieces to start here:
> * Add version checks and limit read size on 1.2.
> * Update Connector Status and Connector Capability structures.
> * Expose Partner PD revision from Capability data.
> 
> These were tested against on a 6.6 kernel running a usermode PPM against
> a Realtek Evaluation board.
> 
> One additional note: there are a lot more unaligned fields in UCSI now
> and the struct definitions are getting a bit out of hand. We can discuss
> alternate mechanisms for defining these structs in the patch that
> changes these structures.
> 
> Thanks,
> Abhishek
> 
> 
> Abhishek Pandit-Subedi (3):
>    usb: typec: ucsi: Limit read size on v1.2
>    usb: typec: ucsi: Update connector cap and status
>    usb: typec: ucsi: Get PD revision for partner
> 
>   drivers/usb/typec/ucsi/ucsi.c | 51 ++++++++++++++++++++++++++--
>   drivers/usb/typec/ucsi/ucsi.h | 64 ++++++++++++++++++++++++++++++++---
>   2 files changed, 109 insertions(+), 6 deletions(-)
> 

[    7.417925] ucsi_glink.pmic_glink_ucsi pmic_glink.ucsi.0: Registered UCSI interface with version 1.1.0

Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-QRD

[    9.085733] ucsi_glink.pmic_glink_ucsi pmic_glink.ucsi.0: Registered UCSI interface with version 1.1.0

Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD

Thanks,
Neil

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2
  2024-01-24  8:12   ` Prashant Malani
@ 2024-01-24 13:51     ` Heikki Krogerus
  2024-01-24 14:17       ` Greg Kroah-Hartman
  0 siblings, 1 reply; 18+ messages in thread
From: Heikki Krogerus @ 2024-01-24 13:51 UTC (permalink / raw)
  To: Prashant Malani
  Cc: Abhishek Pandit-Subedi, linux-usb, jthies,
	Abhishek Pandit-Subedi, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Greg Kroah-Hartman, Hans de Goede,
	Neil Armstrong, Saranya Gopal, linux-kernel

On Wed, Jan 24, 2024 at 12:12:26AM -0800, Prashant Malani wrote:
> Hi Abhishek,
> 
> On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
> <abhishekpandit@google.com> wrote:
> >
> > From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> >
> > Between UCSI 1.2 and UCSI 2.0, the size of the MESSAGE_IN region was
> > increased from 16 to 256. In order to avoid overflowing reads for older
> > systems, add a mechanism to use the read UCSI version to truncate read
> > sizes on UCSI v1.2.
> >
> > Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> I have one nit (mentioned in side-band but reproducing here for consistency),
> but will defer to the maintainer on that.
> 
> The above notwithstanding, FWIW:
> Reviewed-by: Prashant Malani<pmalani@chromium.org>
> 
> > @@ -1556,6 +1569,15 @@ int ucsi_register(struct ucsi *ucsi)
> >         if (!ucsi->version)
> >                 return -ENODEV;
> >
> > +       /*
> > +        * Version format is JJ.M.N (JJ = Major version, M = Minor version,
> > +        * N = sub-minor version).
> > +        */
> > +       dev_info(ucsi->dev, "Registered UCSI interface with version %x.%x.%x",
> > +                UCSI_BCD_GET_MAJOR(ucsi->version),
> > +                UCSI_BCD_GET_MINOR(ucsi->version),
> > +                UCSI_BCD_GET_SUBMINOR(ucsi->version));
> 
> nit: I think this doesn't need to be dev_info() and can be just
> dev_dbg(), but will
> defer to the maintainer.

I think that's okay.

Reviewewd-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

-- 
heikki

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 2/3] usb: typec: ucsi: Update connector cap and status
  2024-01-23 22:30 ` [PATCH v1 2/3] usb: typec: ucsi: Update connector cap and status Abhishek Pandit-Subedi
@ 2024-01-24 14:14   ` Heikki Krogerus
  2024-01-24 18:50   ` Prashant Malani
  1 sibling, 0 replies; 18+ messages in thread
From: Heikki Krogerus @ 2024-01-24 14:14 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi
  Cc: linux-usb, pmalani, jthies, Abhishek Pandit-Subedi,
	Bjorn Andersson, Dmitry Baryshkov, Greg Kroah-Hartman,
	Saranya Gopal, linux-kernel

On Tue, Jan 23, 2024 at 02:30:35PM -0800, Abhishek Pandit-Subedi wrote:
> From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> 
> Update the data structures for ucsi_connector_capability and
> ucsi_connector_status to UCSIv3.
> 
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> ---
> Connector status has several unaligned bitfields (16-bit) that result in
> difficult to maintain macros. It may be better if we simply re-define
> these structs as u8[] and add bit range macros to access and cast these
> values.
> 
> i.e.
> struct ucsi_connector_status {
>   u8 raw_data[18];
> 
> ...
> \#define UCSI_CONSTAT_CONNECTOR_STATUS          FIELD(u16, 15, 0)
> \#define UCSI_CONSTAT_BCD_PD_VER_OPER_MODE      FIELD(u16, 85, 70)
> }
> 
> GET_UCSI_FIELD(con->status, UCSI_CONSTAT_CONNECTOR_STATUS);
> SET_UCSI_FIELD(con->status, UCSI_CONSTAT_CONNECTOR_STATUS, 0);
> 
> I didn't find a clear example of an existing mechanism to do this. Would
> love some pointers here if it already exists and some feedback from the
> maintainer if this is a direction you want to go.

I'll ask around if anybody has any ideas on our side, but I think we
can go forward with this in any case. We can always fine tune these
later.

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

>  drivers/usb/typec/ucsi/ucsi.h | 50 ++++++++++++++++++++++++++++++++---
>  1 file changed, 46 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> index bec920fa6b8a..94b373378f63 100644
> --- a/drivers/usb/typec/ucsi/ucsi.h
> +++ b/drivers/usb/typec/ucsi/ucsi.h
> @@ -3,6 +3,7 @@
>  #ifndef __DRIVER_USB_TYPEC_UCSI_H
>  #define __DRIVER_USB_TYPEC_UCSI_H
>  
> +#include <asm-generic/unaligned.h>
>  #include <linux/bitops.h>
>  #include <linux/device.h>
>  #include <linux/power_supply.h>
> @@ -214,9 +215,29 @@ struct ucsi_connector_capability {
>  #define UCSI_CONCAP_OPMODE_USB2			BIT(5)
>  #define UCSI_CONCAP_OPMODE_USB3			BIT(6)
>  #define UCSI_CONCAP_OPMODE_ALT_MODE		BIT(7)
> -	u8 flags;
> +	u32 flags;
>  #define UCSI_CONCAP_FLAG_PROVIDER		BIT(0)
>  #define UCSI_CONCAP_FLAG_CONSUMER		BIT(1)
> +#define UCSI_CONCAP_FLAG_SWAP_TO_DFP		BIT(2)
> +#define UCSI_CONCAP_FLAG_SWAP_TO_UFP		BIT(3)
> +#define UCSI_CONCAP_FLAG_SWAP_TO_SRC		BIT(4)
> +#define UCSI_CONCAP_FLAG_SWAP_TO_SINK		BIT(5)
> +#define UCSI_CONCAP_FLAG_EX_OP_MODE(_f_) \
> +	(((_f_) & GENMASK(13, 6)) >> 6)
> +#define   UCSI_CONCAP_EX_OP_MODE_USB4_GEN2	BIT(0)
> +#define   UCSI_CONCAP_EX_OP_MODE_EPR_SRC	BIT(1)
> +#define   UCSI_CONCAP_EX_OP_MODE_EPR_SINK	BIT(2)
> +#define   UCSI_CONCAP_EX_OP_MODE_USB4_GEN3	BIT(3)
> +#define   UCSI_CONCAP_EX_OP_MODE_USB4_GEN4	BIT(4)
> +#define UCSI_CONCAP_FLAG_MISC_CAPS(_f_) \
> +	(((_f_) & GENMASK(17, 14)) >> 14)
> +#define   UCSI_CONCAP_MISC_CAP_FW_UPDATE	BIT(0)
> +#define   UCSI_CONCAP_MISC_CAP_SECURITY		BIT(1)
> +#define UCSI_CONCAP_FLAG_REV_CURR_PROT_SUPPORT	BIT(18)
> +#define UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV(_f_) \
> +	(((_f_) & GENMASK(20, 19)) >> 19)
> +#define UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(_f_) \
> +	(UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV(_f_) << 8)
>  } __packed;
>  
>  struct ucsi_altmode {
> @@ -276,15 +297,36 @@ struct ucsi_connector_status {
>  #define   UCSI_CONSTAT_PARTNER_TYPE_DEBUG	5
>  #define   UCSI_CONSTAT_PARTNER_TYPE_AUDIO	6
>  	u32 request_data_obj;
> -	u8 pwr_status;
> -#define UCSI_CONSTAT_BC_STATUS(_p_)		((_p_) & GENMASK(2, 0))
> +
> +	u8 pwr_status[3];
> +#define UCSI_CONSTAT_BC_STATUS(_p_)		((_p_[0]) & GENMASK(1, 0))
>  #define   UCSI_CONSTAT_BC_NOT_CHARGING		0
>  #define   UCSI_CONSTAT_BC_NOMINAL_CHARGING	1
>  #define   UCSI_CONSTAT_BC_SLOW_CHARGING		2
>  #define   UCSI_CONSTAT_BC_TRICKLE_CHARGING	3
> -#define UCSI_CONSTAT_PROVIDER_CAP_LIMIT(_p_)	(((_p_) & GENMASK(6, 3)) >> 3)
> +#define UCSI_CONSTAT_PROVIDER_CAP_LIMIT(_p_)	(((_p_[0]) & GENMASK(5, 2)) >> 2)
>  #define   UCSI_CONSTAT_CAP_PWR_LOWERED		0
>  #define   UCSI_CONSTAT_CAP_PWR_BUDGET_LIMIT	1
> +#define UCSI_CONSTAT_PROVIDER_PD_VERSION_OPER_MODE(_p_)	\
> +	((get_unaligned_le32(_p_) & GENMASK(21, 6)) >> 6)
> +#define UCSI_CONSTAT_ORIENTATION(_p_)		(((_p_[2]) & GENMASK(6, 6)) >> 6)
> +#define   UCSI_CONSTAT_ORIENTATION_DIRECT	0
> +#define   UCSI_CONSTAT_ORIENTATION_FLIPPED	1
> +#define UCSI_CONSTAT_SINK_PATH_STATUS(_p_)	(((_p_[2]) & GENMASK(7, 7)) >> 7)
> +#define   UCSI_CONSTAT_SINK_PATH_DISABLED	0
> +#define   UCSI_CONSTAT_SINK_PATH_ENABLED	1
> +	u8 pwr_readings[9];
> +#define UCSI_CONSTAT_REV_CURR_PROT_STATUS(_p_)	((_p_[0]) & 0x1)
> +#define UCSI_CONSTAT_PWR_READING_VALID(_p_)	(((_p_[0]) & GENMASK(1, 1)) >> 1)
> +#define UCSI_CONSTAT_CURRENT_SCALE(_p_)		(((_p_[0]) & GENMASK(4, 2)) >> 2)
> +#define UCSI_CONSTAT_PEAK_CURRENT(_p_) \
> +	((get_unaligned_le32(_p_) & GENMASK(20, 5)) >> 5)
> +#define UCSI_CONSTAT_AVG_CURRENT(_p_) \
> +	((get_unaligned_le32(&(_p_)[2]) & GENMASK(20, 5)) >> 5)
> +#define UCSI_CONSTAT_VOLTAGE_SCALE(_p_) \
> +	((get_unaligned_le16(&(_p_)[4]) & GENMASK(8, 5)) >> 5)
> +#define UCSI_CONSTAT_VOLTAGE_READING(_p_) \
> +	((get_unaligned_le32(&(_p_)[5]) & GENMASK(16, 1)) >> 1)
>  } __packed;
>  
>  /* -------------------------------------------------------------------------- */
> -- 
> 2.43.0.429.g432eaa2c6b-goog

-- 
heikki

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2
  2024-01-24 13:51     ` Heikki Krogerus
@ 2024-01-24 14:17       ` Greg Kroah-Hartman
  2024-01-24 18:59         ` Abhishek Pandit-Subedi
  0 siblings, 1 reply; 18+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-24 14:17 UTC (permalink / raw)
  To: Heikki Krogerus
  Cc: Prashant Malani, Abhishek Pandit-Subedi, linux-usb, jthies,
	Abhishek Pandit-Subedi, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Hans de Goede, Neil Armstrong, Saranya Gopal,
	linux-kernel

On Wed, Jan 24, 2024 at 03:51:58PM +0200, Heikki Krogerus wrote:
> On Wed, Jan 24, 2024 at 12:12:26AM -0800, Prashant Malani wrote:
> > Hi Abhishek,
> > 
> > On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
> > <abhishekpandit@google.com> wrote:
> > >
> > > From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > >
> > > Between UCSI 1.2 and UCSI 2.0, the size of the MESSAGE_IN region was
> > > increased from 16 to 256. In order to avoid overflowing reads for older
> > > systems, add a mechanism to use the read UCSI version to truncate read
> > > sizes on UCSI v1.2.
> > >
> > > Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > I have one nit (mentioned in side-band but reproducing here for consistency),
> > but will defer to the maintainer on that.
> > 
> > The above notwithstanding, FWIW:
> > Reviewed-by: Prashant Malani<pmalani@chromium.org>
> > 
> > > @@ -1556,6 +1569,15 @@ int ucsi_register(struct ucsi *ucsi)
> > >         if (!ucsi->version)
> > >                 return -ENODEV;
> > >
> > > +       /*
> > > +        * Version format is JJ.M.N (JJ = Major version, M = Minor version,
> > > +        * N = sub-minor version).
> > > +        */
> > > +       dev_info(ucsi->dev, "Registered UCSI interface with version %x.%x.%x",
> > > +                UCSI_BCD_GET_MAJOR(ucsi->version),
> > > +                UCSI_BCD_GET_MINOR(ucsi->version),
> > > +                UCSI_BCD_GET_SUBMINOR(ucsi->version));
> > 
> > nit: I think this doesn't need to be dev_info() and can be just
> > dev_dbg(), but will
> > defer to the maintainer.
> 
> I think that's okay.
> 
> Reviewewd-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

No, when drivers are working properly they are quiet, this needs to be
dev_dbg().

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner
  2024-01-23 22:30 ` [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner Abhishek Pandit-Subedi
@ 2024-01-24 14:30   ` Heikki Krogerus
  2024-01-24 18:48   ` Prashant Malani
  1 sibling, 0 replies; 18+ messages in thread
From: Heikki Krogerus @ 2024-01-24 14:30 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi
  Cc: linux-usb, pmalani, jthies, Abhishek Pandit-Subedi,
	Andy Shevchenko, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Greg Kroah-Hartman, Hans de Goede,
	Neil Armstrong, Saranya Gopal, linux-kernel

Hi Abhishek,

Few nitpicks for this one.

On Tue, Jan 23, 2024 at 02:30:36PM -0800, Abhishek Pandit-Subedi wrote:
> From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> 
> PD major revision for the port partner is described in
> GET_CONNECTOR_CAPABILITY and is only valid on UCSI 2.0 and newer. Update
> the pd_revision on the partner if the UCSI version is 2.0 or newer.
> 
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> ---
> $ cat /sys/class/typec/port2-partner/usb_power_delivery_revision
> 3.0
> 
>  drivers/usb/typec/ucsi/ucsi.c | 25 +++++++++++++++++++++++++
>  drivers/usb/typec/ucsi/ucsi.h |  3 +++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> index 4edf785d203b..8e0a512853ba 100644
> --- a/drivers/usb/typec/ucsi/ucsi.c
> +++ b/drivers/usb/typec/ucsi/ucsi.c
> @@ -782,6 +782,8 @@ static int ucsi_register_partner(struct ucsi_connector *con)
>  	}
>  
>  	desc.usb_pd = pwr_opmode == UCSI_CONSTAT_PWR_OPMODE_PD;
> +	desc.pd_revision =
> +		UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags);

	desc.pd_revision = UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags);

>  	partner = typec_register_partner(con->port, &desc);
>  	if (IS_ERR(partner)) {
> @@ -856,6 +858,28 @@ static void ucsi_partner_change(struct ucsi_connector *con)
>  			con->num, u_role);
>  }
>  
> +static int ucsi_check_connector_capability(struct ucsi_connector *con)
> +{
> +	u64 command;
> +	int ret;
> +
> +	if (!con->partner && !IS_MIN_VERSION_2_0(con->ucsi))
> +		return 0;
> +
> +	command = UCSI_GET_CONNECTOR_CAPABILITY | UCSI_CONNECTOR_NUMBER(con->num);
> +	ret = ucsi_send_command(con->ucsi, command, &con->cap, sizeof(con->cap));
> +	if (ret < 0) {
> +		dev_err(con->ucsi->dev, "GET_CONNECTOR_CAPABILITY failed (%d)\n", ret);
> +		return ret;
> +	}
> +
> +	typec_partner_set_pd_revision(
> +		con->partner,
> +		UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags));

	typec_partner_set_pd_revision(con->partner,
		UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags));

> +
> +	return ret;
> +}
> +
>  static int ucsi_check_connection(struct ucsi_connector *con)
>  {
>  	u8 prev_flags = con->status.flags;
> @@ -925,6 +949,7 @@ static void ucsi_handle_connector_change(struct work_struct *work)
>  		if (con->status.flags & UCSI_CONSTAT_CONNECTED) {
>  			ucsi_register_partner(con);
>  			ucsi_partner_task(con, ucsi_check_connection, 1, HZ);
> +			ucsi_partner_task(con, ucsi_check_connector_capability, 1, HZ);
>  
>  			if (UCSI_CONSTAT_PWR_OPMODE(con->status.flags) ==
>  			    UCSI_CONSTAT_PWR_OPMODE_PD)
> diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> index 94b373378f63..5e60328f398e 100644
> --- a/drivers/usb/typec/ucsi/ucsi.h
> +++ b/drivers/usb/typec/ucsi/ucsi.h
> @@ -36,6 +36,9 @@ struct dentry;
>  #define UCSI_BCD_GET_MINOR(_v_)		(((_v_) >> 4) & 0x0F)
>  #define UCSI_BCD_GET_SUBMINOR(_v_)	((_v_) & 0x0F)
>  
> +#define IS_MIN_VERSION(ucsi, min_ver)	((ucsi)->version >= min_ver)

Probable better to use brackets also with that min_ver:

#define IS_MIN_VERSION(ucsi, min_ver)	((ucsi)->version >= (min_ver))

> +#define IS_MIN_VERSION_2_0(ucsi)	IS_MIN_VERSION(ucsi, UCSI_VERSION_2_0)
> +
>  /* Command Status and Connector Change Indication (CCI) bits */
>  #define UCSI_CCI_CONNECTOR(_c_)		(((_c_) & GENMASK(7, 1)) >> 1)
>  #define UCSI_CCI_LENGTH(_c_)		(((_c_) & GENMASK(15, 8)) >> 8)
> -- 
> 2.43.0.429.g432eaa2c6b-goog

thanks,

-- 
heikki

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner
  2024-01-23 22:30 ` [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner Abhishek Pandit-Subedi
  2024-01-24 14:30   ` Heikki Krogerus
@ 2024-01-24 18:48   ` Prashant Malani
  2024-01-24 19:18     ` Abhishek Pandit-Subedi
  1 sibling, 1 reply; 18+ messages in thread
From: Prashant Malani @ 2024-01-24 18:48 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi
  Cc: Heikki Krogerus, linux-usb, jthies, Abhishek Pandit-Subedi,
	Andy Shevchenko, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Greg Kroah-Hartman, Hans de Goede,
	Neil Armstrong, Saranya Gopal, linux-kernel

Hi Abhishek,

On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
<abhishekpandit@google.com> wrote:
>
> From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
>
> PD major revision for the port partner is described in
> GET_CONNECTOR_CAPABILITY and is only valid on UCSI 2.0 and newer. Update
> the pd_revision on the partner if the UCSI version is 2.0 or newer.
>
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> ---
> $ cat /sys/class/typec/port2-partner/usb_power_delivery_revision
> 3.0
>
>  drivers/usb/typec/ucsi/ucsi.c | 25 +++++++++++++++++++++++++
>  drivers/usb/typec/ucsi/ucsi.h |  3 +++
>  2 files changed, 28 insertions(+)
>
> diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> index 4edf785d203b..8e0a512853ba 100644
> --- a/drivers/usb/typec/ucsi/ucsi.c
> +++ b/drivers/usb/typec/ucsi/ucsi.c
> @@ -782,6 +782,8 @@ static int ucsi_register_partner(struct ucsi_connector *con)
>         }
>
>         desc.usb_pd = pwr_opmode == UCSI_CONSTAT_PWR_OPMODE_PD;
> +       desc.pd_revision =
> +               UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags);
>
>         partner = typec_register_partner(con->port, &desc);
>         if (IS_ERR(partner)) {
> @@ -856,6 +858,28 @@ static void ucsi_partner_change(struct ucsi_connector *con)
>                         con->num, u_role);
>  }
>
> +static int ucsi_check_connector_capability(struct ucsi_connector *con)
> +{
> +       u64 command;
> +       int ret;
> +
> +       if (!con->partner && !IS_MIN_VERSION_2_0(con->ucsi))

(Mentioned side-band but reproducing here for consistency)
This macro is unnecessary. It's just doing a comparison, which can be inlined
without any perceptible change in readability (actually, I'd argue adding the !
to an english idiom makes things *less* readable):

        if (!con->partner && con->ucsi->version < UCSI_VERSION_2_0)
               return 0;

Besides that, I think you want an || operator instead of the && operator, right?

> +               return 0;
> +
> +       command = UCSI_GET_CONNECTOR_CAPABILITY | UCSI_CONNECTOR_NUMBER(con->num);
> +       ret = ucsi_send_command(con->ucsi, command, &con->cap, sizeof(con->cap));
> +       if (ret < 0) {
> +               dev_err(con->ucsi->dev, "GET_CONNECTOR_CAPABILITY failed (%d)\n", ret);
> +               return ret;
> +       }
> +
> +       typec_partner_set_pd_revision(
> +               con->partner,
> +               UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags));
> +
> +       return ret;
> +}
> +
>  static int ucsi_check_connection(struct ucsi_connector *con)
>  {
>         u8 prev_flags = con->status.flags;

Thanks,

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 2/3] usb: typec: ucsi: Update connector cap and status
  2024-01-23 22:30 ` [PATCH v1 2/3] usb: typec: ucsi: Update connector cap and status Abhishek Pandit-Subedi
  2024-01-24 14:14   ` Heikki Krogerus
@ 2024-01-24 18:50   ` Prashant Malani
  1 sibling, 0 replies; 18+ messages in thread
From: Prashant Malani @ 2024-01-24 18:50 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi
  Cc: Heikki Krogerus, linux-usb, jthies, Abhishek Pandit-Subedi,
	Bjorn Andersson, Dmitry Baryshkov, Greg Kroah-Hartman,
	Saranya Gopal, linux-kernel

Hi Abhishek,

On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
<abhishekpandit@google.com> wrote:
>
> From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
>
> Update the data structures for ucsi_connector_capability and
> ucsi_connector_status to UCSIv3.
>
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: Prashant Malani <pmalani@chromium.org>

BR,

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2
  2024-01-24 14:17       ` Greg Kroah-Hartman
@ 2024-01-24 18:59         ` Abhishek Pandit-Subedi
  2024-01-25 23:16           ` Greg Kroah-Hartman
  0 siblings, 1 reply; 18+ messages in thread
From: Abhishek Pandit-Subedi @ 2024-01-24 18:59 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Heikki Krogerus, Prashant Malani, Abhishek Pandit-Subedi,
	linux-usb, jthies, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Hans de Goede, Neil Armstrong, Saranya Gopal,
	linux-kernel

Ack. Will make dev_dbg on the next iteration.

This seems like a good addition to the style guide too:
https://www.kernel.org/doc/html/v6.7/process/coding-style.html#printing-kernel-messages.
"When drivers are working properly, they are quiet. Prefer to use
DEBUG messages unless something is wrong."

What do you think Greg?

On Wed, Jan 24, 2024 at 6:17 AM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> On Wed, Jan 24, 2024 at 03:51:58PM +0200, Heikki Krogerus wrote:
> > On Wed, Jan 24, 2024 at 12:12:26AM -0800, Prashant Malani wrote:
> > > Hi Abhishek,
> > >
> > > On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
> > > <abhishekpandit@google.com> wrote:
> > > >
> > > > From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > > >
> > > > Between UCSI 1.2 and UCSI 2.0, the size of the MESSAGE_IN region was
> > > > increased from 16 to 256. In order to avoid overflowing reads for older
> > > > systems, add a mechanism to use the read UCSI version to truncate read
> > > > sizes on UCSI v1.2.
> > > >
> > > > Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > > I have one nit (mentioned in side-band but reproducing here for consistency),
> > > but will defer to the maintainer on that.
> > >
> > > The above notwithstanding, FWIW:
> > > Reviewed-by: Prashant Malani<pmalani@chromium.org>
> > >
> > > > @@ -1556,6 +1569,15 @@ int ucsi_register(struct ucsi *ucsi)
> > > >         if (!ucsi->version)
> > > >                 return -ENODEV;
> > > >
> > > > +       /*
> > > > +        * Version format is JJ.M.N (JJ = Major version, M = Minor version,
> > > > +        * N = sub-minor version).
> > > > +        */
> > > > +       dev_info(ucsi->dev, "Registered UCSI interface with version %x.%x.%x",
> > > > +                UCSI_BCD_GET_MAJOR(ucsi->version),
> > > > +                UCSI_BCD_GET_MINOR(ucsi->version),
> > > > +                UCSI_BCD_GET_SUBMINOR(ucsi->version));
> > >
> > > nit: I think this doesn't need to be dev_info() and can be just
> > > dev_dbg(), but will
> > > defer to the maintainer.
> >
> > I think that's okay.
> >
> > Reviewewd-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
>
> No, when drivers are working properly they are quiet, this needs to be
> dev_dbg().
>
> thanks,
>
> greg k-h
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner
  2024-01-24 18:48   ` Prashant Malani
@ 2024-01-24 19:18     ` Abhishek Pandit-Subedi
  2024-01-24 19:34       ` Prashant Malani
  0 siblings, 1 reply; 18+ messages in thread
From: Abhishek Pandit-Subedi @ 2024-01-24 19:18 UTC (permalink / raw)
  To: Prashant Malani
  Cc: Abhishek Pandit-Subedi, Heikki Krogerus, linux-usb, jthies,
	Andy Shevchenko, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Greg Kroah-Hartman, Hans de Goede,
	Neil Armstrong, Saranya Gopal, linux-kernel

On Wed, Jan 24, 2024 at 10:49 AM Prashant Malani <pmalani@chromium.org> wrote:
>
> Hi Abhishek,
>
> On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
> <abhishekpandit@google.com> wrote:
> >
> > From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> >
> > PD major revision for the port partner is described in
> > GET_CONNECTOR_CAPABILITY and is only valid on UCSI 2.0 and newer. Update
> > the pd_revision on the partner if the UCSI version is 2.0 or newer.
> >
> > Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > ---
> > $ cat /sys/class/typec/port2-partner/usb_power_delivery_revision
> > 3.0
> >
> >  drivers/usb/typec/ucsi/ucsi.c | 25 +++++++++++++++++++++++++
> >  drivers/usb/typec/ucsi/ucsi.h |  3 +++
> >  2 files changed, 28 insertions(+)
> >
> > diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> > index 4edf785d203b..8e0a512853ba 100644
> > --- a/drivers/usb/typec/ucsi/ucsi.c
> > +++ b/drivers/usb/typec/ucsi/ucsi.c
> > @@ -782,6 +782,8 @@ static int ucsi_register_partner(struct ucsi_connector *con)
> >         }
> >
> >         desc.usb_pd = pwr_opmode == UCSI_CONSTAT_PWR_OPMODE_PD;
> > +       desc.pd_revision =
> > +               UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags);
> >
> >         partner = typec_register_partner(con->port, &desc);
> >         if (IS_ERR(partner)) {
> > @@ -856,6 +858,28 @@ static void ucsi_partner_change(struct ucsi_connector *con)
> >                         con->num, u_role);
> >  }
> >
> > +static int ucsi_check_connector_capability(struct ucsi_connector *con)
> > +{
> > +       u64 command;
> > +       int ret;
> > +
> > +       if (!con->partner && !IS_MIN_VERSION_2_0(con->ucsi))
>
> (Mentioned side-band but reproducing here for consistency)
> This macro is unnecessary. It's just doing a comparison, which can be inlined
> without any perceptible change in readability (actually, I'd argue adding the !
> to an english idiom makes things *less* readable):

I prefer the macro because it makes it easier to search where version
checks are being done and it keeps the `<` vs `<=` consistent. UCSI
only has a few published revisions: 1.2, 2.0, 2.1 and 3.0 and major
changes seem to have happened in 2.0 and 3.0 so there should be very
few of these macros created/used.

>
>         if (!con->partner && con->ucsi->version < UCSI_VERSION_2_0)
>                return 0;
>
> Besides that, I think you want an || operator instead of the && operator, right?

Good catch on that. It should be OR.
i.e. if (!con->partner || !IS_MIN_VERSION_2_0(con->ucsi))

>
> > +               return 0;
> > +
> > +       command = UCSI_GET_CONNECTOR_CAPABILITY | UCSI_CONNECTOR_NUMBER(con->num);
> > +       ret = ucsi_send_command(con->ucsi, command, &con->cap, sizeof(con->cap));
> > +       if (ret < 0) {
> > +               dev_err(con->ucsi->dev, "GET_CONNECTOR_CAPABILITY failed (%d)\n", ret);
> > +               return ret;
> > +       }
> > +
> > +       typec_partner_set_pd_revision(
> > +               con->partner,
> > +               UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags));
> > +
> > +       return ret;
> > +}
> > +
> >  static int ucsi_check_connection(struct ucsi_connector *con)
> >  {
> >         u8 prev_flags = con->status.flags;
>
> Thanks,

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner
  2024-01-24 19:18     ` Abhishek Pandit-Subedi
@ 2024-01-24 19:34       ` Prashant Malani
  2024-01-24 22:57         ` Abhishek Pandit-Subedi
  0 siblings, 1 reply; 18+ messages in thread
From: Prashant Malani @ 2024-01-24 19:34 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi
  Cc: Abhishek Pandit-Subedi, Heikki Krogerus, linux-usb, jthies,
	Andy Shevchenko, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Greg Kroah-Hartman, Hans de Goede,
	Neil Armstrong, Saranya Gopal, linux-kernel

On Wed, Jan 24, 2024 at 11:18 AM Abhishek Pandit-Subedi
<abhishekpandit@chromium.org> wrote:
>
> On Wed, Jan 24, 2024 at 10:49 AM Prashant Malani <pmalani@chromium.org> wrote:
> >
> > Hi Abhishek,
> >
> > On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
> > <abhishekpandit@google.com> wrote:
> > >
> > > From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > >
> > > PD major revision for the port partner is described in
> > > GET_CONNECTOR_CAPABILITY and is only valid on UCSI 2.0 and newer. Update
> > > the pd_revision on the partner if the UCSI version is 2.0 or newer.
> > >
> > > Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > > ---
> > > $ cat /sys/class/typec/port2-partner/usb_power_delivery_revision
> > > 3.0
> > >
> > >  drivers/usb/typec/ucsi/ucsi.c | 25 +++++++++++++++++++++++++
> > >  drivers/usb/typec/ucsi/ucsi.h |  3 +++
> > >  2 files changed, 28 insertions(+)
> > >
> > > diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> > > index 4edf785d203b..8e0a512853ba 100644
> > > --- a/drivers/usb/typec/ucsi/ucsi.c
> > > +++ b/drivers/usb/typec/ucsi/ucsi.c
> > > @@ -782,6 +782,8 @@ static int ucsi_register_partner(struct ucsi_connector *con)
> > >         }
> > >
> > >         desc.usb_pd = pwr_opmode == UCSI_CONSTAT_PWR_OPMODE_PD;
> > > +       desc.pd_revision =
> > > +               UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags);
> > >
> > >         partner = typec_register_partner(con->port, &desc);
> > >         if (IS_ERR(partner)) {
> > > @@ -856,6 +858,28 @@ static void ucsi_partner_change(struct ucsi_connector *con)
> > >                         con->num, u_role);
> > >  }
> > >
> > > +static int ucsi_check_connector_capability(struct ucsi_connector *con)
> > > +{
> > > +       u64 command;
> > > +       int ret;
> > > +
> > > +       if (!con->partner && !IS_MIN_VERSION_2_0(con->ucsi))
> >
> > (Mentioned side-band but reproducing here for consistency)
> > This macro is unnecessary. It's just doing a comparison, which can be inlined
> > without any perceptible change in readability (actually, I'd argue adding the !
> > to an english idiom makes things *less* readable):
>
> I prefer the macro because it makes it easier to search where version
> checks are being done.

I don't see how searching for "IS_MIN_VERSION_2_0" is easier
than just searching for "UCSI_VERSION_2_0".

I didn't quite understand what you meant by

>  it keeps the `<` vs `<=` consistent.

Perhaps I'm missing something... (are these comparisons being
used elsewhere/in some other fashion?).

In any case, I don't want to bike-shed so I'll defer to the
maintainer's call on this.

BR,

-Prashant

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner
  2024-01-24 19:34       ` Prashant Malani
@ 2024-01-24 22:57         ` Abhishek Pandit-Subedi
  0 siblings, 0 replies; 18+ messages in thread
From: Abhishek Pandit-Subedi @ 2024-01-24 22:57 UTC (permalink / raw)
  To: Prashant Malani
  Cc: Abhishek Pandit-Subedi, Heikki Krogerus, linux-usb, jthies,
	Andy Shevchenko, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Greg Kroah-Hartman, Hans de Goede,
	Neil Armstrong, Saranya Gopal, linux-kernel

On Wed, Jan 24, 2024 at 11:34 AM Prashant Malani <pmalani@chromium.org> wrote:
>
> On Wed, Jan 24, 2024 at 11:18 AM Abhishek Pandit-Subedi
> <abhishekpandit@chromium.org> wrote:
> >
> > On Wed, Jan 24, 2024 at 10:49 AM Prashant Malani <pmalani@chromium.org> wrote:
> > >
> > > Hi Abhishek,
> > >
> > > On Tue, Jan 23, 2024 at 2:30 PM Abhishek Pandit-Subedi
> > > <abhishekpandit@google.com> wrote:
> > > >
> > > > From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > > >
> > > > PD major revision for the port partner is described in
> > > > GET_CONNECTOR_CAPABILITY and is only valid on UCSI 2.0 and newer. Update
> > > > the pd_revision on the partner if the UCSI version is 2.0 or newer.
> > > >
> > > > Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
> > > > ---
> > > > $ cat /sys/class/typec/port2-partner/usb_power_delivery_revision
> > > > 3.0
> > > >
> > > >  drivers/usb/typec/ucsi/ucsi.c | 25 +++++++++++++++++++++++++
> > > >  drivers/usb/typec/ucsi/ucsi.h |  3 +++
> > > >  2 files changed, 28 insertions(+)
> > > >
> > > > diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> > > > index 4edf785d203b..8e0a512853ba 100644
> > > > --- a/drivers/usb/typec/ucsi/ucsi.c
> > > > +++ b/drivers/usb/typec/ucsi/ucsi.c
> > > > @@ -782,6 +782,8 @@ static int ucsi_register_partner(struct ucsi_connector *con)
> > > >         }
> > > >
> > > >         desc.usb_pd = pwr_opmode == UCSI_CONSTAT_PWR_OPMODE_PD;
> > > > +       desc.pd_revision =
> > > > +               UCSI_CONCAP_FLAG_PARTNER_PD_MAJOR_REV_AS_BCD(con->cap.flags);
> > > >
> > > >         partner = typec_register_partner(con->port, &desc);
> > > >         if (IS_ERR(partner)) {
> > > > @@ -856,6 +858,28 @@ static void ucsi_partner_change(struct ucsi_connector *con)
> > > >                         con->num, u_role);
> > > >  }
> > > >
> > > > +static int ucsi_check_connector_capability(struct ucsi_connector *con)
> > > > +{
> > > > +       u64 command;
> > > > +       int ret;
> > > > +
> > > > +       if (!con->partner && !IS_MIN_VERSION_2_0(con->ucsi))
> > >
> > > (Mentioned side-band but reproducing here for consistency)
> > > This macro is unnecessary. It's just doing a comparison, which can be inlined
> > > without any perceptible change in readability (actually, I'd argue adding the !
> > > to an english idiom makes things *less* readable):
> >
> > I prefer the macro because it makes it easier to search where version
> > checks are being done.
>
> I don't see how searching for "IS_MIN_VERSION_2_0" is easier
> than just searching for "UCSI_VERSION_2_0".
>
> I didn't quite understand what you meant by
>
> >  it keeps the `<` vs `<=` consistent.
>
> Perhaps I'm missing something... (are these comparisons being
> used elsewhere/in some other fashion?).

Let's say someone wants to guard code for UCSI 2.0.
Should they use:

// Guard against older versions.
if (ucsi->version < UCSI_VERSION_2_0) return;

// This also guards since the version jumps from 1.2 to 2.0.
if (ucsi->version <= UCSI_VERSION_1_2) return;

// Only do something on newer versions.
if (ucsi->version >= UCSI_VERSION_2_0) {
  // Fill out something available in newer spec.
}

I'd rather everyone just use a macro that normalizes comparisons. It's
always IS_MIN_VERSION and its inverse !IS_MIN_VERSION.
It's personal preference so deferring to the maintainer is IMO the
right call here.

>
> In any case, I don't want to bike-shed so I'll defer to the
> maintainer's call on this.
>
> BR,
>
> -Prashant

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2
  2024-01-24 18:59         ` Abhishek Pandit-Subedi
@ 2024-01-25 23:16           ` Greg Kroah-Hartman
  2024-01-25 23:37             ` Abhishek Pandit-Subedi
  0 siblings, 1 reply; 18+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-25 23:16 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi
  Cc: Heikki Krogerus, Prashant Malani, Abhishek Pandit-Subedi,
	linux-usb, jthies, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Hans de Goede, Neil Armstrong, Saranya Gopal,
	linux-kernel

On Wed, Jan 24, 2024 at 10:59:28AM -0800, Abhishek Pandit-Subedi wrote:
> Ack. Will make dev_dbg on the next iteration.
> 
> This seems like a good addition to the style guide too:
> https://www.kernel.org/doc/html/v6.7/process/coding-style.html#printing-kernel-messages.
> "When drivers are working properly, they are quiet. Prefer to use
> DEBUG messages unless something is wrong."
> 
> What do you think Greg?

I think you need to stop top-posting :)

But yes, that would be nice, hopefully people actually notice it there.
Would you have read this and seen it?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2
  2024-01-25 23:16           ` Greg Kroah-Hartman
@ 2024-01-25 23:37             ` Abhishek Pandit-Subedi
  0 siblings, 0 replies; 18+ messages in thread
From: Abhishek Pandit-Subedi @ 2024-01-25 23:37 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Heikki Krogerus, Prashant Malani, Abhishek Pandit-Subedi,
	linux-usb, jthies, Bjorn Andersson, Dmitry Baryshkov,
	Fabrice Gasnier, Hans de Goede, Neil Armstrong, Saranya Gopal,
	linux-kernel

On Thu, Jan 25, 2024 at 3:16 PM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> On Wed, Jan 24, 2024 at 10:59:28AM -0800, Abhishek Pandit-Subedi wrote:
> > Ack. Will make dev_dbg on the next iteration.
> >
> > This seems like a good addition to the style guide too:
> > https://www.kernel.org/doc/html/v6.7/process/coding-style.html#printing-kernel-messages.
> > "When drivers are working properly, they are quiet. Prefer to use
> > DEBUG messages unless something is wrong."
> >
> > What do you think Greg?
>
> I think you need to stop top-posting :)
>
> But yes, that would be nice, hopefully people actually notice it there.
> Would you have read this and seen it?
>
> thanks,
>
> greg k-h

I blame gmail web-interface for the top-posting :)

Prashant also mentioned the dev_info when we were reviewing this so I
did a quick search for "kernel coding style" (to see if there was
guidance) before sending this up so I would definitely have noticed it
there.
In Bluetooth (where I've previously contributed), dev_info is used for
printing version info (example:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/bluetooth/btintel.c?h=v6.8-rc1#n337)
and it's very useful for debugging so I assumed it was acceptable.

The added benefit of this guidance being in the coding style guide is
it's a quick change to checkpatch.pl to add a warning for this (and
point to the coding style as the source). I'm fairly sure Chromium
actually has a lint that warns whenever you use LOG_INFO(...) for
similar reasons (too many INFO messages that should be DEBUG).

I will send up a patch with the change soon (both to coding style and
checkpatch.pl).

Thanks,
Abhishek

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2024-01-25 23:37 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-23 22:30 [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Abhishek Pandit-Subedi
2024-01-23 22:30 ` [PATCH v1 1/3] usb: typec: ucsi: Limit read size on v1.2 Abhishek Pandit-Subedi
2024-01-24  8:12   ` Prashant Malani
2024-01-24 13:51     ` Heikki Krogerus
2024-01-24 14:17       ` Greg Kroah-Hartman
2024-01-24 18:59         ` Abhishek Pandit-Subedi
2024-01-25 23:16           ` Greg Kroah-Hartman
2024-01-25 23:37             ` Abhishek Pandit-Subedi
2024-01-23 22:30 ` [PATCH v1 2/3] usb: typec: ucsi: Update connector cap and status Abhishek Pandit-Subedi
2024-01-24 14:14   ` Heikki Krogerus
2024-01-24 18:50   ` Prashant Malani
2024-01-23 22:30 ` [PATCH v1 3/3] usb: typec: ucsi: Get PD revision for partner Abhishek Pandit-Subedi
2024-01-24 14:30   ` Heikki Krogerus
2024-01-24 18:48   ` Prashant Malani
2024-01-24 19:18     ` Abhishek Pandit-Subedi
2024-01-24 19:34       ` Prashant Malani
2024-01-24 22:57         ` Abhishek Pandit-Subedi
2024-01-24 12:44 ` [PATCH v1 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Neil Armstrong

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.