| From 3e5960dbcc95f08c6e945c90c54eadf13c29d13d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 9 Dec 2024 10:25:51 -0600 |
| Subject: thunderbolt: Don't display nvm_version unless upgrade supported |
| |
| From: Mario Limonciello <mario.limonciello@amd.com> |
| |
| [ Upstream commit e34f1717ef0632fcec5cb827e5e0e9f223d70c9b ] |
| |
| The read will never succeed if NVM wasn't initialized due to an unknown |
| format. |
| |
| Add a new callback for visibility to only show when supported. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: aef9c693e7e5 ("thunderbolt: Move vendor specific NVM handling into nvm.c") |
| Reported-by: Richard Hughes <hughsient@gmail.com> |
| Closes: https://github.com/fwupd/fwupd/issues/8200 |
| Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> |
| Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/thunderbolt/retimer.c | 17 +++++++++++++++-- |
| 1 file changed, 15 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/thunderbolt/retimer.c b/drivers/thunderbolt/retimer.c |
| index edbd92435b41..5bd5c22a5085 100644 |
| --- a/drivers/thunderbolt/retimer.c |
| +++ b/drivers/thunderbolt/retimer.c |
| @@ -98,6 +98,7 @@ static int tb_retimer_nvm_add(struct tb_retimer *rt) |
| |
| err_nvm: |
| dev_dbg(&rt->dev, "NVM upgrade disabled\n"); |
| + rt->no_nvm_upgrade = true; |
| if (!IS_ERR(nvm)) |
| tb_nvm_free(nvm); |
| |
| @@ -177,8 +178,6 @@ static ssize_t nvm_authenticate_show(struct device *dev, |
| |
| if (!rt->nvm) |
| ret = -EAGAIN; |
| - else if (rt->no_nvm_upgrade) |
| - ret = -EOPNOTSUPP; |
| else |
| ret = sysfs_emit(buf, "%#x\n", rt->auth_status); |
| |
| @@ -304,6 +303,19 @@ static ssize_t vendor_show(struct device *dev, struct device_attribute *attr, |
| } |
| static DEVICE_ATTR_RO(vendor); |
| |
| +static umode_t retimer_is_visible(struct kobject *kobj, struct attribute *attr, |
| + int n) |
| +{ |
| + struct device *dev = kobj_to_dev(kobj); |
| + struct tb_retimer *rt = tb_to_retimer(dev); |
| + |
| + if (attr == &dev_attr_nvm_authenticate.attr || |
| + attr == &dev_attr_nvm_version.attr) |
| + return rt->no_nvm_upgrade ? 0 : attr->mode; |
| + |
| + return attr->mode; |
| +} |
| + |
| static struct attribute *retimer_attrs[] = { |
| &dev_attr_device.attr, |
| &dev_attr_nvm_authenticate.attr, |
| @@ -313,6 +325,7 @@ static struct attribute *retimer_attrs[] = { |
| }; |
| |
| static const struct attribute_group retimer_group = { |
| + .is_visible = retimer_is_visible, |
| .attrs = retimer_attrs, |
| }; |
| |
| -- |
| 2.39.5 |
| |