On Wed, 09 Sep 2026 11:11:45 +0800, Stanley Jhu <[email protected]> wrote:
> [...]
> processing bottom half.
> - Support per-queue interrupt status and enable registers (SQnIS/IE,
> CQnIS/IE).
> Implement write-1-to-clear semantics and dynamically synchronize the global
> CQES (CQ Event Status) bit in IS to prevent interrupt storms.
> - Store queue configuration for interrupt aggregation (CQnIACR) and completion
> timeout intervals (SQnCTI).
SQnCTI is Submission Queue Cleanup Task Information, not a completion
timeout interval.
>
>
> diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c
> index adae6639e16..4e22c31f898 100644
> --- a/hw/ufs/ufs.c
> +++ b/hw/ufs/ufs.c
> @@ -990,6 +1004,38 @@ static void ufs_write_mcq_op_reg(UfsHc *u, hwaddr
> offset, uint32_t data,
> }
> opr->sq.tp = data;
> break;
> + case offsetof(UfsMcqOpReg, sq.rtc):
> + opr->sq.rtc = data;
> + if (FIELD_EX32(data, SQRTC, ICU)) {
> + /* SQ_ICU: Initiate Cleanup (SQ_CUS = 1, RTC = 0) */
> + opr->sq.rts = FIELD_DP32(opr->sq.rts, SQRTS, CUS, 1);
> + opr->sq.rts = FIELD_DP32(opr->sq.rts, SQRTS, RTC, 0);
SQRTC.ICU reports successful cleanup without using SQCTI or changing any
request state. Is the actual cleanup expected to be handled by the TMR path?
--
Jeuk Kim <[email protected]>