[PATCH AUTOSEL 6.16-5.4] i3c: don't fail if GETHDRCAP is unsupported
Sasha Levin
sashal at kernel.org
Fri Aug 8 08:31:05 PDT 2025
From: Wolfram Sang <wsa+renesas at sang-engineering.com>
[ Upstream commit 447270cdb41b1c8c3621bb14b93a6749f942556e ]
'I3C_BCR_HDR_CAP' is still spec v1.0 and has been renamed to 'advanced
capabilities' in v1.1 onwards. The ST pressure sensor LPS22DF does not
have HDR, but has the 'advanced cap' bit set. The core still wants to
get additional information using the CCC 'GETHDRCAP' (or GETCAPS in v1.1
onwards). Not all controllers support this CCC and will notify the upper
layers about it. For instantiating the device, we can ignore this
unsupported CCC as standard communication will work. Without this patch,
the device will not be instantiated at all.
Signed-off-by: Wolfram Sang <wsa+renesas at sang-engineering.com>
Reviewed-by: Frank Li <Frank.Li at nxp.com>
Link: https://lore.kernel.org/r/20250704204524.6124-1-wsa+renesas@sang-engineering.com
Signed-off-by: Alexandre Belloni <alexandre.belloni at bootlin.com>
Signed-off-by: Sasha Levin <sashal at kernel.org>
---
LLM Generated explanations, may be completely bogus:
Based on my analysis of the commit and the surrounding code, here's my
assessment:
**Backport Status: YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Fixes a real bug that prevents device instantiation**: The commit
message clearly states that "Without this patch, the device will not
be instantiated at all." This is a concrete functionality issue where
legitimate I3C devices (like the ST pressure sensor LPS22DF) cannot
be used with controllers that don't support the GETHDRCAP CCC
command.
2. **Small and contained fix**: The change is minimal - only 2 lines
changed:
- Line 1441: Changed from `if (ret)` to `if (ret && ret !=
-ENOTSUPP)`
- This allows the function to continue when GETHDRCAP returns
-ENOTSUPP instead of failing
3. **Clear regression prevention**: The fix prevents device
initialization failure for hardware combinations that should work.
The I3C spec evolved from v1.0 to v1.1, and this handles backward
compatibility gracefully.
4. **No architectural changes**: This is a simple error handling
adjustment that doesn't change any core functionality or introduce
new features.
5. **Fixes interoperability issue**: The commit addresses a real-world
hardware compatibility problem between certain I3C controllers and
devices, which is exactly the type of bug that stable kernels should
fix.
6. **Low risk of regression**: The change only affects the error path
when GETHDRCAP fails with -ENOTSUPP. It doesn't change behavior for
successful cases or other error conditions.
7. **Follows stable rules**:
- It's obviously correct (treats unsupported CCC as non-fatal)
- It's tiny (2-line change)
- Fixes one specific issue
- Fixes a real bug that prevents hardware from working
The commit allows I3C device initialization to proceed even when the
controller doesn't support the GETHDRCAP command, which is reasonable
since HDR capabilities are optional and standard I3C communication will
still work without them.
drivers/i3c/master.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index fd81871609d9..e53c69d24873 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -1439,7 +1439,7 @@ static int i3c_master_retrieve_dev_info(struct i3c_dev_desc *dev)
if (dev->info.bcr & I3C_BCR_HDR_CAP) {
ret = i3c_master_gethdrcap_locked(master, &dev->info);
- if (ret)
+ if (ret && ret != -ENOTSUPP)
return ret;
}
--
2.39.5
More information about the linux-i3c
mailing list