mbox series

[v3,00/10] scsi: ufs: Fix PMC and low-power mode on MediaTek UFS platforms

Message ID 20220614141655.14409-1-stanley.chu@mediatek.com
Headers show
Series scsi: ufs: Fix PMC and low-power mode on MediaTek UFS platforms | expand

Message

Stanley Chu June 14, 2022, 2:16 p.m. UTC
Hi Martin,

This series provides some fixes on MediaTek UFS platforms, please consider this patch series for kernel v5.20.

Sorry to change this patch series so frequently since we have to post and backport these patches to Android kernel recently.

- Provide workaround for power mode change for HS-G5
- Fix and provide regulator features

Changes compared to v2:
- Add patches to support multiple VCC sources

Changes compared to v1:
- Add patches to fix and provide VCCQx low-power support

Alice Chao (1):
  scsi: ufs-mediatek: Support flexible parameters for smc calls

CC Chou (1):
  scsi: ufs-mediatek: Introduce workaround for power mode change

Peter Wang (1):
  scsi: ufs-mediatek: Support low-power mode for VCCQ

Po-Wen Kao (2):
  scsi: ufs-mediatek: Fix the timing of configuring device regulators
  scsi: ufs-mediatek: Prevent device regulators setting as LPM
    incorrectly

Stanley Chu (5):
  scsi: ufs: Export ufshcd_uic_change_pwr_mode()
  scsi: ufs: Fix ADAPT logic for HS-G5
  scsi: ufs-mediatek: Support low-power mode for parents of VCCQx
  scsi: ufs: Export regulator functions
  scsi: ufs-mediatek: Support multiple VCC sources

 drivers/ufs/core/ufshcd.c        |   8 +-
 drivers/ufs/host/ufs-mediatek.c  | 232 ++++++++++++++++++++++++++-----
 drivers/ufs/host/ufs-mediatek.h  |  75 ++++++++++
 drivers/ufs/host/ufshcd-pltfrm.c |   3 +-
 drivers/ufs/host/ufshcd-pltfrm.h |   2 +
 include/ufs/ufshcd.h             |   3 +
 include/ufs/unipro.h             |   1 +
 7 files changed, 289 insertions(+), 35 deletions(-)

Comments

Bart Van Assche June 14, 2022, 4:28 p.m. UTC | #1
On 6/14/22 07:16, Stanley Chu wrote:
> From: Alice Chao <alice.chao@mediatek.com>
> 
> Provide flexible number of parameters for UFS SMC calls to be
> easily used for future SMC usages.

How far in the future? Please only introduce what is needed for this 
patch series.

> +/*
> + * SMC call wapper function
                ^^^^^^
typo

> + */
> +#define _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6) \
> +		arm_smccc_smc(MTK_SIP_UFS_CONTROL, \
> +				  cmd, v1, v2, v3, v4, v5, v6, &(res))
> +
> +#define _ufs_mtk_smc_0(cmd, res) \
> +	_ufs_mtk_smc(cmd, res, 0, 0, 0, 0, 0, 0)
> +
> +#define _ufs_mtk_smc_1(cmd, res, v1) \
> +	_ufs_mtk_smc(cmd, res, v1, 0, 0, 0, 0, 0)
> +
> +#define _ufs_mtk_smc_2(cmd, res, v1, v2) \
> +	_ufs_mtk_smc(cmd, res, v1, v2, 0, 0, 0, 0)
> +
> +#define _ufs_mtk_smc_3(cmd, res, v1, v2, v3) \
> +	_ufs_mtk_smc(cmd, res, v1, v2, v3, 0, 0, 0)
> +
> +#define _ufs_mtk_smc_4(cmd, res, v1, v2, v3, v4) \
> +	_ufs_mtk_smc(cmd, res, v1, v2, v3, v4, 0, 0)
> +
> +#define _ufs_mtk_smc_5(cmd, res, v1, v2, v3, v4, v5) \
> +	_ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, 0)
> +
> +#define _ufs_mtk_smc_6(cmd, res, v1, v2, v3, v4, v5, v6) \
> +	_ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6)
> +
> +#define _ufs_mtk_smc_selector(cmd, res, v1, v2, v3, v4, v5, v6, FUNC, ...) FUNC
> +
> +#define ufs_mtk_smc(...) \
> +	_ufs_mtk_smc_selector(__VA_ARGS__, \
> +	_ufs_mtk_smc_6(__VA_ARGS__), \
> +	_ufs_mtk_smc_5(__VA_ARGS__), \
> +	_ufs_mtk_smc_4(__VA_ARGS__), \
> +	_ufs_mtk_smc_3(__VA_ARGS__), \
> +	_ufs_mtk_smc_2(__VA_ARGS__), \
> +	_ufs_mtk_smc_1(__VA_ARGS__), \
> +	_ufs_mtk_smc_0(__VA_ARGS__) \
> +	)

