On Wed, Apr 06, 2016 at 04:27:23PM +0800, changbin...@intel.com wrote:
> From: "Du, Changbin" <changbin...@intel.com>
> 
> For DWC3 USB controller, the Global Debug Queue/FIFO Space Available
> Register(GDBGFIFOSPACE) can be used to dump FIFO/Queue available space.
> This can be used to check some special issues, like whether data is
> successfully copied from memory to fifo when a trb is blocked.
> 
> Signed-off-by: Du, Changbin <changbin...@intel.com>
> ---
>  drivers/usb/dwc3/core.h    |  5 +++++
>  drivers/usb/dwc3/debugfs.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 50 insertions(+)

Why did you not include the linux-usb@vger mailing list?



> 
> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
> index 6254b2f..899cf76 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -348,6 +348,11 @@
>  #define DWC3_DSTS_LOWSPEED           (2 << 0)
>  #define DWC3_DSTS_FULLSPEED1         (3 << 0)
>  
> +/* Global Debug Queue/FIFO Space Available Register */
> +#define DWC3_GDBGFIFOSPACE_NUM(x)    (((x) << 0) & 0x1F)
> +#define DWC3_GDBGFIFOSPACE_TYPE(x)   (((x) << 5) & 0xE0)
> +#define DWC3_GDBGFIFOSPACE_GET_SPACE(x)      (((x) >> 16) & 0xFFFF)
> +
>  /* Device Generic Command Register */
>  #define DWC3_DGCMD_SET_LMP           0x01
>  #define DWC3_DGCMD_SET_PERIODIC_PAR  0x02
> diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
> index 9ac37fe..f9a8d9e 100644
> --- a/drivers/usb/dwc3/debugfs.c
> +++ b/drivers/usb/dwc3/debugfs.c
> @@ -426,6 +426,45 @@ static const struct file_operations dwc3_mode_fops = {
>       .release                = single_release,
>  };
>  
> +static int dwc3_fifo_show(struct seq_file *s, void *unused)
> +{
> +     struct dwc3             *dwc = s->private;
> +     unsigned long           flags;
> +     unsigned int            type, index;
> +     const char              *name;
> +     u32                     reg;
> +
> +     static const char * const fifo_names[] = {
> +             "TxFIFO", "RxFIFO", "TxReqQ", "RxReqQ", "RxInfoQ",
> +             "DescFetchQ", "EventQ", "ProtocolStatusQ"};
> +     spin_lock_irqsave(&dwc->lock, flags);
> +     for (type = 0; type < 8; type++) {
> +             name = fifo_names[type];
> +             for (index = 0; index < 32; index++) {
> +                     dwc3_writel(dwc->regs, DWC3_GDBGFIFOSPACE,
> +                             DWC3_GDBGFIFOSPACE_NUM(index) |
> +                             DWC3_GDBGFIFOSPACE_TYPE(type));
> +                     reg = dwc3_readl(dwc->regs, DWC3_GDBGFIFOSPACE);
> +                     seq_printf(s, "%s%02d = %d\n", name, index,
> +                             DWC3_GDBGFIFOSPACE_GET_SPACE(reg));
> +             }
> +     }
> +     spin_unlock_irqrestore(&dwc->lock, flags);
> +     return 0;
> +}
> +
> +static int dwc3_fifo_open(struct inode *inode, struct file *file)
> +{
> +     return single_open(file, dwc3_fifo_show, inode->i_private);
> +}
> +
> +static const struct file_operations dwc3_fifo_fops = {
> +     .open                   = dwc3_fifo_open,
> +     .read                   = seq_read,
> +     .llseek                 = seq_lseek,
> +     .release                = single_release,
> +};
> +
>  static int dwc3_testmode_show(struct seq_file *s, void *unused)
>  {
>       struct dwc3             *dwc = s->private;
> @@ -648,6 +687,12 @@ int dwc3_debugfs_init(struct dwc3 *dwc)
>               goto err1;
>       }
>  
> +     file = debugfs_create_file("fifo", S_IRUGO, root, dwc, &dwc3_fifo_fops);
> +     if (!file) {
> +             ret = -ENOMEM;

Um, no, that's not the error here.  You shouldn't care at all about
debugfs api call results.  Just keep moving on here please.

thanks,

greg k-h

Reply via email to