From a72741818431d693e48b0f016258be0fec1f79da Mon Sep 17 00:00:00 2001 From: Eric Wetzel Date: Tue, 18 Jan 2011 11:17:22 -0500 Subject: [PATCH] stellaris: automatically generate and update device IDs Added a Perl script to contrib that uses the header files in StellarisWare complete Firmware Development Package provided by TI/Luminary to generate a new list of device IDs Used Perl script and revision 6734 of TI/Luminary StellarisWare to update device IDs --- contrib/gen-stellaris-part-header.pl | 91 ++++++++++++++++++++++++++++ src/flash/nor/stellaris.c | 6 ++ 2 files changed, 97 insertions(+) create mode 100755 contrib/gen-stellaris-part-header.pl diff --git a/contrib/gen-stellaris-part-header.pl b/contrib/gen-stellaris-part-header.pl new file mode 100755 index 000000000..24ddcb12f --- /dev/null +++ b/contrib/gen-stellaris-part-header.pl @@ -0,0 +1,91 @@ +#!/usr/bin/perl +# Automatically generates the StellarisParts struct in src/flash/nor/stellaris.c +# Uses the header files from TI/Luminary's StellarisWare complete Firmware Development Package +# available from: http://www.luminarymicro.com/products/software_updates.html + +$comment = "// Autogenerated by contrib/gen-stellaris-part-header.pl +// From Stellaris Firmware Development Package revision"; + +$struct_header = "static struct { + uint32_t partno; + const char *partname; +} StellarisParts[] = +{ +"; + +$struct_footer = "\t{0,\"Unknown part\"}\n};\n"; + +$#ARGV == 1 || die "Usage: $0 \n"; +-d $ARGV[0] || die $ARGV[0]." is not a directory\n"; +$dir = $ARGV[0]; +-f $ARGV[1] || die $ARGV[1]." is not a file\n"; +$file = $ARGV[1]; +print STDERR "Scanning $dir, Updating $file\n"; + +opendir(DIR, $dir) || die "can't open $dir: $!"; +@files = readdir(DIR); +closedir(DIR); + +@short_files = sort(grep(/lm3s...\.h/, @files)); +@long_files = sort(grep(/lm3s....\.h/, @files)); + +$ver = 0; +$new_struct = $struct_header; +process_file(@short_files); +process_file(@long_files); +$new_struct .= $struct_footer; + +$dump = "$comment $ver\n$new_struct"; +{ + local($/, *INPUT); + open(INPUT, $file) || die "can't open $file: $!"; + $contents = ; + close(INPUT); +} + +$old_struct = qr/((^\/\/.*?\n)*)\Q$struct_header\E.*?$struct_footer/sm; +$contents =~ s/$old_struct/$dump/; +open(OUTPUT, ">$file") || die "can't open file $file for writing: $!"; +print OUTPUT $contents; +close(OUTPUT); + +sub process_file { + foreach $h_file (@_) { + ($base) = ($h_file =~ m/lm3s(.{3,4})\.h/ig); + $base = uc($base); + local($/, *FILE); + open(FILE, "$dir/$h_file"); + $content = ; + close(FILE); + $invalid = 0; + if ($content =~ /This is part of revision (\d+) of/) { + if ($ver != 0 and $ver != $1) { + print STDERR "File version mismatch: $ver != $1\n"; + $ver = max($ver, $1); + } else { + $ver = $1; + } + } + if ($content =~ /SYSCTL_DID1_VER_[^M]\s+0x(\S+)/) { + $did1_ver = hex($1); + } else { + print STDERR "$h_file is missing SYSCTL_DID1_VER\n"; + $did1_ver = 255; + $invalid = 1; + } + if ($content =~ /SYSCTL_DID1_PRTNO_$base\s+0x(\S+)/) { + $prtno = hex($1); + } else { + print STDERR "$h_file is missing SYSCTL_DID1_PRTNO\n"; + $prtno = 0; + $invalid = 1; + } + $id = ($did1_ver | $prtno) >> 16; + $new_member = sprintf "{0x%04X,\"LM3S%s\"},", $id, $base; + if ($invalid == 1) { + #$new_struct .= "\t//$new_member\t// Invalid\n"; + } else { + $new_struct .= "\t$new_member\n"; + } + } +} diff --git a/src/flash/nor/stellaris.c b/src/flash/nor/stellaris.c index 851cab334..6a81047a5 100644 --- a/src/flash/nor/stellaris.c +++ b/src/flash/nor/stellaris.c @@ -123,6 +123,8 @@ struct stellaris_flash_bank const char *mck_desc; }; +// Autogenerated by contrib/gen-stellaris-part-header.pl +// From Stellaris Firmware Development Package revision 6734 static struct { uint32_t partno; const char *partname; @@ -178,6 +180,7 @@ static struct { {0x1005,"LM3S1627"}, {0x10B3,"LM3S1635"}, {0x10BD,"LM3S1637"}, + {0x10B1,"LM3S1651"}, {0x10B9,"LM3S1751"}, {0x1010,"LM3S1776"}, {0x1016,"LM3S1811"}, @@ -193,6 +196,8 @@ static struct { {0x103C,"LM3S1J16"}, {0x100E,"LM3S1N11"}, {0x103B,"LM3S1N16"}, + {0x10B2,"LM3S1P51"}, + {0x109E,"LM3S1R21"}, {0x1030,"LM3S1W16"}, {0x102F,"LM3S1Z16"}, {0x1051,"LM3S2110"}, @@ -221,6 +226,7 @@ static struct { {0x1058,"LM3S2950"}, {0x1055,"LM3S2965"}, {0x106C,"LM3S2B93"}, + {0x1008,"LM3S3634"}, {0x1043,"LM3S3651"}, {0x1044,"LM3S3739"}, {0x1049,"LM3S3748"},