Skip to contentSkip to conversation

ucsi_ccg: Compat with non-NVIDIA

PATCH In review Mario Limonciello 3 participants 7 messages Feb 21, 2025 – Feb 26, 2025

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover ucsi_ccg: Compat with non-NVIDIA

From: Mario Limonciello <[email protected]>

On some non-NVIDIA machines ucsi_ccg will probe and show errors because of not having some NVIDIA specific device properties.

Avoid showing this error and adjust the behavior for the sysfs file related to it.

Mario Limonciello (2):
ucsi_ccg: Don't show failed to get FW build information error
ucsi_ccg: Don't show non-functional attributes

 drivers/usb/typec/ucsi/ucsi_ccg.c | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)
Signature · 1 line
2.43.0
#1 lore raw

PATCH 1/2 ucsi_ccg: Don't show failed to get FW build information error

From: Mario Limonciello <[email protected]>

The error failed to get FW build information is added for what looks to be for misdetection of the device property firmware-name.

If the property is missing (such as on non-nvidia HW) this error shows up. Move the error into the scope of the property parser for "firmware-name" to avoid showing errors on systems without the firmware-name property.

Fixes 5c9ae5a87573d ("usb: typec: ucsi: ccg: add firmware flashing support")
---
 drivers/usb/typec/ucsi/ucsi_ccg.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/usb/typec/ucsi/ucsi_ccg.c +2 -3
index 740171f24ef9f..663aca9421410 100644
@@ -1432,11 +1432,10 @@ static int ucsi_ccg_probe(struct i2c_client *client)
 			uc->fw_build = CCG_FW_BUILD_NVIDIA_TEGRA;
 		else if (!strcmp(fw_name, "nvidia,gpu"))
 			uc->fw_build = CCG_FW_BUILD_NVIDIA;
+		if (!uc->fw_build)
+			dev_err(uc->dev, "failed to get FW build information\n");
 	}
 
-	if (!uc->fw_build)
-		dev_err(uc->dev, "failed to get FW build information\n");
-
 	/* reset ccg device and initialize ucsi */
 	status = ucsi_ccg_init(uc);
 	if (status < 0) {
Signature · 1 line
2.43.0
maintainer
#2 lore raw

Re: [PATCH 1/2] ucsi_ccg: Don't show failed to get FW build information error

Quoted 37 lines · Mario Limonciello

From: Mario Limonciello <[email protected]>

The error failed to get FW build information is added for what looks to be for misdetection of the device property firmware-name.

If the property is missing (such as on non-nvidia HW) this error shows up. Move the error into the scope of the property parser for "firmware-name" to avoid showing errors on systems without the firmware-name property.

Fixes 5c9ae5a87573d ("usb: typec: ucsi: ccg: add firmware flashing support")
---
 drivers/usb/typec/ucsi/ucsi_ccg.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/usb/typec/ucsi/ucsi_ccg.c +2 -3
index 740171f24ef9f..663aca9421410 100644
@@ -1432,11 +1432,10 @@ static int ucsi_ccg_probe(struct i2c_client *client)
 			uc->fw_build = CCG_FW_BUILD_NVIDIA_TEGRA;
 		else if (!strcmp(fw_name, "nvidia,gpu"))
 			uc->fw_build = CCG_FW_BUILD_NVIDIA;
+		if (!uc->fw_build)
+			dev_err(uc->dev, "failed to get FW build information\n");
 	}
 
