Skip to content

Commit 563cf01

Browse files
Mian Yousaf KaukabFelipe Balbi
authored andcommitted
usb: dwc2: debugfs: add support for complete register dump
Dump all registers to take a complete snapshot of dwc2 state. Code is inspired by dwc3/debugfs.c Acked-by: John Youn <[email protected]> Signed-off-by: Mian Yousaf Kaukab <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
1 parent f91eea4 commit 563cf01

File tree

2 files changed

+358
-0
lines changed

2 files changed

+358
-0
lines changed

drivers/usb/dwc2/core.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,7 @@ struct dwc2_hsotg {
615615
enum dwc2_lx_state lx_state;
616616

617617
struct dentry *debug_root;
618+
struct debugfs_regset32 *regset;
618619

619620
/* DWC OTG HW Release versions */
620621
#define DWC2_CORE_REV_2_71a 0x4f54271a

drivers/usb/dwc2/debugfs.c

Lines changed: 357 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,344 @@ static inline void s3c_hsotg_create_debug(struct dwc2_hsotg *hsotg) {}
391391

392392
/* s3c_hsotg_delete_debug is removed as cleanup in done in dwc2_debugfs_exit */
393393

394+
#define dump_register(nm) \
395+
{ \
396+
.name = #nm, \
397+
.offset = nm, \
398+
}
399+
400+
static const struct debugfs_reg32 dwc2_regs[] = {
401+
/*
402+
* Accessing registers like this can trigger mode mismatch interrupt.
403+
* However, according to dwc2 databook, the register access, in this
404+
* case, is completed on the processor bus but is ignored by the core
405+
* and does not affect its operation.
406+
*/
407+
dump_register(GOTGCTL),
408+
dump_register(GOTGINT),
409+
dump_register(GAHBCFG),
410+
dump_register(GUSBCFG),
411+
dump_register(GRSTCTL),
412+
dump_register(GINTSTS),
413+
dump_register(GINTMSK),
414+
dump_register(GRXSTSR),
415+
dump_register(GRXSTSP),
416+
dump_register(GRXFSIZ),
417+
dump_register(GNPTXFSIZ),
418+
dump_register(GNPTXSTS),
419+
dump_register(GI2CCTL),
420+
dump_register(GPVNDCTL),
421+
dump_register(GGPIO),
422+
dump_register(GUID),
423+
dump_register(GSNPSID),
424+
dump_register(GHWCFG1),
425+
dump_register(GHWCFG2),
426+
dump_register(GHWCFG3),
427+
dump_register(GHWCFG4),
428+
dump_register(GLPMCFG),
429+
dump_register(GPWRDN),
430+
dump_register(GDFIFOCFG),
431+
dump_register(ADPCTL),
432+
dump_register(HPTXFSIZ),
433+
dump_register(DPTXFSIZN(1)),
434+
dump_register(DPTXFSIZN(2)),
435+
dump_register(DPTXFSIZN(3)),
436+
dump_register(DPTXFSIZN(4)),
437+
dump_register(DPTXFSIZN(5)),
438+
dump_register(DPTXFSIZN(6)),
439+
dump_register(DPTXFSIZN(7)),
440+
dump_register(DPTXFSIZN(8)),
441+
dump_register(DPTXFSIZN(9)),
442+
dump_register(DPTXFSIZN(10)),
443+
dump_register(DPTXFSIZN(11)),
444+
dump_register(DPTXFSIZN(12)),
445+
dump_register(DPTXFSIZN(13)),
446+
dump_register(DPTXFSIZN(14)),
447+
dump_register(DPTXFSIZN(15)),
448+
dump_register(DCFG),
449+
dump_register(DCTL),
450+
dump_register(DSTS),
451+
dump_register(DIEPMSK),
452+
dump_register(DOEPMSK),
453+
dump_register(DAINT),
454+
dump_register(DAINTMSK),
455+
dump_register(DTKNQR1),
456+
dump_register(DTKNQR2),
457+
dump_register(DTKNQR3),
458+
dump_register(DTKNQR4),
459+
dump_register(DVBUSDIS),
460+
dump_register(DVBUSPULSE),
461+
dump_register(DIEPCTL(0)),
462+
dump_register(DIEPCTL(1)),
463+
dump_register(DIEPCTL(2)),
464+
dump_register(DIEPCTL(3)),
465+
dump_register(DIEPCTL(4)),
466+
dump_register(DIEPCTL(5)),
467+
dump_register(DIEPCTL(6)),
468+
dump_register(DIEPCTL(7)),
469+
dump_register(DIEPCTL(8)),
470+
dump_register(DIEPCTL(9)),
471+
dump_register(DIEPCTL(10)),
472+
dump_register(DIEPCTL(11)),
473+
dump_register(DIEPCTL(12)),
474+
dump_register(DIEPCTL(13)),
475+
dump_register(DIEPCTL(14)),
476+
dump_register(DIEPCTL(15)),
477+
dump_register(DOEPCTL(0)),
478+
dump_register(DOEPCTL(1)),
479+
dump_register(DOEPCTL(2)),
480+
dump_register(DOEPCTL(3)),
481+
dump_register(DOEPCTL(4)),
482+
dump_register(DOEPCTL(5)),
483+
dump_register(DOEPCTL(6)),
484+
dump_register(DOEPCTL(7)),
485+
dump_register(DOEPCTL(8)),
486+
dump_register(DOEPCTL(9)),
487+
dump_register(DOEPCTL(10)),
488+
dump_register(DOEPCTL(11)),
489+
dump_register(DOEPCTL(12)),
490+
dump_register(DOEPCTL(13)),
491+
dump_register(DOEPCTL(14)),
492+
dump_register(DOEPCTL(15)),
493+
dump_register(DIEPINT(0)),
494+
dump_register(DIEPINT(1)),
495+
dump_register(DIEPINT(2)),
496+
dump_register(DIEPINT(3)),
497+
dump_register(DIEPINT(4)),
498+
dump_register(DIEPINT(5)),
499+
dump_register(DIEPINT(6)),
500+
dump_register(DIEPINT(7)),
501+
dump_register(DIEPINT(8)),
502+
dump_register(DIEPINT(9)),
503+
dump_register(DIEPINT(10)),
504+
dump_register(DIEPINT(11)),
505+
dump_register(DIEPINT(12)),
506+
dump_register(DIEPINT(13)),
507+
dump_register(DIEPINT(14)),
508+
dump_register(DIEPINT(15)),
509+
dump_register(DOEPINT(0)),
510+
dump_register(DOEPINT(1)),
511+
dump_register(DOEPINT(2)),
512+
dump_register(DOEPINT(3)),
513+
dump_register(DOEPINT(4)),
514+
dump_register(DOEPINT(5)),
515+
dump_register(DOEPINT(6)),
516+
dump_register(DOEPINT(7)),
517+
dump_register(DOEPINT(8)),
518+
dump_register(DOEPINT(9)),
519+
dump_register(DOEPINT(10)),
520+
dump_register(DOEPINT(11)),
521+
dump_register(DOEPINT(12)),
522+
dump_register(DOEPINT(13)),
523+
dump_register(DOEPINT(14)),
524+
dump_register(DOEPINT(15)),
525+
dump_register(DIEPTSIZ(0)),
526+
dump_register(DIEPTSIZ(1)),
527+
dump_register(DIEPTSIZ(2)),
528+
dump_register(DIEPTSIZ(3)),
529+
dump_register(DIEPTSIZ(4)),
530+
dump_register(DIEPTSIZ(5)),
531+
dump_register(DIEPTSIZ(6)),
532+
dump_register(DIEPTSIZ(7)),
533+
dump_register(DIEPTSIZ(8)),
534+
dump_register(DIEPTSIZ(9)),
535+
dump_register(DIEPTSIZ(10)),
536+
dump_register(DIEPTSIZ(11)),
537+
dump_register(DIEPTSIZ(12)),
538+
dump_register(DIEPTSIZ(13)),
539+
dump_register(DIEPTSIZ(14)),
540+
dump_register(DIEPTSIZ(15)),
541+
dump_register(DOEPTSIZ(0)),
542+
dump_register(DOEPTSIZ(1)),
543+
dump_register(DOEPTSIZ(2)),
544+
dump_register(DOEPTSIZ(3)),
545+
dump_register(DOEPTSIZ(4)),
546+
dump_register(DOEPTSIZ(5)),
547+
dump_register(DOEPTSIZ(6)),
548+
dump_register(DOEPTSIZ(7)),
549+
dump_register(DOEPTSIZ(8)),
550+
dump_register(DOEPTSIZ(9)),
551+
dump_register(DOEPTSIZ(10)),
552+
dump_register(DOEPTSIZ(11)),
553+
dump_register(DOEPTSIZ(12)),
554+
dump_register(DOEPTSIZ(13)),
555+
dump_register(DOEPTSIZ(14)),
556+
dump_register(DOEPTSIZ(15)),
557+
dump_register(DIEPDMA(0)),
558+
dump_register(DIEPDMA(1)),
559+
dump_register(DIEPDMA(2)),
560+
dump_register(DIEPDMA(3)),
561+
dump_register(DIEPDMA(4)),
562+
dump_register(DIEPDMA(5)),
563+
dump_register(DIEPDMA(6)),
564+
dump_register(DIEPDMA(7)),
565+
dump_register(DIEPDMA(8)),
566+
dump_register(DIEPDMA(9)),
567+
dump_register(DIEPDMA(10)),
568+
dump_register(DIEPDMA(11)),
569+
dump_register(DIEPDMA(12)),
570+
dump_register(DIEPDMA(13)),
571+
dump_register(DIEPDMA(14)),
572+
dump_register(DIEPDMA(15)),
573+
dump_register(DOEPDMA(0)),
574+
dump_register(DOEPDMA(1)),
575+
dump_register(DOEPDMA(2)),
576+
dump_register(DOEPDMA(3)),
577+
dump_register(DOEPDMA(4)),
578+
dump_register(DOEPDMA(5)),
579+
dump_register(DOEPDMA(6)),
580+
dump_register(DOEPDMA(7)),
581+
dump_register(DOEPDMA(8)),
582+
dump_register(DOEPDMA(9)),
583+
dump_register(DOEPDMA(10)),
584+
dump_register(DOEPDMA(11)),
585+
dump_register(DOEPDMA(12)),
586+
dump_register(DOEPDMA(13)),
587+
dump_register(DOEPDMA(14)),
588+
dump_register(DOEPDMA(15)),
589+
dump_register(DTXFSTS(0)),
590+
dump_register(DTXFSTS(1)),
591+
dump_register(DTXFSTS(2)),
592+
dump_register(DTXFSTS(3)),
593+
dump_register(DTXFSTS(4)),
594+
dump_register(DTXFSTS(5)),
595+
dump_register(DTXFSTS(6)),
596+
dump_register(DTXFSTS(7)),
597+
dump_register(DTXFSTS(8)),
598+
dump_register(DTXFSTS(9)),
599+
dump_register(DTXFSTS(10)),
600+
dump_register(DTXFSTS(11)),
601+
dump_register(DTXFSTS(12)),
602+
dump_register(DTXFSTS(13)),
603+
dump_register(DTXFSTS(14)),
604+
dump_register(DTXFSTS(15)),
605+
dump_register(PCGCTL),
606+
dump_register(HCFG),
607+
dump_register(HFIR),
608+
dump_register(HFNUM),
609+
dump_register(HPTXSTS),
610+
dump_register(HAINT),
611+
dump_register(HAINTMSK),
612+
dump_register(HFLBADDR),
613+
dump_register(HPRT0),
614+
dump_register(HCCHAR(0)),
615+
dump_register(HCCHAR(1)),
616+
dump_register(HCCHAR(2)),
617+
dump_register(HCCHAR(3)),
618+
dump_register(HCCHAR(4)),
619+
dump_register(HCCHAR(5)),
620+
dump_register(HCCHAR(6)),
621+
dump_register(HCCHAR(7)),
622+
dump_register(HCCHAR(8)),
623+
dump_register(HCCHAR(9)),
624+
dump_register(HCCHAR(10)),
625+
dump_register(HCCHAR(11)),
626+
dump_register(HCCHAR(12)),
627+
dump_register(HCCHAR(13)),
628+
dump_register(HCCHAR(14)),
629+
dump_register(HCCHAR(15)),
630+
dump_register(HCSPLT(0)),
631+
dump_register(HCSPLT(1)),
632+
dump_register(HCSPLT(2)),
633+
dump_register(HCSPLT(3)),
634+
dump_register(HCSPLT(4)),
635+
dump_register(HCSPLT(5)),
636+
dump_register(HCSPLT(6)),
637+
dump_register(HCSPLT(7)),
638+
dump_register(HCSPLT(8)),
639+
dump_register(HCSPLT(9)),
640+
dump_register(HCSPLT(10)),
641+
dump_register(HCSPLT(11)),
642+
dump_register(HCSPLT(12)),
643+
dump_register(HCSPLT(13)),
644+
dump_register(HCSPLT(14)),
645+
dump_register(HCSPLT(15)),
646+
dump_register(HCINT(0)),
647+
dump_register(HCINT(1)),
648+
dump_register(HCINT(2)),
649+
dump_register(HCINT(3)),
650+
dump_register(HCINT(4)),
651+
dump_register(HCINT(5)),
652+
dump_register(HCINT(6)),
653+
dump_register(HCINT(7)),
654+
dump_register(HCINT(8)),
655+
dump_register(HCINT(9)),
656+
dump_register(HCINT(10)),
657+
dump_register(HCINT(11)),
658+
dump_register(HCINT(12)),
659+
dump_register(HCINT(13)),
660+
dump_register(HCINT(14)),
661+
dump_register(HCINT(15)),
662+
dump_register(HCINTMSK(0)),
663+
dump_register(HCINTMSK(1)),
664+
dump_register(HCINTMSK(2)),
665+
dump_register(HCINTMSK(3)),
666+
dump_register(HCINTMSK(4)),
667+
dump_register(HCINTMSK(5)),
668+
dump_register(HCINTMSK(6)),
669+
dump_register(HCINTMSK(7)),
670+
dump_register(HCINTMSK(8)),
671+
dump_register(HCINTMSK(9)),
672+
dump_register(HCINTMSK(10)),
673+
dump_register(HCINTMSK(11)),
674+
dump_register(HCINTMSK(12)),
675+
dump_register(HCINTMSK(13)),
676+
dump_register(HCINTMSK(14)),
677+
dump_register(HCINTMSK(15)),
678+
dump_register(HCTSIZ(0)),
679+
dump_register(HCTSIZ(1)),
680+
dump_register(HCTSIZ(2)),
681+
dump_register(HCTSIZ(3)),
682+
dump_register(HCTSIZ(4)),
683+
dump_register(HCTSIZ(5)),
684+
dump_register(HCTSIZ(6)),
685+
dump_register(HCTSIZ(7)),
686+
dump_register(HCTSIZ(8)),
687+
dump_register(HCTSIZ(9)),
688+
dump_register(HCTSIZ(10)),
689+
dump_register(HCTSIZ(11)),
690+
dump_register(HCTSIZ(12)),
691+
dump_register(HCTSIZ(13)),
692+
dump_register(HCTSIZ(14)),
693+
dump_register(HCTSIZ(15)),
694+
dump_register(HCDMA(0)),
695+
dump_register(HCDMA(1)),
696+
dump_register(HCDMA(2)),
697+
dump_register(HCDMA(3)),
698+
dump_register(HCDMA(4)),
699+
dump_register(HCDMA(5)),
700+
dump_register(HCDMA(6)),
701+
dump_register(HCDMA(7)),
702+
dump_register(HCDMA(8)),
703+
dump_register(HCDMA(9)),
704+
dump_register(HCDMA(10)),
705+
dump_register(HCDMA(11)),
706+
dump_register(HCDMA(12)),
707+
dump_register(HCDMA(13)),
708+
dump_register(HCDMA(14)),
709+
dump_register(HCDMA(15)),
710+
dump_register(HCDMAB(0)),
711+
dump_register(HCDMAB(1)),
712+
dump_register(HCDMAB(2)),
713+
dump_register(HCDMAB(3)),
714+
dump_register(HCDMAB(4)),
715+
dump_register(HCDMAB(5)),
716+
dump_register(HCDMAB(6)),
717+
dump_register(HCDMAB(7)),
718+
dump_register(HCDMAB(8)),
719+
dump_register(HCDMAB(9)),
720+
dump_register(HCDMAB(10)),
721+
dump_register(HCDMAB(11)),
722+
dump_register(HCDMAB(12)),
723+
dump_register(HCDMAB(13)),
724+
dump_register(HCDMAB(14)),
725+
dump_register(HCDMAB(15)),
726+
};
727+
394728
int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
395729
{
396730
int ret;
731+
struct dentry *file;
397732

398733
hsotg->debug_root = debugfs_create_dir(dev_name(hsotg->dev), NULL);
399734
if (!hsotg->debug_root) {
@@ -403,6 +738,28 @@ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
403738

404739
/* Add gadget debugfs nodes */
405740
s3c_hsotg_create_debug(hsotg);
741+
742+
hsotg->regset = devm_kzalloc(hsotg->dev, sizeof(*hsotg->regset),
743+
GFP_KERNEL);
744+
if (!hsotg->regset) {
745+
ret = -ENOMEM;
746+
goto err1;
747+
}
748+
749+
hsotg->regset->regs = dwc2_regs;
750+
hsotg->regset->nregs = ARRAY_SIZE(dwc2_regs);
751+
hsotg->regset->base = hsotg->regs;
752+
753+
file = debugfs_create_regset32("regdump", S_IRUGO, hsotg->debug_root,
754+
hsotg->regset);
755+
if (!file) {
756+
ret = -ENOMEM;
757+
goto err1;
758+
}
759+
760+
return 0;
761+
err1:
762+
debugfs_remove_recursive(hsotg->debug_root);
406763
err0:
407764
return ret;
408765
}

0 commit comments

Comments
 (0)