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@xxxxxxxxxxxxxx> --- 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@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox