[PATCH 2/3] i3c: master: Add missing runtime PM get in dev_nack_retry_count_store()
Adrian Hunter
adrian.hunter at intel.com
Tue Jun 16 06:46:57 PDT 2026
On 16/06/2026 14:51, sashiko-bot at kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
>
> Pre-existing issues:
> - [High] Hardware configuration, including the NACK retry count, is lost across runtime suspend/resume cycles.
> --
>
> commit c41eb9cead24507098d7a57db0101da0e5c68c34
> Author: Adrian Hunter <adrian.hunter at intel.com>
>
> i3c: master: Add missing runtime PM get in dev_nack_retry_count_store()
>
> Ensure the device is runtime resumed while updating the retry
> configuration to avoid accessing the controller while suspended.
>
>> diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
>> index 05ea9e3c4d46f..a24944047e30c 100644
>> --- a/drivers/i3c/master.c
>> +++ b/drivers/i3c/master.c
>
> [ ... ]
>
>> @@ -767,12 +767,18 @@ static ssize_t dev_nack_retry_count_store(struct device *dev,
>> i3c_bus_maintenance_lock(i3cbus);
>> ret = master->ops->set_dev_nack_retry(master, val);
>> if (!ret)
>> master->dev_nack_retry_count = val;
>> i3c_bus_maintenance_unlock(i3cbus);
>>
>> + i3c_master_rpm_put(master);
>
> [Severity: High]
> This isn't a bug introduced by this patch, but does putting the device to
> sleep here immediately cause the newly written retry count to be lost?
>
> When the dw-i3c-master device enters runtime suspend, the hardware is reset
> via reset_control_assert() in dw_i3c_master_runtime_suspend().
>
> Upon resuming, dw_i3c_master_restore_addrs() reads the newly reset hardware
> register (which returns 0), updates only the address bits, and writes it
> back. This permanently discards other configuration fields, including the
> DEV_ADDR_TABLE_DEV_NACK_RETRY_CNT configured here, as well as other fields
> like SIR_REJECT and IBI_MDB.
>
> Because dev_nack_retry_count_store() now correctly drops the runtime PM
> reference, the controller can suspend immediately after the configuration is
> written. Will this silently revert the retry count back to its reset state?
+ Adrian Ng Ho Yin <adrian.ho.yin.ng at altera.com>
Looks like dw_i3c_master_restore_addrs() needs to do more to restore
dev_nack_retry_count values.
More information about the linux-i3c
mailing list