Discussion:
[PATCH] scripts: Provide script that helps using cpp defines in dcd tables
Uwe Kleine-König
2017-07-18 15:23:20 UTC
Permalink
This script was used to help create commit ("ARM: imx: use register
defines in imxcfg files instead of plain numbers").

It is documented in Perl Pod, you can pretty-print it using

$ perldoc scripts/regsubst.pl.

Signed-off-by: Uwe Kleine-König <u.kleine-***@pengutronix.de>
---
scripts/regsubst.pl | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 123 insertions(+)
create mode 100755 scripts/regsubst.pl

diff --git a/scripts/regsubst.pl b/scripts/regsubst.pl
new file mode 100755
index 000000000000..6198cb57dd51
--- /dev/null
+++ b/scripts/regsubst.pl
@@ -0,0 +1,123 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+regsubst.pl - helper script to make use of defines
+
+=head1 SYNOPSIS
+
+B<regsubst.pl> [B<-I> I<includepath>] I<filename>
+
+=head1 DESCRIPTION
+
+B<regsubst.pl> parses the given file recursively for #include directives and
+then substitutes raw hex values in I<filename> by definitions found and prints
+the result to stdout.
+
+This is targeted to make i.MX DCD tables more readable but for sure can be used
+elsewhere too.
+
+=head1 BUGS
+
+B<regsubst.pl> is dumb and so might replace values to aggressively. So better
+double check the result.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-I> I<includepath>
+
+Add I<includepath> to the list of search paths for include files.
+
+=back
+
+=head1 EXAMPLE
+
+First you have to add the right #include directives to your file:
+
+ $ cat flash-header-myboard.imxcfg
+ soc imx6
+ loadaddr 0x20000000
+ dcdofs 0x400
+
+ #include <mach/imx6-ddr-regs.h>
+ #include <mach/imx6dl-ddr-regs.h>
+
+ wm 32 0x020e0774 0x000C0000
+ wm 32 0x020e0754 0x00000000
+ ...
+
+Then you can process the file with B<regsubst.pl>:
+
+ $ scripts/regsubst.pl -I arch/arm/mach-imx/include flash-header-myboard.imxcfg
+ soc imx6
+ loadaddr 0x20000000
+ dcdofs 0x400
+
+ #include <mach/imx6-ddr-regs.h>
+ #include <mach/imx6dl-ddr-regs.h>
+
+ wm 32 MX6_IOM_GRP_DDR_TYPE 0x000C0000
+ wm 32 MX6_IOM_GRP_DDRPKE 0x00000000
+ ...
+
+If the result looks ok, you can replace the file:
+
+ $ scripts/regsubst.pl -I arch/arm/mach-imx/include flash-header-myboard.imxcfg > u
+ $ mov u flash-header-myboard.imxcfg
+
+=cut
+
+use strict;
+use warnings;
+use Getopt::Long qw(GetOptions);
+
+my @includepaths;
+
+GetOptions('I=s' => \@includepaths);
+
+my %regnamemap;
+
+sub scan {
+ my @incfiles;
+
+ push @incfiles, @_;
+
+ foreach my $i (@incfiles) {
+ foreach my $incpath (@includepaths) {
+ if (-e "$incpath/$i") {
+ open(my $fd, "<", "$incpath/$i") || die "Failed to open include file $incpath/$i";
+
+ while (<$fd>) {
+ if (/^\s*#\s*include\s+["<](.*)[">]/) {
+ push @incfiles, $1;
+ };
+
+ if (/^\s*#\s*define\s+([A-Z_0-9]*)\s+(0x[0-9a-f]+)/) {
+ my $regname = $1;
+ my $regaddrre = $2 =~ s/^0x0*/0x0\*/r;
+ $regnamemap{$regaddrre} = $regname;
+ };
+ };
+
+ close($fd);
+
+ last;
+ }
+ }
+ }
+}
+
+while (<>) {
+ my $line = $_;
+
+ if (/#include ["<](.*)[">]/) {
+ scan $1;
+ }
+
+ foreach my $regaddr (keys %regnamemap) {
+ $line =~ s/$regaddr/$regnamemap{$regaddr}/ei;
+ }
+ print $line;
+};
--
2.11.0
Sam Ravnborg
2017-07-18 16:15:01 UTC
Permalink
Post by Uwe Kleine-König
This script was used to help create commit ("ARM: imx: use register
defines in imxcfg files instead of plain numbers").
It is documented in Perl Pod, you can pretty-print it using
$ perldoc scripts/regsubst.pl.
Could you add this info as a comment in the perl script too?
So people not used to perl is reminded by this when they look
in the perl script and see something only halfway readable.

(halway readable is maybe what one are sued to with respect
to (some) perl scripts, but thats another story).

Sam

Loading...