mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] scripts: Provide script that helps using cpp defines in dcd tables
@ 2017-07-18 15:23 Uwe Kleine-König
  2017-07-18 16:15 ` Sam Ravnborg
  0 siblings, 1 reply; 2+ messages in thread
From: Uwe Kleine-König @ 2017-07-18 15:23 UTC (permalink / raw)
  To: barebox

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-koenig@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


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] scripts: Provide script that helps using cpp defines in dcd tables
  2017-07-18 15:23 [PATCH] scripts: Provide script that helps using cpp defines in dcd tables Uwe Kleine-König
@ 2017-07-18 16:15 ` Sam Ravnborg
  0 siblings, 0 replies; 2+ messages in thread
From: Sam Ravnborg @ 2017-07-18 16:15 UTC (permalink / raw)
  To: Uwe Kleine-König; +Cc: barebox

On Tue, Jul 18, 2017 at 05:23:20PM +0200, Uwe Kleine-König wrote:
> 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

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-07-18 16:15 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-18 15:23 [PATCH] scripts: Provide script that helps using cpp defines in dcd tables Uwe Kleine-König
2017-07-18 16:15 ` Sam Ravnborg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox