On 3/17/2015 2:54 AM, Mian Yousaf Kaukab wrote: > Dump all registers to take a complete snapshot of dwc2 state. > Code is inspired by dwc3/debugfs.c > > Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@xxxxxxxxx> > --- > drivers/usb/dwc2/core.h | 1 + > drivers/usb/dwc2/debugfs.c | 356 +++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 357 insertions(+) > > diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h > index 3695c6f..1fd8d2b 100644 > --- a/drivers/usb/dwc2/core.h > +++ b/drivers/usb/dwc2/core.h > @@ -615,6 +615,7 @@ struct dwc2_hsotg { > enum dwc2_lx_state lx_state; > > struct dentry *debug_root; > + struct debugfs_regset32 *regset; > > /* DWC OTG HW Release versions */ > #define DWC2_CORE_REV_2_71a 0x4f54271a > diff --git a/drivers/usb/dwc2/debugfs.c b/drivers/usb/dwc2/debugfs.c > index e57e554..2b9e1c2 100644 > --- a/drivers/usb/dwc2/debugfs.c > +++ b/drivers/usb/dwc2/debugfs.c > @@ -391,9 +391,344 @@ static inline void s3c_hsotg_create_debug(struct dwc2_hsotg *hsotg) {} > > /* s3c_hsotg_delete_debug is removed as cleanup in done in dwc2_debugfs_exit */ > > +#define dump_register(nm) \ > +{ \ > + .name = #nm, \ > + .offset = nm, \ > +} > + > +static const struct debugfs_reg32 dwc2_regs[] = { > + /* > + * Accessing registers like this can trigger mode mismatch interrupt. > + * However, according to dwc2 databook, the register access, in this > + * case, is completed on the processor bus but is ignored by the core > + * and does not affect its operation. > + */ > + dump_register(GOTGCTL), > + dump_register(GOTGINT), > + dump_register(GAHBCFG), > + dump_register(GUSBCFG), > + dump_register(GRSTCTL), > + dump_register(GINTSTS), > + dump_register(GINTMSK), > + dump_register(GRXSTSR), > + dump_register(GRXSTSP), > + dump_register(GRXFSIZ), > + dump_register(GNPTXFSIZ), > + dump_register(GNPTXSTS), > + dump_register(GI2CCTL), > + dump_register(GPVNDCTL), > + dump_register(GGPIO), > + dump_register(GUID), > + dump_register(GSNPSID), > + dump_register(GHWCFG1), > + dump_register(GHWCFG2), > + dump_register(GHWCFG3), > + dump_register(GHWCFG4), > + dump_register(GLPMCFG), > + dump_register(GPWRDN), > + dump_register(GDFIFOCFG), > + dump_register(ADPCTL), > + dump_register(HPTXFSIZ), > + dump_register(DPTXFSIZN(1)), > + dump_register(DPTXFSIZN(2)), > + dump_register(DPTXFSIZN(3)), > + dump_register(DPTXFSIZN(4)), > + dump_register(DPTXFSIZN(5)), > + dump_register(DPTXFSIZN(6)), > + dump_register(DPTXFSIZN(7)), > + dump_register(DPTXFSIZN(8)), > + dump_register(DPTXFSIZN(9)), > + dump_register(DPTXFSIZN(10)), > + dump_register(DPTXFSIZN(11)), > + dump_register(DPTXFSIZN(12)), > + dump_register(DPTXFSIZN(13)), > + dump_register(DPTXFSIZN(14)), > + dump_register(DPTXFSIZN(15)), > + dump_register(DCFG), > + dump_register(DCTL), > + dump_register(DSTS), > + dump_register(DIEPMSK), > + dump_register(DOEPMSK), > + dump_register(DAINT), > + dump_register(DAINTMSK), > + dump_register(DTKNQR1), > + dump_register(DTKNQR2), > + dump_register(DTKNQR3), > + dump_register(DTKNQR4), > + dump_register(DVBUSDIS), > + dump_register(DVBUSPULSE), > + dump_register(DIEPCTL(0)), > + dump_register(DIEPCTL(1)), > + dump_register(DIEPCTL(2)), > + dump_register(DIEPCTL(3)), > + dump_register(DIEPCTL(4)), > + dump_register(DIEPCTL(5)), > + dump_register(DIEPCTL(6)), > + dump_register(DIEPCTL(7)), > + dump_register(DIEPCTL(8)), > + dump_register(DIEPCTL(9)), > + dump_register(DIEPCTL(10)), > + dump_register(DIEPCTL(11)), > + dump_register(DIEPCTL(12)), > + dump_register(DIEPCTL(13)), > + dump_register(DIEPCTL(14)), > + dump_register(DIEPCTL(15)), > + dump_register(DOEPCTL(0)), > + dump_register(DOEPCTL(1)), > + dump_register(DOEPCTL(2)), > + dump_register(DOEPCTL(3)), > + dump_register(DOEPCTL(4)), > + dump_register(DOEPCTL(5)), > + dump_register(DOEPCTL(6)), > + dump_register(DOEPCTL(7)), > + dump_register(DOEPCTL(8)), > + dump_register(DOEPCTL(9)), > + dump_register(DOEPCTL(10)), > + dump_register(DOEPCTL(11)), > + dump_register(DOEPCTL(12)), > + dump_register(DOEPCTL(13)), > + dump_register(DOEPCTL(14)), > + dump_register(DOEPCTL(15)), > + dump_register(DIEPINT(0)), > + dump_register(DIEPINT(1)), > + dump_register(DIEPINT(2)), > + dump_register(DIEPINT(3)), > + dump_register(DIEPINT(4)), > + dump_register(DIEPINT(5)), > + dump_register(DIEPINT(6)), > + dump_register(DIEPINT(7)), > + dump_register(DIEPINT(8)), > + dump_register(DIEPINT(9)), > + dump_register(DIEPINT(10)), > + dump_register(DIEPINT(11)), > + dump_register(DIEPINT(12)), > + dump_register(DIEPINT(13)), > + dump_register(DIEPINT(14)), > + dump_register(DIEPINT(15)), > + dump_register(DOEPINT(0)), > + dump_register(DOEPINT(1)), > + dump_register(DOEPINT(2)), > + dump_register(DOEPINT(3)), > + dump_register(DOEPINT(4)), > + dump_register(DOEPINT(5)), > + dump_register(DOEPINT(6)), > + dump_register(DOEPINT(7)), > + dump_register(DOEPINT(8)), > + dump_register(DOEPINT(9)), > + dump_register(DOEPINT(10)), > + dump_register(DOEPINT(11)), > + dump_register(DOEPINT(12)), > + dump_register(DOEPINT(13)), > + dump_register(DOEPINT(14)), > + dump_register(DOEPINT(15)), > + dump_register(DIEPTSIZ(0)), > + dump_register(DIEPTSIZ(1)), > + dump_register(DIEPTSIZ(2)), > + dump_register(DIEPTSIZ(3)), > + dump_register(DIEPTSIZ(4)), > + dump_register(DIEPTSIZ(5)), > + dump_register(DIEPTSIZ(6)), > + dump_register(DIEPTSIZ(7)), > + dump_register(DIEPTSIZ(8)), > + dump_register(DIEPTSIZ(9)), > + dump_register(DIEPTSIZ(10)), > + dump_register(DIEPTSIZ(11)), > + dump_register(DIEPTSIZ(12)), > + dump_register(DIEPTSIZ(13)), > + dump_register(DIEPTSIZ(14)), > + dump_register(DIEPTSIZ(15)), > + dump_register(DOEPTSIZ(0)), > + dump_register(DOEPTSIZ(1)), > + dump_register(DOEPTSIZ(2)), > + dump_register(DOEPTSIZ(3)), > + dump_register(DOEPTSIZ(4)), > + dump_register(DOEPTSIZ(5)), > + dump_register(DOEPTSIZ(6)), > + dump_register(DOEPTSIZ(7)), > + dump_register(DOEPTSIZ(8)), > + dump_register(DOEPTSIZ(9)), > + dump_register(DOEPTSIZ(10)), > + dump_register(DOEPTSIZ(11)), > + dump_register(DOEPTSIZ(12)), > + dump_register(DOEPTSIZ(13)), > + dump_register(DOEPTSIZ(14)), > + dump_register(DOEPTSIZ(15)), > + dump_register(DIEPDMA(0)), > + dump_register(DIEPDMA(1)), > + dump_register(DIEPDMA(2)), > + dump_register(DIEPDMA(3)), > + dump_register(DIEPDMA(4)), > + dump_register(DIEPDMA(5)), > + dump_register(DIEPDMA(6)), > + dump_register(DIEPDMA(7)), > + dump_register(DIEPDMA(8)), > + dump_register(DIEPDMA(9)), > + dump_register(DIEPDMA(10)), > + dump_register(DIEPDMA(11)), > + dump_register(DIEPDMA(12)), > + dump_register(DIEPDMA(13)), > + dump_register(DIEPDMA(14)), > + dump_register(DIEPDMA(15)), > + dump_register(DOEPDMA(0)), > + dump_register(DOEPDMA(1)), > + dump_register(DOEPDMA(2)), > + dump_register(DOEPDMA(3)), > + dump_register(DOEPDMA(4)), > + dump_register(DOEPDMA(5)), > + dump_register(DOEPDMA(6)), > + dump_register(DOEPDMA(7)), > + dump_register(DOEPDMA(8)), > + dump_register(DOEPDMA(9)), > + dump_register(DOEPDMA(10)), > + dump_register(DOEPDMA(11)), > + dump_register(DOEPDMA(12)), > + dump_register(DOEPDMA(13)), > + dump_register(DOEPDMA(14)), > + dump_register(DOEPDMA(15)), > + dump_register(DTXFSTS(0)), > + dump_register(DTXFSTS(1)), > + dump_register(DTXFSTS(2)), > + dump_register(DTXFSTS(3)), > + dump_register(DTXFSTS(4)), > + dump_register(DTXFSTS(5)), > + dump_register(DTXFSTS(6)), > + dump_register(DTXFSTS(7)), > + dump_register(DTXFSTS(8)), > + dump_register(DTXFSTS(9)), > + dump_register(DTXFSTS(10)), > + dump_register(DTXFSTS(11)), > + dump_register(DTXFSTS(12)), > + dump_register(DTXFSTS(13)), > + dump_register(DTXFSTS(14)), > + dump_register(DTXFSTS(15)), > + dump_register(PCGCTL), > + dump_register(HCFG), > + dump_register(HFIR), > + dump_register(HFNUM), > + dump_register(HPTXSTS), > + dump_register(HAINT), > + dump_register(HAINTMSK), > + dump_register(HFLBADDR), > + dump_register(HPRT0), > + dump_register(HCCHAR(0)), > + dump_register(HCCHAR(1)), > + dump_register(HCCHAR(2)), > + dump_register(HCCHAR(3)), > + dump_register(HCCHAR(4)), > + dump_register(HCCHAR(5)), > + dump_register(HCCHAR(6)), > + dump_register(HCCHAR(7)), > + dump_register(HCCHAR(8)), > + dump_register(HCCHAR(9)), > + dump_register(HCCHAR(10)), > + dump_register(HCCHAR(11)), > + dump_register(HCCHAR(12)), > + dump_register(HCCHAR(13)), > + dump_register(HCCHAR(14)), > + dump_register(HCCHAR(15)), > + dump_register(HCSPLT(0)), > + dump_register(HCSPLT(1)), > + dump_register(HCSPLT(2)), > + dump_register(HCSPLT(3)), > + dump_register(HCSPLT(4)), > + dump_register(HCSPLT(5)), > + dump_register(HCSPLT(6)), > + dump_register(HCSPLT(7)), > + dump_register(HCSPLT(8)), > + dump_register(HCSPLT(9)), > + dump_register(HCSPLT(10)), > + dump_register(HCSPLT(11)), > + dump_register(HCSPLT(12)), > + dump_register(HCSPLT(13)), > + dump_register(HCSPLT(14)), > + dump_register(HCSPLT(15)), > + dump_register(HCINT(0)), > + dump_register(HCINT(1)), > + dump_register(HCINT(2)), > + dump_register(HCINT(3)), > + dump_register(HCINT(4)), > + dump_register(HCINT(5)), > + dump_register(HCINT(6)), > + dump_register(HCINT(7)), > + dump_register(HCINT(8)), > + dump_register(HCINT(9)), > + dump_register(HCINT(10)), > + dump_register(HCINT(11)), > + dump_register(HCINT(12)), > + dump_register(HCINT(13)), > + dump_register(HCINT(14)), > + dump_register(HCINT(15)), > + dump_register(HCINTMSK(0)), > + dump_register(HCINTMSK(1)), > + dump_register(HCINTMSK(2)), > + dump_register(HCINTMSK(3)), > + dump_register(HCINTMSK(4)), > + dump_register(HCINTMSK(5)), > + dump_register(HCINTMSK(6)), > + dump_register(HCINTMSK(7)), > + dump_register(HCINTMSK(8)), > + dump_register(HCINTMSK(9)), > + dump_register(HCINTMSK(10)), > + dump_register(HCINTMSK(11)), > + dump_register(HCINTMSK(12)), > + dump_register(HCINTMSK(13)), > + dump_register(HCINTMSK(14)), > + dump_register(HCINTMSK(15)), > + dump_register(HCTSIZ(0)), > + dump_register(HCTSIZ(1)), > + dump_register(HCTSIZ(2)), > + dump_register(HCTSIZ(3)), > + dump_register(HCTSIZ(4)), > + dump_register(HCTSIZ(5)), > + dump_register(HCTSIZ(6)), > + dump_register(HCTSIZ(7)), > + dump_register(HCTSIZ(8)), > + dump_register(HCTSIZ(9)), > + dump_register(HCTSIZ(10)), > + dump_register(HCTSIZ(11)), > + dump_register(HCTSIZ(12)), > + dump_register(HCTSIZ(13)), > + dump_register(HCTSIZ(14)), > + dump_register(HCTSIZ(15)), > + dump_register(HCDMA(0)), > + dump_register(HCDMA(1)), > + dump_register(HCDMA(2)), > + dump_register(HCDMA(3)), > + dump_register(HCDMA(4)), > + dump_register(HCDMA(5)), > + dump_register(HCDMA(6)), > + dump_register(HCDMA(7)), > + dump_register(HCDMA(8)), > + dump_register(HCDMA(9)), > + dump_register(HCDMA(10)), > + dump_register(HCDMA(11)), > + dump_register(HCDMA(12)), > + dump_register(HCDMA(13)), > + dump_register(HCDMA(14)), > + dump_register(HCDMA(15)), > + dump_register(HCDMAB(0)), > + dump_register(HCDMAB(1)), > + dump_register(HCDMAB(2)), > + dump_register(HCDMAB(3)), > + dump_register(HCDMAB(4)), > + dump_register(HCDMAB(5)), > + dump_register(HCDMAB(6)), > + dump_register(HCDMAB(7)), > + dump_register(HCDMAB(8)), > + dump_register(HCDMAB(9)), > + dump_register(HCDMAB(10)), > + dump_register(HCDMAB(11)), > + dump_register(HCDMAB(12)), > + dump_register(HCDMAB(13)), > + dump_register(HCDMAB(14)), > + dump_register(HCDMAB(15)), > +}; > + > int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) > { > int ret; > + struct dentry *file; > > hsotg->debug_root = debugfs_create_dir(dev_name(hsotg->dev), NULL); > if (!hsotg->debug_root) { > @@ -403,6 +738,27 @@ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) > > /* Add gadget debugfs nodes */ > s3c_hsotg_create_debug(hsotg); > + > + hsotg->regset = kzalloc(sizeof(*hsotg->regset), GFP_KERNEL); Seems missing kfree() John -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html