[PATCH v3] scsi: ufs: ufs-mediatek: Change dbg select by check hw version
Peter Wang
peter.wang at mediatek.com
Wed Sep 1 19:12:26 PDT 2021
On Wed, 2021-09-01 at 15:35 +0800, Stanley Chu wrote:
> Hi Peter,
>
> On Wed, 2021-09-01 at 14:04 +0800, peter.wang at mediatek.com wrote:
> > From: Peter Wang <peter.wang at mediatek.com>
> >
> > Mediatek UFS dbg select setting is changed in new HW version.
> > This patch check the HW version before set dbg select.
>
> Nits: This patch checks the HW version before setting dbg select.
> >
> > Signed-off-by: Peter Wang <peter.wang at mediatek.com>
> > ---
> > drivers/scsi/ufs/ufs-mediatek.c | 23 +++++++++++++++++++++--
> > drivers/scsi/ufs/ufs-mediatek.h | 5 +++++
> > 2 files changed, 26 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/scsi/ufs/ufs-mediatek.c
> > b/drivers/scsi/ufs/ufs-
> > mediatek.c
> > index d2c2516..0050e01 100644
> > --- a/drivers/scsi/ufs/ufs-mediatek.c
> > +++ b/drivers/scsi/ufs/ufs-mediatek.c
> > @@ -296,6 +296,25 @@ static void
> > ufs_mtk_setup_ref_clk_wait_us(struct
> > ufs_hba *hba,
> > host->ref_clk_ungating_wait_us = ungating_us;
> > }
> >
> > +__no_kcsan
>
> This is rarely used in mainstream kernel. According to my grep
> results,
> __no_kcsan is only used by kcsan-test itself.
>
> Besides, dbg select configuration may not be necessary if the mode is
> already configured before? I just wonder that can we avoid setting
> these registers every query?
>
Yes, will remove __no_kcsan and add a ip_ver in mediatek host struct
to avoid KCSAN warning.
Dbg select value will clear by hci reset. Maybe we cand add a variable
in mediatek host sruct to record if need set dbg select.
> > +static void ufs_mtk_dbg_sel(struct ufs_hba *hba)
> > +{
> > + static u32 hw_ver;
> > +
> > + if (!hw_ver)
> > + hw_ver = ufshcd_readl(hba, REG_UFS_MTK_HW_VER);
>
> Perhaps you can keep this version in struct host->hw_ver? Maybe you
> need to add a new member in that struct, for example, ip_ver.
>
> > +
> > + if (((hw_ver >> 16) & 0xFF) >= 0x36) {
> > + ufshcd_writel(hba, 0x820820, REG_UFS_DEBUG_SEL);
> > + ufshcd_writel(hba, 0x0, REG_UFS_DEBUG_SEL_B0);
> > + ufshcd_writel(hba, 0x55555555, REG_UFS_DEBUG_SEL_B1);
> > + ufshcd_writel(hba, 0xaaaaaaaa, REG_UFS_DEBUG_SEL_B2);
> > + ufshcd_writel(hba, 0xffffffff, REG_UFS_DEBUG_SEL_B3);
> > + } else {
> > + ufshcd_writel(hba, 0x20, REG_UFS_DEBUG_SEL);
> > + }
> > +}
> > +
> > static int ufs_mtk_wait_link_state(struct ufs_hba *hba, u32 state,
> > unsigned long max_wait_ms)
> > {
> > @@ -305,7 +324,7 @@ static int ufs_mtk_wait_link_state(struct
> > ufs_hba
> > *hba, u32 state,
> > timeout = ktime_add_ms(ktime_get(), max_wait_ms);
> > do {
> > time_checked = ktime_get();
> > - ufshcd_writel(hba, 0x20, REG_UFS_DEBUG_SEL);
> > + ufs_mtk_dbg_sel(hba);
> > val = ufshcd_readl(hba, REG_UFS_PROBE);
> > val = val >> 28;
> >
> > @@ -1001,7 +1020,7 @@ static void ufs_mtk_dbg_register_dump(struct
> > ufs_hba *hba)
> > "MPHY Ctrl ");
> >
> > /* Direct debugging information to REG_MTK_PROBE */
> > - ufshcd_writel(hba, 0x20, REG_UFS_DEBUG_SEL);
> > + ufs_mtk_dbg_sel(hba);
> > ufshcd_dump_regs(hba, REG_UFS_PROBE, 0x4, "Debug Probe ");
> > }
> >
> > diff --git a/drivers/scsi/ufs/ufs-mediatek.h
> > b/drivers/scsi/ufs/ufs-
> > mediatek.h
> > index 3f0d3bb..fc40c05 100644
> > --- a/drivers/scsi/ufs/ufs-mediatek.h
> > +++ b/drivers/scsi/ufs/ufs-mediatek.h
> > @@ -15,9 +15,14 @@
> > #define REG_UFS_REFCLK_CTRL 0x144
> > #define REG_UFS_EXTREG 0x2100
> > #define REG_UFS_MPHYCTRL 0x2200
> > +#define REG_UFS_MTK_HW_VER 0x2240
>
> HW_VER is somehow ambiguous, for example, how about
> REG_UFS_MTK_IP_VER?
>
Sure, could change naming for easy understand.
> > #define REG_UFS_REJECT_MON 0x22AC
> > #define REG_UFS_DEBUG_SEL 0x22C0
> > #define REG_UFS_PROBE 0x22C8
> > +#define REG_UFS_DEBUG_SEL_B0 0x22D0
> > +#define REG_UFS_DEBUG_SEL_B1 0x22D4
> > +#define REG_UFS_DEBUG_SEL_B2 0x22D8
> > +#define REG_UFS_DEBUG_SEL_B3 0x22DC
>
> Perhaps the debug select design could be simplified in the future,
> for
> example, driver can query what it wants by reading only one register
> without configuring anything first? Although this is beyond the scope
> of this patch.
>
> Thanks,
> Stanley Chu
>
> >
> > /*
> > * Ref-clk control
>
>
More information about the Linux-mediatek
mailing list