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]>

Reply via email to