If _ufs_mtk_smc() would be modified to accept an struct _ufs_mtk_args as 
its only argument, would that allow to simplify the above into the 
following?

#define ufs_mtk_smc(...) \
   _ufs_mtk_smc((struct _ufs_mtk_args){__VA_ARGS__})

> +/*
> + * Sip kernel interface
> + */

What is "Sip"? Should it perhaps be spelled as "SIP"?

Thanks,

Bart.
Stanley Chu June 15, 2022, 3:48 a.m. UTC | #2
Hi Bart,

On Tue, 2022-06-14 at 09:28 -0700, Bart Van Assche wrote:
> On 6/14/22 07:16, Stanley Chu wrote:
> > From: Alice Chao <alice.chao@mediatek.com>
> > 
> > Provide flexible number of parameters for UFS SMC calls to be
> > easily used for future SMC usages.
> 
> How far in the future? Please only introduce what is needed for this 
> patch series.

Sure, I just rewrote and simplified SMC call macros according to your
good suggestions in v4.

> 
> > +/*
> > + * SMC call wapper function
> 
>                 ^^^^^^
> typo

Fixed in v4.
> 
> > + */
> > +#define _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6) \
> > +		arm_smccc_smc(MTK_SIP_UFS_CONTROL, \
> > +				  cmd, v1, v2, v3, v4, v5, v6, &(res))
> > +
> > +#define _ufs_mtk_smc_0(cmd, res) \
> > +	_ufs_mtk_smc(cmd, res, 0, 0, 0, 0, 0, 0)
> > +
> > +#define _ufs_mtk_smc_1(cmd, res, v1) \
> > +	_ufs_mtk_smc(cmd, res, v1, 0, 0, 0, 0, 0)
> > +
> > +#define _ufs_mtk_smc_2(cmd, res, v1, v2) \
> > +	_ufs_mtk_smc(cmd, res, v1, v2, 0, 0, 0, 0)
> > +
> > +#define _ufs_mtk_smc_3(cmd, res, v1, v2, v3) \
> > +	_ufs_mtk_smc(cmd, res, v1, v2, v3, 0, 0, 0)
> > +
> > +#define _ufs_mtk_smc_4(cmd, res, v1, v2, v3, v4) \
> > +	_ufs_mtk_smc(cmd, res, v1, v2, v3, v4, 0, 0)
> > +
> > +#define _ufs_mtk_smc_5(cmd, res, v1, v2, v3, v4, v5) \
> > +	_ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, 0)
> > +
> > +#define _ufs_mtk_smc_6(cmd, res, v1, v2, v3, v4, v5, v6) \
> > +	_ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6)
> > +
> > +#define _ufs_mtk_smc_selector(cmd, res, v1, v2, v3, v4, v5, v6,
> > FUNC, ...) FUNC
> > +
> > +#define ufs_mtk_smc(...) \
> > +	_ufs_mtk_smc_selector(__VA_ARGS__, \
> > +	_ufs_mtk_smc_6(__VA_ARGS__), \
> > +	_ufs_mtk_smc_5(__VA_ARGS__), \
> > +	_ufs_mtk_smc_4(__VA_ARGS__), \
> > +	_ufs_mtk_smc_3(__VA_ARGS__), \
> > +	_ufs_mtk_smc_2(__VA_ARGS__), \
> > +	_ufs_mtk_smc_1(__VA_ARGS__), \
> > +	_ufs_mtk_smc_0(__VA_ARGS__) \
> > +	)
> 
> If _ufs_mtk_smc() would be modified to accept an struct _ufs_mtk_args
> as 
> its only argument, would that allow to simplify the above into the 
> following?
> 
> #define ufs_mtk_smc(...) \
>    _ufs_mtk_smc((struct _ufs_mtk_args){__VA_ARGS__})
> 
> > +/*
> > + * Sip kernel interface
> > + */
> 
> What is "Sip"? Should it perhaps be spelled as "SIP"?
> 
> Thanks,
> 
> Bart.