• Avri Altman's avatar
    scsi: ufs: core: Allow RTT negotiation · 9ec54934
    Avri Altman authored
    The rtt-upiu packets precede any data-out upiu packets, thus synchronizing
    the data input to the device: this mostly applies to write operations, but
    there are other operations that requires rtt as well.
    
    There are several rules binding this rtt - data-out dialog, specifically
    There can be at most outstanding bMaxNumOfRTT such packets.  This might
    have an effect on write performance (sequential write in particular), as
    each data-out upiu must wait for its rtt sibling.
    
    UFSHCI expects bMaxNumOfRTT to be min(bDeviceRTTCap, NORTT). However, as of
    today, there does not appears to be no-one who sets it: not the host
    controller nor the driver.  It wasn't an issue up to now: bMaxNumOfRTT is
    set to 2 after manufacturing, and wasn't limiting the write performance.
    
    UFS4.0, and specifically gear 5 changes this, and requires the device to be
    more attentive.  This doesn't come free - the device has to allocate more
    resources to that end, but the sequential write performance improvement is
    significant. Early measurements shows 25% gain when moving from rtt 2 to
    9. Therefore, set bMaxNumOfRTT to be min(bDeviceRTTCap, NORTT) as UFSHCI
    expects.
    Signed-off-by: default avatarAvri Altman <avri.altman@wdc.com>
    Link: https://lore.kernel.org/r/20240530142510.734-2-avri.altman@wdc.comReviewed-by: default avatarBean Huo <beanhuo@micron.com>
    Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    9ec54934
ufs.h 18.2 KB