Message ID | 20201126053839.25889-4-stanley.chu@mediatek.com |
---|---|
State | Superseded |
Headers | show |
Series | Refine error history and introduce notify_event vop | expand |
On 2020-11-26 13:38, Stanley Chu wrote: > Introduce notify_event variant function to allow > vendor to get notified of important events and connect > to any proprietary debugging facilities. > > Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> > --- > drivers/scsi/ufs/ufshcd.c | 2 ++ > drivers/scsi/ufs/ufshcd.h | 11 +++++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 7194bed1f10b..63fe37e1c908 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -4484,6 +4484,8 @@ void ufshcd_update_evt_hist(struct ufs_hba *hba, > u32 id, u32 val) > e->val[e->pos] = val; > e->tstamp[e->pos] = ktime_get(); > e->pos = (e->pos + 1) % UFS_EVENT_HIST_LENGTH; > + > + ufshcd_vops_notify_event(hba, id, &val); > } > EXPORT_SYMBOL_GPL(ufshcd_update_evt_hist); > > diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h > index 82c2fc5597bb..a81ca36c1715 100644 > --- a/drivers/scsi/ufs/ufshcd.h > +++ b/drivers/scsi/ufs/ufshcd.h > @@ -317,6 +317,7 @@ struct ufs_pwr_mode_info { > * @phy_initialization: used to initialize phys > * @device_reset: called to issue a reset pulse on the UFS device > * @program_key: program or evict an inline encryption key > + * @notify_event: called to notify important events > */ > struct ufs_hba_variant_ops { > const char *name; > @@ -352,6 +353,8 @@ struct ufs_hba_variant_ops { > void *data); > int (*program_key)(struct ufs_hba *hba, > const union ufs_crypto_cfg_entry *cfg, int slot); > + void (*notify_event)(struct ufs_hba *hba, > + enum ufs_event_type evt, void *data); > }; > > /* clock gating state */ > @@ -1097,6 +1100,14 @@ static inline int > ufshcd_vops_clk_scale_notify(struct ufs_hba *hba, > return 0; > } > > +static inline void ufshcd_vops_notify_event(struct ufs_hba *hba, > + enum ufs_event_type evt, > + void *data) > +{ > + if (hba->vops && hba->vops->notify_event) > + hba->vops->notify_event(hba, evt, data); > +} > + > static inline int ufshcd_vops_setup_clocks(struct ufs_hba *hba, bool > on, > enum ufs_notify_change_status status) > { Reviewed-by: Can Guo <cang@codeaurora.org>
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 7194bed1f10b..63fe37e1c908 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4484,6 +4484,8 @@ void ufshcd_update_evt_hist(struct ufs_hba *hba, u32 id, u32 val) e->val[e->pos] = val; e->tstamp[e->pos] = ktime_get(); e->pos = (e->pos + 1) % UFS_EVENT_HIST_LENGTH; + + ufshcd_vops_notify_event(hba, id, &val); } EXPORT_SYMBOL_GPL(ufshcd_update_evt_hist); diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 82c2fc5597bb..a81ca36c1715 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -317,6 +317,7 @@ struct ufs_pwr_mode_info { * @phy_initialization: used to initialize phys * @device_reset: called to issue a reset pulse on the UFS device * @program_key: program or evict an inline encryption key + * @notify_event: called to notify important events */ struct ufs_hba_variant_ops { const char *name; @@ -352,6 +353,8 @@ struct ufs_hba_variant_ops { void *data); int (*program_key)(struct ufs_hba *hba, const union ufs_crypto_cfg_entry *cfg, int slot); + void (*notify_event)(struct ufs_hba *hba, + enum ufs_event_type evt, void *data); }; /* clock gating state */ @@ -1097,6 +1100,14 @@ static inline int ufshcd_vops_clk_scale_notify(struct ufs_hba *hba, return 0; } +static inline void ufshcd_vops_notify_event(struct ufs_hba *hba, + enum ufs_event_type evt, + void *data) +{ + if (hba->vops && hba->vops->notify_event) + hba->vops->notify_event(hba, evt, data); +} + static inline int ufshcd_vops_setup_clocks(struct ufs_hba *hba, bool on, enum ufs_notify_change_status status) {
Introduce notify_event variant function to allow vendor to get notified of important events and connect to any proprietary debugging facilities. Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> --- drivers/scsi/ufs/ufshcd.c | 2 ++ drivers/scsi/ufs/ufshcd.h | 11 +++++++++++ 2 files changed, 13 insertions(+)