Messages in this thread | | | Date | Wed, 16 Nov 2011 00:04:39 +0200 | From | Felipe Balbi <> | Subject | Re: [RFC PATCH] debugfs: add tools to printk 32-bit registers |
| |
Hi,
On Tue, Nov 15, 2011 at 10:37:34PM +0100, Alessandro Rubini wrote: > Hi Greg. Thanks for looking. > > >> +/* > >> + * The regset32 stuff is used to print 32-bit registers using the > >> + * seq_file utilities. We offer printing a register set in an already-opened > >> + * sequential file or create a debugfs file that only prints a regset32. > >> + */ > > > > Can this be part of the kerneldoc below somehow so that people are more > > aware of it? > > Ok. There's also a file by Jon in Documentation that needs updating, as it > has all the other debugfs file types. > > > +int debugfs_print_regs32(struct seq_file *s, struct debugfs_reg32 *regs, > >> + int nregs, void __iomem *base, char *prefix) > > > This function also needs to be part of debugfs.h in the "debugfs is not > > enabled" section of the file, right? > > Not really. The other one makes a regiters-only file, and it's good > to register it withouth ifdef. > > This one is used to embed a register block in a file with more > stuff, so it shouldn't be used if debugfs is not selected (btw, > I compiled my internal stuff with and without CONFIG_DEBUG_FS > before rebasing to next). > > Example: > > static int pl08x_debugfs_show(struct seq_file *s, void *data) > { > [...] > list_for_each_entry(chan, &pl08x->slave.channels, chan.device_node) { > seq_printf(s, "%s\t\t%s\n", chan->name, > pl08x_state_str(chan->state)); > } > > /* dump registers */ > seq_printf(s, "\nPL08x registers\n"); > debugfs_print_regs32(s, pl08x_regs, ARRAY_SIZE(pl08x_regs), > pl08x->base, ""); > > seq_printf(s, "\nPL08x registers channel\n"); > for (i = 0; i < pl08x->vd->channels; i++) { > [...] > } > > So, I'll post a V2 shortly, unless you refuse it in reply to this.
this will be useful to dwc3 too, we currently have:
struct dwc3_register { const char *name; u32 offset; };
#define dump_register(nm) \ { \ .name = __stringify(nm), \ .offset = DWC3_ ##nm, \ }
static const struct dwc3_register dwc3_regs[] = { dump_register(GSBUSCFG0), dump_register(GSBUSCFG1), dump_register(GTXTHRCFG),
... };
static int dwc3_regdump_show(struct seq_file *s, void *unused) { struct dwc3 *dwc = s->private; int i;
seq_printf(s, "DesignWare USB3 Core Register Dump\n");
for (i = 0; i < ARRAY_SIZE(dwc3_regs); i++) { seq_printf(s, "%-20s : %08x\n", dwc3_regs[i].name, dwc3_readl(dwc->regs, dwc3_regs[i].offset)); }
return 0; }
...
-- balbi [unhandled content-type:application/pgp-signature] | |