Hi Avri, On Sat, 2020-05-02 at 15:32 +0000, Avri Altman wrote: > Hi Stanley, > Few more nits. > Thanks, > Avri All fixed in v4. Thanks for these suggestions. Stanley Chu > > > > > According to UFS specification, there are two WriteBooster mode of > > operations: "LU dedicated buffer" mode and "shared buffer" mode. > > In the "LU dedicated buffer" mode, the WriteBooster Buffer is > > dedicated to a logical unit. > > > > If the device supports the "LU dedicated buffer" mode, this mode is > > configured by setting bWriteBoosterBufferType to 00h. The logical > > unit WriteBooster Buffer size is configured by setting the > > dLUNumWriteBoosterBufferAllocUnits field of the related Unit > > Descriptor. Only a value greater than zero enables the WriteBooster > > feature in the logical unit. > > > > Modify ufshcd_wb_probe() as above description to support LU Dedicated > > buffer mode. > > > > Note that according to UFS 3.1 specification, the valid value of > > bDeviceMaxWriteBoosterLUs parameter in Geometry Descriptor is 1, > > which means at most one LUN can have WriteBooster buffer in "LU > > dedicated buffer mode". Therefore this patch supports only one > > LUN with WriteBooster enabled. All WriteBooster related sysfs nodes > > are specifically mapped to the LUN with WriteBooster enabled in > > LU Dedicated buffer mode. > > > > Signed-off-by: Stanley Chu <stanley.chu@xxxxxxxxxxxx> > > --- > > drivers/scsi/ufs/ufs-sysfs.c | 14 ++++++++- > > drivers/scsi/ufs/ufs.h | 7 +++++ > > drivers/scsi/ufs/ufshcd.c | 60 +++++++++++++++++++++++++++++------- > > drivers/scsi/ufs/ufshcd.h | 1 + > > 4 files changed, 70 insertions(+), 12 deletions(-) > > > > diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c > > index b86b6a40d7e6..a162f63098e5 100644 > > --- a/drivers/scsi/ufs/ufs-sysfs.c > > +++ b/drivers/scsi/ufs/ufs-sysfs.c > > @@ -622,16 +622,28 @@ static const struct attribute_group > > ufs_sysfs_string_descriptors_group = { > > .attrs = ufs_sysfs_string_descriptors, > > }; > > > > +static bool ufshcd_is_wb_flags(enum flag_idn idn) > Inline? > And just return (idn >= QUERY_FLAG_IDN_WB_EN && idn <= QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8) > > > +{ > > + if (idn >= QUERY_FLAG_IDN_WB_EN && > > + idn <= QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8) > > + return true; > > + else > > + return false; > > +} > > + > > > > > > +int ufshcd_wb_get_flag_index(struct ufs_hba *hba) > > +{ > > + if (hba->dev_info.b_wb_buffer_type == > > WB_BUF_MODE_LU_DEDICATED) > > + return hba->dev_info.wb_dedicated_lu; > > + else > No need for else. > Maybe make this static inline in ufshcd.h? > > > + return 0; > > +} > > +