> > Respective UFS devices have their own characteristics and many of them > > could be a form of numbers, such as timeout and a number of retires. > > This introduces the way to set those things per specific device vendor > > or specific device. > > > > I wrote this like the style of ufs_fixups stuffs. > > > > Signed-off-by: Kiwoong Kim <kwmad.kim@xxxxxxxxxxx> > This patch legitimize quirks of all kinds and shapes. > I am not sure that we should allow it. If you're concerning the name 'quirk' literally, I can change the way to use another values by device tree or whatever. Or do you concern introducing various values? > > > > --- > > drivers/scsi/ufs/ufs_quirks.h | 13 +++++++++++++ > > drivers/scsi/ufs/ufshcd.c | 39 > > +++++++++++++++++++++++++++++++++++++++ > > drivers/scsi/ufs/ufshcd.h | 1 + > > 3 files changed, 53 insertions(+) > > > > diff --git a/drivers/scsi/ufs/ufs_quirks.h > > b/drivers/scsi/ufs/ufs_quirks.h index 2a00414..f074093 100644 > > --- a/drivers/scsi/ufs/ufs_quirks.h > > +++ b/drivers/scsi/ufs/ufs_quirks.h > > @@ -29,6 +29,19 @@ struct ufs_dev_fix { > > unsigned int quirk; > > }; > > > > +enum dev_val_type { > > + DEV_VAL_FDEVICEINIT = 0x0, > > /* keep last */ > > + DEV_VAL_NUM, > > +}; > > + > > +struct ufs_dev_value { > > + u16 wmanufacturerid; > > + u8 *model; > > + u32 key; > > + u32 val; > > + bool enable; > > +}; > > + > > #define END_FIX { } > > > > /* add specific device quirk */ > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > > index 52abe82..b26f182 100644 > > --- a/drivers/scsi/ufs/ufshcd.c > > +++ b/drivers/scsi/ufs/ufshcd.c > > @@ -207,6 +207,21 @@ static struct ufs_dev_fix ufs_fixups[] = { > > END_FIX > > }; > > > > +static const struct ufs_dev_value ufs_dev_values[] = { > > + {0, 0, 0, 0, false}, > > +}; > > + > > +static inline bool > > +ufs_get_dev_specific_value(struct ufs_hba *hba, > > + enum dev_val_type type, u32 *val) { > If (ARRAY_SIZE(ufs_dev_values) <= type) > return false; > > > Thanks, > Avri Got it. Thanks. Kiwoong Kim