-	if (!uc->fw_build)
-		dev_err(uc->dev, "failed to get FW build information\n");
-
 	/* reset ccg device and initialize ucsi */
 	status = ucsi_ccg_init(uc);
 	if (status < 0) {
Signature · 1 line
2.43.0

Hi,

This is the friendly patch-bot of Greg Kroah-Hartman. You have sent him a patch that has triggered this response. He used to manually respond to these common problems, but in order to save his sanity (he kept writing the same thing over and over, yet to different people), I was created. Hopefully you will not take offence and will fix the problem in your patch and resubmit it so that it can be accepted into the Linux kernel tree.

You are receiving this message because of the following common error(s) as indicated below:

- You have marked a patch with a "Fixes:" tag for a commit that is in an older released kernel, yet you do not have a cc: stable line in the signed-off-by area at all, which means that the patch will not be applied to any older kernel releases. To properly fix this, please follow the documented rules in the Documentation/process/stable-kernel-rules.rst file for how to resolve this.

If you wish to discuss this problem further, or you have questions about how to resolve this issue, please feel free to respond to this email and Greg will reply once he has dug out from the pending patches received from other developers.

thanks,

greg k-h's patch email bot

#3 lore raw

Re: [PATCH 1/2] ucsi_ccg: Don't show failed to get FW build information error

Quoted 60 lines · Greg KH
Quoted 37 lines · Mario Limonciello

From: Mario Limonciello <[email protected]>

The error failed to get FW build information is added for what looks to be for misdetection of the device property firmware-name.

If the property is missing (such as on non-nvidia HW) this error shows up. Move the error into the scope of the property parser for "firmware-name" to avoid showing errors on systems without the firmware-name property.

Fixes 5c9ae5a87573d ("usb: typec: ucsi: ccg: add firmware flashing support")
---
  drivers/usb/typec/ucsi/ucsi_ccg.c | 5 ++---
  1 file changed, 2 insertions(+), 3 deletions(-)
drivers/usb/typec/ucsi/ucsi_ccg.c +2 -3
index 740171f24ef9f..663aca9421410 100644
@@ -1432,11 +1432,10 @@ static int ucsi_ccg_probe(struct i2c_client *client)
  			uc->fw_build = CCG_FW_BUILD_NVIDIA_TEGRA;
  		else if (!strcmp(fw_name, "nvidia,gpu"))
  			uc->fw_build = CCG_FW_BUILD_NVIDIA;
+		if (!uc->fw_build)
+			dev_err(uc->dev, "failed to get FW build information\n");
  	}
 
-	if (!uc->fw_build)
-		dev_err(uc->dev, "failed to get FW build information\n");
-
  	/* reset ccg device and initialize ucsi */
  	status = ucsi_ccg_init(uc);
  	if (status < 0) {
Signature · 1 line
2.43.0

Hi,

This is the friendly patch-bot of Greg Kroah-Hartman. You have sent him a patch that has triggered this response. He used to manually respond to these common problems, but in order to save his sanity (he kept writing the same thing over and over, yet to different people), I was created. Hopefully you will not take offence and will fix the problem in your patch and resubmit it so that it can be accepted into the Linux kernel tree.

You are receiving this message because of the following common error(s) as indicated below:

- You have marked a patch with a "Fixes:" tag for a commit that is in an older released kernel, yet you do not have a cc: stable line in the signed-off-by area at all, which means that the patch will not be applied to any older kernel releases. To properly fix this, please follow the documented rules in the Documentation/process/stable-kernel-rules.rst file for how to resolve this.

Quoted 8 lines

If you wish to discuss this problem further, or you have questions about how to resolve this issue, please feel free to respond to this email and Greg will reply once he has dug out from the pending patches received from other developers.

thanks,

greg k-h's patch email bot

I do think that adding stable will make sense. If there is no other changes requested, b4 can pick it up from the email thread without re-sending:

maintainer Reviewed-by on v1 1/2
#4 lore raw

Re: [PATCH 1/2] ucsi_ccg: Don't show failed to get FW build information error

In reply to Mario Limonciello
Quoted 11 lines · Mario Limonciello

From: Mario Limonciello <[email protected]>

The error failed to get FW build information is added for what looks to be for misdetection of the device property firmware-name.

If the property is missing (such as on non-nvidia HW) this error shows up. Move the error into the scope of the property parser for "firmware-name" to avoid showing errors on systems without the firmware-name property.

Fixes 5c9ae5a87573d ("usb: typec: ucsi: ccg: add firmware flashing support")
Quoted 24 lines
---
 drivers/usb/typec/ucsi/ucsi_ccg.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/usb/typec/ucsi/ucsi_ccg.c +2 -3
index 740171f24ef9f..663aca9421410 100644
@@ -1432,11 +1432,10 @@ static int ucsi_ccg_probe(struct i2c_client *client)
 			uc->fw_build = CCG_FW_BUILD_NVIDIA_TEGRA;
 		else if (!strcmp(fw_name, "nvidia,gpu"))
 			uc->fw_build = CCG_FW_BUILD_NVIDIA;
+		if (!uc->fw_build)
+			dev_err(uc->dev, "failed to get FW build information\n");
 	}
 
-	if (!uc->fw_build)
-		dev_err(uc->dev, "failed to get FW build information\n");
-
 	/* reset ccg device and initialize ucsi */
 	status = ucsi_ccg_init(uc);
 	if (status < 0) {
Signature · 1 line
2.43.0
Signature · 1 line
heikki
#5 lore raw

PATCH 2/2 ucsi_ccg: Don't show non-functional attributes

In reply to Mario Limonciello

From: Mario Limonciello <[email protected]>

If no fw_build is recognized for the controller there is no point to exposing the do_flash attribute.

Add an is_visible callback to the attribute group and check for that fw_build member to hide when not applicable.

---
 drivers/usb/typec/ucsi/ucsi_ccg.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)
drivers/usb/typec/ucsi/ucsi_ccg.c +19 -6
index 663aca9421410..801a66efa9820 100644
@@ -1390,22 +1390,35 @@ static ssize_t do_flash_store(struct device *dev,
 	if (!flash)
 		return n;
 
-	if (uc->fw_build == 0x0) {
-		dev_err(dev, "fail to flash FW due to missing FW build info\n");
-		return -EINVAL;
-	}
-
 	schedule_work(&uc->work);
 	return n;
 }
 
+static umode_t ucsi_ccg_attrs_is_visible(struct kobject *kobj, struct attribute *attr, int idx)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct ucsi_ccg *uc = i2c_get_clientdata(to_i2c_client(dev));
+
+	if (!uc->fw_build)
+		return 0;
+
+	return attr->mode;
+}
+
 static DEVICE_ATTR_WO(do_flash);
 
 static struct attribute *ucsi_ccg_attrs[] = {
 	&dev_attr_do_flash.attr,
 	NULL,
 };
-ATTRIBUTE_GROUPS(ucsi_ccg);
+static struct attribute_group ucsi_ccg_attr_group = {
+	.attrs = ucsi_ccg_attrs,
+	.is_visible = ucsi_ccg_attrs_is_visible,
+};
+static const struct attribute_group *ucsi_ccg_groups[] = {
+	&ucsi_ccg_attr_group,
+	NULL,
+};
 
 static int ucsi_ccg_probe(struct i2c_client *client)
 {
Signature · 1 line
2.43.0
maintainer Reviewed-by on v1 2/2
#6 lore raw

Re: [PATCH 2/2] ucsi_ccg: Don't show non-functional attributes

Quoted 9 lines · Mario Limonciello

From: Mario Limonciello <[email protected]>

If no fw_build is recognized for the controller there is no point to exposing the do_flash attribute.

Add an is_visible callback to the attribute group and check for that fw_build member to hide when not applicable.

Quoted 52 lines
---
 drivers/usb/typec/ucsi/ucsi_ccg.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)
drivers/usb/typec/ucsi/ucsi_ccg.c +19 -6
index 663aca9421410..801a66efa9820 100644
@@ -1390,22 +1390,35 @@ static ssize_t do_flash_store(struct device *dev,
 	if (!flash)
 		return n;
 
-	if (uc->fw_build == 0x0) {
-		dev_err(dev, "fail to flash FW due to missing FW build info\n");
-		return -EINVAL;
-	}
-
 	schedule_work(&uc->work);
 	return n;
 }
 
+static umode_t ucsi_ccg_attrs_is_visible(struct kobject *kobj, struct attribute *attr, int idx)
+{
+	struct device *dev = kobj_to_dev(kobj);
+	struct ucsi_ccg *uc = i2c_get_clientdata(to_i2c_client(dev));
+
+	if (!uc->fw_build)
+		return 0;
+
+	return attr->mode;
+}
+
 static DEVICE_ATTR_WO(do_flash);
 
 static struct attribute *ucsi_ccg_attrs[] = {
 	&dev_attr_do_flash.attr,
 	NULL,
 };
-ATTRIBUTE_GROUPS(ucsi_ccg);
+static struct attribute_group ucsi_ccg_attr_group = {
+	.attrs = ucsi_ccg_attrs,
+	.is_visible = ucsi_ccg_attrs_is_visible,
+};
+static const struct attribute_group *ucsi_ccg_groups[] = {
+	&ucsi_ccg_attr_group,
+	NULL,
+};
 
 static int ucsi_ccg_probe(struct i2c_client *client)
 {
Signature · 1 line
2.43.0
Signature · 1 line
heikki