/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright ( c ) 2014 - 2016 , The Linux Foundation . All rights reserved .
*/
#ifndef _UFS_QUIRKS_H_
#define _UFS_QUIRKS_H_
/* return true if s1 is a prefix of s2 */
#define STR_PRFX_EQUAL(s1, s2) !strncmp(s1, s2, strlen(s1))
#define UFS_ANY_VENDOR 0 xFFFF
#define UFS_ANY_MODEL "ANY_MODEL"
#define UFS_VENDOR_MICRON 0 x12C
#define UFS_VENDOR_SAMSUNG 0 x1CE
#define UFS_VENDOR_SKHYNIX 0 x1AD
#define UFS_VENDOR_TOSHIBA 0 x198
#define UFS_VENDOR_WDC 0 x145
/**
* ufs_dev_quirk - ufs device quirk info
* @ card : ufs card details
* @ quirk : device quirk
*/
struct ufs_dev_quirk {
u16 wmanufacturerid;
const u8 *model;
unsigned int quirk;
};
/*
* Some vendor ' s UFS device sends back to back NACs for the DL data frames
* causing the host controller to raise the DFES error status . Sometimes
* such UFS devices send back to back NAC without waiting for new
* retransmitted DL frame from the host and in such cases it might be possible
* the Host UniPro goes into bad state without raising the DFES error
* interrupt . If this happens then all the pending commands would timeout
* only after respective SW command ( which is generally too large ) .
*
* We can workaround such device behaviour like this :
* - As soon as SW sees the DL NAC error , it should schedule the error handler
* - Error handler would sleep for 50 ms to see if there are any fatal errors
* raised by UFS controller .
* - If there are fatal errors then SW does normal error recovery .
* - If there are no fatal errors then SW sends the NOP command to device
* to check if link is alive .
* - If NOP command times out , SW does normal error recovery
* - If NOP command succeed , skip the error handling .
*
* If DL NAC error is seen multiple times with some vendor ' s UFS devices then
* enable this quirk to initiate quick error recovery and also silence related
* error logs to reduce spamming of kernel logs .
*/
#define UFS_DEVICE_QUIRK_RECOVERY_FROM_DL_NAC_ERRORS (1 << 2 )
/*
* Few Toshiba UFS device models advertise RX_MIN_ACTIVATETIME_CAPABILITY as
* 600 us which may not be enough for reliable hibern8 exit hardware sequence
* from UFS device .
* To workaround this issue , host should set its PA_TACTIVATE time to 1 ms even
* if device advertises RX_MIN_ACTIVATETIME_CAPABILITY less than 1 ms .
*/
#define UFS_DEVICE_QUIRK_PA_TACTIVATE (1 << 4 )
/*
* It seems some UFS devices may keep drawing more than sleep current
* ( atleast for 500 us ) from UFS rails ( especially from VCCQ rail ) .
* To avoid this situation , add 2 ms delay before putting these UFS
* rails in LPM mode .
*/
#define UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM (1 << 6 )
/*
* Some UFS devices require host PA_TACTIVATE to be lower than device
* PA_TACTIVATE , enabling this quirk ensure this .
*/
#define UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE (1 << 7 )
/*
* The max . value PA_SaveConfigTime is 250 ( 10 us ) but this is not enough for
* some vendors .
* Gear switch from PWM to HS may fail even with this max . PA_SaveConfigTime .
* Gear switch can be issued by host controller as an error recovery and any
* software delay will not help on this case so we need to increase
* PA_SaveConfigTime to > 32 us as per vendor recommendation .
*/
#define UFS_DEVICE_QUIRK_HOST_PA_SAVECONFIGTIME (1 << 8 )
/*
* Some UFS devices require VS_DebugSaveConfigTime is 0 x10 ,
* enabling this quirk ensure this .
*/
#define UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME (1 << 9 )
/*
* Some pre - 3 . 1 UFS devices can support extended features by upgrading
* the firmware . Enable this quirk to make UFS core driver probe and enable
* supported features on such devices .
*/
#define UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES (1 << 10 )
/*
* Some UFS devices require delay after VCC power rail is turned - off .
* Enable this quirk to introduce 5 ms delays after VCC power - off during
* suspend flow .
*/
#define UFS_DEVICE_QUIRK_DELAY_AFTER_LPM (1 << 11 )
/*
* Some ufs devices may need more time to be in hibern8 before exiting .
* Enable this quirk to give it an additional 100 us .
*/
#define UFS_DEVICE_QUIRK_PA_HIBER8TIME (1 << 12 )
/* Some UFS 4 devices do not support the qTimestamp attribute */
#define UFS_DEVICE_QUIRK_NO_TIMESTAMP_SUPPORT (1 << 13 )
#endif /* UFS_QUIRKS_H_ */
Messung V0.5 in Prozent C=89 H=100 G=94
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland